矩陣按鍵數碼管
選用芯片AT89S52
功能:16個矩陣按鍵分別對應0~F,在數碼管顯示,
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
u16 i,j;
u16 k=0;
#define jk P1
#define smg P0
u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //數碼管顯示0-F
void delayms(u16 ms) //毫秒延時
{
for(i=0;i<ms;i++)
{
for(j=115;j>0;j--);
}
}
void key_scan() //按鍵掃描
{
jk=0xf0; //先給行和列分別賦值高低電平,這樣按下后才能檢測到
if(jk!=0xf0)
{
delayms(20);
if(jk!=0xf0)
{
jk=0xf0;
switch(jk) //先掃描確定是哪一列
{
case(0xe0):k=0;break;
case(0xd0):k=1;break;
case(0xb0):k=2;break;
case(0x70):k=3;break;
}
jk=0x0f;
switch(jk) //再確定是哪一行,由此確定具體按鍵
{
case(0x0e):k=k;break;
case(0x0d):k=k+4;break;
case(0x0b):k=k+8;break;
case(0x07):k=k+12;break;
}
}
}
}
void main()
{
P2=0xfe;
while(1)
{
key_scan();
smg=smgduan[k];
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/163922.html
標籤:其他
上一篇:2020電賽準備總結(四)
