|
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define KEY P1 //用P1口控制4*4個(gè)矩陣鍵盤
- //------------------------------------------------
- uchar code duanma[17]={ //碼表的定義
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- //------------------------------------------------
- void delay(uchar x) //延時(shí)函數(shù)的定義
- {
- uchar y,z;
- for(y=x;y>0;y--)
- for(z=110;z>0;z--);
- }
- //------------------------------------------------
- uchar kayscan() //按鍵檢測(cè)函數(shù)的定義
- {
- uchar keyvalue=0; //鍵值的定義,并且用于返回
- uchar temp;
- uchar and;
- temp=0x0f;
- KEY=0x0f;
- if(KEY != 0x0f) //檢測(cè)按鍵是否被按下
- {
- delay(10); //延時(shí)10毫秒,以便消抖
- if(KEY != 0x0f) //再次檢測(cè)按鍵是否被按下
- {
- and = KEY & temp; //行檢測(cè)
- switch(and)
- {
- case(0x0e) : keyvalue=0 ; break; //第一行的按鍵被按下了
- case(0x0d) : keyvalue=4 ; break; //第二行的按鍵被按下了
- case(0x0b) : keyvalue=8 ; break; //第三行的按鍵被按下了
- case(0x07) : keyvalue=12; break; //第四行的按鍵被按下了
- }
-
- temp=0xf0; //列檢測(cè)
- KEY=0xf0;
- and = KEY & temp;
- switch(and)
- {
- case(0xe0) : keyvalue=keyvalue+0; break; //第一列的按鍵被按下了
- case(0xd0) : keyvalue=keyvalue+1; break; //第二列的按鍵被按下了
- case(0xb0) : keyvalue=keyvalue+2; break; //第三列的按鍵被按下了
- case(0x70) : keyvalue=keyvalue+3; break; //第四列的按鍵被按下了
- }
- }
- }
- return(keyvalue);
- }
- //------------------------------------------------
- void main() //主函數(shù)
- {
- P0=0; //初始化,讓所有l(wèi)ed都滅
- while(1)
- {
- P0=duanma[kayscan()]; //矩陣鍵盤的掃描,并且返回鍵值,賦值給P0
- }
- }
復(fù)制代碼
|
|