|
給你改一下,你試試。
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit dule=P2^6;
- sbit wele=P2^7;
- uchar code wetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //數(shù)碼管位選
- uchar code dutable[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x00}; //段選
- uchar ledbuff[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //暫存
- uchar flag1s=0; //1s標(biāo)志
- uchar i=0;
- uint cnt=0;
- unsigned long sec=0;
- void main()
- {
- dule=0;
- wele=0;
- TMOD=0x01;
- TH0=0xfc;
- TL0=0x66;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- if(flag1s==1)
- {
- flag1s=0;
- sec++;
- if(sec>999999)
- sec=0;
- ledbuff[0]=dutable[sec%10];
- ledbuff[1]=dutable[sec/10%10];
- ledbuff[2]=dutable[sec/100%10];
- ledbuff[3]=dutable[sec/1000%10];
- ledbuff[4]=dutable[sec/10000%10];
- ledbuff[5]=dutable[sec/100000%10];
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=0xfc;
- TL0=0x67;
- P0=0x00;//消隱
- dule=1;
- dule=0;
- switch(i)
- {
- case 0:P0=wetable[5];wele=1;wele=0;P0=ledbuff[0];dule=1;dule=0;i++;break;
- case 1:P0=wetable[4];wele=1;wele=0;P0=ledbuff[1];dule=1;dule=0;i++;break;
- case 2:P0=wetable[3];wele=1;wele=0;P0=ledbuff[2];dule=1;dule=0;i++;break;
- case 3:P0=wetable[2];wele=1;wele=0;P0=ledbuff[3];dule=1;dule=0;i++;break;
- case 4:P0=wetable[1];wele=1;wele=0;P0=ledbuff[4];dule=1;dule=0;i++;break;
- case 5:P0=wetable[0];wele=1;wele=0;P0=ledbuff[5];dule=1;dule=0;i=0;break;
- default:break;
- }
- cnt++;
- if(cnt>=1000)
- {
- cnt=0;
- flag1s=1;
- }
- }
復(fù)制代碼 |
|