写一个51单片机两个外部中断控制led 亮灭的代码
时间: 2024-05-08 21:18:27 浏览: 393
好的,这里是一个简单的示例代码:
```
#include <reg51.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
void main()
{
IT0 = 1; // 设置INT0为下降沿触发
IT1 = 1; // 设置INT1为下降沿触发
EX0 = 1; // 使能INT0中断
EX1 = 1; // 使能INT1中断
EA = 1; // 总中断使能
while(1)
{
LED1 = ~LED1; // 交替切换LED1状态
delay(500); // 延时500ms
}
}
void INT0_ISR() interrupt 0
{
LED2 = ~LED2; // 切换LED2状态
}
void INT1_ISR() interrupt 2
{
LED2 = 0; // 关闭LED2
delay(500); // 延时500ms
LED2 = 1; // 打开LED2
}
```
上面的代码使用了两个外部中断 INT0 和 INT1 来控制 LED 灯的亮灭。其中 INT0 控制 LED2 的亮灭,INT1 控制 LED2 闪烁。
请注意,上面的代码只是示例代码,可能不够完善、不够健壮,只是为了演示如何使用外部中断来控制 LED 灯的亮灭,请在具体的应用中根据需要进行修改和优化。
相关问题
51单片机用俩个外部中断,控制俩个LED闪烁代码
在51单片机上,我们可以使用两个外部中断控制两个LED轮流闪烁。首先,你需要配置好外部中断源、中断向量表以及中断服务函数。以下是基本的步骤和一个简单的代码示例:
1. **硬件连接**:
- 将两个LED分别连接到中断引脚(比如INT0和INT1),通常通过电阻分压到5V或单片机IO口的高电平。
- 对于INT0和INT1,可能需要外接中断请求触发器,如磁敏开关或按键。
2. **软件部分**:
- **主程序**:
```c
#include <reg52.h>
sbit led1 = P1^0; // LED1连接P1.0
sbit led2 = P1^1; // LED2连接P1.1
void delay(unsigned int time) {
while(time--) {
for(int i=0; i<128; i++);
}
}
void EXTI0_IRQHandler() interrupt 0x04 {
led1=~led1; // 变换LED1状态
if(ETI0IF==0) return; // 没有新的中断就退出
EXTI0IF=0; // 清除中断标志
delay(DELAY_TIME); // 等待延时
}
void EXTI1_IRQHandler() interrupt 0x08 {
led2=~led2; // 变换LED2状态
if(EXTI1IF==0) return; // 没有新的中断就退出
EXTI1IF=0; // 清除中断标志
delay(DELAY_TIME);
}
void main(void) {
TRISB = 0xFF; // P1设置为输入模式
ETI0IE = 1; // 开启INT0中断
ETI1IE = 1; // 开启INT1中断
EA = 1; // 开启全局中断
while(1);
}
```
- **中断服务函数**:这里假设`DELAY_TIME`是一个预设的延时时间,用于控制LED的闪烁频率。
若80C51单片机的两个外部中断已被使用,现在要增加一个外部中断源,当外部中断发生时,控制在P0口的8个LED状态改变
当80C51单片机的两个外部中断已被使用时,可以通过使用8255可编程外设接口芯片来实现额外的外部中断。
首先,将8255接口芯片的一个端口设置为输入模式,作为外部中断的输入端口。然后,在8051单片机的程序中,通过轮询该端口的输入状态来检测是否发生了外部中断。
当检测到外部中断时,8051单片机的程序应该将P0口设置为输出模式,并将相应的LED状态改变。具体实现方法如下:
1. 使用P0口控制LED状态,因此需要将P0口设置为输出模式,可以使用以下代码实现:
```C
P0 = 0xFF; // 将P0口设置为输出模式
```
2. 将8255接口芯片的一个端口设置为输入模式,可以使用以下代码实现:
```C
P1 = 0xFF; // 将P1口设置为输入模式
```
3. 在8051单片机的程序中,使用一个循环不断检测该端口的输入状态,可以使用以下代码实现:
```C
while (1) {
if (P1 == 0) { // 检测到外部中断
P0 = ~P0; // 改变LED状态
}
}
```
在上述代码中,当检测到外部中断时,将P0口的状态取反,从而改变LED状态。这里假设LED接在P0口的低8位上,因此使用了"~P0"来改变LED状态。
需要注意的是,由于8255接口芯片的输入端口可能会存在抖动,因此需要在程序中添加适当的去抖动处理。
阅读全文