標(biāo)題:
51單片機(jī)矩陣鍵盤程序
[打印本頁]
作者:
51黑bing
時(shí)間:
2016-3-23 00:23
標(biāo)題:
51單片機(jī)矩陣鍵盤程序
#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() //按鍵檢測函數(shù)的定義
{
uchar keyvalue=0; //鍵值的定義,并且用于返回
uchar temp;
uchar and;
temp=0x0f;
KEY=0x0f;
if(KEY != 0x0f) //檢測按鍵是否被按下
{
delay(10); //延時(shí)10毫秒,以便消抖
if(KEY != 0x0f) //再次檢測按鍵是否被按下
{
and = KEY & temp; //行檢測
switch(and)
{
case(0x0e) : keyvalue=0 ; break; //第一行的按鍵被按下了
case(0x0d) : keyvalue=4 ; break; //第二行的按鍵被按下了
case(0x0b) : keyvalue=8 ; break; //第三行的按鍵被按下了
case(0x07) : keyvalue=12; break; //第四行的按鍵被按下了
}
temp=0xf0; //列檢測
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ù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1