基於微控制器的電子時鐘設計

2023-01-19 03:27:02 字數 3124 閱讀 6179

ds1302時鐘晶元具有通電自動計時的功能。向ds1302中寫入乙個初值,如寫入2011-05-01 00:00:

00 星期日,在通電時,時間就會自動走:過60秒分加1;過60分時加1;過24小時天加1,星期日變成星期一;一周有7天,晶元內的周資訊每7天一迴圈;晶元能夠自動判斷每月有多少天,5月有31天,31天後,月加1。採用ds1302時鐘晶元的微控制器時鐘,其實質就是讀取時鐘晶元內的時鐘資訊並把它顯示出來。

只要時間初值正確,時鐘就能一直精準的走下去。調整時間日期,實質就是向ds1302時鐘晶元重新寫入初值。電子時鐘的主程式框圖如圖10所示

圖4.1 主程式框圖

void delay(uint z)

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

} 由for迴圈構成的延時函式,z的取值為這個函式的延時ms數,如delay(200);大約延時200ms. delay(500);大約延時500ms。因下文多次用到,固在此先作說明。

在對ds1302時鐘晶元操作前,應對其操作時序有所了解,參看前文ds1302介紹。ds1302採用序列方式與微控制器進行通訊,乙個機器週期只能讀寫乙個位元組的一位,因此,在微控制器與ds1302晶元間傳輸一位元組(8位)資料,要分8次進行,且先從低位開始傳輸。

寫資料位元組子函式

void write_1302_byte(uchar temp)//用來傳送8位資料資訊

}1302寫資料子函式

void write_1302(uchar addd,uchar dat)

讀ds1302資料函式

uchar read_1302(uchar add)//輸入位址add,返回讀取的資料

rst=0;//以下為ds1302復位的穩定時間

sck=0;

sck=1;

sda=0;

sda=1;

return(temp);//將temp值返回

}對1602進行操作前要對其進行初使化,初使化完成後它才能正常顯示。如果想在1602液晶的某乙個位置顯示乙個內容,要先對其寫入乙個指令:在什麼地方顯示。

然後再對其寫入乙個資料:要顯示什麼內容。對1602的液晶初使化,需要用寫入指令的方式完成。

void write_com(uchar com)

void write_data(uchar date),與寫指令類似,這裡lcdrs設為1

此函式首先對液晶進行初使化,使其處於待命狀態,然後將時鐘框架顯示出來:年月日之間的「-」,時分秒之間的「:」,還有世紀年的高兩位。

void init_1602()

ds1302中的時間、日期等資訊是以bcd碼的形式存放的,要先將從1302中讀取的資料轉化成10進製,然後顯示在液晶上相應的位置。

顯示時間、日期子函式

void write_sfm(uchar add,uchar time)//用於在1602上顯示年、月、日、時、分、秒。

add為顯示位置,time為要顯示的內容

uchar shi,ge

shi=time/16; //將從ds1302中讀取的bcd碼資料轉化成10進製個位和10

ge=time%16; 進製十位

write_com(add+0x80);//定義顯示在液晶的什麼位置

write_data(0x30+shi);//由1602液晶字型檔可知,0~9的資料碼分別對應0x30~0x39

write_data(0x30+ge); //初使化中設定了寫乙個字元後,位址指標加1,因此這裡

不用重新游標定位

顯示周子函式

void write_zhou(uchar time1),用於在1602上顯示周資訊,與顯示

時間日期子函式類似

uchar ge;

ge=time1%16;//一周七天,因此只需個位

write_com(0x80+13);

write_data(0x30+ge);

}此電子時鐘共有4個按鍵,s1、s2、s3與調時有關圖按鍵程式如圖11,s4為12小時切換鍵

s1功能鍵:在24小時顯示模式下,該鍵被第一次按下後進入秒調整,液晶顯示器上的時間停止走動。模式,再次按下後進入分調整模式,接著是調時模式、調年模式、調月模式、調日模式、調週模式,當第八次按下該鍵後退出

s2 調整鍵:在調整模式下,該鍵每按一次,相應時間或日期加1

s3 確定鍵:在調整模式下,該鍵被按下後,退出調整模式,並將調整後的時間、日期寫入ds1302

s4 顯示模式調整鍵用於對時間的12/24小時模式的切換

圖4.2 按鍵程式圖

時鐘預設在24小時模式下執行,定義乙個標誌位flag1。第一次按下切換鍵,把瞬時時間轉化成12小時制,令flag1=1。並寫入ds1302晶元,此後ds1302晶元在12小時模式下執行。

第二次按下切換鍵,即返回24小時顯示模式,令flag1=0,把瞬時時間轉化成24小時模式並寫入ds1302晶元。

有關ds1302的時間暫存器存放形式參閱前文。如24小時模式下的22:00,存放的形式為00100010。

12小時模式下的22點,也就是10:00pm,存放形式為10110000,在切換的一瞬間,我們只需要把小時資料0xb0寫入到ds1302,這樣就能讓時鐘晶元在12小時模式下執行了。需要注意的是,12小時模式下,只用到後5位來表示時間,第6位用來表示am或pm資訊,如果真接用24小時模式下的顯示方法是會出錯的,這裡我們需要對時進行轉化。

首先提取am/pm資訊,讓其顯示。然後提取其後5位時間,顯示時間。在主函式部分如果檢測到flag1=1,就進行轉換。

12轉24小進模式與其類似,不再贅述。

if(s1num==0&&s4==0)// 設定鍵沒被按下,且12/24小時模式切換鍵被按下後

{delay(5);

if(s4==0)

{s2num++;

while(!s4);

if(s2num==1)//24小時切換成12小時

int ge,shi;

flag1=1;

hour=read_1302(0x85);

ge=hour%16;

shi=hour/16;

if(shi<=1&&ge<=1)//時小於12

if(shi==0&&ge==0)

hour=0x92;

else

hour=hour&0x9f;

基於微控制器的電子時鐘課程設計報告

目錄一 引言 二 設計課題 三 系統總體方案 四 系統硬體設計 1.硬體電路原理圖 2.元件清單 五 系統軟體設計 1.軟體流程圖 2.程式清單 六 系統實物圖 7 課程設計體會 八 參考文獻及 九 附錄 一 引言 微控制器因將其主要組成部分整合在乙個晶元上而得名,就是把 處理器 隨機儲存器 唯讀儲...

基於微控制器的電子時鐘設計報告 LCD顯示

微控制器原理及應用課程設計任務書 題目 電子時鐘 lcd顯示 1 設計要求以at89c51微控制器為核心的時鐘,在lcd顯示器上顯示當前的時間 使用字元型lcd顯示器顯示當前時間。顯示格式為 時時 分分 秒秒 用3個功能鍵操作來設定當前時間。功能鍵k1 k4功能下。k1 設定小時。k2 設定分鐘。k...

微控制器電子時鐘課程設計

鄭州華信學院 課程設計任務書 題目 簡單數字電子時鐘課程設計 專業 電氣工程及其自動化 姓名 王恆超 學號 1002120133 班級 10級電氣工程 1 班 完成期限 2013年01月05日 指導教師簽名 課程負責人簽名 2012年12月25日 課程設計報告撰寫格式 1 課程設計說明書用紙一律採用...