【正文】
write_1302(0x8e,0x80)。//十進(jìn)制轉(zhuǎn)換成 DS1302 要求的 BCD碼 write_1302(0x8e,0x00)。 if(shi1==(01))shi1=2。} switch(n) { case 1:shi1=shi/10。 if(key3==0) { while(1){display(m)。 } } } } } void key3scan(uchar n) { if(n!=0)//當(dāng) key1 按下以下。//向 DS1302 內(nèi)寫分寄存器 82H 寫入調(diào)整后的分?jǐn)?shù)據(jù) BCD 碼 write_1302(0x8e,0x80)。//十進(jìn)制轉(zhuǎn)換成 DS1302 要求的 BCD 碼 write_1302(0x8e,0x00)。 if(fen2==10) fen2=0。 case 4:fen2=fen%10。//向 DS1302 內(nèi)寫分寄存器 82H 寫入調(diào)整后的分?jǐn)?shù)據(jù) BCD 碼 13 write_1302(0x8e,0x80)。//十進(jìn)制轉(zhuǎn)換 成 DS1302要求的 BCD碼 write_1302(0x8e,0x00)。if(fen1==6)fen1=0。 case 3:fen1=fen/10。//向 DS1302 內(nèi)寫小時(shí)寄存器 84H 寫入調(diào)整后的小時(shí)數(shù)據(jù) BCD 碼 write_1302(0x8e,0x80)。//十進(jìn)制轉(zhuǎn)換成 DS1302 要求的 BCD 碼 write_1302(0x8e,0x00) 。 } else if(shi2==10)shi2=0。 shi2++。//打開(kāi)寫保護(hù) break。//允許寫,禁止寫保護(hù) write_1302(0x84,temp)。 temp=shi1*16+(shi)%10。 shi1++。 if(key2==0) { while(1){display(m)。} } } return m } void key2scan(uchar n) { if(n!=0)//當(dāng) key1 按下以下。 while(1) {display(m)。 } uchar key1scan() { if(key1==0)// key1 為功能鍵 { delayms(10); //延時(shí),用于消抖動(dòng) if(key1==0)//延時(shí)后再次確認(rèn)按鍵按下 { m++。 nian=BCD_Decimal(read_1302(0x8d))。 ri = BCD_Decimal(read_1302(0x87))。 fen = BCD_Decimal(read_1302(0x83))。j114。 void delayms(uint x) 11 { uchar j。 void shengdian()。 void display(uchar x)。 sbit LED6=P2^5。 sbit LED4=P2^3。 sbit LED2=P2^1。 sbit SD=P3^4。 sbit key2=P3^2。 //帶小數(shù)點(diǎn)數(shù)的代碼 sbit qiehuan=P3^0。 include unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}。 參考文獻(xiàn) [1].李群芳,肖看 .《單片機(jī)原理、接口及應(yīng)用》 .清華大學(xué)出版社, [2].丁元杰 .《單片微機(jī)原理及應(yīng)用》(第二版) .機(jī)械工業(yè)出版社, [3].張有德,趙志英 .《單片微型機(jī)原理、應(yīng)用于實(shí)驗(yàn)》 .復(fù)旦大學(xué)出版社, 附錄一 源程序 include include unsigned char a,miao,shi,shi1,shi2,fen,fen1,fen2,x,key1n,temp,j=0,mmiao=0,mfen=0。在設(shè)計(jì)課程過(guò)程中遇到問(wèn)題是很正常德 ,但我們應(yīng)該將每次遇到的問(wèn)題記錄下來(lái) ,并分析清楚 ,以免下次再碰到同樣的問(wèn)題。在設(shè)計(jì)程序時(shí) ,不能妄想一次就將整個(gè)程序設(shè)計(jì)好 ,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路 。 要做好一個(gè)課程設(shè)計(jì) ,就必須做到 :在設(shè)計(jì)程序之前 ,對(duì)所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個(gè)系統(tǒng)的了解 ,知道該單片機(jī)內(nèi)有哪些資源 。 4 總結(jié)與體會(huì) 從開(kāi)始接到論文要求到時(shí)鐘 /秒表計(jì)時(shí)器 的實(shí)現(xiàn) ,再到論文文章的完成 ,每走一步對(duì)我來(lái)說(shuō)都是新的嘗試與挑戰(zhàn) ,這也是我在大學(xué)期間獨(dú)立完成的最大的項(xiàng)目。省電模式現(xiàn)象如圖 。按下切換鍵則進(jìn)入秒表初始界面如 圖 。 若沒(méi)有錯(cuò)誤則開(kāi)始功能調(diào)試。將調(diào)試好的程序錄入到單片機(jī)中。 調(diào)用上電子程序 調(diào)用顯示子程序 初始化 功能程序 開(kāi)始 有按鍵按下? 讀取 DS1302 數(shù)據(jù) 8 圖 寫 DS1302 流程圖 圖 讀 DS1302 流程圖 利用 keil軟件編寫源程序見(jiàn)附錄一。在 SCLK 的上升沿, I/O 線上的數(shù)據(jù)被送入 DS1302;在 SCLK 的下降沿, DS1302 輸出數(shù)據(jù)在 I/O線上。 RST 被設(shè)置為高電平就啟動(dòng)了一個(gè)數(shù)據(jù)傳送的過(guò)程。 Y N 圖 主函數(shù)流程圖 單片機(jī) AT89C52對(duì)時(shí)鐘芯片 DS1302的控制需要通過(guò)程序驅(qū)動(dòng)來(lái)實(shí)現(xiàn),程序主要完成兩個(gè)方面的任務(wù):①利用單片機(jī)實(shí)現(xiàn)對(duì) DS1302寄存器的地址定義和控制字的寫入,②實(shí)現(xiàn)對(duì) DS1302的數(shù)據(jù)讀取。連接如圖 。P2 口接七段數(shù)碼管的位選 ,由于此處數(shù)碼管為共陽(yáng)數(shù)碼管 ,因此位選到的數(shù)碼管公共端置 1,其他數(shù)碼管公共端清零。 動(dòng)態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示的頻率較高時(shí)利用 人眼的暫留特性,好像數(shù)碼管在同時(shí)顯示而看不出輪流顯示的現(xiàn)象,用兩個(gè)兩個(gè)接口分別完成字選和位選。 靜態(tài)接口為固定顯示方式,無(wú)閃爍,其電路可采用一個(gè)并行口接一個(gè)數(shù)碼管,數(shù)碼管的公共端按共陽(yáng)或共陰分別接地或 VCC。 圖 按鍵連接及功能說(shuō)明 顯示電路及驅(qū)動(dòng) 采用六位共陽(yáng)數(shù)碼管作為顯示器,分別顯示時(shí)、分、秒。 同時(shí)有五個(gè)按鍵來(lái)完成時(shí)鐘 /秒表的切換、時(shí)間校對(duì)以及省電模式的開(kāi)啟 /關(guān)閉。當(dāng) +5V 電源恢復(fù)供電時(shí), LED 依舊顯示當(dāng)前時(shí)間,而不會(huì)因?yàn)閿嚯娛瓜到y(tǒng)復(fù)位到初始化時(shí)間,避免了重新校時(shí)的麻煩。 作為串行時(shí)鐘接口, 作為時(shí)鐘數(shù)據(jù)的 I/O。 圖 DS1302 連接電路 該系統(tǒng)使用 AT89C52 單片機(jī)作為核心,通過(guò)讀取時(shí)鐘日歷芯片 DS1302 數(shù)據(jù),完成此電子時(shí)鐘的主要功能 —— 時(shí)鐘。 1 2 3 4 5 6ABCD654321DCBAT i t leN u m be r R e v i s i onS i z eBD a t e : 9 J un 20 08 S he e t o f F i l e : C : \ D o c um e nt s a n d S e tt i ng s \ A d m i ni s t r a t or \桌面 \常亮畢業(yè)設(shè)計(jì) \電路圖