关于#单片机#的问题,如何解决?

单片机 .利用外中断/INT0和/INT1控制P1口所接8位LED。无中断时,灯全亮,当外中断0响应时,灯左移亮;当外中断1响应时,灯右移亮。

以下是8051单片机的代码实现:

#include <reg52.h>

sbit LED = P1^0;  // 定义LED引脚

void delay(unsigned int xms)  // 延时函数
{
    unsigned int i, j;
    for(i = xms; i > 0; i--)
        for(j = 110; j > 0; j--);
}

void INT0_Handler() interrupt 0  // 外中断0处理函数
{
    unsigned char i;
    for(i = 0; i < 8; i++)
    {
        LED = 1 << i;  // 左移亮灯
        delay(500);
    }
}

void INT1_Handler() interrupt 2  // 外中断1处理函数
{
    unsigned char i;
    for(i = 7; i >= 0; i--)
    {
        LED = 1 << i;  // 右移亮灯
        delay(500);
    }
}

void main()
{
    IT0 = 1;  // 外中断0触发方式为下降沿触发
    IT1 = 1;  // 外中断1触发方式为下降沿触发
    EX0 = 1;  // 开启外中断0
    EX1 = 1;  // 开启外中断1
    EA = 1;  // 开启总中断
    LED = 0xff;  // 全亮灯
    while(1);
}

在主函数中,先将LED引脚定义为P1口的第0位,然后设置外中断0和1的触发方式为下降沿触发,开启外中断0和1,开启总中断,并将LED引脚初始化为全亮。在无限循环中等待外中断的响应。当外中断0响应时,调用INT0_Handler()函数,实现LED的左移亮灯;当外中断1响应时,调用INT1_Handler()函数,实现LED的右移亮灯。在函数中,先用for循环控制LED的移动,然后调用delay()函数实现延时。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^