|
用74hc573實現數碼管24小時時鐘顯示,對于74hc573芯片如果不了解可以看看文件里面的手冊,不多說先上代碼
- /*以下程序是根據74hc573芯片的鎖存器
- **原理來寫的
- **若有不懂的地方可以看看文件夾的芯片
- **手冊或者百度*/
- #include<reg52.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- //串口定義沒什么好說的
- sbit LSA = P2^2;
- sbit LSB = P2^3;
- sbit LSC = P2^4;
- u8 code mabiao[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~f的碼表,不過這里我們就用0~9
- /*時 分 初值定義*/
- u16 sex = 0,s = 56,min = 59,h = 23;//sex中斷進入次數控制變量,s,min,h是秒,分,時。
- u8 shu[8]; //控制掃描數組得到碼表值
- void Int0(){
- TMOD |= 0x01; //定時器方式1
- TH0 = 0xFC; //1ms定時
- TL0 = 0x18;
- TR0 = 1;
- ET0 = 1;
- EA = 1;
- }
- void delay10us(u16 i) //10us延時
- {
- while(i--);
- }
- void shaomiao(){ //數碼管掃描
- u8 i;
- for(i = 0;i <8;i++){
- switch(i){
- case 0:
- LSA = 0; LSB = 0; LSC = 0; break;
- case 1:
- LSA = 1; LSB = 0; LSC = 0; break;
- case 2:
- LSA = 0; LSB = 1; LSC = 0; break;
- case 3:
- LSA = 1; LSB = 1; LSC = 0; break;
- case 4:
- LSA = 0; LSB = 0; LSC = 1; break;
- case 5:
- LSA = 1; LSB = 0; LSC = 1; break;
- case 6:
- LSA = 0; LSB = 1; LSC = 1; break;
- case 7:
- LSA = 1; LSB = 1; LSC = 1; break;
- }
- if(i == 2||i==5){ //這句主要控制如時間:14-12-56(14點12分56秒)中間的“-”
- P0 = 0x40;
- delay10us(1);
- P0 = 0x00;
- }
- else if(i != 2||i!=5){ //掃描使數碼管得值
- P0 = mabiao[shu[i]];
- delay10us(1);
- P0 = 0x00;
- }
-
-
- }
- }
- void main(){
- Int0();
- while(1){
- shaomiao();
-
- }
-
- }
- void TimeInt0() interrupt 1{
- TH0 = 0xfc;
- TL0 = 0x18;
- sex++;
-
- if(sex == 1000){ // 中斷1000次即1s
- sex = 0;
- s++;
- if(s == 60){ //60s到了歸零
- s = 0;
- min++;
- }
- }
- if(min == 60){ //60min到了歸零
- min = 0;
- h++;
- if(h == 24) //24h到了歸零(24小時格式)
- h = 0;
- }
- shu[0] = s % 10; //秒的計算
- shu[1] = s / 10;
- shu[3] = min % 10; //分的計算
- shu[4] = min / 10;
- shu[6] = h % 10; //小時的計算
- shu[7] = h / 10;
-
- }
復制代碼 |
評分
-
查看全部評分
|