版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 單片機原理及系統(tǒng)課程設(shè)計</p><p> 專 業(yè): 自動化 </p><p> 班 級: </p><p> 姓 名: </p><p> 學(xué) 號: </p><p> 指導(dǎo)教師:
2、 </p><p> 2012 年 7月 1日</p><p><b> 1引言</b></p><p> 隨著單片機技術(shù)的飛速發(fā)展,在其推動下,現(xiàn)代的電子產(chǎn)品幾乎滲透到了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高。</p><p> 時間就是金錢
3、、時間就是生命、時間就是勝利……,準(zhǔn)確的掌握時間和分配時間對人們來說至關(guān)重要,時鐘是我們生活中必不可少的工具。電子時鐘的設(shè)計方法有很多種,但是基于單片機并通過LCD顯示的電子時鐘具有編程靈活、精確度高、便于攜帶、顯示直觀等特點。在這里我們將已學(xué)過的比較零散的數(shù)字電路的知識有機的、系統(tǒng)的聯(lián)系起來用于實際,來培養(yǎng)我們的綜合分析和設(shè)計電路,寫程序、調(diào)試電路和基于proteus仿真的能力。</p><p> 利用AT8
4、9C51單片機對時鐘芯片進行讀寫操作并通過1602字符液晶顯示實時時鐘信息,這樣便構(gòu)成了一個單片機電子時鐘。</p><p><b> 2 設(shè)計方案及原理</b></p><p> 2.1實現(xiàn)時鐘計時的基本方法</p><p> 利用MCS-51系列單片機的可編程定時/計數(shù)器、中斷系統(tǒng)來實現(xiàn)時鐘計數(shù)。</p><p&g
5、t; (1) 把定時器T/C0設(shè)為工作方式1,定時時間為50ms,則計數(shù)溢出20次即得時鐘計時最小單位秒;</p><p> (2) 采用中斷方式進行溢出次數(shù)累計,計滿20次為秒計時(1秒);</p><p> (3) 從秒到分和從分到時的計時是通過累加和數(shù)值比較實現(xiàn)。</p><p> 2.2電子時鐘的時間顯示</p><p>
6、用1個1602字符液晶顯示時分秒。顯示方式為:XX:XX:XX,由左向右分別為:時、分、秒,初值為23:59:59。完成顯示一秒01一直加至59,再恢復(fù)為00;分加1,由00至01,一直加至59,再恢復(fù)為00;時加1,由00至01,一直加至24,再回復(fù)為00。</p><p> 2.3電子時鐘的時間調(diào)整</p><p> 電子時鐘設(shè)置4個按鍵通過程序控制來完成電子時鐘的時間調(diào)整。SET
7、time鍵按下進入校時狀態(tài),時鍵用來調(diào)整小時,分鍵用來調(diào)整分鐘,OK鍵按下退出校時狀態(tài)。 </p><p><b> 3 硬件設(shè)計</b></p><p> 用AT89C51的P0口接LCD液晶顯示器的8個雙向數(shù)據(jù)口,P2.0、P2.1、P2.2分別接LCD的3個控制端RS、RW、E ,P1.0~P1.3分別接電子時鐘的校時按鍵,RST引腳接手動復(fù)位電路。<
8、;/p><p> 硬件電路連接圖如圖1所示。</p><p> 圖1 電子時鐘硬件仿真圖</p><p><b> 4軟件設(shè)計</b></p><p> 4.1軟件設(shè)計流程圖</p><p> 在編程上,首先進行了初始化,在主程序開始定義了一組固定單元用來儲存計數(shù)的時:分:秒,在顯示初值之
9、后,進入主循環(huán)。在主程序中,對不同的按鍵進行掃描,實現(xiàn)計時,時間調(diào)整,復(fù)位清零等功能,系統(tǒng)總流程圖如圖2所示。</p><p> 圖2 系統(tǒng)總流程圖</p><p> 電子時鐘的計時是利用MCS-51系列單片機的可編程定時/計數(shù)器、中斷系統(tǒng)來實現(xiàn)時鐘計數(shù)的,把定時器T/C0設(shè)為工作方式1,定時時間為50ms,則計數(shù)溢出20次即得時鐘計時最小單位秒,從秒到分和從分到時的計時是通過累加和
10、數(shù)值比較實現(xiàn)。</p><p> 電子鐘的計時、校時流程圖如圖3、4所示。</p><p> 圖4 校時程序流程圖 </p><p> 圖3 計時程序流程</p><p><b> 4.2仿真結(jié)果</b></p><p> 電子時鐘主要的設(shè)計要求是能夠?qū)崿F(xiàn)時鐘的一般功能,以及包括
11、時間的調(diào)整功能,這個基于單片機的電子時鐘基本上實現(xiàn)了上述功能,能夠通過時間調(diào)整電路對時間進行調(diào)整以及復(fù)位。</p><p> 基于proteus的電子時鐘仿真電路如圖5所示。</p><p> 圖5 電子時鐘的仿真結(jié)果圖</p><p><b> 5總結(jié)</b></p><p> 本次課程設(shè)計經(jīng)過了三個階段的程
12、序設(shè)計,第一階段是了解數(shù)字鐘的工作方式及其原理,確定設(shè)計的方向與方法以及確定設(shè)計過程中需要的軟件及工具。第二階段是熟悉用keil軟件編寫C語言的方法,這一階段側(cè)重于對C語言的基本掌,在這一階段中因為對C語言不太熟悉,所以顯得相對笨拙,進展也會相對緩慢。第三階段是學(xué)校單片機AT89C51芯片的工作原理,并設(shè)計原理圖,在Proteus里畫好原理圖然后加載程序后進行仿真驗證??傮w上,本設(shè)計已經(jīng)達到了預(yù)期目標(biāo),在軟件上做了相關(guān)的功能仿真和時序仿
13、真,最終實現(xiàn)了簡易的電子時鐘的正確運行。</p><p> 在本次課程設(shè)計中,最初遇到了很多的棘手問題,比如如何實現(xiàn)定時器的計數(shù),如何在LCD液晶顯示器上顯示時分秒等。通過查閱大量資料和虛心請教他人慢慢解決掉了設(shè)計過程中遇到的這一系列的問題。但也受益匪淺,不僅對自己在大學(xué)三年時間里所學(xué)的知識進行回顧與復(fù)習(xí),對單片機知識也有更進一步的理解,并積累了一定寶貴的經(jīng)驗和培養(yǎng)了自己的動手能力和運用所學(xué)知識解決實際問題的能
14、力。通過這次課程設(shè)計,我們知道了理論和實際的距離,也知道了理論和實際想結(jié)合的重要性,也從中得知了很多書本上無法得知的知識。自己今后將會更加的把理論知識和實際應(yīng)用結(jié)合起來,提高自己的能力。</p><p><b> 6參考文獻</b></p><p> [1] 李華,王思明,張金敏.單片機原理及應(yīng)用[M].蘭州大學(xué)出版社,2001.</p><p
15、> [2] 譚浩強.C程序設(shè)計(第二版)[M].清華大學(xué)出版社,2003.</p><p> [3] 及力.Protel 99 SE原理圖與PCB設(shè)計教程[M].北京:電子工業(yè)出社,2007.</p><p> [4] 邢小杰.單片機電子時鐘設(shè)計[J].中國科技博覽,2009,3(12):15-18.</p><p><b> 附錄</
16、b></p><p> #include<reg51.h></p><p> #include<intrins.h></p><p> sbit RW=P2^1;</p><p> sbit RS=P2^0;</p><p> sbit E=P2^2;</p>&l
17、t;p> sbit K1=P1^0;</p><p> sbit K2=P1^1;</p><p> sbit K3=P1^2;</p><p> sbit K4=P1^3;</p><p> bit LK1=0,LK2=0,LK3=0,LK4=0;</p><p> bit ReadRTC_Fla
18、g;</p><p> unsigned char tmpdate[7]={59,59,23}; //秒分時 </p><p> unsigned char l_tmpdisplay[20];</p><p> unsigned int i;</p><p> char code table[]={"0123456789:
19、"};</p><p> /******************************************************************/</p><p> /* 定時器0初始化 */</p><p> /************
20、******************************************************/</p><p> void InitTIMER0(void)</p><p><b> {</b></p><p> TMOD=0x01; //定時器設(shè)置16位</p><p> TH0=(65535
21、-50000)/256; //初始化值</p><p> TL0=(65535-50000)%256;</p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> EA=1;</b></p>
22、<p><b> }</b></p><p><b> // 延時子程序</b></p><p> delay(int ms)</p><p> { </p><p><b> int k;</b><
23、/p><p> while(ms--)</p><p><b> {</b></p><p> for(k = 0; k< 250; k++)</p><p><b> {</b></p><p><b> }</b></p>
24、<p><b> }</b></p><p><b> }</b></p><p><b> /*寫命令*/</b></p><p> void write_ord(char ord)</p><p><b> {</b></p&
25、gt;<p><b> RW=0;</b></p><p><b> RS=0;</b></p><p><b> P0=ord;</b></p><p><b> delay(1);</b></p><p><b> E
26、=1;</b></p><p><b> delay(1);</b></p><p><b> E=0;</b></p><p><b> }</b></p><p><b> /*寫數(shù)據(jù)*/</b></p><p&
27、gt; void write_date(char date)</p><p><b> {</b></p><p><b> RW=0;</b></p><p><b> RS=1;</b></p><p><b> P0=date;</b>&l
28、t;/p><p><b> delay(1);</b></p><p><b> E=1;</b></p><p><b> delay(1);</b></p><p><b> E=0;</b></p><p><b&g
29、t; }</b></p><p> /*設(shè)定顯示位置*/</p><p> lcd_pos(unsigned char pos)</p><p> { </p><p> write_ord(pos|0x80);</p><p><b>
30、 }</b></p><p> /*顯示器初始化*/</p><p> void init()</p><p><b> {</b></p><p><b> E=0;</b></p><p> write_ord(0x38); //00111000&
31、lt;/p><p><b> delay(1);</b></p><p> write_ord(0x0c); //00001100</p><p><b> delay(1);</b></p><p> write_ord(0x06); //00000110</p><p&g
32、t;<b> delay(1);</b></p><p> write_ord(0x01); //00000001</p><p><b> delay(1);</b></p><p><b> }</b></p><p><b> /*主函數(shù)*/</
33、b></p><p> void SETtime()</p><p><b> {</b></p><p> if(LK1==1&&K1==0)</p><p><b> TR0=0;</b></p><p><b> LK1=K1;
34、</b></p><p><b> }</b></p><p> void OKtime()</p><p><b> {</b></p><p> if(LK4==1&&K4==0)</p><p><b> TR0=1;&l
35、t;/b></p><p><b> LK4=K4;</b></p><p><b> }</b></p><p> void shi()</p><p><b> {</b></p><p> if(LK2==1&&K2
36、==0&&TR0==0)</p><p> tmpdate[2]++;</p><p><b> LK2=K2;</b></p><p><b> }</b></p><p> void fen()</p><p><b> {</b
37、></p><p> if(LK3==1&&K3==0&&TR0==0)</p><p> tmpdate[1]++;</p><p><b> LK3=K3;</b></p><p><b> }</b></p><p> v
38、oid TimePP()</p><p><b> {</b></p><p> if(tmpdate[0]>=60) //秒</p><p><b> {</b></p><p> tmpdate[0]=0;</p><p> tmpdate[1]
39、++;</p><p><b> }</b></p><p> if(tmpdate[1]>=60) //分</p><p><b> {</b></p><p> tmpdate[1]=0;</p><p> tmpdate[2]++;</p&
40、gt;<p><b> }</b></p><p> if(tmpdate[2]>=24) //時</p><p><b> {</b></p><p> tmpdate[2]=0;</p><p> tmpdate[5]++;</p><p
41、><b> }</b></p><p><b> }</b></p><p> void TimeCH()</p><p><b> {</b></p><p> if(tmpdate[2]>=24)</p><p> tmpda
42、te[2]=0;</p><p> if(tmpdate[1]>=60)</p><p> tmpdate[1]=0;</p><p> l_tmpdisplay[7]=tmpdate[2]/10; //數(shù)據(jù)的轉(zhuǎn)換</p><p> l_tmpdisplay[6]=tmpdate[2]%10;</p>&
43、lt;p> l_tmpdisplay[5]=10;//加入"-"</p><p> l_tmpdisplay[4]=tmpdate[1]/10;</p><p> l_tmpdisplay[3]=tmpdate[1]%10;</p><p> l_tmpdisplay[2]=10;</p><p>
44、l_tmpdisplay[1]=tmpdate[0]/10;</p><p> l_tmpdisplay[0]=tmpdate[0]%10;</p><p><b> }</b></p><p> void display(unsigned char add,char Data)</p><p><b>
45、 {</b></p><p> lcd_pos(add); </p><p> write_date(Data);</p><p><b> }</b></p><p> /**************************************/</p><p> v
46、oid main()</p><p><b> {</b></p><p><b> init();</b></p><p> InitTIMER0();</p><p><b> while(1)</b></p><p><b>
47、{</b></p><p> SETtime();</p><p><b> OKtime();</b></p><p><b> shi();</b></p><p><b> fen();</b></p><p> if(Rea
48、dRTC_Flag)</p><p><b> {</b></p><p> ReadRTC_Flag=0;</p><p> tmpdate[0]++;</p><p> TimePP(); </p><p><b> }</b></p><p
49、><b> TimeCH();</b></p><p> display(0x4d,table[l_tmpdisplay[0]]);</p><p> display(0x4c,table[l_tmpdisplay[1]]);</p><p> display(0x4b,table[l_tmpdisplay[2]]);</p
50、><p> display(0x4a,table[l_tmpdisplay[3]]);</p><p> display(0x49,table[l_tmpdisplay[4]]);</p><p> display(0x48,table[l_tmpdisplay[5]]);</p><p> display(0x47,table[l_tm
51、pdisplay[6]]);</p><p> display(0x46,table[l_tmpdisplay[7]]);</p><p><b> }</b></p><p><b> }</b></p><p> /************************************
52、******************************/</p><p> /* 定時器中斷函數(shù) */</p><p> /******************************************************************/</p>&l
53、t;p> void tim(void) interrupt 1 using 1 //中斷,用于數(shù)碼管掃描</p><p><b> {</b></p><p> unsigned char i;</p><p> TH0=(65535-50000)/256; //初始化值</p&
54、gt;<p> TL0=(65535-50000)%256;</p><p><b> i++;</b></p><p><b> if(i==20)</b></p><p><b> {</b></p><p><b> i=0;</b
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子時鐘單片機課程設(shè)計
- 單片機課程設(shè)計---電子時鐘
- 單片機課程設(shè)計——電子時鐘
- 單片機課程設(shè)計——電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計-電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計----電子時鐘
- 單片機課程設(shè)計-電子時鐘
- 單片機課程設(shè)計---單片機電子時鐘
- 單片機課程設(shè)計--電子時鐘設(shè)計
- 數(shù)字電子時鐘-單片機課程設(shè)計
- 單片機課程設(shè)計---電子時鐘.doc
- 單片機課程設(shè)計--單片機模擬電子時鐘設(shè)計
- 單片機課程設(shè)計--- 單片機電子時鐘設(shè)計
- 單片機課程設(shè)計報告---電子時鐘
- 單片機課程設(shè)計報告--電子時鐘
- 單片機課程設(shè)計---電子時鐘.doc
- 單片機課程設(shè)計--單片機模擬電子時鐘設(shè)計
評論
0/150
提交評論