51单片机
先看看程序






为什么这样编程之后不能进入for循环呀?按下按键之后就一直停留在一个状态
关注引自免费微信小程序:皆我百晓生
这个问题涉及到51单片机编程的基本知识和一些特殊功能的操作,比如按键的处理和中断的管理。在您的代码中,存在几个关键点需要注意。
首先,LED=0x00; 是设置LED为初始状态,即全黑。然后,您尝试通过 ledl=LED&0x01; 来将LED的低位(从右到左依次是LED的第0、1、2、3位)设为1,从而让LED点亮。但是,由于您的代码只设置了LED的最低位,而没有设置其他的位,所以即使按键被按下,LED也不会根据按键的状态进行相应的变换。
要解决这个问题,您可以按照以下步骤修改代码:
IntOInit1() 和 IntOInit2() 中的代码,使其分别控制4个灯同时闪烁和两组灯切换闪烁,而不是仅仅控制一个灯。下面是一个示例代码,演示了如何按上述步骤操作:
#include <reg51.h>
#include <intrinsics.h>
unsigned char LED = 0x00;
sbit keyl = P3^2;
sbit key2 = P3 ^3;
sbit ledl = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
void delay(unsigned int k)
{
while(k--)
}
void IntOInit1()
{
IT0 = 1;
EX0 = 1;
EA = 1;
// 设置所有LED位为1
for (unsigned char i = 0; i < 4; i++)
LED |= (1 << i);
}
void IntOInit2()
{
IT1 = 1;
EX1 = 1;
EA = 1;
// 控制4个灯同时闪烁
for (unsigned char i = 0; i < 4; i++)
LED &= ~(1 << i);
// 控制两组灯切换闪烁
LED &= ~(1 << 0) | (1 << 2);
}
void main(void)
{
LED = 0x00; // 初始化LED为全黑
while (1)
{
if (keyl == 0)
ledl = LED & 0x01;
else if (key2 == 0)
ledl = LED & 0x01;
else
ledl = LED & 0x01;
led2 = LED >> 1 & 0x01;
led3 = LED >> 2 & 0x01;
led4 = LED >> 3 & 0x01;
delay(500);
ledl = LED & 0x01;
led2 = LED >> 1 & 0x01;
led3 = LED >> 2 & 0x01;
led4 = LED >> 3 & 0x01;
}
}
这段代码首先将所有的LED位设置为1,然后根据按键的状态,控制LED的状态。当按键按下时,会相应地改变LED的高、低位,从而使LED闪烁。如果您遇到任何其他问题,请随时告诉我。