- #include <STC8H.H>
- #include <intrins.h>
-
- #define uchar unsigned char
- #define uint unsigned int
-
- uchar dis[5]={0,0,':',0,0};
- uchar count=0,s=0,m=0,h=0;
-
-
-
- void Led_Init()
- {
- P2M0 |= 0x7f; P2M1 &= ~0x7f; //设置P2.0-P2.6为推挽输出
- P3M0 = (P3M0 & ~0x78) | 0x80; P3M1 &= ~0xf8; //设置P3.3-P3.6为高阻输入;p37为推挽输出
-
-
- P33=1; //DG1
- P34=1; //DG2
- P35=1; //DG3
- P36=1; //DG4
-
-
-
-
- P37=0; //Pd
-
- P20=0; //段A
- P21=0; //段B
- P22=0; //段C
- P23=0; //段D
- P24=0; //段E
- P25=0; //段F
- P26=0; //段G
- }
- void Delay1ms(void) //@24.000MHz
- {
- unsigned char data i, j;
-
- _nop_();
- i = 32;
- j = 40;
- do
- {
- while (--j);
- } while (--i);
- }
-
-
- void Delay10ms(void) //@24.000MHz
- {
- unsigned char data i, j;
-
- i = 234;
- j = 115;
- do
- {
- while (--j);
- } while (--i);
- }
-
-
- void Display(unsigned char val[5])
- {
- unsigned char i=0;
- for(i=0;i<5;i++)
- {
- switch(val[i])
- {
- case 0 :
- P20=1;
- P21=1;
- P22=1;
- P23=1;
- P24=1;
- P25=1;
- break;
- case 1 :
- P21=1;
- P22=1;
- break;
- case 2 :
- P20=1; //段A
- P21=1; //段B
- P22=0; //段C
- P23=1; //段D
- P24=1; //段E
- P25=0; //段F
- P26=1; //段G
- break;
- case 3 :
- P20=1; //段A
- P21=1; //段B
- P22=1; //段C
- P23=1; //段D
- P24=0; //段E
- P25=0; //段F
- P26=1; //段G
- break;
- case 4 :
- P20=0; //段A
- P21=1; //段B
- P22=1; //段C
- P23=0; //段D
- P24=0; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 5 :
- P20=1; //段A
- P21=0; //段B
- P22=1; //段C
- P23=1; //段D
- P24=0; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 6 :
- P20=1; //段A
- P21=0; //段B
- P22=1; //段C
- P23=1; //段D
- P24=1; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 7 :
- P20=1; //段A
- P21=1; //段B
- P22=1; //段C
- P23=0; //段D
- P24=0; //段E
- P25=0; //段F
- P26=0; //段G
- break;
- case 8 :
- P20=1; //段A
- P21=1; //段B
- P22=1; //段C
- P23=1; //段D
- P24=1; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 9 :
- P20=1; //段A
- P21=1; //段B
- P22=1; //段C
- P23=1; //段D
- P24=0; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 'a' :
- P20=1; //段A
- P21=1; //段B
- P22=1; //段C
- P23=0; //段D
- P24=1; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 'b' :
- P20=0; //段A
- P21=0; //段B
- P22=1; //段C
- P23=1; //段D
- P24=1; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 'c' :
- P20=1; //段A
- P21=0; //段B
- P22=0; //段C
- P23=1; //段D
- P24=1; //段E
- P25=1; //段F
- P26=0; //段G
- break;
- case 'd' :
- P20=0; //段A
- P21=1; //段B
- P22=1; //段C
- P23=1; //段D
- P24=1; //段E
- P25=0; //段F
- P26=1; //段G
- break;
- case 'e' :
- P20=1; //段A
- P21=0; //段B
- P22=0; //段C
- P23=1; //段D
- P24=1; //段E
- P25=1; //段F
- P26=1; //段G
- break;
- case 'f' :
- P20=1; //段A
- P21=0; //段B
- P22=0; //段C
- P23=0; //段D
- P24=1; //段E
- P25=1; //段F
- P26=1; //段G
- break;
-
- case ':' : P37=1;break;
- default : P26=1; //段G
- }
- switch(i)
- {
- case 0 : P33=0;break;
- case 1 : P34=0;break;
- case 2 : P34=0;break;
- case 3 : P35=0;break;
- case 4: P36=0;break;
- }
- Delay1ms();
- Led_Init();
- }
- }
-
- void Timer1_Init(void) //1毫秒@24.000MHz
- {
- AUXR |= 0x40; //定时器时钟1T模式
- TMOD &= 0x0F; //设置定时器模式
- TL1 = 0x40; //设置定时初始值
- TH1 = 0xA2; //设置定时初始值
- TF1 = 0; //清除TF1标志
- TR1 = 1; //定时器1开始计时
- ET1=1;
- EA=1;
- }
-
-
-
-
-
- void main()
- {
- uchar i=0,f=0;
- P3M0 &= ~0x04; P3M1 &= ~0x04; //设置P32为标准io口
- EX0=0;
- P32=1;
- Timer1_Init();
-
- while(1)
- {
-
-
- if(P32==0)
- {
- Delay10ms();
- if(P32==0)
- {
- f++;
- while(!P32);
-
- }
- }
- if(f>=3) f=0;
-
-
-
-
- if(count>=100)
- {
- count=0 ;
- s+=1;
- }
- if(s>=60)
- {
- s=0;
- m++;
- }
- if(m>=60)
- {
- m=0;
- h++;
- }
- if(h>=24)h=0 ;
- switch(f)
- {
-
- case 0 :
- dis[0]=s/10;
- dis[1]=s%10;
- dis[3]=count/10;
- dis[4]=count%10;
- break;
- case 1 :
- dis[0]=h/10;
- dis[1]=h%10;
- dis[3]=m/10;
- dis[4]=m%10;
- break;
- case 2 :
- dis[0]=m/10;
- dis[1]=m%10;
- dis[3]=s/10;
- dis[4]=s%10;
- break;
- default : break;
- }
- }
- }
-
- void Timer1_Isr() interrupt 3
- {
- Display(dis);
- count++;
- }
复制代码
|