目的:通过按下按键作为外部的中断输入信号,通过数码管显示中断次数。
问题:目前在PROTEUS仿真上能正常实现功能,但在实物上出现类似不能消影的问题,当按下按键后,数码管全亮(会一直显示8888),计数功能也出现问题,按下按键后数码管4位同时改变(在显示8888时,可以勉强观察到数字有在变化)。
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- //P0为SA-SH P1为C0-C3
- sbit K1=P3^2;
- uchar dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
- 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff}; // 4, 5, 6, 7, 8, 9, off
- uchar buf[4];
- uint cnt=0;
-
- void delay(uchar ms)
- {
- while(ms--)
- ;
- }
- void initial()
- {
- IT0=1;
- EX0=1;
- EA=1;
- }
- int main()
- {
- initial();
- P0=0xff;
- P1=0;
- buf[0]=dis_code[0];
- buf[1]=dis_code[0];
- buf[2]=dis_code[0];
- buf[3]=dis_code[0];
-
- while(1)
- {
- P0=buf[3];//显示千位
- P1=0x01;
- delay(5);
- P0=0xff;
-
- P0=buf[2];//显示百位
- P1=0x02;
- delay(5);
- P0=0xff;
-
- P0=buf[1];//显示十位
- P1=0x04;
- delay(5);
- P0=0xff;
-
- P0=buf[0];//显示个位
- P1=0x08;
- delay(5);
- P0=0xff;
-
- }
-
- }
- void init0() interrupt 0
- {
- EX0=0;
- if(K1==0)
- {
- cnt++;
- if(cnt>9999)
- {
- cnt=0;
- }
- }
-
- buf[3]=dis_code[cnt/1000]; //千位
- buf[2]=dis_code[cnt%1000/100];//百位
- buf[1]=dis_code[cnt%100/10];//十位
- buf[0]=dis_code[cnt%10];//个位
- EX0=1;
-
- }
复制代码
|