版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 基于ds1302的數(shù)字時鐘的設(shè)計 姓名: 學(xué)號: 專業(yè):電子信息科學(xué)與技術(shù) 指定老師:一, 實驗?zāi)康?時表作為一種定時工具被廣泛的使用在生產(chǎn)生活的各方面。而電子鐘又具有價格便宜,質(zhì)量輕,定時誤差小等優(yōu)點,被廣泛的應(yīng)用在生產(chǎn),生活的各個方面。本次課程設(shè)計,我利用單片機和ds1302實現(xiàn)數(shù)字時鐘。并在設(shè)計過程中體驗學(xué)習(xí)單片機設(shè)計的基本流程,提高對單片機的認識。為畢業(yè)工作打下堅實的基礎(chǔ)。二, 實驗內(nèi)容 以at89s52為核心,結(jié)合ds1302和lcd1602,設(shè)計一個數(shù)字時鐘。在液晶上實現(xiàn)年,月,日,時,分,秒和星期的顯示,并且日期和時間都可以通過按鍵選擇進行調(diào)整。給ds1302設(shè)置初始化的時間。
2、當(dāng)選擇chg鍵時,可以跳轉(zhuǎn)到年月日時分秒和星期處的位置,此時,通過inc鍵可以進行增加調(diào)整,dec可以進行減小調(diào)整。三, 實驗器件介紹 1,at89s52 at89s52是一種低功耗、高性能cmos 8位微控制器,具有8k 在系統(tǒng)可編程flash 存儲器。使用atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80c51 產(chǎn)品指令和引腳完全兼容。片上flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位cpu 和在系統(tǒng)可編程flash,使得at89s52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。 at89s52 是一種低功耗、高性能cmos8位微控制器,具有 8k
3、在系統(tǒng)可編程flash 存儲器。使用atmel 公司高密度非 易失性存儲器技術(shù)制造,與工業(yè)80c51 產(chǎn)品指令和引腳完 全兼容。片上flash允許程序存儲器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位cpu 和在系統(tǒng) 可編程flash,使得at89s52為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。 at89s52具有以下標(biāo)準功能: 8k字節(jié)flash,256字節(jié)ram, 32 位i/o 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。另外,at89s52 可降至0hz 靜態(tài)邏 輯操作,支
4、持2種軟件可選擇節(jié)電模式??臻e模式下,cpu 停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工 作。掉電保護方式下,ram內(nèi)容被保存,振蕩器被凍結(jié), 單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。 at89s52管腳圖 2,ds1302 ds1302 是美國dallas公司推出的一種高性能、低功耗、帶ram的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1
5、202的升級產(chǎn)品,與ds1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。 ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc1+0.2v時,vcc2給ds1302供電。當(dāng)vcc2小于vcc1時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存
6、器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc2.0v之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。sclk為時鐘輸入端。 ds1302的管腳圖 3,lcd1602 1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊它有若干個5x7或者5x11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位
7、之間有一個點距的間隔每行之間也有間隔起到了字符間距和行間距的作用,正因為如此所以他不能顯示圖形。 四,實驗的硬件設(shè)計 這次數(shù)字時鐘設(shè)計主要由四個模塊組成,分別是數(shù)據(jù)處理模塊,ds1302模塊,鍵盤輸入模塊和液晶顯示模塊。通過ds1302提供時間數(shù)據(jù),單片機處理數(shù)據(jù)并且通過液晶顯示時間。修改時間時,通過鍵盤來選擇修改位置和執(zhí)行增加或者減小的數(shù)量。原理圖: 五,實驗的軟件設(shè)計在系統(tǒng)設(shè)計中,除了硬件設(shè)計之外,軟件設(shè)計也是很重要的,它是系統(tǒng)工作的指揮者,因此系統(tǒng)軟件設(shè)計時要遵循結(jié)構(gòu)合理、操作性能好、具有一定的保護措施、兼容性好的設(shè)計原則來開發(fā)設(shè)計。數(shù)字時鐘軟件設(shè)計主要包括主程序模塊、lcd1602模塊
8、、ds1302模塊,鍵盤掃描模塊和修改時間模塊 。系統(tǒng)的流程圖:實物圖:1,整體結(jié)構(gòu)圖2,正常的日期顯示結(jié)果3,關(guān)掉電源再打開,時間不會失去4,修改時間的演示圖程序清單:#include#include#includesbit a0 = acc0;sbit a1 = acc1;sbit a2 = acc2;sbit a3 = acc3;sbit a4 = acc4;sbit a5 = acc5;sbit a6 = acc6;sbit a7 = acc7;sbit speaker = p36 ;/蜂鳴器sbit inc = p15 ;/增加鍵sbit dec = p16 ;/減少鍵sbit ch
9、g = p17 ;/修改鍵sbit rs=p20;/指令or數(shù)據(jù)寄存器選擇sbit rw=p21;/讀寫控制sbit en=p22;/使能控制sbit sclk=p10;/1302時鐘線sbit io=p11;/1302數(shù)據(jù)線sbit rst=p12;/1302復(fù)位線#define lclr 0x01/清屏#define mode 0x38/8位數(shù)據(jù),雙列顯示,5*7字形#define data p0/8位數(shù)據(jù)并行口#define on 0x0c/開顯示,關(guān)光標(biāo),光標(biāo)不閃爍#define addr_mode 0x06volatile unsigned char data timedata7 ;
10、/時間值unsigned char display_buffer116;/顯示緩沖區(qū)1 unsigned char display_buffer216;/顯示緩沖區(qū)2volatile unsigned int self_pos = 0 ;/自定義三角形標(biāo)志顯示位置變量volatile data wz = 0 ; /修改的位置值volatile data zeng = 0 ;/增加的值volatile data jian = 0 ;/減小的值unsigned char code self_table1=0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,/年0x1f,
11、0x11,0x1f,0x11,0x1f,0x11,0x15,0x17,/月0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00,/日;void delay_ms(unsigned char count) / 延時時間unsigned char i;for(;count0;count-)for(i=0;i0;speak_count-)speaker = 0 ;delay_ms(1) ;speaker = 1 ;delay_ms(3) ;/*忙檢測*/ void lcd1602_check_busy(void)data = 0xff;rs =0;rw =1;en =1;w
12、hile(data & 0x80) ;en =0 ;/*寫指令*/ void lcd1602_write_cmd(unsigned char cmd)lcd1602_check_busy();rs = 0 ;rw = 0 ;data = cmd ;en = 1 ;en = 0 ;/*寫數(shù)據(jù)*/ void lcd1602_write_data(unsigned char dat)lcd1602_check_busy();rs = 1 ;rw = 0 ;data = dat ;en = 1 ;en = 0 ; void lcd1602_init(void)unsigned char i ;lcd1
13、602_write_cmd(0x40);/cgram起始地址for(i=0;i40;i+)lcd1602_write_data(self_table1i);/寫入自定義字符lcd1602_write_cmd(mode) ;lcd1602_write_cmd(on) ;lcd1602_write_cmd(addr_mode) ;lcd1602_write_cmd(lclr) ; void lcd1602_set_postion(unsigned char x , unsigned char y)if(y2)y &= 0x01 ;/y值限定在01之間x &= 0x0f ;/x值限定在015之間if
14、(y = 0)x |= 0x40 ;/如果顯示是在第二行,則x的值加0x40x |= 0x80 ;/獲得x的值lcd1602_write_cmd(x) ;/寫入坐標(biāo)值到lcd void lcd1602_write_char(unsigned char x , unsigned char y , unsigned char chardata)lcd1602_set_postion(x,y) ;lcd1602_write_data(chardata) ; void lcd1602_write_string(unsigned char x , unsigned char y , unsigned c
15、har *string)lcd1602_set_postion(x,y) ;while(*string) != 0)lcd1602_write_data(*string) ;string+ ; void input(unsigned char inputdata)/輸入函數(shù)acc = inputdata ;io = a0 ; sclk = 1 ; sclk = 0 ;io = a1 ; sclk = 1 ; sclk = 0 ;io = a2 ; sclk = 1 ; sclk = 0 ;io = a3 ; sclk = 1 ; sclk = 0 ;io = a4 ; sclk = 1 ; s
16、clk = 0 ;io = a5 ; sclk = 1 ; sclk = 0 ;io = a6 ; sclk = 1 ; sclk = 0 ;io = a7 ; sclk = 1 ; sclk = 0 ;unsigned char output(void)/輸出函數(shù)io = 1 ;a0 = io ;sclk = 1 ; sclk =0 ; a1 = io ;sclk = 1 ; sclk =0 ; a2 = io ;sclk = 1 ; sclk =0 ; a3 = io ;sclk = 1 ; sclk =0 ; a4 = io ;sclk = 1 ; sclk =0 ; a5 = io ;
17、sclk = 1 ; sclk =0 ; a6 = io ;sclk = 1 ; sclk =0 ; a7 = io ;return(acc); void ds1302_write_byte(unsigned char cmd , unsigned char dat)/指定位置寫數(shù)據(jù)sclk = 0 ;rst = 0 ;rst = 1 ;input(cmd) ;input(dat) ;rst = 0 ;sclk = 1 ; unsigned char ds1302_read_byte(unsigned char cmd)/指定位置讀取數(shù)據(jù)unsigned char receivedata =
18、0 ;sclk = 0 ;rst = 0 ;rst = 1 ;input(cmd) ;receivedata = output() ;rst = 0 ;sclk = 1 ;return(receivedata) ; void ds1302_init()/設(shè)置1302的時間if(ds1302_read_byte(0xc9) != 0xf0) ds1302_write_byte(0x8e,0x00) ;/允許寫操作ds1302_write_byte(0xc8,0xf0) ; /寫入初始化標(biāo)志,系統(tǒng)上電后檢測此標(biāo)志,即此子函數(shù)只會在第一次初始化一次。ds1302_write_byte(0x8c,0x
19、08) ;/年ds1302_write_byte(0x8a,0x05) ;/星期ds1302_write_byte(0x88,0x09) ;/月ds1302_write_byte(0x86,0x19) ;/日ds1302_write_byte(0x84,0x12) ;/時ds1302_write_byte(0x82,0x00) ;/分ds1302_write_byte(0x80,0x00) ;/秒ds1302_write_byte(0x90,0xa5) ;/充電ds1302_write_byte(0x8e,0x80) ;/禁止寫操作 void readds1302()/讀取時間到timedat
20、atimedata0 = ds1302_read_byte(0x8d) ;/年timedata1 = ds1302_read_byte(0x89) ;/月timedata2 = ds1302_read_byte(0x87) ;/日timedata3 = ds1302_read_byte(0x85) ;/時timedata4 = ds1302_read_byte(0x83) ;/分timedata5 = ds1302_read_byte(0x81) ;/秒timedata6 = ds1302_read_byte(0x8b) ;/星期 void updata_buffer(void)/更新緩沖區(qū)的
21、時間 unsigned char i;display_buffer10 = 2 ;display_buffer11 = 0 ;display_buffer12 = timedata0/16+0x30 ;display_buffer13 = timedata0%16+0x30 ;display_buffer14 = 0 ;display_buffer15 = timedata1/16+0x30 ;display_buffer16 = timedata1%16+0x30 ;display_buffer17 = 1 ;display_buffer18 = timedata2/16+0x30 ;dis
22、play_buffer19 = timedata2%16+0x30 ;display_buffer110 = 2 ;display_buffer111 = ;switch(timedata6%16)case 1 : display_buffer112 = m ; display_buffer113 = o ;display_buffer114 = n ;break ;case 2 : display_buffer112 = t ; display_buffer113 = u ;display_buffer114 = e ;break ;case 3 : display_buffer112 =
23、w ; display_buffer113 = e ;display_buffer114 = d ;break ;case 4 : display_buffer112 = t ; display_buffer113 = h ;display_buffer114 = u ;break ;case 5 : display_buffer112 = f ; display_buffer113 = r ;display_buffer114 = i ;break ;case 6 : display_buffer112 = s ; display_buffer113 = a ;display_buffer1
24、14 = t ;break ;case 7 : display_buffer112 = s ; display_buffer113 = u ;display_buffer114 = n ;break ;default : break;display_buffer115= ;display_buffer20 = timedata3/16+0x30 ;display_buffer21 = timedata3%16+0x30 ;display_buffer22 = : ;display_buffer23 = timedata4/16+0x30 ;display_buffer24 = timedata
25、4%16+0x30 ;display_buffer25 = : ;display_buffer26 = timedata5/16+0x30 ;display_buffer27 = timedata5%16+0x30 ;for(i=0;i8;i+)display_buffer28+i= ; void display_buffer(void)unsigned char i ;lcd1602_write_cmd(0x80) ;for(i=0;i16;i+)lcd1602_write_data(display_buffer1i);lcd1602_write_cmd(0xc0) ;for(i=0;i16
26、;i+)lcd1602_write_data(display_buffer2i);void key_sm(void) if(chg = 0)delay_ms(20);if(chg=0)speakers(5);wz+;if(wz=8)wz=1;while(!chg);if(dec = 0 )delay_ms(20) ;while(!dec) ;speakers(5) ;zeng+;if(inc = 0)delay_ms(20) ;while(!inc) ;speakers(5) ;jian+;void change(void)unsigned char i ,j;if(1)lcd1602_wri
27、te_cmd(0x0f) ;/開光標(biāo)lcd1602_write_cmd(0x80) ;/地址碼for(i=0;i15;i+)lcd1602_write_data(display_buffer1i) ;lcd1602_write_cmd(0xc0) ;for(j=0;j8;j+)lcd1602_write_data(display_buffer2j) ;if(wz = 1)unsigned char item ;lcd1602_write_cmd(0x83) ;if(zeng !=0 )item = ds1302_read_byte(0x8d) ;item=(item/16)*10+item%1
28、6;item+;if(item=100)item=0;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x8c,item);zeng = 0 ;if(jian != 0)item = ds1302_read_byte(0x8d) ;item=(item/16)*10+item%16;item-;if(item 0)item=99;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(
29、0x8c,item);jian = 0 ;else if(wz = 2)unsigned char item ;lcd1602_write_cmd(0x86) ;if(zeng !=0 )item = ds1302_read_byte(0x89) ;item=(item/16)*10+item%16;item+;if(item=13)item=1;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x88,item);zeng = 0 ;if(jian != 0)item = ds130
30、2_read_byte(0x89) ;item=(item/16)*10+item%16;item-;if(item = 0)item=12;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x88,item);jian = 0 ;else if(wz = 3)unsigned char item ;lcd1602_write_cmd(0x89) ;if(zeng !=0 )item = ds1302_read_byte(0x87) ;item=(item/16)*10+item%16
31、;item+;if(item=32)item=1;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x86,item);zeng = 0 ;if(jian != 0)item = ds1302_read_byte(0x87) ;item=(item/16)*10+item%16;item-;if(item = 0)item=31;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(
32、0x86,item);jian = 0 ;else if(wz = 4)unsigned char item ;lcd1602_write_cmd(0x8e) ;if(zeng !=0 )item = ds1302_read_byte(0x8b) ;item=(item/16)*10+item%16;item+;if(item=8)item=1;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x8a,item);zeng = 0 ;if(jian != 0)item = ds1302
33、_read_byte(0x8b) ;item=(item/16)*10+item%16;item-;if(item = 0)item=7;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x8a,item);jian = 0 ;else if(wz = 5)unsigned char item ;lcd1602_write_cmd(0xc4) ;if(zeng !=0 )item = ds1302_read_byte(0x85) ;item=(item/16)*10+item%16;item+;if(item=24)item=0;item=(item/10)*16+item%10;ds1302_write_byte(0x8e,0x00);/允許寫操作ds1302_write_byte(0x84,item);zeng = 0 ;if(jian != 0)item = ds1302_read_byte(0x85) ;item=(item/16)*10+item%16;item-;if(item = -1)item=23;item=(item/10)*16+item%
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學(xué)自我檢測試卷A卷附答案
- 2024年度山西省高校教師資格證之高等教育法規(guī)通關(guān)提分題庫及完整答案
- 2024年合成膠粘劑項目投資申請報告代可行性研究報告
- 2024年私人損害賠償自愿協(xié)議
- 高校食品專業(yè)實驗室安全管理探究
- 新形勢下企業(yè)經(jīng)濟管理創(chuàng)新思路探究
- 2024年商業(yè)樓宇化糞池建造協(xié)議范例
- 2024年加工區(qū)租賃協(xié)議
- 2024年度工程地質(zhì)勘察協(xié)議范本
- 2024屆安徽省安大附中高三下學(xué)期第一次診斷測試數(shù)學(xué)試題
- 湖北省危險廢物監(jiān)管物聯(lián)網(wǎng)系統(tǒng)管理計劃填報說明
- 大學(xué)生就業(yè)指南攻略課件
- 智能算力數(shù)據(jù)中心風(fēng)險評估與應(yīng)對措施
- 八年級數(shù)學(xué)上冊第一學(xué)期期中綜合測試卷(湘教版 2024年秋)
- 公司法教案第四章公司法律制度
- 知道網(wǎng)課智慧《睡眠醫(yī)學(xué)(廣州醫(yī)科大學(xué))》測試答案
- 電氣設(shè)備故障預(yù)測與健康管理分析篇
- 中考語文知識點專題27 名著《紅星照耀中國》知識點
- 門診導(dǎo)診課件
- 河北省衡水中學(xué)2022-2023學(xué)年高一上學(xué)期綜合素質(zhì)檢測二數(shù)學(xué)試題含解析
- 教科版小學(xué)科學(xué)四年級下冊說課稿全套
評論
0/150
提交評論