这是一个独立按键实验,为什么反应不是特别灵敏
#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;
while (1)
{
P0=ledchar;
keyup=key;
if(keyup!=backup)
{
Delays ();
if(keyup==key)
{
if(backup==0)
{
cnt++;
if(cnt>=10)
cnt=0;
}
P0=ledchar;
}
}
backup=key;
}
}
void Delays()
{
unsigned int i = 1000;
while(i--);
}
有的时候需要按三四次才能变数
这个分析起来就很简单了
#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;
while (1)
{
P0=ledchar;
keyup=key;
if(keyup!=backup)
{
Delays ();
if(keyup==key)
{
if(backup==0)
{
cnt++;
if(cnt>=10)
cnt=0;
}
P0=ledchar;
}
}
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;//然后给数据.
}
}
backup=key; //然后 backup = 0
之后.在返回到 if(keyup!=backup)那么此时 0 !=0 ..然后就一直没反映....因为一直都是0=0 .这个是你按下按键的时候.数据也没变化
在然后呢,, 你松开按键.
keyup = key = 1;
然后if(backup==0) 成立. P0的数据改变了.
然后也是一样.你松开了.数据就一直不变.只改变一次.
你的意思是, 按键按下去的时候不变. 松开就改变一次数据.
额...代码貌似是正确的. 你把哪个延迟改小点试试..
sweet_136 发表于 2015-11-8 15:08
这个分析起来就很简单了
我又重新变了一次,奇迹般的又好使了; 毕延吉 发表于 2015-11-8 15:12
我又重新变了一次,奇迹般的又好使了;
不错.代码写的很好..加油.有潜力.. 代码写的很好 用定时器扫描按键,效率高灵敏度可控
页:
[1]