下面是在没有开发板的情况下手撸的一个含有中断的流水灯示例程序,其中包括中断服务函数,和主函数
#include <REG52.H>
unsigned char led = 0xFE; // 初始LED状态为11111110
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 125; j++);
}
void LED() interrupt 0 // 中断服务函数
{
if (led == 0x7F) // 如果已经到达最后一个LED
led = 0xFE; // 则重新从第一个LED开始
else
led = (led << 1) | 0x01; // 否则向左移动一个LED
P1 = led; // 更新LED状态
delay(500); // 延时一段时间,以便观察效果
}
void main()
{
EA = 1; // 全局中断使能
EX0 = 1; // 外部中断0使能
IT0 = 1; // 外部中断0设置为下降沿触发
while (1); // 等待中断
}
此代码默认为51单片机,若使用其他的单片机还需配置相关LED的GPIO引脚等操作,不过大体流程如此。
首先使用了外部中断0来触发LED流水灯的移动。当用户按下外部中断0所连接的按键时,处理器将暂停当前工作并执行中断服务函数LED(),在该函数中实现LED流水灯的移动。当LED流水灯移动到最后一个LED时,LED状态重新设置为初始状态,从第一个LED开始向左移动,到此板子上的led就实现了流水灯的效果。
码字幸苦,望采纳!!!!