用以下代码,会出现按键按下后不会灭,只在按键按下时灭,按键松开后复亮的现象
#include "reg52.h"
sbit ledone =P3^7;
sbit key1=P2^1;
sbit key2=P2^0;
void Delay50ms() //@11.0592MHz
{
unsigned char i, j;
i = 90;
j = 163;
do
{
while (--j);
} while (--i);
}
void main()
{
while(1)
{
if(key1==0)
{
Delay50ms();
ledone=0;
if(key1==0)
{
ledone=~ledone;
}
}
}
}
猜测是按键检测的问题,因为按键分为按下和松开,导致程序无法检测到是否按下
优化前按键检测LED
更新代码为
#include "reg52.h"
sbit LED1 =P3^7;
sbit key1=P2^1;
sbit key2=P2^0;
void Delay50ms() //@11.0592MHz
{
unsigned char i, j;
i = 90;
j = 163;
do
{
while (--j);
} while (--i);
}
void main()
{
while(1)
{
if(key1==0)
{
Delay50ms();
while(key1==0);
Delay50ms();
LED1 =~ LED1;
}
}
}
优化后按键检测LED
完美解决问题,优化后的代码中 while(key1 == 0);为
等待按键1释放。整个程序会不断检测按键1的状态