單片機設(shè)計報告萬年歷設(shè)計與實現(xiàn)_第1頁
單片機設(shè)計報告萬年歷設(shè)計與實現(xiàn)_第2頁
單片機設(shè)計報告萬年歷設(shè)計與實現(xiàn)_第3頁
單片機設(shè)計報告萬年歷設(shè)計與實現(xiàn)_第4頁
單片機設(shè)計報告萬年歷設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 單片機設(shè)計報告萬年歷設(shè)計與實現(xiàn) 學(xué)校:西安電子科技大學(xué) 學(xué)院:計算機學(xué)院作者: 2011年11月20日 目錄 目錄第1章 概述1第2章 stc89c52單片機22.1 stc89c52簡介22.2 stc89c52引腳及功能2第3章 lcd1602顯示器 43.1 lcd1602顯示器簡介 43.2 lcd1602顯示器的引腳及功能 4第4章 作品介紹 64.1 硬件電路說明64.2 軟件設(shè)計及源碼64.3 作品使用說明94.4 作品特色及可擴展性94.5 作品成本及性能9第5章 設(shè)計總結(jié)11第6章 附錄12參考文獻 25 第1章 概述 第1章 概述在日常生活中,我們對液晶顯示器并不陌生。液

2、晶顯示模塊已作為很多電子產(chǎn)品的通過器件,如在計算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號和圖形。在單片機的人機交流界面中,lcd1602都有很大的作用。stc89s52是一種低功耗、高性能cmos8位微控制器,具有 8k 在系統(tǒng)可編程flash 存儲器。在單芯片上,擁有靈巧的8 位cpu 和在系統(tǒng)可編程flash,使得stc89s52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。51單片機以其體積小,功耗低,重量輕,功能強大等優(yōu)點,在人們?nèi)粘I钪须S處可見,在當今這個電子時代,真是無處不有單片機啊。而lcd是一種智能儀器,可以顯示數(shù)字,字母,甚至漢字

3、,是很多產(chǎn)品不可或缺的材料,其自帶指令集,利用方便,功耗低。本作品采用stc89c52和lcd1602液晶顯示器實現(xiàn)萬年歷時鐘。主要工作及過程如下:1. 對設(shè)想進行電路實現(xiàn),最終采用8個發(fā)光二極管分別指示時鐘各位的調(diào)節(jié).2. 軟件程序設(shè)計,軟件流程分析與繪制流程圖,之后編寫代碼,并進行多次調(diào)試,計算并調(diào)整時間的精確度,最終實現(xiàn)如下:(1).萬年歷時鐘正常工作時,8個發(fā)光二極管即為一個流水燈。(2).當按下調(diào)整時鐘鍵(中斷)時,8與發(fā)光管亮。(3).其余七個發(fā)光管分別對應(yīng)年、月、日、星期、時、分、秒的設(shè)置指示。硬件電路焊接,采用兩塊板,將所有器件固定在一面,包括電池。電路采用四節(jié)干電池供電。25

4、 第2章 stc89c52單片機 第2章stc89c52單片機 2.1 stc89c52簡介stc89s52是一種低功耗、高性能cmos8位微控制器,具有 8k 在系統(tǒng)可編程flash 存儲器。在單芯片上,擁有靈巧的8 位cpu 和在系統(tǒng)可編程flash,使得at89s52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)flash,256字節(jié)ram, 32 位i/o 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外 stc89s52 可降至0hz 靜態(tài)邏輯操作,支持2種軟件可選擇

5、節(jié)電模式??臻e模式下,cpu 停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,ram內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。8 位微控制器 8k 字節(jié)在系統(tǒng)可編程 flash。 圖2.1單片機總控制電路 2.2 stc89c52引腳及功能1.主電源引腳(2根)vcc(pin40):電源輸入,接5v電源。gnd(pin20):接地線。2外接晶振引腳(2根)xtal1(pin19):片內(nèi)振蕩電路的輸入端。xtal2(pin20):片內(nèi)振蕩電路的輸出端。3.控制引腳(4根)rst/vpp(pin9):復(fù)位引腳,引腳上出現(xiàn)2個機器周期的高電

6、平將使單片機復(fù) 第2章 stc89c52單片機 ale/prog(pin30):地址鎖存允許信號。psen(pin29):外部存儲器讀選通信號。ea/vpp(pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令。4.可編程輸入/輸出引腳(32根)stc89c52單片機有4組8位的可編程i/o口,分別位p0、p1、p2、p3口,每個口有8位(8根引腳),共32根。p0口(pin39pin32):8位雙向i/o口線,名稱為p0.0p0.7p1口(pin1pin8):8位準雙向i/o口線,名稱為p1.0p1.7 p2口(pin21pin28):8

7、位準雙向i/o口線,名稱為p2.0p2.7 p3口(pin10pin17):8位準雙向i/o口線,名稱為p3.0p3.7stc89c52主要功能如表二所示。表2.2.1 stc89c52主要功能主要功能特性兼容mcs51指令系統(tǒng)8k可反復(fù)擦寫flash rom32個雙向i/o口256x8bit內(nèi)部ram3個16位可編程定時/計數(shù)器中斷時鐘頻率0-24mhz2個串行中斷可編程uart串行通道2個外部中斷源共6個中斷源2個讀寫中斷口線3級加密位低功耗空閑和掉電模式軟件設(shè)置睡眠和喚醒功能 第3章 lcd1602顯示器 第3章lcd1602顯示器 3.1 lcd1602顯示器簡介在日常生活中,我們對液

8、晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn)品的通過器件,如在計算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號和圖形。在單片機的人機交流界面中,一般的輸出方式有以下幾種:發(fā)光管、led數(shù)碼管、液晶顯示器。發(fā)光管和led數(shù)碼管比較常用,軟硬件都比較簡單,在此不作介紹,本章重點介紹字符型液晶顯示器的應(yīng)用。在單片機系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個優(yōu)點:顯示質(zhì)量高由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(crt)那樣需要不斷刷新新亮點。因此,液晶顯示器畫質(zhì)高且不會閃爍。數(shù)字式接口液晶顯示器都是數(shù)字式的,和單

9、片機系統(tǒng)的接口更加簡單可靠,操作更加方便。體積小、重量輕液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。功耗低相對而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動ic上,因而耗電量比其它顯示器要少得多。如圖: 圖3.1 lcd實物圖 3.2 lcd1602顯示器的引腳及功能1602lcd采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.1所示:編號符號引腳說明編號符號引腳說明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6

10、數(shù)據(jù)6e使能信號14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負極 表3.1 引腳接口說明表第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度。第4腳:rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當rs和r/w共同為低電平時可以寫入指令或者顯示地址,當rs為低電平r/w為高電平時可以讀忙信號,當rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。

11、第6腳:e端為使能端,當e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:d0d7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。 第4章 作品介紹 第4章 作品介紹 4.1 硬件電路說明本作品采用一個stc89c52單片機和一個lcd1602液晶顯示器以及八個發(fā)光二極管,附加一些電阻電容器件,實現(xiàn)可調(diào)萬年歷時鐘顯示功能。并采用七個發(fā)光二極管分別對應(yīng)年、月、日、星期、時、分、秒的設(shè)置指示,另一個發(fā)光二極管對應(yīng)中斷響應(yīng),即當調(diào)整時間鍵按下時,此發(fā)光管亮。電源由四個干電池供電,沒有設(shè)置電源開關(guān)。當系統(tǒng)受到干擾出現(xiàn)錯誤時,采用手動復(fù)位(復(fù)位電路)的方式還原。電路板完全是手工焊接

12、而成。硬件焊接電路圖見附件: 4.2 軟件設(shè)計及源碼軟件流程圖 main函數(shù)開始 lcd1602初始化 定時器初始化 初始日期顯示2011-9-10 sat 初始時間顯示10:58:00 計數(shù)器count計數(shù)計數(shù)器計數(shù)是否夠80次 否 是秒second加1 second計數(shù)是否夠60次 否是 分minute加1 是minute計數(shù)是否夠60次 否 hour計數(shù)是否夠24次 否 是時hour加1day計數(shù)是否夠29次或平年day計數(shù)是否夠28是否為閏年非二月 否 是 day計數(shù)是否夠31次或平年day計數(shù)是否夠30是月month加1month是否夠12 是 year3加1year3是否夠10是y

13、ear2加1,year3=0 year2是否夠10 是year1加1,year2=0year1是否夠10是year0加1,year1=0 year0是否夠10 是year0=year1=year2=year3=0源碼清單本程序全部采用c語言編寫,函數(shù)清單如下:check() dalay(unsigned char t) dateout() timeout() key(void)lcdinit()timerinit()timer0()writecom()writedata()詳細源碼見附件 4.3 作品使用說明打開電源,即顯示初始化數(shù)據(jù)見附錄:按鍵調(diào)節(jié)日期和時間(1).當按下設(shè)置鍵(即中斷鍵)時

14、,燈8(從右到左排序)亮,并且計數(shù)停止。(2).當按下位選擇鍵的次數(shù)分別為1、2、3、4、5、6、7次時,分加對應(yīng)燈1、2、3、4、5、6、7亮。同時對應(yīng)秒、分、時、星期、日、月、年的設(shè)置。 4.4 作品特色及可擴展性作品正常工作時,八個發(fā)光二極管為流水燈功能,增加美感本作品可進一步擴展一個計算器,用一個選擇鍵使計算器和時鐘可以切換使用。本作品可進一步擴展一個鬧鐘功能,定時到,則蜂鳴器響??蓴U展一個秒表功能??蓴U展一個溫度計4.5 作品成本及性能本作品所用材料清單如下:序號器件數(shù)量1stc89c5212lcd160213電容34排阻9引腳25電阻10k16晶振17板子28電池49按鍵6 表4.

15、1材料清單作品性能(1).作品所用的器件數(shù)量少,板面干凈,且穩(wěn)定。(2).利用兩塊板子使電池與其他器件固定與板上,方便。(3).經(jīng)多次調(diào)試程序,使時間的誤差精確到了很?。?10秒/6.5小時=1/(3600*3600*6.5) =1.187*10-8 即精確到了ns級。 第5章 設(shè)計總結(jié) 第5章 設(shè)計總結(jié)這次單片機設(shè)計,我很用心的去完成,當做好的那一刻,心里有說不出的滿足感。從這次課程設(shè)計中,我真正學(xué)到了很多有用的知識。我首先學(xué)習(xí)了單片機stc89c52和lcd的指令集,以及常用的編程實例;然后設(shè)計原理圖;進行編程,調(diào)試;焊接硬件電路。本作品實為51單片機與lcd1602的應(yīng)用,制作本作品的過

16、程中無疑會對51單片機的引腳及控制性能進一步熟悉,并對lcd1602的各控制引腳及相關(guān)指令熟練掌握。本作品具有一定的實用性,萬年歷時鐘隨處可見,其最難的部分是時間的精確度,本作品通過與現(xiàn)有時鐘進行比較,精確度很高,可以滿足日常應(yīng)用。經(jīng)過一段時間的設(shè)計,從一無所知到有所收獲,內(nèi)心感到欣慰,也感謝各位組員的辛勤勞動,感謝同學(xué)的幫助。 剛開始還真不知道怎么下手,找了一些資料但看不大懂,而且不知道怎樣將實際電路與總原理圖聯(lián)系起來。我和我們組的同學(xué)一起討論分析,仔細研究資料,終于搞清楚了。回過頭來一想,其實設(shè)計這些電路也并不是很困難,而且還十分有意思。課程設(shè)計是一個學(xué)習(xí)新知識、鞏固加深所學(xué)課本理論知識的

17、過程,它培養(yǎng)了我們綜合運用知識的能力,獨立思考和解決問題的能力。它不僅加深了我對單片機相關(guān)設(shè)計的理解,還讓我感受到了其中的樂趣。在這次設(shè)計中,我一點也不怕麻煩,就是希望能把這次課程設(shè)計做好。因此對我來說,這次課程設(shè)計是非常有意義的。 第6章 附錄 第6章 附錄1.程序詳細清單#include#include#include/*使能位定義*/sbit rs=p30;sbit rw=p31;sbit en=p32;sbit timeset=p33;sbit setexit=p34;sbit setselect=p36;sbit setcount=p37;/*初始化定義及全局變量聲明*/unsign

18、ed char idata table1= 2011-09-10 sat ;unsigned char idata table2= 00:00:00 ;unsigned char idata week=satsunmontuewesthufri;unsigned char idata day=10;unsigned char month=9;unsigned char idata year=2011;unsigned char second=0;unsigned char minute=58;unsigned char hour=10;unsigned char weekct=0;unsign

19、ed char count=0;/計數(shù)變量unsigned char light=0xfe;/*函數(shù)聲明*/void dalay(unsigned int t);void lcdinit();unsigned char check();void writecom(unsigned char t);void writedata(unsigned char t);void dateout();void timerinit();void timeout();unsigned char runnian(unsigned char idata year4);/*按鍵中斷處理,即調(diào)時間和日期處理函數(shù)*/v

20、oid key(void) interrupt 2 unsigned char k=0; ea=0; /關(guān)中斷 count=0; light=0x7f; p1=light; while(1) if(setselect=0) dalay(5); k+; switch(k%8) case 0: light=0x7f; p1=light; break; case 1: light=0xfe; p1=light; if(setcount=0) second+; if(second=60) second=0; break; case 2: light=0xfd; p1=light; if(setcoun

21、t=0) minute+; if(minute=60) minute=0;break; case 3: light=0xfb; p1=light; if(setcount=0) hour+; if(hour=24) hour=0;break; case 4: light=0xf7; p1=light; if(setcount=0) weekct+=3; if(weekct18) weekct=0; break; case 5: light=0xef; p1=light; if(setcount=0) day+; if(month=1|month=3|month=5|month=7|month=

22、8|month=10|month=12) if(day=32) day=0; else if(month=4|month=6|month=9|month=11) if(day=31) day=0; else if(month=2)if(day=29) day=0; break; case 6: light=0xdf; p1=light; if(setcount=0) month+; if(month=13) month=0; break; case 7: light=0xbf; p1=light; if(setcount=0) year3+; if(year39) year3=0; year2

23、+; if(year29) year2=0; year1+; if(year19) year1=0; year0+; if(year09) year3=0; year2=0; year1=0; year0=0; break; default:k=0;break; dateout(); timeout(); if(setexit=0) break; ea=1; /開中斷 light=0xfe; p1=0xfe;/*溢出中斷處理函數(shù)*/void timer0(void) interrupt 1 count+; if(count=80) count=0;second+; p1=light;if(li

24、ght=0xfe) dalay(500); light18) weekct=0; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) if(day=32) day=0; month+; else if(month=2|month=4|month=6|month=9|month=11) if(day=31) day=0; month+; if(month12) month=0;year3+; if(year39) year3=0; year2+; if(year29) year2=0; year1+; if(year19)

25、year1=0; year0+; if(year09) year3=0; year2=0; year1=0; year0=0; /dateout(); th0=(65535-10000)/256; tl0=(65535-10000)%256; /*日期顯示函數(shù)*/void dateout() unsigned char i; unsigned char weekc=weekct; for(i=1;i5;i+) table1i=yeari-1; table16=month/10+0x30;table17=month%10+0x30; table19=day/10+0x30;table110=da

26、y%10+0x30; for(i=12;i15;i+) table1i=weekweekc;weekc+; writecom(0x80);for(i=0;i16;i+) writedata(table1i);dalay(5); /*定時器初始化函數(shù)*/void timerinit() tmod=0x01; th0=(65535-10000)/256; tl0=(65535-10000)%256; ea=1; et0=1; ex1=1; tr0=1;void timeout() unsigned char t; table22=hour/10+0x30;/ 第二行第一位顯示時的十位 table23=hour%10+0x30;/ 第二位顯示時的個位 table24=0x3a;/ 第三位顯示: table25=minute/10+0x30; /分的十位 table26=minute%10+0x30; /分的個位 table27=0x3a; /: table28=second/10+0x30; /秒的十位 table29=second%10+0x30; /秒的個位 writec

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論