基于80C51單片機的電子時鐘 8位動態數碼管顯示時分秒
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (20.63 KB, 下載次數: 81)
下載附件
2018-10-12 23:42 上傳
單片機源程序如下:
- //==================================================//
- //== 電子信息科學與技術(2)班 ==//
- //== ==//
- //== 八位數碼管電子時鐘 ==//
- //== 16214088 陳朝 24小時制電子表 ==//
- //== ==//
- //==================================================//
- #include<reg51.h>
- #include"delay.h"
- unsigned char code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //定義共陰極LED7段顯示碼
- unsigned char dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義數碼管位碼
- unsigned char hour=23,min=58,sec=52; //定義初始時間為23時58分52秒
- unsigned char tcount; //定義50ms計數變量
- void display(unsigned char,unsigned char,unsigned char);
- void delay(unsigned int time)//定義延時函數
- {
- unsigned int j = 0;
- for(;time>0;time--)
- for(j=0;j<125;j++);
- }
- void main(void)
- {
- TMOD=0x01; //定時/計數器0設為方式1
- TH0=(65536-50000)/256; //定時50ms初值的高八位送入TH0
- TL0=(65536-50000)%256; //定時50ms初值的低八位送入TL0
- EA=1; //開CPU中斷
- ET0=1; //開定時/計數器0的中斷
- TR0=1; //啟動定時器0
- while(1)
- {
- display(hour,min,sec);
- }
- }
- void display(unsigned char hour,unsigned char min,unsigned sec)
- {
-
- P0=LED[hour/10]; //小時的十位送數碼管1位顯示
- P2=0xfe;
- delay(1);
- P2=0xff;
-
- P0=LED[hour%10]; //小時的個位送數碼管2位顯示
- P2=0xfd;
- delay(1);
- P2=0xff;
-
- P0=LED[10]; //橫杠送數碼管3位顯示
- P2=0xfb;
- delay(1);
- P2=0xff;
-
- P0=LED[min/10]; //分的十位送數碼管4位顯示
- P2=0xf7;
- delay(1);
- P2=0xff;
-
- P0=LED[min%10]; //分的個位送數碼管5位顯示
- P2=0xef;
- delay(1);
- P2=0xff;
-
- P0=LED[10]; //橫杠送數碼管6位顯示
- P2=0xdf;
- delay(1);
- P2=0xff;
-
- P0=LED[sec/10]; //秒的十位送數碼管7位顯示
- P2=0xbf;
- delay(1);
- P2=0xff;
-
- P0=LED[sec%10]; //秒的個位送數碼管8位顯示
- P2=0x7f;
- delay(1);
- P2=0xff;
- }
- void T0_time() interrupt 3 //定時器中斷處理函數
- {
- TH0=(65536-50000)/256; //重新將定時50ms初值的高八位送TH0
- TL0=(65536-50000)%256; //重新將定時50ms初值的低八位送TH0
- tcount++; //定時50ms時間到加1
- if(tcount==20) //判斷是否到1s
- {
- tcount=0; //到1s,變量清0
- sec++; //秒計數變量加1
- if(sec==60) //判斷秒是否到60
- {
- sec=0; //到60,秒變量清0
- min++; //分計數變量加1
- if(min==60) //判斷分是否到60
- {
- min=0; //到60,分變量清0
- hour++; //小時計數變量加1
- if(hour==24) //判斷小時是否到24
- hour=0; //到24,小時清0
- }
- }
- }
- }
-
復制代碼
所有資料51hei提供下載:
8位數碼管24小時制電子表.zip
(94.15 KB, 下載次數: 95)
2018-10-12 20:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|