1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| #include <reg52.h> #define uchar unsigned char #define uint unsigned int
sbit k3 = P3^4; sbit k4 = P3^5;
uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff };//共阳段码
uchar code Scan_BITs[]= { 0x20,0x10,0x08,0x04,0x02,0x01 };
uchar data Buffer_Counts[]={0,0,0,0,0,0}; uint Count_A=0; uint Count_B=0;
void DelayMS(uint x) { uchar t; while(x--) { for(t=0;t<120;t++); } }
void Show\_Counts() { uint i; Buffer_Counts[2] = Count_A / 100; Buffer_Counts[1] = Count_A % 100 /10; Buffer_Counts[0] = Count_A % 10; if(Buffer_Counts[2]==0) { Buffer_Counts[2] = 0x0a; if(Buffer_Counts[1]==0) { Buffer_Counts[1]=0x0a; } }
Buffer_Counts[5] = Count_B / 100; Buffer_Counts[4] = Count_B % 100 /10; Buffer_Counts[3] = Count_B % 10; if(Buffer_Counts[5]==0) { Buffer_Counts[5] = 0x0a; if(Buffer_Counts[4]==0) { Buffer_Counts[4]=0x0a; } } for(i=0;i<6;i++) { P2 = Scan_BITs[i]; P1 = DSY_CODE[Buffer_Counts[i]]; DelayMS(1); } }
void main() { IT0 = 1;//启用外部中断0 IT1 = 1;//启用外部中断1 PX0 = 1;//设定外部中断0为最高优先级中断 IE = 0x85; while(1) { if(k3 == 0) Count_A = 0; if(k4 == 0) Count_B = 0; Show\_Counts(); } } /\*外部中断0函数\*/ void EX\_INT0() interrupt 0 { Count_A++; } /\*外部中断1函数\*/ void EX\_INT1() interrupt 2 { Count_B++; }
|