#include<reg52.h>
unsigned char wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選P2口 低電平有效
unsigned char duan[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90};//段選0-9 P0口低電平有效
sbit key1=P1^4; //P1.4端口一個(gè)按鍵
void main()
{
P2=0x00; //讓P2口輸出低電平(位選),8個(gè)數(shù)碼管 共陽(yáng)極,陽(yáng)極由9012PNP管驅(qū)動(dòng),所以當(dāng)P2口為低電平時(shí) 才有效
while(1)
{ //把P2=0x00;寫(xiě)到到10行時(shí)也就是while(1)下面程序會(huì)報(bào)錯(cuò).沒(méi)弄懂
char a;
if(key1==0) //判斷key1是否等于0(P1^4端口是否為低電平)
{
a++; //如果key1等于0,a就+1
if(a==10) //如果a=10,超過(guò)10數(shù)碼管不能顯示
a=0; //就讓a=0
while(!key1);//松手程序,
}
else //否則
P0=duan[a]; //讓P0口取duan中的元素.
}
}
以上是對(duì)照視頻中寫(xiě)的程序,現(xiàn)在程序可以執(zhí)行,只是沒(méi)加入反復(fù)判斷按鍵是否按下這條語(yǔ)句,
我想說(shuō)的是,這個(gè)if語(yǔ)句我沒(méi)弄懂.
1, if(key1==0) //判斷key1是否等于0 也是是判斷按鍵是否按下去了,這句我懂
2, a++; //如何按鍵按下去了,為低電平,那么a就+1 這句我也懂
3 if(a==10) //由于數(shù)碼管只能顯示0-9 單位 超過(guò)10就顯示不出,所以再次判斷a是否等于10
4 a=0; //結(jié)合上面那條語(yǔ)句 如果a等于10 就讓a置0
5 while(!key1) //送手程序,我似乎聽(tīng)懂了,就是單片機(jī)執(zhí)行速度快,我按下去有可能執(zhí)行了很多次了,所以數(shù)碼管上會(huì)隨機(jī)顯示0-9
6 slse //這條我知道是否則的意思,可與上面又什么關(guān)系呢? if不是判斷嗎?判斷{}里面的內(nèi)容是否為真,不是真就執(zhí)行下面的語(yǔ)句
也就是我送開(kāi)的時(shí)候會(huì)執(zhí)行 P0=duan[a];
不管按下不按下數(shù)碼管是長(zhǎng)亮的.
那么我假設(shè) 我按下 一個(gè)按鍵 需要一個(gè)二極管長(zhǎng)亮 又或者我按下一個(gè)按鍵,一個(gè)二極管亮,再按一下又熄滅,if應(yīng)該怎么寫(xiě).
謝謝!
|