C51行列键盘扫描程序
C51行列鍵盤掃描程序
#i nclude "reg51.h"
void main()
{
unsigned char key;
while(1)
{
?? key=kbscan();?? //鍵盤掃描函數
? delay10ms();? //健消除抖動的延時函數
?
}
}
void delay10ms()
{
??? unsigned char i;
?? for(i=0xff;i>0;i--);
}
?
unsigned char kbscan()
{
? unsigned char sccode,recode;
?P1=0xf0;? //發全“0”行掃描,列線輸入
if(P1&0xf0)!=0xf0)? //有鍵按下
{?
?? delay10ms();?? //延時去抖動
?? if((P1&0xf0)!=0xf0)
{
?? sccode =0xf0;??? //逐行掃描初值
?while((sccodeZ&0x10)!=0)
? {
??? P1=sccode;???? //輸出行掃描碼
?? if((P1&0XF0)!=0XF0)? //本行有鍵按下
{
? ecode=(P1&0xf0)|0xf0;
? return((~sccode)+(~recode);? //返回特征碼
}
?else
? sccode=(sccode<<1)|0x01;? //行掃描碼左移一位
?}
}
}
? return 0;? //無鍵按下,返回0
}
#i nclude <reg51.h>
#define byte unsigned char
#define kbd_port p1
byte code key[16]={0xeb,0xd7,0xdb,0xdd, //0 1 2 3
0xb7,0xbb,0xbd,0x77, //4 5 6 7
0x7b,0x7d,0xe7,0xed, //8 9 - +
0xee,0xde,0xbe,0x7e}; //= * / c
byte k_input(void)
{
static bit k_status; /*鍵盤狀態flag(靜態局部變量) */
byte i,k;
kbd_port=0x0f;
k=kbd_port;
kbd_port=0xff;
kbd_port=k|0xf0;
k=kbd_port;
kbd_port=0xff;
if(k!=0xff)
{
for(i=0;i<16;i++)
{
if(k==key && k_status==0)
{
k_status=1;
return(i);
}
}
}
else
k_status=0;
return(0xff);
* 功 能:4×4鍵盤掃描程序
* 返 回:鍵序號(0~f),0xff表示沒有字符輸入
*
* 硬件連接:p1口(高4位 - 行;低4位 - 列)
* 軟件特點:簡潔高效,無須延時消抖,避免連發
總結
以上是生活随笔為你收集整理的C51行列键盘扫描程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jensen不等式及其应用
- 下一篇: bp神经网络模型的优缺点,bp神经网络缺