#include <reg51.h> sbit key1 = P3^3; //实验板上key1 sbit LED0 = P0^0; unsigned char key1_down; void delay(unsigned int delay_time) { unsigned int j = 0; for(;delay_time > 0;delay_time --) { for(j = 0;j < 125;j ++); } } void key_pressed(void) { if(key1 == 1); //如果按键按下 { delay(20); //消除键盘抖动 if(key1 == 1) //如果确实按键按下 key1_down = 1; //记忆key1按下的状态 } if((key1 == 0) && (key1_down == 1)) //key1曾经按下过,且这时又抬起 { LED0 = !LED0; //LED闪烁 key1_down = 0; //按键按下的状态清零 } } void main(void) { P0 = 0x00; //让P0驱动的LED全灭 while(1) key_pressed(); //调用函数 哪里错了
时间: 2024-03-10 15:49:58 浏览: 122
这段代码有一个比较明显的问题是 while 循环体中没有使用 {} 括起来,导致 `key_pressed()` 函数只会执行一次,然后就会陷入死循环。应该在 while 循环体中添加 {}。
修改后的代码如下:
```
#include <reg51.h>
sbit key1 = P3^3; //实验板上key1
sbit LED0 = P0^0;
unsigned char key1_down;
void delay(unsigned int delay_time)
{
unsigned int j = 0;
for(;delay_time > 0;delay_time --)
{
for(j = 0;j < 125;j ++);
}
}
void key_pressed(void)
{
if(key1 == 1) //如果按键按下
{
delay(20); //消除键盘抖动
if(key1 == 1) //如果确实按键按下
key1_down = 1; //记忆key1按下的状态
}
if((key1 == 0) && (key1_down == 1)) //key1曾经按下过,且这时又抬起
{
LED0 = !LED0; //LED闪烁
key1_down = 0; //按键按下的状态清零
}
}
void main(void)
{
P0 = 0x00; //让P0驱动的LED全灭
while(1)
{
key_pressed(); //调用函数
}
}
```
请注意,这只是针对问题的解答,并不代表代码在其他方面没有问题。如果您需要更全面的代码评估,请提供更多细节。
阅读全文