51单片机外部中断流水灯代码
时间: 2023-11-11 20:06:33 浏览: 467
以下是一个简单的51单片机外部中断流水灯代码,其中使用了定时器中断和外部中断来控制流水灯的延时时间和方向切换:
```
#include <reg52.h>
sbit LED = P2^0; // 定义LED连接的IO口
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for(i = xms; i > 0; i--)
for(j = 110; j > 0; j--);
}
void main()
{
TMOD = 0x01; // 设置定时器0为模式1
TH0 = 0xFC; // 定时器初值,每隔10ms中断一次
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
EX0 = 1; // 允许外部中断0
IT0 = 1; // 设置外部中断0为下降沿触发
EX1 = 1; // 允许外部中断1
IT1 = 1; // 设置外部中断1为下降沿触发
LED = 0; // 初始化LED为0
while(1); // 循环等待中断
}
void timer0() interrupt 1 // 定时器0中断服务函数
{
static unsigned char cnt = 0; // 计数器
cnt++;
if(cnt == 50) // 每隔500ms改变一次LED状态
{
cnt = 0;
LED = ~LED;
}
}
void int0() interrupt 0 // 外部中断0服务函数
{
static unsigned char delay_time = 50; // 延时时间,初始值为500ms
delay_time += 10; // 每次按下按键增加100ms延时时间
if(delay_time > 100) // 最大延时时间为1s
delay_time = 100;
}
void int1() interrupt 2 // 外部中断1服务函数
{
static bit direction = 0; // 流水灯方向,0为向右,1为向左
direction = ~direction;
}
```
阅读全文