外部中断是单片机一个比较重要的部分,这次,用最简单的方法让你去实现中断嵌套的功能,通过下面这个小实验,相信你对中断的认识会更加的深刻。如果还对中断这方面不太了解的话,请看这篇文章。
链接: 单片机的外部中断link.
数码管的段位编码。
共阳极数码管编码表:
unsigned char shumaguan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
共阴极数码管编码表:
unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
1.Proteus仿真图 2.程序的编写#include"reg51.h"
sbit led=P0^0;
unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(unsigned int ms);
void Init();
void main()
{
Init();
P2=0x00;//熄灭数码管
led=1;//熄灭led
while(1);
}
void Init()//外部中断初始化
{
IT0=1;//选择跳沿触发方式
EX0=1;//打开外部中断0允许位
IT1=1;//选择跳沿触发方式
EX1=1;//打开外部中断1允许位
EA=1;//打开总中断
IP=0X04;//设置外部中断1的优先级大于外部中断0
}
void Int0() interrupt 0 using 0//外部中断0的执行程序。
{
unsigned char i;
delayms(5);
if(P3^2==0)
{
for(i=0;i<16;i++)//实现led闪烁八次。
{
led=~led;
delayms(1000);
}
}
}
void Int1() interrupt 2 using 1//外部中断1的执行程序。
{
unsigned char i;
delayms(5);
if(P3^3==0)
{
for(i=0;i0;i--)
for(j=100;j>0;j--);
}
♥功能测试:当led闪烁的时候,按下K2键,实现了数码管的显示。说明K2键对应的中断优先级要大于K1键对应的中断优先级。从而能够打断led的闪烁。