单片机外部中断按键次数统计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- // 1 外部中断0初始化 2 中断函数统计按键次数
- // 3 显示按键次数
- #define SEG1 P1
- #define SEG2 P2
- #define SEG0 P0
- //共阳极数码管 //0 1 2 3 4 5 6 7 8 9 A b C d e F
- unsigned char code DIG_CODE_CA[16]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管
- //共阴极数码管 //0 1 2 3 4 5 6 7 8 9 A b C d e F
- unsigned char code DIG_CODE_CC[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管
- sbit Key3=P3^2;
- sbit Key4=P3^3;
- unsigned int Num0=0;
- unsigned int Num1=0;
- //子函数
- void Delay1ms();
- void DelayNms(unsigned int n);
- //主函数
- void main()
- {
- //1 外部中断0 1初始化
- IT0=1;IT1=1;//TCON = 0x05;
- EA=1;EX0=1;EX1=1;//IE=0x85;
- while(1)
- {
- // 3 显示按键次数
- if(Num0==100)Num0=0;
- SEG1=DIG_CODE_CC[Num0/10];
- SEG2=DIG_CODE_CC[Num0%10];
- if(Num1==10)Num1=0;
- SEG0=DIG_CODE_CC[Num1];
- }
- }
- //2 外部中断0中断函数 统计按键key3次数
- void INT0_ISR() interrupt 0
- {
- DelayNms(10);
- if(Key3==0)
- Num0++;
- }
- //2 外部中断1中断函数 统计按键key4次数
- void INT1_ISR() interrupt 2
- {
- DelayNms(10);
- if(Key4==0)
- Num1++;
- }
- //子函数声明
- void Delay1ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 2;
- j = 239;
- do
- {
- while (--j);
- } while (--i);
- }
- void DelayNms(unsigned int n)
- {
- while(n--)
- Delay1ms();
- }
复制代码
所有资料51hei提供下载:
外部中断按键次数统计.rar
(55.72 KB, 下载次数: 18)
|