單片機(jī)按鍵按下的先后順序判斷
K4、K3:“進(jìn)出”模擬檢測(cè)鍵。
每先按K3、再按K4,即代表“進(jìn)”一人次;
每先按K4、再按K3,則代表“出”一人次。
每“進(jìn)”一人次,就在原“進(jìn)”顯示基礎(chǔ)上加1(“進(jìn)”顯示初始狀態(tài)為“b000”);
每“出”一人次,就在原“出”顯示基礎(chǔ)上加1(“出”顯示初始狀態(tài)為“C000”)。
懸賞分:100-解決時(shí)間:2010-6-2519:14
最好把C語(yǔ)言程序給出來(lái)~
按照題目,編寫(xiě)了程序。用PROTEUS軟件仿真截圖如下。
原來(lái)編寫(xiě)的程序,是使用匯編語(yǔ)言,現(xiàn)按照要求改成了C語(yǔ)言。
//================================================================
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitK3=P3^2;
sbitK4=P3^3;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//0123456789
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc2,0x89,0xff};
//AbCdEFGH[]
ucharDispD[]={0,0,0,11,0,0,0,12};
ucharDispW[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//------------------------------------
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)for(y=110;y>0;y--);
}
//------------------------------------
voiddisplay(void)
{
uinti;
for(i=0;i<8;i++){
P2=0;
P0=table[DispD[i]];
P2=DispW[i];
delay(3);
}
}
//------------------------------------
voidmain()
{
uintin_num=0,outnum=0;
while(1){
display();
//--------------------------
if(K3==0){
display();
if(K3==0){
while(K3==0)display();
while(K4==1)display();
in_num++;
DispD[0]=in_num%10;
DispD[1]=in_num/10%10;
DispD[2]=in_num/100;
while(K4==0)display();
}
}
//--------------------------
if(K4==0){
display();
if(K4==0){
while(K4==0)display();
while(K3==1)display();
outnum++;
DispD[4]=outnum%10;
DispD[5]=outnum/10%10;
DispD[6]=outnum/100;
while(K3==0)display();
}
}
//--------------------------
}
}