单片机源程序如下:
- #include "NEW_8051.H"
- #define uint unsigned int
- #define uchar unsigned char
- uchar code num[10][5]={
- {0x83,0x75,0x6d,0x5d,0x83},
- {0xff,0xbd,0x01,0xfd,0xff},
- {0xbd,0x79,0x75,0x6d,0x9d},
- {0x7b,0x7d,0x5d,0x2d,0x73},
- {0xe7,0xd7,0xb7,0x01,0xf7},
- {0x1b,0x5d,0x5d,0x5d,0x63},
- {0xc3,0xad,0x6d,0x6d,0x03},
- {0x30,0x70,0x71,0x60,0x10},
- {0x93,0x6d,0x6d,0x6d,0x93},
- {0x90,0x6d,0x6d,0x6b,0x87}};
- //0~9字表
-
- uchar code maohao[]=
- {0xff,0x93,0x93,0xff,0xff};/*":",0*/
- uchar code duanxian[]=
- {0xef,0xef,0xef,0xef,0xef};/*"-",0*/
- uchar n,second,minute,hour;//定义时分秒
- void delay(uint t)
- {
- register uint bt;
- for(;t;t--)
- for(bt=0;bt<25;bt++)
- ;
- } //延时函数
- void init()
- {
- hour=11;
- minute=12;
- second=0;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }//初始化函数,开启定时器
- void display()
- {
- char m;
- if(n==20) //延时1s
- {
- n=0;
- second++;
- if(second==60) //秒到60
- {
- second=0;
- minute++;
- if(minute==60) //分到60
- {
- minute=0;
- hour++;
- if(hour==24)
- hour=0; //时到24
- }
- }
- }//进位操作
- for(m=4;m>=0;m--)
- {P0=num[second%10][m];delay(2);}
- P0=0xff;
- delay(4);
- //显示秒个位
- for(m=4;m>=0;m--)
- {P0=num[second/10][m];delay(2);}
- //显示秒十位
- for(m=4;m>=0;m--)
- {P0=maohao[m];delay(2);}
- //显示":"
- for(m=4;m>=0;m--)
- {P0=num[minute%10][m];delay(2);}
- P0=0xff;
- delay(4);
- //显示分个位
- for(m=4;m>=0;m--)
- {P0=num[minute/10][m];delay(2);}
- //显示分十位
- for(m=4;m>=0;m--)
- {P0=maohao[m];delay(2);}
- //显示":"
- for(m=4;m>=0;m--)
- {P0=num[hour%10][m];delay(2);}
- P0=0xff;
- delay(4);
- //显示时个位
- for(m=4;m>=0;m--)
- {P0=num[hour/10][m];delay(2);}
- //显示时十位
- P0=0xff;
- delay(10);
- //延时,保证一个周期
- }//显示函数
- void main()
- {
- init();
- while(1)
- display();
- }//一直显示,等待中断
- void T_0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- n++;
- }//定时器0中断程序
复制代码
|