




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、. . . . 交通學院 基于單片機的電子鐘設計 系 部:信息工程系 學生: 朱珂鋒 指導教師:海 專 業(yè):電子信息工程技術(shù)應用 班 級:電信二班學 號:0243 摘 要51系列單片機是各單片機中最為典型和最有代表性的一種。由RAM ,ROM,CPU構(gòu)成,定時,計數(shù)和多種接口于一體的微控制器。本次設計的數(shù)字電子鐘采用了AT89C51芯片進行,由8位8段數(shù)碼管進行動態(tài)刷新顯示,有四個獨立按鍵。可以進行秒、分、時的調(diào)整,且操作簡單,計時誤差小,顯示亮度高,具有良好的實用價值。這次課程設計通過對它的學習,應用,從而達到學習、設計、開發(fā)軟、硬的能力。應用Proteus軟件實現(xiàn)了單片機電子時鐘系統(tǒng)的設計
2、與仿真。該方法仿真效果真實、準確,節(jié)省了硬件資源。關(guān)鍵詞 數(shù)字電子鐘;單片機;C語言目 錄1 設計課題題目、目的要求與總體方案介紹41.1 設計課題題目41.2 設計課題目的41.3 設計課題要求與工作原理說明42 數(shù)字電子鐘硬件系統(tǒng)的設計52.1 硬件總體設計52.2 數(shù)字電子鐘硬件系統(tǒng)主要模塊功能簡要介紹52.3 數(shù)字電子鐘電路原理圖、PCB圖、元器件布局圖62.4 數(shù)字電子鐘元器件清單73 數(shù)字電子鐘軟件系統(tǒng)的設計83.1 數(shù)字電子鐘軟件系統(tǒng)主要模塊功能簡要介紹83.2 數(shù)字電子鐘軟件系統(tǒng)程序流程框圖83.3 數(shù)字電子鐘軟件系統(tǒng)程序清單94 設計結(jié)論、仿真結(jié)果、誤差分析124.1 數(shù)字電
3、子鐘的仿真結(jié)果124.2 數(shù)字電子鐘的誤差分析134.3 設計重點、難點,體會與不足之處13參考文獻14致15附錄161 設計課題題目、目的要求與總體方案介紹1.1 設計課題題目基于單片機的電子鐘設計。1.2 設計課題目的鞏固單片機技術(shù)課程所學的有關(guān)知識。通過硬件設計、軟件設計,使學生掌握用單片機組成應用系統(tǒng)的方法,提高軟件設計能力。掌握單片機的定時/計數(shù)器的編程和使用方法。進一步熟悉單片機功能部件的應用。1.3 設計課題要求與工作原理說明要求自己做出原理圖設計。并且要擴展一片8255芯片作顯示接口,分別輸出段碼和位碼;用P1口中的兩根口線作功能鍵??衫盟膫€LED分時顯示當前時間和日歷。兩個
4、按鍵的功能:A鍵用于調(diào)時,圍023,0為 24點,每按一次時加1;B鍵用于調(diào)分,圍059,0為60分,每按一次分加1。 單片機程序設計、調(diào)試。本課題采用單片機部定時器,用軟件對其進行秒、分、時的計數(shù),單片機無法產(chǎn)生1s的定時時間,但是可以用硬件定時和軟件計數(shù)相結(jié)合的方法實現(xiàn),采用中斷方式,即通過中斷服務程序進行計數(shù)器溢出次數(shù)的累計,把定時器/計數(shù)器設定為62.5ms,計數(shù)溢出16次就可以得到1s,計60次為1分,60分計60次則為1小時,然后通過數(shù)碼管動態(tài)刷新顯示出來,再設四個按鍵進行時間的調(diào)整,一個鍵用作啟動/調(diào)整鍵,其余三個分別用于時、分、秒的調(diào)整。通過理論設計和實物制作解決相應的實際問題
5、,鞏固和運用在單片機C語言應用程序技術(shù)中所學的理論知識和實驗技能,掌握單片機應用系統(tǒng)的一般設計方法,提高設計能力和實踐動手能力,為以后從事電子電路設計、研發(fā)電子產(chǎn)品打下良好的基礎(chǔ)。2 數(shù)字電子鐘硬件系統(tǒng)的設計2.1 硬件總體設計硬件系統(tǒng)總體設計如圖2.1所示。圖2.1 硬件系統(tǒng)總體設計2.2 數(shù)字電子鐘硬件系統(tǒng)主要模塊功能簡要介紹(1) 功能芯片:本次設計采用AT89C51芯片,低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。256字節(jié)RAM, 32 位I/O 口線,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。價格較低,能滿足本次設計的要求。(2) 電源和復位模塊
6、:AT89C51需5V電壓,所以可以采用USB接口的5V電源對其供電,復位電路可采用上電復位、按鍵電平復位、按鍵脈沖復位3種,本次采用按鍵電平復位。如電路原理圖中的電源和復位模塊。(3) 顯示模塊:該模塊由8位8段共陽極數(shù)碼管組成,由8個PNP型三極管分別驅(qū)動其發(fā)光,從左至右位控分別接于單片機的P2.7-P2.0中上,段控a-dP接于單片機的P0.0-P0.7口上,使用動態(tài)顯示從右向左循環(huán)點亮每一位數(shù)碼管。如電路原理圖中的數(shù)碼管電路。(4) 鍵盤模塊:鍵盤由8個獨立式按鍵組成,S0-S7鍵分別接在單片機的P1.0-P1.7口,并由上拉電阻上拉使其成為電位為高。如電路原理圖中的獨立鍵盤模塊。(5
7、) 時鐘模塊:為了保證同步工作方式的思想,單片機必須有時鐘信號,以使其系統(tǒng)在時鐘信號的控制下按時序協(xié)調(diào)工作。如電路原理圖中的晶振電路。2.3 數(shù)字電子鐘電路原理圖、PCB圖、元器件布局圖2.31數(shù)字電子鐘電路原理圖2.4 數(shù)字電子鐘元器件清單元器件名稱規(guī)格數(shù)量STC11F02 1DS1302 1晶振12MHz 2數(shù)碼管 874HC5951三極管 90129蜂鳴器1小按鍵4下載口座子十芯118b20溫度傳感器1六腳開關(guān)1USB電源線加接口1電阻 2001電阻4.7K1電阻1K3電阻 47024電解電容220F1瓷片電容33pF2排阻10K2短路帽3杜邦線8p1PCB板子1底座3數(shù)字電子鐘元器件清
8、單3 數(shù)字電子鐘軟件系統(tǒng)的設計3.1 數(shù)字電子鐘軟件系統(tǒng)主要模塊功能簡要介紹(1) 主程序:主程序的主要功能是進行定時器/計數(shù)器,顯示緩沖區(qū)的初始化,顯示,以與判斷是否有功能鍵按下,判斷按下的鍵并調(diào)相應的鍵功能程序。(2) 鍵功能程序:鍵功能程序的主要功能是執(zhí)行對應的功能,Menu鍵為啟動/調(diào)整鍵,第一次按下則由待機狀態(tài)進入運行狀態(tài)啟動時鐘,從00-00-00開始顯示,然后按下為奇數(shù)則暫停,進入調(diào)時狀態(tài),按下Sec鍵則秒加1,按下Min鍵則分加1,按下Hour鍵則時加1;若按下為偶數(shù)則進入時鐘運行狀態(tài)。(3) 中斷服務程序:中斷服務程序的主要功能是進行計時操作,程序開始先判斷計數(shù)溢出是否滿了1
9、6次,若不滿16次則表明沒有達到最小計時單位秒,則中斷返回;若滿16次表明已達到最小計時單位秒,則程序斷續(xù)向下執(zhí)行,進行分和時的計時。(4) 顯示子程序:顯示程序的主要功能是將顯示緩沖區(qū)的段控碼正確的顯示在數(shù)碼管上,采用動態(tài)顯示,從右向左循環(huán)點亮每一位數(shù)碼管。(5) 鍵掃子程序:鍵掃子程序的主要功能是判斷是否有鍵按下,是哪個鍵按下,并將鍵值保存在20H中。3.2 數(shù)字電子鐘軟件系統(tǒng)程序流程框圖圖3.1 計時1秒子程序流程框圖 圖3.2 顯示子程序流程框圖3.3 數(shù)字電子鐘軟件系統(tǒng)程序清單/#include#include#include #define uchar unsigned char#
10、define uint unsigned intsbit sck=P10; /移位時鐘信號輸入端 sbit rck=P12; /鎖存信號輸入端sbit da=P11; /數(shù)據(jù)信號輸入端uchar code tab=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff;uchar code table=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xbf;sbit DS1302_CLK=P35;sbit DS1302_IO=P36;sbit DS1302_RST=P37;sbit s1=P13;sbit
11、s2=P14;sbit s3=P15;uchar second,minute,hour,num;/#/名稱:wr595()向595 發(fā)送一個字節(jié)的數(shù)據(jù)/功能:向595 發(fā)送一個字節(jié)的數(shù)據(jù)(先發(fā)低位)/#void wr595(uchar wrdat)uchar i;sck=rck=0;for(i=8;i0;i-)/循環(huán)八次,寫一個字節(jié)da=wrdat&0x80; /發(fā)送BIT0 位sck=1;_nop_();sck=0;wrdat0;i-) for(j=110;j0;j-);/*void wr5951(uchar wrdat)uchar i;for(i=8;i0;i-)/循環(huán)八次,寫一個字節(jié)lc
12、k1=lck2=0;da=wrdat&0x80; /發(fā)送BIT0 位wrdat0;i-) DS1302_IO=(bit)(byte1&0x01); DS1302_CLK=1; _nop_(); DS1302_CLK=0; byte1=1; uchar readshuju() uchar i,ucdat=0; for(i=8;i0;i-) DS1302_IO=1; ucdat=1; if(DS1302_IO)ucdat|=0x80; DS1302_CLK=1; _nop_(); DS1302_CLK=0; return(ucdat);void write_ds1302(uchar addr,uc
13、har dat) /給DS1302寫指令 DS1302_RST=0; _nop_(); DS1302_CLK=0; _nop_(); DS1302_RST=1; writeshuju(addr); _nop_(); writeshuju(dat); DS1302_CLK=1; _nop_(); DS1302_RST=0;uchar read_ds1302(uchar addr) uchar time; DS1302_RST=0; _nop_(); DS1302_CLK=0; _nop_(); DS1302_RST=1; writeshuju(addr); time=readshuju(); D
14、S1302_CLK=1; _nop_(); DS1302_RST=0; return(time);void chushi_ds1302() write_ds1302(0x84,0x12); /時 write_ds1302(0x82,0x00); /分 write_ds1302(0x80,0x00); /秒 write_ds1302(0x8e,0x80); / wp為1關(guān)閉寫操作保存寫的數(shù)據(jù) void read_time() /讀時間 second=read_ds1302(0x81); second=(second/16)*10+second%16); minute=read_ds1302(0x
15、83); minute=(minute/16)*10+minute%16); hour=read_ds1302(0x85); hour=(hour/16)*10+hour%16);void display() /時間顯示 uchar hour0,hour1,minute0,minute1,second0,second1; hour0=hour/10; hour1=hour%10; minute0=minute/10; minute1=minute%10; second0=second/10; second1=second%10; wr595(table0); wr595(tabhour0);
16、rck=1; delayms(1); rck=0; wr595(table1); wr595(tabhour1); rck=1; delayms(1); rck=0; wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(table3); wr595(tabminute0); rck=1; delayms(1); rck=0; wr595(table4); wr595(tabminute1); rck=1; delayms(1); rck=0; P0=0; wr595(table5); wr595(table8); rck=
17、1; delayms(1); rck=0; wr595(table6); wr595(tabsecond0); rck=1; delayms(1); rck=0; wr595(table7); wr595(tabsecond1); rck=1; delayms(1); rck=0;void jiajia() /加加鍵if(s2=0)delayms(5);if(s2=0) while(s2=0) display(); if(num=1) hour+; if(hour=24) hour=0; write_ds1302(0x8e,0x00); /調(diào)時 write_ds1302(0x84,(hour/
18、10)4|hour%10); write_ds1302(0x8e,0x80); if(num=2) minute+; if(minute=60) minute=0; write_ds1302(0x8e,0x00); /調(diào)分 write_ds1302(0x82,(minute/10)4|minute%10); write_ds1302(0x8e,0x80); if(num=3) second+; if(second=60) second=0; write_ds1302(0x8e,0x00); /調(diào)秒 write_ds1302(0x80,second); write_ds1302(0x8e,0x8
19、0); void jianjian()if(s3=0) delayms(5);if(s3=0) while(!s3)display();if(num=1) hour-; if(hour=-1) hour=23; write_ds1302(0x8e,0x00); /調(diào)時 write_ds1302(0x84,(hour/10)4|hour%10); write_ds1302(0x8e,0x80);if(num=2) minute-; if(minute=-1) minute=59; write_ds1302(0x8e,0x00); /調(diào)分 write_ds1302(0x82,(minute/10)
20、4|minute%10); write_ds1302(0x8e,0x80);if(num=3) second-; if(second=-1) second=59; write_ds1302(0x8e,0x00); /調(diào)秒 write_ds1302(0x80,(second/10)4|second%10); write_ds1302(0x8e,0x80); void sheding()/設定鍵 if(s1=0) delayms(5); if(s1=0) while(!s1) display(); num+; if(num=4) num=0; /*void key() uchar i; if(s1
21、=0) delayms(5); if(s1=0) while(!s1)display(); num+; while(num=1) for(i=0;i30;i+) wr595(table0); wr595(tabhour/10); rck=1; delayms(1); rck=0; sheding(); wr595(table1); wr595(tabhour%10); rck=1; delayms(1); rck=0; wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(table3); wr595(tabminute/1
22、0); rck=1; delayms(1); rck=0; jiajia(); wr595(table4); wr595(tabminute%10); rck=1; delayms(1); rck=0; wr595(table5); wr595(table8); rck=1; delayms(1); rck=0; wr595(table6); wr595(tabsecond/10); rck=1; delayms(1); rck=0; jianjian(); wr595(table7); wr595(tabsecond%10); rck=1; delayms(1); rck=0; for(i=
23、0;i30;i+) wr595(table0); wr595(tab10); rck=1; delayms(1); rck=0; wr595(table1); wr595(tab10); rck=1; delayms(1); rck=0; sheding(); wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(table3); wr595(tabminute/10); rck=1; delayms(1); rck=0; wr595(table4); wr595(tabminute%10); rck=1; delayms(
24、1); rck=0; wr595(table5); wr595(table8); rck=1; delayms(1); rck=0; jiajia(); wr595(table6); wr595(tabsecond/10); rck=1; delayms(1); rck=0; wr595(table7); wr595(tabsecond%10); rck=1; delayms(1); rck=0; jianjian(); /* while(num=2) for(i=0;i30;i+) wr595(table0); wr595(tabhour/10); rck=1; delayms(1); rc
25、k=0; wr595(table1); wr595(tabhour%10); rck=1; delayms(1); rck=0; sheding(); wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(table3); wr595(tabminute/10); rck=1; delayms(1); rck=0; wr595(table4); wr595(tabminute%10); rck=1; delayms(1); rck=0; jiajia(); wr595(table5); wr595(table8); rck=
26、1; delayms(1); rck=0; wr595(table6); wr595(tabsecond/10); rck=1; delayms(1); rck=0; wr595(table7); wr595(tabsecond%10); rck=1; delayms(1); rck=0; jianjian(); for(i=0;i30;i+) wr595(table0); wr595(tabhour/10); rck=1; delayms(1); rck=0; wr595(table1); wr595(tabhour%10); rck=1; delayms(1); rck=0; shedin
27、g(); wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(table3); wr595(tab10); rck=1; delayms(1); rck=0; jiajia(); wr595(table4); wr595(tab10); rck=1; delayms(1); rck=0; wr595(table5); wr595(table8); rck=1; delayms(1); rck=0; wr595(table6); wr595(tabsecond/10); rck=1; delayms(1); rck=0; w
28、r595(table7); wr595(tabsecond%10); rck=1; delayms(1); rck=0; jianjian(); /* while(num=3) for(i=0;i30;i+) wr595(table0); wr595(tabhour/10); rck=1; delayms(1); rck=0; wr595(table1); wr595(tabhour%10); rck=1; delayms(1); rck=0; sheding(); wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(ta
29、ble3); wr595(tabminute/10); rck=1; delayms(1); rck=0; wr595(table4); wr595(tabminute%10); rck=1; delayms(1); rck=0; jiajia(); wr595(table5); wr595(table8); rck=1; delayms(1); rck=0; wr595(table6); wr595(tabsecond/10); rck=1; delayms(1); rck=0; wr595(table7); wr595(tabsecond%10); rck=1; delayms(1); r
30、ck=0; jianjian(); for(i=0;i30;i+) wr595(table0); wr595(tabhour/10); rck=1; delayms(1); rck=0; sheding(); wr595(table1); wr595(tabhour%10); rck=1; delayms(1); rck=0; wr595(table2); wr595(table8); rck=1; delayms(1); rck=0; wr595(table3); wr595(tabminute/10); rck=1; delayms(1); rck=0; wr595(table4); wr
31、595(tabminute%10); rck=1; delayms(1); rck=0; jiajia(); wr595(table5); wr595(table8); rck=1; delayms(1); rck=0; wr595(table6); wr595(tab10); rck=1; delayms(1); rck=0; wr595(table7); wr595(tab10); rck=1; delayms(1); rck=0; jianjian(); write_ds1302(0x8e,0x00); write_ds1302(0x80,(second/10)4|second%10);
32、 write_ds1302(0x8e,0x80); /#/主函數(shù)/#void main(void) chushi_ds1302(); while(1) read_time(); display(); key();4 設計結(jié)論、仿真結(jié)果、誤差分析4.1 數(shù)字電子鐘的仿真結(jié)果本次設計的數(shù)字電子鐘有三種狀態(tài):開始狀態(tài),時鐘運行狀態(tài),時鐘調(diào)整狀態(tài)。它們分別如圖4.1、圖4.2、圖4.3所示。圖4.1 開始狀態(tài)仿真結(jié)果圖4.2時鐘運行狀態(tài)仿真結(jié)果圖4.3 時鐘調(diào)整狀態(tài)仿真結(jié)果4.2 數(shù)字電子鐘的誤差分析雖說采用軟件方式來產(chǎn)生1s的基本時間,然而定時器/計數(shù)器本身不能產(chǎn)生標準的1s定時,產(chǎn)生一個標準時間之后進行循環(huán)計數(shù)得到1s,但CPU執(zhí)行代碼需要1-2s的時間,因此產(chǎn)生的1s,1分,1小時,都會略大于標準的時間。此外,單片機也易受外界環(huán)境的影響,比如溫度、濕度等干擾。故應該讓單片機工作在適宜的環(huán)境下,同時采用實時時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提高班級工作效率的實踐經(jīng)驗計劃
- 期貨合約交易策略優(yōu)化考核試卷
- 私人房屋 合同范本
- 保險理賠部工作總結(jié)與患者投訴處理計劃
- 幕墻的合同范本
- 征兵體檢合同范本
- 科技產(chǎn)業(yè)未來趨勢與投資方向
- 修建護欄合同范本
- 小班環(huán)保知識宣傳與實踐計劃
- 如何進行市場需求分析計劃
- 精雕JDPaint快捷鍵大全
- 燈泡貫流式機組基本知識培訓ppt課件
- 小學數(shù)學四年級下冊培優(yōu)補差記錄
- 人教版三年級下冊體育與健康教案(全冊教學設計)
- DB61∕T 5006-2021 人民防空工程標識標準
- 土壤學習題與答案
- 產(chǎn)品結(jié)構(gòu)設計(課堂PPT)
- 第九課_靜止的生命
- 尖尖的東西我不碰(課堂PPT)
- 工程勘察和設計承攬業(yè)務的范圍
- 數(shù)字化影像與PACS教學大綱
評論
0/150
提交評論