新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機電子琴C代碼

        51單片機電子琴C代碼

        作者: 時間:2016-11-27 來源:網絡 收藏
        #include
        #include
        #include
        #include
        #include
        #define uchar unsigned char
        typedef unsigned char uint8; // 無符號8位整型變量
        typedef signed char int8; // 有符號8位整型變量
        typedef unsigned short uint16; // 無符號16位整型變量
        typedef signed short int16; // 有符號16位整型變量
        typedef unsigned int uint32; // 無符號32位整型變量
        typedef signed int int32; // 有符號32位整型變量
        typedef float fp32; // 單精度浮點數(32位長度)
        typedef double fp64; // 雙精度浮點數(64位長度)
        sbit row1 = P1 ^ 0;
        sbit row2 = P1 ^ 1;
        sbit row3 = P1 ^ 2;
        sbit col1 = P0 ^ 1;
        sbit col2 = P0 ^ 2;
        sbit col3 = P0 ^ 3;
        sbit col4 = P0 ^ 4;
        sbit col5 = P0 ^ 5;
        sbit col6 = P0 ^ 6;
        sbit col7 = P0 ^ 7;
        #define uint unsigned int
        uchar STH0; //定時器計數初值
        uchar STL0;
        bit FY=0; //放樂曲時FY=1, 電子琴彈奏時FY=0
        uchar Song_Index=0,Tone_Index=0; //放音樂的參數
        uchar k, key;
        sbit SPK=P3^7;
        sbit LED1=P1^0;
        sbit LED2=P1^1;
        sbit LED3=P3^4;
        sbit LED4=P3^5;
        sbit LED5=P3^6;
        void Delay(uint16 count)
        {
        uint8 i;
        while(--count != 0)
        {
        for(i = 0; i < 125; i++); // ";" 表示空語句,CPU空轉。
        } // i 從0加到125,在12M晶體下CPU大概耗時1毫秒
        }
        uint8 KeyDown(void)
        {
        col1=0; col2=0; col3=0; col4=0; col5=0; col6=0; col7=0; // 列線全部置低
        if((row1==0) || (row2==0) || (row3==0)) // 若有任一行線讀回狀態為低
        {
        Delay(80); // 延時消抖
        if((row1==0) || (row2==0) || (row3==0)) // 再次讀行線狀態,若有任一行線讀回狀態為低
        return 1; // 返回1,表明有鍵盤按下
        else
        return 0; // 返回0,表明無鍵盤按下
        }
        else
        return 0;
        }
        uint8 KeyUp(void)
        {
        col1=0; col2=0; col3=0; col4=0; col5=0; col6=0; col7=0;
        if((row1==1) && (row2==1) && (row3==1))
        {
        Delay(80);
        if((row1==1) && (row2==1) && (row3==1))
        return 1;
        else
        return 0;
        }
        else
        return 0;
        }
        uint8 KeyNum(void)
        {
        uint8 KeyTemp;
        KeyTemp=0;
        if(KeyDown()==1)
        {
        col1=0; col2=1; col3=1; col4=1; col5=1; col6=1; col7=1; // 將列線1置低,其他列線置高
        if (row1==0) KeyTemp=1; // 若行線1讀回狀態為低,則表明按鍵1被按下
        if (row2==0) KeyTemp=8; // 若行線2讀回狀態為低,則表明按鍵8被按下
        if (row3==0) KeyTemp=15; // 若行線3讀回狀態為低,則表明按鍵15被按下
        col1=1; col2=0; col3=1; col4=1; col5=1; col6=1; col7=1;
        if (row1==0) KeyTemp=2;
        if (row2==0) KeyTemp=9;
        if (row3==0) KeyTemp=16;
        col1=1; col2=1; col3=0; col4=1; col5=1; col6=1; col7=1;
        if (row1==0) KeyTemp=3;
        if (row2==0) KeyTemp=10;
        if (row3==0) KeyTemp=17;
        col1=1; col2=1; col3=1; col4=0; col5=1; col6=1; col7=1;
        if (row1==0) KeyTemp=4;
        if (row2==0) KeyTemp=11;
        if (row3==0) KeyTemp=18;
        col1=1; col2=1; col3=1; col4=1; col5=0; col6=1; col7=1;
        if (row1==0) KeyTemp=5;
        if (row2==0) KeyTemp=12;
        if (row3==0) KeyTemp=19;
        col1=1; col2=1; col3=1; col4=1; col5=1; col6=0; col7=1;
        if (row1==0) KeyTemp=6;
        if (row2==0) KeyTemp=13;
        if (row3==0) KeyTemp=20;
        col1=1; col2=1; col3=1; col4=1; col5=1; col6=1; col7=0;
        if (row1==0) KeyTemp=7;
        if (row2==0) KeyTemp=14;
        if (row3==0) KeyTemp=21;
        return KeyTemp;
        }
        else
        return 0; //無按鍵按下
        }

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 紫金县| 蓝山县| 白朗县| 水城县| 荥阳市| 克拉玛依市| 彭阳县| 上蔡县| 新巴尔虎右旗| 岑溪市| 阜城县| 静安区| 玉环县| 浠水县| 南岸区| 泰和县| 五莲县| 佳木斯市| 重庆市| 辉县市| 辽中县| 宁夏| 西和县| 金阳县| 黄梅县| 临江市| 措美县| 三门峡市| 密山市| 城步| 宜章县| 正定县| 安化县| 英超| 沂源县| 泽普县| 泰州市| 武隆县| 迁安市| 石家庄市| 三门峡市|