51單片機(jī)的獨(dú)立鍵盤
這幾天打算好好開始看郭天祥的單片機(jī)視頻,自己也寫了一個(gè)獨(dú)立鍵盤的51單片機(jī)程序,開發(fā)環(huán)境為Keil C51。
剛開始看,功能并不是很復(fù)雜,由51單片機(jī)的P1^7口接LED燈,P0口作為6位數(shù)碼管的位選線和段選線,6位數(shù)碼管每次顯示相同的數(shù)字。位選和段選的控制由P2^7,P2^6口。按鍵只有一個(gè),一端與地相連,一端接P3^7口。
當(dāng)按下按鍵時(shí),LED燈會(huì)發(fā)光,同時(shí)6位數(shù)碼管顯示的數(shù)字加1,從0~F后返回0。松開按鍵后,LED燈滅。
閑話少說,上代碼:
#include
#defineucharunsignedchar
sbitRDKey=P3^7;
sbitLED=P1^7;
sbitdula=P2^6;
sbitwela=P2^7;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voidShortDelay();
voidLongDelay();
voiddisplay(ucharnum);
voidmain()
{
ucharnum=0;
RDKey=1;
LED=1;
while(1)
{
if(RDKey==0)//鍵可能被被按下,需要消抖,用到了LongDelay函數(shù)
{
LongDelay();
if(RDKey==0)//鍵被按下,DoSomething,這里是數(shù)碼管顯示數(shù)字
{
LED=0;
//Dosomething
display(num);
num++;
if(num>=16)
num=0;
}
}
else
{
LED=1;
//DoOtherThing
}
}
}
voiddisplay(ucharnum)
{
wela=1;
P0=0xc0;
wela=0;
P0=0xff;
dula=1;
P0=table[num];
dula=0;
ShortDelay();//數(shù)碼管動(dòng)態(tài)顯示,用到的是ShortDelay函數(shù)
}
voidShortDelay()
{
uchara=100;
while(a--);
}
voidLongDelay()
{
inta=10000;
while(a--);
}