单片机 .利用外中断/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()函数实现延时。
不知道你这个问题是否已经解决, 如果还没有解决的话: