- #include"STC8G.H"
- #include"EEPROM.h"
- #include"intrins.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit sin=P3^5;
- sbit sck=P3^6;
- sbit rck=P3^7;
- sbit duan1=P1^4;
- sbit duan2=P1^5;
- sbit duan3=P1^6;
- sbit duan4=P1^7;
- uchar code ledduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
- 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
- uint x,num;
- uchar mb[4];
- void Delay1ms() //@11.0592MHz
- {
- unsigned char i, j;
- i = 15;
- j = 90;
- do
- {
- while (--j);
- } while (--i);
- }
- void hc595secondbyte(uchar dat)
- {
- uchar a;
- sck=0;
- rck=0;
- for(a=0;a<8;a++)
- {
- sin=dat>>7;
- dat<<=1;
- sck=1;
- _nop_();
- _nop_();
- sck=0;
- }
- rck=1;
- _nop_();
- _nop_();
- rck=0;
- }
- void display()
- {
- static uchar i=0;
- mb[0]=ledduan[num/1000%10];
- mb[1]=ledduan[num/100%10];
- mb[2]=ledduan[num/10%10];
- mb[3]=ledduan[num%10];
- P1&=0x0f; //消隱
- P1|=0x10<<i;//位碼
- hc595secondbyte(mb[i]);//段碼
- i=++i%4;
- Delay1ms();
- }
- /*
- void datpros()
- {
- mb[1]=num/10;
- mb[0]=num%10;
- }*/
- void main()
- {
- P1M0=0X00;
- P1M1=0X00;
- P3M0=0X00;
- P3M1=0X00;
- P5M0=0X00;
- P5M1=0X00;
- //1毫秒@11.0592MHz
- AUXR |= 0x80; //定時器時鐘1T模式
- TMOD &= 0xF0; //設置定時器自動重裝模式
- TL0 = 0xCD; //設置定時初始值
- TH0 = 0xD4; //設置定時初始值
- TR0 = 1; //定時器0開始計時
- EA=1; //使能總中斷
- ET0=1; //使能T0中斷
- EX0 = 1; //使能INT0中斷
- IT0 = 1; //使能INT0下降沿中斷
- num=IapRead(0);//讀高8位
- num<<=8;
- num|=IapRead(1);//讀低8位
- if(num==0xffff)//檢測是否初次上電
- num=0;
- while(1)
- {
- // datpros();
- display();
- }
- }
- void T0_time() interrupt 1
- {
- x++;
- if(x==1000)
- {
- x=0;
- num++;
- if(num>9999)
- num=0;
- }
- }
- //檢測外部掉電
- void INT0_Isr() interrupt 0
- {
- IapErase(0);//擦除扇區(扇區首地址0x0000)
- IapProgram(0,num>>8);//寫高8位數據
- IapProgram(1,num); //寫低8位數據
- }
復制代碼 |