新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > mcs-51單片機 掃描矩陣鍵盤程序

        mcs-51單片機 掃描矩陣鍵盤程序

        作者: 時間:2012-08-24 來源:網(wǎng)絡 收藏
        #includereg52.h>#define uint  unsigned int#define uchar unsigned charsbit DSCQ=P2^6;//位定義段鎖存器控制端sbit WSCQ=P2^7;//位定義位鎖存器控制端uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,30x66,0x6d,0x7d,0x07, //4,5,6,70x7f,0x6f,0x77,0x7c, //8,9,a,b0x39,0x5e,0x79,0x71};//c,d,e,fvoid delay(uint t);//聲明延時函數(shù)void keyscan();    //聲明掃描函數(shù)void main(){DSCQ=0;//段鎖存器鎖存WSCQ=0;//位鎖存器鎖存P0=0x00;//P0口輸出0000 0000WSCQ=1; //位鎖存器允許通過WSCQ=0; //位鎖存器鎖存(數(shù)碼管接地端全為低電平0)P0=table[8];//P0口輸出8DSCQ=1;     //段鎖存器允許通過while(1){keyscan();//恒掃描}}void delay(uint t){uint x,y;for(x=t;x>0;x--){for(y=120;y>0;y--){}}}void keyscan(){uchar key1,key2;P3=0xfe;  //1111 1110(將P3.0置為低電平0。高4位寫1,以便讀取4高位I/O口狀態(tài))key1=P3;  //第一次讀取P3口delay(15);//延時15mskey2=P3;  //第二次讀取P3口key1=key10xf0;//1111 0000(將第一次的值保留高4位,屏蔽低4位)key2=key20xf0;//1111 0000(將第二次的值保留高4位,屏蔽低4位)if((key1==key2)key1!=0xf0)
        //如果key1的值等于key2的值,并且key1的值不等于1111 0000 表明確實有鍵被按下{switch(key1){case 0xe0:P0=table[0];break;//1110 0000case 0xd0:P0=table[1];break;//1101 0000case 0xb0:P0=table[2];break;//1011 0000case 0x70:P0=table[3];break;//0111 0000}}P3=0xfd;  //1111 1101(將P3.1置為低電平0。高4位寫1,以便讀取4高位I/O口狀態(tài))key1=P3;  //第一次讀取P3口delay(15);//延時15mskey2=P3;  //第二次讀取P3口key1=key10xf0;//1111 0000 保留高4位(將第一次的值保留高4位,屏蔽低4位)key2=key20xf0;//1111 0000 保留高4位(將第二次的值保留高4位,屏蔽低4位)if((key1==key2)key1!=0xf0)
        //如果key11的值等于key2的值,并且key1的值不等于1111 0000 表明確實有鍵被按下{switch(key1){case 0xe0:P0=table[4];break;//1110 0000case 0xd0:P0=table[5];break;//1101 0000case 0xb0:P0=table[6];break;//1011 0000case 0x70:P0=table[7];break;//0111 0000}}P3=0xfb;  //1111 1011(將P3.2置為低電平0。高4位寫1,以便讀取4高位I/O口狀態(tài))key1=P3;  //第一次讀取P3口delay(15);//延時15mskey2=P3;  //第二次讀取P3口key1=key10xf0;//1111 0000(將第一次的值保留高4位,屏蔽低4位)key2=key20xf0;//1111 0000(將第二次的值保留高4位,屏蔽低4位)if((key1==key2)key1!=0xf0)
        //如果key11的值等于key2的值,并且K1的值不等于1111 0000 表明確實有鍵被按下{switch(key1){case 0xe0:P0=table[8];break; //1110 0000case 0xd0:P0=table[9];break; //1101 0000case 0xb0:P0=table[10];break;//1011 0000case 0x70:P0=table[11];break;//0111 0000}}P3=0xf7;  //1111 0111(將P3.3置為低電平0。高4位寫1,以便讀取4高位I/O口狀態(tài))key1=P3;  //第一次讀取P3口delay(15);//延時15mskey2=P3;  //第二次讀取P3口key1=key10xf0;//1111 0000(將第一次的值保留高4位,屏蔽低4位)key2=key20xf0;//1111 0000(將第二次的值保留高4位,屏蔽低4位)if((key1==key2)key1!=0xf0)
        //如果key1的值等于key2的值,并且key1的值不等于1111 0000 表明確實有鍵被按下{switch(key1){case 0xe0:P0=table[12];break;//1110 0000case 0xd0:P0=table[13];break;//1101 0000case 0xb0:P0=table[14];break;//1011 0000case 0x70:P0=table[15];break;//0111 0000}}}


        關鍵詞: mcs-51 單片機

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 龙江县| 巴林右旗| 额济纳旗| 乌拉特中旗| 闽清县| 额尔古纳市| 天峨县| 长丰县| 鹤山市| 阿克陶县| 天等县| 石景山区| 清丰县| 内乡县| 醴陵市| 长汀县| 云和县| 乌海市| 三原县| 浦北县| 都昌县| 锡林郭勒盟| 邯郸县| 霍城县| 马关县| 遂平县| 山阴县| 定日县| 大丰市| 岑巩县| 南安市| 桃园市| 海宁市| 鄂尔多斯市| 泸定县| 本溪| 霍山县| 扶沟县| 金阳县| 乌什县| 玉龙|