




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)制作萬年歷方案1.1 本課題主要的研究工作本項(xiàng)目是一種基于at89c51片機(jī)的萬年歷設(shè)計(jì),本方案以at89c51片機(jī)作為主控核心,與時(shí)鐘芯片ds1302、溫度ds18b20按鍵、lcd1602液晶顯示器組成硬件系統(tǒng)。在硬件系統(tǒng)中設(shè)有獨(dú)立按鍵和lcd1602顯示器,能顯示豐富的信息,根據(jù)使用者的需要可以隨時(shí)對時(shí)間進(jìn)行更改,讀取方便、顯示直觀。當(dāng)程序執(zhí)行后,lcd顯示即時(shí)時(shí)間、年月日、星期。設(shè)置4個(gè)操作鍵:k1:選擇鍵;k2:加鍵;k3:減鍵;k4:確定鍵。1本設(shè)計(jì)的主要內(nèi)容:(1)熟悉萬年歷各模塊的工作原理;(2)選擇適當(dāng)?shù)男酒驮骷?,確定系統(tǒng)電路,繪制電路原理圖,尤其是各接口電路;(3
2、)熟悉單片機(jī)使用方法和c語言,編寫出相應(yīng)模塊的應(yīng)用程序;(4)分別在各自的模塊中調(diào)試出對應(yīng)的功能,在proteus軟件上進(jìn)行仿真,并實(shí)現(xiàn)各種功能。2設(shè)計(jì)目標(biāo):萬年歷實(shí)現(xiàn)以下三個(gè)功能:(1)具有年、月、日、星期、時(shí)、分、秒等功能;(2)具備年、月、日、星期、時(shí)、分、秒校準(zhǔn)功能,具備自動(dòng)調(diào)節(jié)閏年的功能;(3)具有與即時(shí)時(shí)間同步的功能。(4)具有溫度顯示功能本設(shè)計(jì)是基于51系列的單片機(jī)進(jìn)行的電子萬年歷設(shè)計(jì),可以顯示年月日時(shí)分秒及周信息,具有可調(diào)整日期和時(shí)間功能。1.2 系統(tǒng)硬件概述本電路是以stc89c51單片機(jī)為控制核心,該芯片具有在線編程功能,功耗低,能在3.3v的超低壓下工作;時(shí)鐘芯片采用ds
3、1302,它是一款高性能、低功耗、自帶ram的實(shí)時(shí)時(shí)鐘芯片,具有掉電自動(dòng)保存功能??勺詣?dòng)對秒、分、時(shí)、日、周、月、年進(jìn)行計(jì)數(shù),具有閏年補(bǔ)償功能,而且精度高位的ram做為數(shù)據(jù)暫存區(qū),工作電壓2.5v5.5v范圍內(nèi),2.5v時(shí)耗電小于300na。顯示模塊采用1602顯示屏,它內(nèi)置192種字符,可顯示32個(gè)符號或數(shù)字,清晰可見,而且功率消耗小壽命長抗干擾能力強(qiáng)。其工作電壓為5v。1.3單片機(jī)主控制模塊的設(shè)計(jì)一個(gè)典型的單片機(jī)最小系統(tǒng)一般由時(shí)鐘電路、復(fù)位電路、電源指示燈和外部擴(kuò)展接口等部分組成。單片機(jī)的最小系統(tǒng)如下圖所示,單片機(jī)的xtal0和xtal1引腳用于連接晶振電路。reset為復(fù)位引腳,連接復(fù)位
4、電路,用于初始化mcu1.4顯示模塊的設(shè)計(jì)本設(shè)計(jì)中要對時(shí)間、溫度進(jìn)行顯示,液晶顯示屏1602模塊作為輸出。1602字符型lcd通常有14條引腳線或16條引腳線的lcd,多出來的2條線是背光電源線。它可以顯示兩行,每行16個(gè)字符,采用單+5v電源供電,外圍電路配置簡單。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“a”的代碼是01000001b(41h),顯示時(shí)模塊把地址41h中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“a”。lcd1602引腳功能:1vss一般接地2vdd接電源(+5v)3v0液晶顯示器對比度調(diào)整端。
5、4rsrs為寄存器選擇。5r/wr/w為讀寫信號線。6ee(或en)端為使能(enable)端,下降沿使能。1602主要管腳介紹:v0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高,對比度過高時(shí)會(huì)產(chǎn)生鬼影使用時(shí)可以通過一個(gè)10k的電位器調(diào)整對比度。rs為寄存器選擇端,高電平時(shí)選擇數(shù)據(jù)寄存器,低電平時(shí)選擇指令寄存器。rw為讀寫信號線端,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)rs和rw共同為低電平時(shí)可以寫入指令或者顯示地址;當(dāng)rs為高電平rw 為低電平時(shí)可以寫入數(shù)據(jù)。e為使能端,當(dāng)e端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。將l1602的rs端和p2.0,r/w端和p2
6、.1, e 端和p2.2相連,當(dāng)rs=0時(shí),對lcd1602寫入指令;當(dāng)rs=1時(shí),對lcd1602寫入數(shù)據(jù)。當(dāng)r/w端接高電平時(shí)芯片處于讀數(shù)據(jù)狀態(tài),反之處于寫數(shù)據(jù)狀態(tài),e端為使能信號端。當(dāng)r/w為高電平,e端也為高電平,rs為低電平時(shí),液晶顯示屏顯示需要顯示的示數(shù)。顯示模塊電路圖如圖3所示:圖31.5獨(dú)立式鍵盤設(shè)計(jì)獨(dú)立式鍵盤每個(gè)鍵單獨(dú)占用一根i/o口線。鍵盤的工作方式可分為編程控制方式和中斷控制方式。cpu在一個(gè)工作周期內(nèi),利用完成其他任務(wù)的空余時(shí)間,調(diào)用鍵盤掃描子程序,經(jīng)程序查詢,若無鍵操作,則返回;若有鍵操作,則進(jìn)而判斷是哪個(gè)鍵,并執(zhí)行相應(yīng)的鍵處理程序。這種方式為編程掃描方式。由于單片機(jī)
7、在正常應(yīng)用過程中,可能會(huì)經(jīng)常進(jìn)行鍵操作,因而編程控制方式使cpu經(jīng)常處于工作狀態(tài), 在進(jìn)行本次設(shè)計(jì)中,只涉及到了選擇、加、減、確定四個(gè)功能。因此采用獨(dú)立式鍵盤。2電路設(shè)計(jì)框圖顯示模塊lcd1602溫度模塊ds18b20at89c51主控制模 塊 鍵盤模塊時(shí)鐘模塊ds13023程序流程框圖初始化開始讀、寫日期、時(shí)間和溫度分離日期時(shí)間溫度顯示值顯示子程序日期、時(shí)間修改子程序定時(shí)鬧鈴子程序農(nóng)歷自動(dòng)更新子程序返 回閏月子程開始控制鍵有效,進(jìn)入年調(diào)整程序等待按鍵程序加鍵有效減鍵有效年加1減加1控制鍵有效,進(jìn)入日調(diào)整程序等待按鍵程序加鍵有效減鍵有效日加1日減1控制鍵有效,進(jìn)入月調(diào)整程序等待按鍵程序加鍵有效
8、減鍵有效月加1月減1控制鍵有效,進(jìn)入星期調(diào)整程序等待按鍵程序加鍵有效減鍵有效星期加1星期減1控制鍵有效,進(jìn)入分鐘調(diào)整程序等待按鍵程序加鍵有效減鍵有效分鐘加1分鐘減1按鍵有效,跳出時(shí)間調(diào)整程序,進(jìn)入主循環(huán)程序控制鍵有效,進(jìn)入小時(shí)調(diào)整程序等待按鍵程序加鍵有效減鍵有效小時(shí)加1小時(shí)減14電路圖:5元件清單:元件個(gè)數(shù)元件個(gè)數(shù)ds13201ds18b201lcd1602(顯示器)1晶振32.768khz1瓷片電容220pf13v紐扣電池及底座1按鍵44.7k(9針)排阻1可調(diào)電阻1k26:程序設(shè)計(jì)1602液晶萬年歷程序-顯示年月日,時(shí)間,溫度(續(xù)) /*鍵盤識別程序*uchar key(void)ucha
9、r i,j;k1=0;i=p2;delay_key(500);j=p2;k1=1;if(i=j)switch(j) case 0xee: return(j);break; case 0xed: return(j);break; case 0xeb: return(j);break; case 0xe7: return(j);break; k2=0; i=p2; delay_key(500); j=p2; k2=1; if(i=j) switch(j) case 0xde: return(j);break; case 0xdd: return(j);break; case 0xdb: retur
10、n(j);break; case 0xd7: return(j);break; /=模式的判斷=uchar key_only(void) /此程序延時(shí)較長uchar i,j;k1=0;i=p2;delay_key(500);j=p2;k1=1;if(i=j)if(j=0xee)while(j=0xee) /直到放手 delay_key(50000); j=p2; delay_key(10000); return(0xee);elsereturn(0);elsereturn(0);/=指針移動(dòng)=void cursor_shift_right()if(addr=0x80+0x0f)addr=0x8
11、0+0x3f;elseif(addr=0x80+0x4f)addr=0x7f;lcd_write(lcd_command, +addr);/rightvoid cursor_shift_left() if(addr=0x80)addr=0x80+0x50;elseif(addr=0x80+0x40)addr=0x80+0x10;lcd_write(lcd_command, -addr);/left/*模式判斷*void mode(void)if(key_only()=0xee) +done; if(done=4) done=0; /=警報(bào)聲,分長短音=void alarm_voice(ucha
12、r i) uchar n; if(i=0)n=8;for(;n0;n-) ds1302_gettime(¤ttime); /獲取時(shí)鐘芯片的時(shí)間數(shù)據(jù) timetostr(¤ttime); /時(shí)間數(shù)據(jù)轉(zhuǎn)換液晶字符 datetostr(¤ttime); /日期數(shù)據(jù)轉(zhuǎn)換液晶字符 readtemp(); /開啟溫度采集程序 temp_to_str(); /溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符 gotoxy(10,1); /液晶字符顯示位置 print(tempbuffer); /顯示溫度 gotoxy(0,1); print(currenttime.timestring); /顯示
13、時(shí)間 gotoxy(0,0); print(currenttime.datestring); /顯示日期 gotoxy(15,0); print(week_value); /顯示星期 voice=voice;else if(i=1)n=10;for(;n0;n-) show_time(); voice=voice;else if(i=2)n=20;for(;n0;n-) ds1302_gettime(¤ttime); /獲取時(shí)鐘芯片的時(shí)間數(shù)據(jù) timetostr(¤ttime); /時(shí)間數(shù)據(jù)轉(zhuǎn)換液晶字符 readtemp(); /開啟溫度采集程序 temp_to_str
14、(); /溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符 gotoxy(10,1); /液晶字符顯示位置 print(tempbuffer); /顯示溫度 gotoxy(0,1); print(currenttime.timestring); /顯示時(shí)間 voice=voice;else if (i=3)n=16;for(;n0;n-) delay_key(10000); voice=voice;/*主函數(shù)*/main() uchar i,num,alarm_count=0;uchar code table=welcome chen611b; uchar code table1=clock+temp v1.0 ;fl
15、oat current_temp,max_temp_count,min_temp_count; guandz(); guanled(); lcd_initial(); /液晶初始化init_ds18b20( ) ; /ds18b20初始化initial_ds1302(); /時(shí)鐘芯片初始化max_temp_value(); /上限min_temp_value(); /下限done=2; /進(jìn)入默認(rèn)液晶顯示/=lcd_write(lcd_command,0x80+0x10);for(num=0;num16;num+) lcd_write(lcd_data,tablenum); delay_key
16、(50);lcd_write(lcd_command,0x80+0x51);for(num=0;num15;num+) lcd_write(lcd_data,table1num); delay_key(50);for(num=0;num16;num+) lcd_write(lcd_command,0x18); delay_key(300000);delay_key(50000000);/=while(1) alarm_count=0; mode();delay_key(20000);/*鬧鐘* if(done=0)lcd_write(lcd_command, 0x01); gotoxy(0,0
17、); lcd_write(lcd_command,0x80); print( alarm); /這個(gè)問題一直想不通,清屏后,為什么不會(huì)在指定的地方寫,我只好在前面加空格了 gotoxy(0,1); print(alarm_timestring); /顯示時(shí)間 while(done=0) mode(); lcd_setdisplay(lcd_show|lcd_flash); if(key()=0xed) cursor_shift_left(); delay_key(20000); else if(key()=0xd7) cursor_shift_right(); delay_key(20000)
18、; else if(key()=0xdd) alarm_add_time(); lcd_setdisplay(lcd_show|lcd_no_cursor); /開啟顯示, 無光標(biāo) gotoxy(0,1); print(alarm_timestring); /顯示時(shí)間 lcd_write(lcd_command,addr); lcd_setdisplay(lcd_show|lcd_flash); delay_key(8000); else if(key()=0xdb) alarm_sub_time(); lcd_setdisplay(lcd_show|lcd_no_cursor); /開啟顯示
19、, 無光標(biāo) gotoxy(0,1); print(alarm_timestring); /顯示時(shí)間 lcd_write(lcd_command,addr); lcd_setdisplay(lcd_show|lcd_flash); delay_key(8000); mode(); /*調(diào)整時(shí)間*if(done=1) /進(jìn)入調(diào)整模式 ds1302_gettime(&ad_currenttime); show_time_mode(); addr=0x80+0x0f; lcd_setdisplay(lcd_show|lcd_flash); while(done=1) mode(); if(key()=
20、0xed) cursor_shift_left(); delay_key(20000); else if(key()=0xd7) cursor_shift_right(); delay_key(20000); else if(key()=0xdd) add_time(&ad_currenttime); lcd_setdisplay(lcd_show|lcd_no_cursor); /開啟顯示, 無光標(biāo) show_time_mode(); lcd_write(lcd_command,addr); lcd_setdisplay(lcd_show|lcd_flash); delay_key(1000
21、); else if(key()=0xdb) sub_time(&ad_currenttime); lcd_setdisplay(lcd_show|lcd_no_cursor); /開啟顯示, 無光標(biāo) show_time_mode(); lcd_write(lcd_command,addr); lcd_setdisplay(lcd_show|lcd_flash); delay_key(1000); if(key()=0xeb) ad_ds1302(); lcd_setdisplay(lcd_show|lcd_no_cursor); show_time(); addr=0x80+0x0f; mo
22、de();/*正常時(shí)間溫度顯示*while(done=2) mode(); lcd_write(lcd_command, 0x01); lcd_setdisplay(lcd_show|lcd_no_cursor); show_time(); /液晶顯示數(shù)據(jù) addr=0x80+0x0f; for(i=0;i=max_temp_count) alarm_voice(2); else if(current_temp=min_temp_count) alarm_voice(0); mode();/=上下限溫度設(shè)置=if(done=3)lcd_write(lcd_command, 0x01); lcd
23、_setdisplay(lcd_show|lcd_flash);gotoxy(0,0);lcd_write(lcd_command,0x80); print( max_temp); /這個(gè)問題一直想不通,清屏后,為什么不會(huì)在指定的地方寫,我只好在前面加空格了gotoxy(12,0); print(max_temp); gotoxy(0,1); print(min_temp); gotoxy(12,1); /液晶字符顯示位置 print(min_temp);addr=0x80+0x4f; while(done=3) mode(); lcd_setdisplay(lcd_show|lcd_flash); if(key()=0xed) cursor_shift_left(); delay_key(20000); else if(key()=0xd7) cursor_shift_right(); delay_key(20000); else if(key()=0xdd) if(addr=0x80+0x0f|addr=0x80+0x0c|addr=0x80+0x0d) max_tempaddr-0x80-12+; else if(addr=0x80+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來出行超音速交通與空中城市交通網(wǎng)絡(luò)考核試卷
- 期貨交易操作風(fēng)險(xiǎn)管理的案例分析考核試卷
- 木片在建筑領(lǐng)域的應(yīng)用考核試卷
- 改性塑料粒子行業(yè)相關(guān)投資計(jì)劃提議范本
- 建筑裝飾材料智能應(yīng)用展示考核試卷
- 制漿和造紙專用設(shè)備行業(yè)相關(guān)投資計(jì)劃提議范本
- 大數(shù)據(jù)相關(guān)項(xiàng)目投資計(jì)劃書2范本
- 歌舞廳娛樂服務(wù)行業(yè)相關(guān)投資計(jì)劃提議范本
- 2024年邯鄲市武安市融媒體中心招聘考試真題
- 2024年亳州蒙城農(nóng)商銀行社會(huì)招聘考試真題
- 2025年舞蹈培訓(xùn)機(jī)構(gòu)學(xué)員培訓(xùn)合同范本
- 2025年保險(xiǎn)銷售業(yè)務(wù)人員崗位職業(yè)技能資格知識考試題(附答案)
- 兒科護(hù)理模擬考試題與參考答案
- 注意缺陷與多動(dòng)障礙疾病科普幼兒心理健康教育課件
- 水利行業(yè)知識培訓(xùn)課件
- 區(qū)域臨床檢驗(yàn)中心
- 2025-2030年中國人力資源服務(wù)行業(yè)全國市場開拓戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2024年07月長沙農(nóng)村商業(yè)銀行股份有限公司2024年招考3名信息科技專業(yè)人才筆試歷年參考題庫附帶答案詳解
- 中醫(yī)預(yù)防流感知識講座
- 事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)機(jī)制實(shí)施細(xì)則
- 《CT、MR的臨床應(yīng)用》課件
評論
0/150
提交評論