在之前的文章中我們學(xué)習(xí)了多位數(shù)碼管的倒計時,下面我們將對多位數(shù)碼管對實際生活中的時間來進行顯示,該功能的實現(xiàn)也并不復(fù)雜,將數(shù)碼管知識相結(jié)合并運用起來,就可以完成一個屬于自己的時鐘了。
【資料圖】
一、功能概述
實現(xiàn)對時間的計數(shù)我們需要用到單片機中的定時器模塊,定時器的本質(zhì)上就是每經(jīng)過一個單片機自己機械周期就會加一的寄存器。定時器也可以是一個中斷,當?shù)竭_了給定時時間后就會執(zhí)行相對應(yīng)的程序。
了解了定時器的原理和使用方法,我們就可以選擇我們需要的多位數(shù)碼管來進行電路的設(shè)計了。
二、顯示原理
既然我們需要現(xiàn)實的是時分秒的時間,那么我們可以選用六位的數(shù)碼管,每兩個數(shù)碼管分別顯示時、分、秒。而控制每一個數(shù)碼管都需要段碼線和選位線來控制,這樣也節(jié)省了我們所需要使用的單片機IO口。
三、電路連接
使用Proteus進行電路圖仿真:
四 、程序設(shè)計
程序代碼:
#include< reg51.h >typedef unsigned char uchar;typedef unsigned int uint;uchar code num[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 0~9字碼uchar miao=0, fen=0, shi=0; //進位標志位uint i=0; //計時uchar miao_L, miao_H, fen_L, fen_H, shi_L, shi_H; //時、分、秒的個位(xxx_L)和十位(xxx_H) void delay(uint x){ //延時函數(shù) while(x--);}void T0_init(){ //定時器 0 初始化 TMOD = 0x01; //工作方式 1TH0 = 0x3c; //高八位賦初值 65536-50000=15536 = 3cb0HTL0 = 0xb0; //底八位賦初值EA = 1; //開總中斷ET0 = 1; //開 T0 中斷TR0 = 1; //啟動 T0}void display(){ //顯示P2 = 0x20; //秒與分間隔線P0 = 0xbf;delay(500);P2 = 0x04; //分與時間隔線P0 = 0xbf;delay(500);P2 = 0x80; //數(shù)碼管位選 1000 0000P0 = num[miao_L]; //秒個位delay(500);P2 = 0x40; //數(shù)碼管位選 0100 0000P0 = num[miao_H]; //秒十位delay(500);P2 = 0x10; //數(shù)碼管位選 0001 0000P0 = num[fen_L]; //分個位delay(500);P2 = 0x08; //數(shù)碼管位選 0000 1000P0 = num[fen_H]; //分十位delay(500);P2 = 0x02; //數(shù)碼管位選 0000 0010P0 = num[shi_L]; //分個位delay(500);P2 = 0x01; //數(shù)碼管位選 0000 0001P0 = num[shi_H]; //分十位delay(500);}void main(){T0_init(); //定時器初始化while(1){display(); //顯示 }}void timer0_int() interrupt 1{ //中斷服務(wù)函數(shù) i++; if(i == 20){ i = 0; //滿一秒清零 miao++; //i = 100 為一,秒標志位加 1if(miao == 60){miao = 0; //滿一分清零fen++;if(fen == 60){fen = 0; //滿一時清零shi++;if(shi == 24){shi = 0; //24小時制fen = 0;miao = 0;}}}miao_L = miao%10; //秒個位miao_H = miao/10; //秒十位fen_L = fen%10; //分個位fen_H = fen/10; //分十位shi_L = shi%10; //時個位shi_H = shi/10; //時十位 } }
五、總結(jié)
本章對多位數(shù)碼管的使用進行了更深一步的研究,更加貼近我們的生活。一個復(fù)雜的程序都是由簡單的程序慢慢延伸下去的,都不是一蹴而就的,其實在我們一步一步的學(xué)習(xí)中,我們已經(jīng)能對生活中的電子產(chǎn)品進行自己的修改了,下一章我們將學(xué)習(xí)如何更為合理的使用定時器來對數(shù)碼管的顯示進行控制
標簽: