实现外部中断:用外部中断0,且中断只受到低电平触发。主程序,任意三个数码管显示000-FFF(循环显示)。出现中断,程序执行任意一个led亮。
时间: 2023-05-28 17:02:26 浏览: 145
以下是用C语言实现外部中断0的代码示例:
#include <reg52.h> // 8051单片机头文件
#include <intrins.h> // 延时函数头文件
sbit LED = P0^0; // 定义LED控制引脚
sbit DIO = P1^5; // 定义数码管数据传输引脚
sbit CLK = P1^6; // 定义数码管时钟引脚
sbit INT0 = P3^2; // 定义外部中断0触发引脚
unsigned int led_flag = 0; // LED亮标志位
// 数码管位选函数
void select_digit(unsigned char digit)
{
switch(digit)
{
case 0:
DIO = 1;
P1 = 0x7f;
break;
case 1:
DIO = 1;
P1 = 0xbf;
break;
case 2:
DIO = 1;
P1 = 0xdf;
break;
case 3:
DIO = 1;
P1 = 0xef;
break;
default:
break;
}
}
// 数码管显示函数
void display(unsigned int num)
{
unsigned char i;
for(i=0;i<4;i++)
{
CLK = 0;
select_digit(i);
DIO = ((num>>(i*4))&0x0f);
CLK = 1;
}
}
// 延时函数,d为延时毫秒数
void delay(unsigned int d)
{
unsigned char i;
while(d--)
{
for(i=0;i<120;i++);
}
}
// 外部中断0处理函数
void int0_isr() interrupt 0
{
LED = 1; // LED亮
led_flag = 1; // LED亮标志位置1
}
// 主程序
void main()
{
unsigned int i;
while(1)
{
for(i=0;i<0x1000;i++)
{
display(i); // 数码管显示
delay(5); // 延时
if(led_flag) // 如果LED亮标志位置1
{
LED = 0; // LED灭
led_flag = 0; // LED亮标志位清零
break; // 跳出循环
}
}
}
}