利用P3.3接一个外部中断输入,控制8个LED灯循环点亮
时间: 2023-07-18 18:34:54 浏览: 76
好的,针对您的问题,我可以给出一个简单的代码示例:
```c
#include <reg51.h>
sbit KEY = P3^3; // 定义外部中断输入引脚
void delay(unsigned int count) // 延时函数
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
void ExternalInterrupt() interrupt 1 // 外部中断0服务函数
{
static unsigned char led = 0x01; // 初始值为00000001,即只点亮第一个LED灯
P1 = led; // 在P1口输出LED灯状态
led <<= 1; // 左移一位,下一个LED灯点亮
if(led == 0) led = 0x01; // 当所有LED灯都点亮后,重新从第一个LED灯开始点亮
}
void main()
{
KEY = 1; // 初始化输入引脚为高电平
EA = 1; // 开启总中断
EX0 = 1; // 开启外部中断0
IT0 = 1; // 设置外部中断0为下降沿触发
while(1); // 主循环
}
```
以上代码中,我们通过 `sbit` 定义了外部中断输入引脚 `KEY`,然后在 `ExternalInterrupt()` 函数中实现循环点亮8个LED灯的操作。具体地,我们通过 `P1` 口输出LED灯的状态,然后每次左移一位,下一个LED灯点亮。当所有LED灯都点亮后,我们重新从第一个LED灯开始点亮。在 `main()` 函数中,我们开启了外部中断0,并设置为下降沿触发,然后进入主循环等待外部中断的触发。