|
发表于 2015-11-8 15:08:58
|
显示全部楼层
这个分析起来就很简单了
- #include <reg52.h>
- sbit key=P1^1;
- unsigned char code ledchar[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
- void Delays ();
- void main ()
- {
- unsigned char cnt=0;
- bit backup=1;
- bit keyup=1;
- P0=ledchar[cnt];
- while (1)
- {
- P0=ledchar[cnt];
- keyup=key;
- if(keyup!=backup)
- {
- Delays ();
- if(keyup==key)
- {
- if(backup==0)
- {
- cnt++;
- if(cnt>=10)
- cnt=0;
- }
- P0=ledchar[cnt];
- }
- }
- backup=key;
- }
- }
- void Delays()
- {
- unsigned int i = 1000;
-
- while(i--);
- }
复制代码
keyup=key; //如果此时按下.那么执行 keyup = 0 = key ;
if(keyup!=backup)
{
Delays ();
if(keyup==key) //这里也执行. 都为0.
{
if(backup==0) //这里就没执行了. backup = 1
{
cnt++;
if(cnt>=10)
cnt=0;
}
P0=ledchar[cnt]; //然后给数据.
}
}
backup=key; //然后 backup = 0
之后.在返回到 if(keyup!=backup) 那么此时 0 !=0 ..然后就一直没反映....因为一直都是0=0 .这个是你按下按键的时候.数据也没变化
在然后呢,, 你松开按键.
keyup = key = 1;
然后if(backup==0) 成立. P0的数据改变了.
然后也是一样.你松开了.数据就一直不变.只改变一次.
你的意思是, 按键按下去的时候不变. 松开就改变一次数据.
额...代码貌似是正确的. 你把哪个延迟改小点试试..
|
|