課程設(shè)計——DS1302數(shù)碼管顯示數(shù)字鐘的設(shè)計_第1頁
課程設(shè)計——DS1302數(shù)碼管顯示數(shù)字鐘的設(shè)計_第2頁
課程設(shè)計——DS1302數(shù)碼管顯示數(shù)字鐘的設(shè)計_第3頁
課程設(shè)計——DS1302數(shù)碼管顯示數(shù)字鐘的設(shè)計_第4頁
課程設(shè)計——DS1302數(shù)碼管顯示數(shù)字鐘的設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、大學(xué)學(xué)院系課程設(shè)計報告大學(xué)學(xué)院系課程設(shè)計ds1302數(shù)碼管顯示數(shù)字鐘的設(shè)計 學(xué)生姓名學(xué) 號所 在 系專業(yè)名稱班 級指導(dǎo)教師成 績 大學(xué)學(xué)院二一二年六月摘要:本課程設(shè)計要求基于stc89c52單片機實現(xiàn)用8位數(shù)碼管進行時鐘顯示。采用stc89c52單片機和ds1302實時時鐘芯片,使用5v電源供電。時鐘可以通過按鍵切換,數(shù)碼管顯示時、分、秒以及年、月、日,并且可以實現(xiàn)時鐘的校準功能。包括時鐘芯片驅(qū)動程序,數(shù)碼管顯示及驅(qū)動程序。關(guān)鍵字:單片機,ds1302,時鐘電路,數(shù)碼管顯示abstract: this course is designed 8 digital tube clock displa

2、y requirements based stc89c52 microcontroller. using stc89c52 microcontroller and ds1302 real time clock chip, using a 5v power supply. design of the clock by means of the key switches, digital tube display hours, minutes, seconds, and the year, month, day, and can achieve clock calibration function

3、. including the driver of the clock chip, digital display and driver.key words: single chip macrocomputer;ds1302;clock circuit;digital tube display目 錄1. 總體設(shè)計方案.11.1 電子鐘功能介紹1.1.1 基本功能介紹.11.1.2 擴展功能介紹.11.2 總體設(shè)計方案1 1.2.1 計時方案.1 1.2.2 按鍵方案.1 1.2.3 顯示方案.22. 單元模塊設(shè)計.2 2.1 硬件總電路設(shè)計.22.2 顯示模塊電路設(shè)計.22.3 按鍵調(diào)時電路設(shè)

4、計.32.4 時鐘芯片通信電路.33. 軟件模塊設(shè)計.4 3.1 主程序設(shè)計.4 3.2 時鐘芯片.53.2.1 ds1302內(nèi)部結(jié)構(gòu)5 3.2.2 ds1302的讀時序6 3.2.3 ds1302的寫時序63.3 鍵盤調(diào)時.74. 設(shè)計總結(jié)85. 參考文獻86. 附錄9前言數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時、分、秒及數(shù)字顯示的計時裝置,廣泛用于個人家庭、車站、辦公室等公共場所,成為人們?nèi)粘I钪械谋匦杵?。鐘表的?shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大的擴展了鐘表原先的報時功能。如定時報警器、按時自動打鈴、時間程序自動控制、自動開關(guān)路燈、定時電氣的自動啟用等。所有這些都是以鐘表數(shù)字化為基礎(chǔ)的。

5、因此,研究數(shù)字鐘及擴大其應(yīng)用,有現(xiàn)實意義。鐘表的數(shù)字化大力推動了計時的精確性和可靠性。在單片機工程的裝置中,實時時鐘必不可少。目前常用的實時時鐘,很多采用單片機中斷服務(wù)實現(xiàn)。這種方式一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢,浪費單片機資源。雖然能滿足對實時時鐘的要求,但是占用地址、數(shù)據(jù)總線多,給其他設(shè)計帶來不便。本次設(shè)計選擇串行時鐘芯片ds1302與單片機同步通信構(gòu)成數(shù)字時鐘電路。三線接口能為單片機節(jié)省大量資源。ds1302的后備電源以及對后備電源進行涓流充電的能力保證電路斷電后仍能保存時間和數(shù)據(jù)信息。這些優(yōu)點解決了目前常用的實時時鐘無法解決的問題。251.總體設(shè)計方案1

6、.1 電子鐘功能介紹1.1.1 基本功能介紹第一點:電子時鐘用8位數(shù)碼管顯示。第二點:時間顯示格式為xx-xx-xx,分別為時、分、秒。1.1.2 擴展功能介紹第一點:設(shè)計的電子時鐘可以通過安檢切換現(xiàn)實日歷,其格式為xx-xx-xx,分別為年、月、日。第二點:設(shè)計的電子時鐘可以進行時間的校準功能。1.2 總體設(shè)計方案1.2.1 計時方案利用stc89c52單片機內(nèi)部定時/計數(shù)器和時鐘芯片ds1302進行終端定時,配合軟件延時實現(xiàn)時、分、秒的計時。方案節(jié)省硬件成本,并且能使讀者在定時/計數(shù)器的使用、中斷及程序設(shè)計方面得到鍛煉和提高,對單片機指令系統(tǒng)能有更升入的了解。1.2.2 按鍵方案 stc8

7、9c52外接8個led數(shù)碼管顯示,外接4個按鍵構(gòu)成按鍵控制部分。時鐘電路按鍵控制部分stc89c52數(shù)碼管顯示圖1 設(shè)計方案圖1.2.3 顯示方案 八段數(shù)碼管顯示有兩種,一種是共陽數(shù)碼管,其內(nèi)部是八個陽極相連接的發(fā)光二極管組成;另一種是共陰極數(shù)碼管,其內(nèi)部是八個陰極連接的發(fā)光二級管組成。二者原理不同但功能相同。本設(shè)計選用8個共陽八段數(shù)碼管led。2.單元模塊設(shè)計2.1硬件總電路設(shè)計圖2 硬件電路圖2.2顯示模塊電路設(shè)計設(shè)計主要使用數(shù)碼管功能實現(xiàn),顯示部分硬件用8只數(shù)碼管為顯示管。這些數(shù)碼管的陽極相連接在一起,所以稱為共陽極數(shù)碼管。通過在8只數(shù)碼管的陽極加+5v電壓或0v電壓數(shù)碼管形成不同的數(shù)字

8、。數(shù)碼管部分如圖所示。動態(tài)顯示:數(shù)碼管動態(tài)顯示接口是單片機應(yīng)用中最廣泛的一種顯示方式。動態(tài)是將所有數(shù)碼管的8個顯示筆畫a,b,c,d,e,f,g,dp的同名端連接在一起,另外為每個數(shù)碼管的公共級com增加位選通控制電路。位選通由各自獨立的i/o線控制,當(dāng)單片機輸出字型碼時,所有數(shù)碼管都接收到相同的字型碼,當(dāng)選擇哪個數(shù)碼管顯示字形時,就取決于單片機對選通com端電路的控制。所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該為顯示字形。沒有選通的數(shù)碼管不會亮。通過分時控制各個數(shù)碼管的com端,就使個個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。圖3 顯示電路圖2.3 按鍵調(diào)時電路圖4 鍵盤電路圖2.4 時鐘

9、芯片通信電路時鐘芯片ds1302與單片機stc89c52的借口是由三條線來完成的,單片機stc89c52的p2.3與時鐘芯片的數(shù)據(jù)傳輸端相連,p1.7用作ds1302的輸入時鐘sclk控制線。p1.3控制ds1302的復(fù)位控制端。ds1302接標準32.768khz石英晶振。ds1302與單片機的接口電路如圖。圖5 時鐘芯片電路圖3. 軟件模塊設(shè)計3.1主程序設(shè)計nononoyesyesyes開始初始化定時器t0以及ds1302從ds1302獲取時間并轉(zhuǎn)換為十進制時鐘調(diào)整k1=0k4=0數(shù)碼管顯示時間鬧鐘設(shè)置鬧鐘次數(shù)加1保存鬧鐘設(shè)置數(shù)據(jù)獲得的時間與鬧鐘設(shè)置的時間進行對比時間相同蜂鳴器打開繼電器

10、打開定時器打開圖6 主程序設(shè)計圖3.2 時鐘芯片開始向ds1302的某個地址寫入數(shù)據(jù)將讀取的數(shù)據(jù)賦值給bakedata向ds1302的某個地址讀取數(shù)據(jù)返回bakedata圖7 時鐘芯片流程圖3.2.1 ds1302內(nèi)部結(jié)構(gòu):圖8 ds1302內(nèi)部構(gòu)造圖3.2.2 ds1302的讀時序:圖9 讀時序圖3.2.3 ds1302的寫時序:圖10 寫時序圖3.3 鍵盤調(diào)時nononoyesyesyes按鍵調(diào)整時間開始k2=0從ds1302中獲取的小時值加1時鐘啟動k3=0k1=0從ds1302中獲取的分鐘值加1nonoyesyes按鍵設(shè)置鬧鐘開始k2=0當(dāng)前小時值加1并保存k3=0當(dāng)前分鐘值加1并保存

11、返回圖11 鍵盤調(diào)時流程圖4.設(shè)計總結(jié)在這學(xué)期的課程設(shè)計中,在收獲知識的同時,還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找大量資料,請教老師,以及不懈的努力,不僅培養(yǎng)了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學(xué)會了很多學(xué)習(xí)的方法。而這是日后最實用的,受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學(xué)習(xí)、實踐。在這次設(shè)計過程中,體現(xiàn)出自己單獨設(shè)計模具的能力以及綜合運用知識的能力,體會了學(xué)以致用、突出自己勞動成果的喜悅心情,從中發(fā)現(xiàn)自己平時學(xué)習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補。在此感謝,, 老師,他們一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣;老師循循善誘的教導(dǎo)

12、和不拘一格的思路給予我無盡的啟迪。同時,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師表示忠心的感謝!5.參考文獻1樓然苗,李光飛.51系列單片機設(shè)計實例m.北京:北京航空航天大學(xué)出版社,2003.88-1002李群芳,黃建.單片機微型計算機與接口技術(shù)m.北京:電子工業(yè)出版社,2001.70-823李朝青.單片機原理接口技術(shù)(第三版)m.北京:北京航空航天大學(xué)出版社,2005,1-320 4趙嘉蔚.單片機原理與接口技術(shù)m.北京:清華大學(xué)出版社,2010.2-26 5趙小安.mcs-51單片機原理及應(yīng)用m.天津:天津大學(xué)出版社,2001.3-35 6歐偉明,周春臨,翟遂春.電子信息系統(tǒng)設(shè)計m.西安:西安電

13、子科技大學(xué)出版,2005,54附錄:程序代碼#include#include#define uchar unsigned char#define uint unsigned intsbit k1 = p30;/定義k1鍵sbit k2 = p31;/定義k2鍵sbit k3 = p32;/定義k3鍵sbit k4 = p33;/定義k4鍵sbit p2_5 = p25;sbit p2_6 = p26;sbit p2_7 = p27;sbit rst = p17;sbit io = p23;sbit sclk = p13;bit k1_flag = 0;/定義按鍵標志位,當(dāng)按下k1鍵時,該位置1

14、,k1鍵未按下時,該位為0bit flag;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar disp_buf8; /定義顯示緩沖區(qū)uchar time_buf7;/ds1302時間緩沖區(qū),存放秒、分、時、日、月、星期、年uchar time_hour10;uchar time_min10;uchar temp2;/用來存放設(shè)置時的小時、分鐘的中間值uchar t0;/定時器標志變量/*函數(shù)聲明*/void dula(void);/段選void wela(void);/位選void on_buzze

15、r(void);/打開蜂鳴器void off_buzzer(void);/關(guān)閉蜂鳴器void on_relay(void);/打開繼電器void off_relay(void);/關(guān)閉繼電器void delay(uchar i);/延時void write_byte(uchar inbyte);/寫一個字節(jié)uchar read_byte(void);/讀一個字節(jié)void write_ds1302(uchar address, uchar indata);/向ds1302寫入地址和數(shù)據(jù)uchar read_ds1302(uchar addr);/根據(jù)給定的地址讀數(shù)據(jù)void init_ds130

16、2(void);/ds1302初始化void init_timer0(void);/定時器初始化void key_process(void);/按鍵檢測并作出響應(yīng)void key_clock(void);/按鍵設(shè)置鬧鐘時間void get_time(void);/獲取時間(進制轉(zhuǎn)換)void time_display(void);/時間顯示void date_display(void); /日歷顯示/*主函數(shù)*/void main()uint i = 0;/設(shè)置鬧鐘數(shù)uint j;p0 = 0;p2 = 0;init_ds1302();init_timer0();while(1)get_tim

17、e();/讀取當(dāng)前時間if(k1 = 0)/若k1鍵按下delay(5);/延時10ms去抖if(k1 = 0)while(!k1);/等待k1鍵釋放k1_flag = 1;/k1鍵標志位置1,以便進行時鐘調(diào)整if(k1_flag = 1) key_process();/若k1_flag為1,則進行走時調(diào)整 time_display();if(k4 = 0)delay(5);if(k4 = 0)while( !k4);key_clock();time_houri = temp0;time_mini = temp1;i+;if(k4 = 0)delay(5);if(k4 = 0)write_ds

18、1302(0x80,0x00); /調(diào)整完畢后,啟動時鐘運行 write_ds1302(0x8e,0x80); /寫保護控制字,禁止寫for(j=0; j0; i-)for (j=110; j0; j-);/*數(shù)碼管*/void dula(void)/段選p2_5 = 1;p2_6 = 1;p2_7 = 1;/*-*/void wela(void)/位選p2_5 = 0;p2_6 = 1;p2_7 = 1;/*蜂鳴器*/void on_buzzer(void)/打開蜂鳴器p2_5 = 1;p2_6 = 0;p2_7 = 1;p0 = 0x40;p2_5 = 0;p2_6 = 0;p2_7 =

19、0;/*-*/void off_buzzer(void)/關(guān)閉蜂鳴器p2_5 = 1;p2_6 = 0;p2_7 = 1;p0 = 0;p2_5 = 0;p2_6 = 0;p2_7 = 0;/*繼電器*/void on_relay (void)/繼電器打開p2_5 = 1;p2_6 = 0;p2_7 = 1;p0 = 0x10;p2_5 = 0;p2_6 = 0;p2_7 = 0;/*-*/void off_relay (void)/繼電器關(guān)閉p2_5 = 1;p2_6 = 0;p2_7 = 1;p0 = 0;p2_5 = 0;p2_6 = 0;p2_7 = 0;/*初始化ds1302函數(shù)*/

20、void init_ds1302(void) rst = 0; sclk = 0; write_ds1302(0x80,0x00); /寫秒寄存器 write_ds1302(0x90,0xab); /寫充電器 write_ds1302(0x8e,0x80); /寫保護控制字,禁止寫/*定時器初始化*/void init_timer0(void)tmod |= 0x01;th0 = (65536 - 50000) / 256;tl0 = (65536 - 50000) / 256;et0 = 1;ea = 1;tr0 = 0;/*寫一個字節(jié)*/void write_byte(uchar inby

21、te) uchar i; for(i=0; i 1; /*讀一個字節(jié)*/uchar read_byte(void) uchar i,temp=0; io=1; for(i=0; i 1; return (temp);/*向ds1302寫入數(shù)據(jù)*/void write_ds1302(uchar address,uchar indata) sclk = 0; rst = 1; write_byte(address); /寫入地址 write_byte(indata);/寫入數(shù)據(jù) sclk = 0; rst = 0;/*從ds1302讀取數(shù)據(jù)*/uchar read_ds1302(uchar add

22、r) uchar backdata; sclk = 0; rst = 1; write_byte(addr); /先寫地址 backdata=read_byte(); /然后讀數(shù)據(jù) sclk = 0; rst = 0; return (backdata);/*按鍵掃描及操作*/void key_process(void)/通過按鍵調(diào)整時間 uchar min16,hour16;/定義16進制的分鐘和小時變量 write_ds1302(0x8e,0x00); /ds1302寫保護控制字,允許寫 write_ds1302(0x80,0x80); /時鐘停止運行 if(k2 = 0)/k2鍵用來對小

23、時進行加1調(diào)整 delay(5);/延時去抖 if(k2 = 0) while( !k2);/等待k2鍵釋放time_buf2 +; /小時加1 if(time_buf2 = 24) time_buf2 = 0;/當(dāng)變成24時初始化為0 hour16 = time_buf2/10*16 + time_buf2%10; /將所得的小時數(shù)據(jù)轉(zhuǎn)變成16進制數(shù)據(jù)write_ds1302(0x84,hour16); /將調(diào)整后的小時數(shù)據(jù)寫入ds1302 if(k3 = 0) / k3鍵用來對分鐘進行加1調(diào)整 delay(5);/延時去抖 if(k3 = 0) while( !k3);/等待k3鍵釋放 t

24、ime_buf1 +; /分鐘加1 if(time_buf1 = 60) time_buf1 = 0;/當(dāng)分鐘加到60時初始化為0 min16 = time_buf1/10*16 + time_buf1%10; /將所得的分鐘數(shù)據(jù)轉(zhuǎn)變成16進制數(shù)據(jù)write_ds1302(0x82,min16); /將調(diào)整后的分鐘數(shù)據(jù)寫入ds1302 if(k1 = 0)/k4鍵是確認鍵 delay(5);/延時去抖if(k1 = 0)while( !k1);/等待k1鍵釋放write_ds1302(0x80,0x00); /調(diào)整完畢后,啟動時鐘運行 write_ds1302(0x8e,0x80); /寫保護

25、控制字,禁止寫k1_flag = 0;/將k1鍵按下標志位清0 /*-*/void key_clock(void)/按鍵設(shè)置鬧鐘時間write_ds1302(0x8e,0x00); /ds1302寫保護控制字,允許寫/write_ds1302(0x80,0x80); /時鐘停止運行if(k2 = 0)/k2鍵用來對小時進行加1調(diào)整delay(5);/延時去抖if(k2 = 0)while( !k2);/等待k2鍵釋放temp0 = time_buf2; temp0+;/小時加1if(temp0 = 24) temp0 = 0;/當(dāng)變成24時初始化為0/time_hour = time_buf2

26、; /將所得的小時數(shù)據(jù)轉(zhuǎn)變成16進制數(shù)據(jù)/write_ds1302(0x84,hour16); /將調(diào)整后的小時數(shù)據(jù)寫入ds1302 if(k3 = 0) / k3鍵用來對分鐘進行加1調(diào)整delay(5);/延時去抖if(k3 = 0) while( !k3);/等待k3鍵釋放 temp1 = time_buf1; temp1+;/分鐘加1if(temp1 = 60) temp1 = 0;/當(dāng)分鐘加到60時初始化為0/time_min = time_buf1; /將所得的分鐘數(shù)據(jù)轉(zhuǎn)變成16進制數(shù)據(jù)/write_ds1302(0x82,min16); /將調(diào)整后的分鐘數(shù)據(jù)寫入ds1302/*獲取

27、秒、分鐘、小時、日、月、年的值*/void get_time(void)uchar sec,min,hour,date,mouth,year;/定義秒、分和小時變量write_ds1302(0x8e,0x00); /控制命令,wp=0,允許寫操作 write_ds1302(0x90,0xab); /涓流充電控制 sec = read_ds1302(0x81); /讀取秒 min = read_ds1302(0x83); /讀取分 hour = read_ds1302(0x85); /讀取時date = read_ds1302(0x86);/讀取日mouth= read_ds1302(0x88)

28、;/讀取月year = read_ds1302(0x8c);/讀取年 time_buf0 = sec/16*10 + sec%16; /將讀取到秒的16進制數(shù)轉(zhuǎn)化為10進制 time_buf1 = min/16*10 + min%16; /將讀取到分的16進制數(shù)轉(zhuǎn)化為10進制 time_buf2 = hour/16*10 + hour%16; /將讀取到時的16進制數(shù)轉(zhuǎn)化為10進制time_buf3 = date/16*10 + date%16;/將讀取到日的16進制數(shù)轉(zhuǎn)化為10進制time_buf4= mouth/16*10 + mouth%16;/將讀取到月的16進制數(shù)轉(zhuǎn)化為10進制time_buf5 = year/16*10 + year%16;/將讀取到年的16進制數(shù)轉(zhuǎn)化為10進制/*數(shù)碼管顯示時間程序*/void time_display(void)/秒-分-時顯示wela();p0 = 0xfe;dula();p0 = tabletime_buf0/10;/顯示秒十位delay(5);wela();p0 = 0xfd;dula();p0 = tabletime_buf0%10;/顯示秒各位delay(5);wela();p0 = 0xfb;dula();p0 = 0x40;delay(5);wela(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論