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 課程設計說明書用紙一律採用...