问题
用C编程,使外部中断每发生一次在共阴极数码管上显示一个数字,且每中断次显示的数值增加1或减少1(根据按下的使“加一建”还是“减一键”而定)。
要求:中断触发方式为下降沿触发方式,按键有消除抖动功能。
代码
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar m = 0;
void delay(uchar c) {
uchar a, b;
for (; c > 0; c--)
for (b = 142; b > 0; b--)
for (a = 2; a > 0; a--);
}
void INT_0() interrupt 0 { //ÍⲿÖжÏ0
EX0=0; //¹Ø±ÕÍⲿÖжÏ0
delay(20); //ÑÓʱ£¬È¥¶¶¶¯
EX0=1;
m++;
if (m==10) m = 0;
else P1 = table[m];
}
void INT_1() interrupt 2 { //ÍⲿÖжÏ1
EX1=0;
delay(20);
EX1=1;
m--;
P1 = table[m];
if (m==0) m = 10;
}
void main() {
P1 = 0x00; //设置P1初始为0,灯不亮
EA = 1; //打开总中断
EX0 = 1; //打开外部中断0
IT0 = 1; //设置触发方式为下降沿触发方式
EX1 = 1; //打开外部中断1
IT1 = 1;
while(1); //死循环
}
仿真
按下最上面的键P3 INT0脚低电平,发生一次外部中断0事件
按下最下面的键P3 INT1脚低电平,发生一次外部中断1事件