#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端口一個按鍵
void main()
{
P2=0x00; //讓P2口輸出低電平(位選),8個數碼管 共陽極,陽極由9012PNP管驅動,所以當P2口為低電平時 才有效
while(1)
{ //把P2=0x00;寫到到10行時也就是while(1)下面程序會報錯.沒弄懂
char a;
if(key1==0) //判斷key1是否等于0(P1^4端口是否為低電平)
{
a++; //如果key1等于0,a就+1
if(a==10) //如果a=10,超過10數碼管不能顯示
a=0; //就讓a=0
while(!key1);//松手程序,
}
else //否則
P0=duan[a]; //讓P0口取duan中的元素.
}
}
以上是對照視頻中寫的程序,現在程序可以執行,只是沒加入反復判斷按鍵是否按下這條語句,
我想說的是,這個if語句我沒弄懂.
1, if(key1==0) //判斷key1是否等于0 也是是判斷按鍵是否按下去了,這句我懂
2, a++; //如何按鍵按下去了,為低電平,那么a就+1 這句我也懂
3 if(a==10) //由于數碼管只能顯示0-9 單位 超過10就顯示不出,所以再次判斷a是否等于10
4 a=0; //結合上面那條語句 如果a等于10 就讓a置0
5 while(!key1) //送手程序,我似乎聽懂了,就是單片機執行速度快,我按下去有可能執行了很多次了,所以數碼管上會隨機顯示0-9
6 slse //這條我知道是否則的意思,可與上面又什么關系呢? if不是判斷嗎?判斷{}里面的內容是否為真,不是真就執行下面的語句
也就是我送開的時候會執行 P0=duan[a];
不管按下不按下數碼管是長亮的.
那么我假設 我按下 一個按鍵 需要一個二極管長亮 又或者我按下一個按鍵,一個二極管亮,再按一下又熄滅,if應該怎么寫.
謝謝!
|