#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应该怎么写.
谢谢!
|