標(biāo)題:
單片機(jī)矩陣鍵盤掃描
[打印本頁(yè)]
作者:
MeuiosJom
時(shí)間:
2020-4-6 00:29
標(biāo)題:
單片機(jī)矩陣鍵盤掃描
#include"reg52.h"
#define ur unsigned char
#define ut unsigned int
#include"Seg.h" /* 數(shù)碼管顯示程序 */
/* 矩陣鍵盤接P2口 */
ur zhi; /* 按鍵返回的值 */
void ms(ut x) /* 延時(shí)函數(shù) */
{
ur i;
while(x--)
for(i=0;i<123;i++);
}
void show() /* 顯示新數(shù)字,并左移 */
{
ur i;
for(i=0;i<7;i++)G[i]=G[i+1];
G[7]=zhi;
}
void clean() /* 清屏 */
{
ur i;
for(i=0;i<8;i++)G[i]=10;
}
ur key() /* 按鍵掃描 */
{
ur jz;
P2=0xf0;
if(P2!=0xf0)
{
jz=P2;ms(5); //消抖
P2=0x0f;jz=jz|P2; //數(shù)據(jù)合成
switch(jz) //掃描合成值
{
case 0xee:zhi=0;break;
case 0xde:zhi=1;break;
case 0xbe:zhi=2;break;
case 0x7e:zhi=3;break;
case 0xed:zhi=4;break;
case 0xdd:zhi=5;break;
case 0xbd:zhi=6;break;
case 0x7d:zhi=7;break;
case 0xeb:zhi=8;break;
case 0xdb:zhi=9;break;
case 0xbb:zhi=10;break;
case 0x7b:zhi=11;break;
case 0xe7:zhi=12;break;
case 0xd7:zhi=13;break;
case 0xb7:zhi=14;break;
case 0x77:zhi=15;break;
default:return 16; //按鍵按下超過(guò)兩個(gè)則跳出
}
if(zhi<15)return 1; //按下數(shù)字鍵
else if(zhi==15)return 2; //按下清屏鍵
}
return 16;
}
void main()
{
Init();
while(1)
{
switch(key())
{
case 1: show();
while(P2!=0x0f); //當(dāng)按下松開(kāi)則跳出
break;
case 2: clean();
while(P2!=0x0f); //當(dāng)按下松開(kāi)則跳出
break;
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1