本帖最后由 天涯仗剑 于 2021-2-3 16:07 编辑
- #include<reg51.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- u8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
- 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};// 段选
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- u16 second,minute,hour;
- void tim0init()//定时器0初始化
- {
- TMOD=0X01; //t0 方式1
- TH0=0Xfc;
- TL0=0X18;//定时1ms
- TR0=1; //打开t0定时器
- EA=1;
- ET0=1;
- }
- void delay(u8 i)
- {
- while(i--);
- }
- void display()
- {
- u16 i;
- for(i=0;i<8;i++)
- {
- switch(i)
- {
- case 0:LSA=0;LSB=0;LSC=0;P0=smgduan[second%10];break; //
- case 1:LSA=1;LSB=0;LSC=0;P0=smgduan[second/10];break; //
- case 2:LSA=0;LSB=1;LSC=0;P0=0x80;break; //
- case 3:LSA=1;LSB=1;LSC=0;P0=smgduan[minute%10];break; //
- case 4:LSA=0;LSB=0;LSC=1;P0=smgduan[minute/10];break; //
- case 5:LSA=1;LSB=0;LSC=1;P0=0x80;break; //
- case 6:LSA=0;LSB=1;LSC=1;P0=smgduan[hour%10];break; //
- case 7:LSA=1;LSB=1;LSC=1;P0=smgduan[hour/10];break; //
- default: break;
- }
- //P0=smgduan[i];
- delay(100);
- P0=0x00;
- }
- }
- void main()
- {
- tim0init();
- while(1)
- {
- display();
- }
- }
- void tim0() interrupt 3
- {
- u8 sum;
- if(TF0==1)
- {
- TF0=0;
- sum++;
- TH0=0xfc;
- TL0=0x18;
- }
- if(sum==1000)
- {
- sum=0;
- second++;
-
- if(second==60)
- {
- second=0;
- minute++;
- }
- if(minute==60)
- {
- minute=0;
- hour++;
- }
- if(hour==24)
- {
- second=0;
- minute=0;
- hour=0;
- }
-
- }
- }
复制代码 |