數(shù)字時鐘設(shè)計畢業(yè)論文_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  該文主要論述如何使用89S51型號的單片機來設(shè)計一個數(shù)字電子時鐘。</p><p>  該設(shè)計是利用單片機原理,以AT89S51芯片為主要控制器。通過用Keil C51軟件編程仿真,再通過protues軟件進行硬件仿真,設(shè)計制作一個多功能數(shù)字電子時鐘的硬件電路。其中通過單片機擴展的1602LCD顯示器用來

2、顯示秒、分、時計數(shù)單元中的值。整個設(shè)計過程包括兩大部分:軟件部分和硬件部分。以單片機AT89S51芯片為核心,加上一定的外圍電路、1602LCD顯示器和鍵盤控制器組成。</p><p>  該電子時鐘系統(tǒng)主要由時鐘模塊、液晶顯示模塊以及鍵盤控制模塊。液晶顯示模塊能夠準確顯示時間(顯示格式為時:分:秒(24小時制)),鍵盤控制模塊可方便進行時間調(diào)整,時鐘模塊主要控制時間的顯示由二十四進制電路與六十進制電路組成。電路

3、的設(shè)計以硬件和軟件為指導(dǎo)思想,通過軟件編程來實現(xiàn)模擬電路的設(shè)計。</p><p>  用單片機AT89S51為主要功能模塊,采用1602LCD輸出顯示時間,用按鈕做開關(guān),軟件計時、調(diào)試,輔助必要的電路,實現(xiàn)高效、準確的數(shù)字電子時鐘系統(tǒng)。該數(shù)字電子時鐘具有電路簡單明了,系統(tǒng)穩(wěn)定性高等優(yōu)勢,,成本低,維護方便、調(diào)試簡便、具有廣泛的市場前景。</p><p>  關(guān)鍵詞:單片機 AT89S51

4、芯片 1602LCD 軟件 動態(tài)掃描</p><p><b>  目錄</b></p><p>  文獻摘要·····················

5、;····································

6、83;····2</p><p>  緒論····························

7、;····································

8、83;·4</p><p>  1、設(shè)計總體方案······························

9、;·······················5</p><p>  2、主要器件介紹及功能實現(xiàn)·······&#

10、183;··································5</p>

11、<p>  2.1 AT89C52單片機································&#

12、183;··················5</p><p>  2.2 1602LCD液晶顯示···········

13、83;····································&

14、#183;···7</p><p>  2.3 計時功能的實現(xiàn)···························

15、························9</p><p>  3、硬件電路·······

16、3;····································&#

17、183;··············9</p><p>  3.1上電復(fù)位電路················

18、83;····································9

19、</p><p>  3.2時鐘系統(tǒng)·······························

20、3;·························9</p><p>  3.3按鍵電路······&

21、#183;····································

22、;··············9</p><p>  3.4電子時鐘的原理圖················

23、3;································10</p><p>  3

24、.5硬件調(diào)試···································

25、3;·····················11</p><p>  3.6實物硬件電路·········

26、3;····································&#

27、183;······11</p><p>  4、軟件設(shè)計·························

28、;·································12</p><p&g

29、t;  4.1 程序流程··································

30、3;·····················12</p><p>  4.2程序設(shè)計··········

31、····································

32、3;··········13</p><p>  4.3生成代碼文件····················

33、3;································19</p><p>  4

34、.4軟件調(diào)試···································

35、3;·····················20</p><p>  結(jié)論···········

36、;····································

37、83;··················22</p><p>  參考文獻·············&#

38、183;····································

39、············23</p><p>  附錄····················&

40、#183;····································

41、;·········24</p><p><b>  緒論</b></p><p>  傳統(tǒng)時鐘主要是機械式轉(zhuǎn)動,由指針顯示時間。往往存在計時誤差,不能滿足人們對時間計量的精度要求,與現(xiàn)代化技術(shù)發(fā)展不相符。</p><p>  隨著科技的進步,以單片機為主

42、要功能模塊,采用LCD輸出顯示時間,用按鈕做開關(guān),軟件計時、調(diào)試,輔助必要的電路,實現(xiàn)高效、準確的電子時鐘系統(tǒng)逐漸代替的傳統(tǒng)時鐘。</p><p>  單片機自20世紀70年代問世以來,以其極高的性能價格比,受到人們的重視與關(guān)注,應(yīng)用很廣、發(fā)展迅速。單片機具有體積小、重量輕、抗干擾能力強、環(huán)境要求高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易的優(yōu)點。已經(jīng)廣泛的應(yīng)用于工業(yè)自動化控制、智能儀器儀表、家用電器、電力電子

43、、機電一體化設(shè)備等領(lǐng)域。在單片機領(lǐng)域鐘應(yīng)用最多的是51系列。</p><p>  用1602LCD設(shè)計的可調(diào)式電子鐘是以AT89S51為核心,輔以必要的電路而設(shè)計的。</p><p>  數(shù)字電子鐘設(shè)計與制作可采用數(shù)字電路實現(xiàn),也可以采用單片機實現(xiàn)。若用數(shù)字電路完成,所設(shè)計的電路相當復(fù)雜,需要十幾片數(shù)字集成塊,其功能也主要依賴與數(shù)字電路的各功能模塊的組合來實現(xiàn),焊接的過程也比較復(fù)雜,成本也

44、非常高。若用單片機來設(shè)計制作完成,由于計數(shù)器功能實現(xiàn)主要通過軟件編程來實現(xiàn)。降低的硬件電路的復(fù)雜性,而且成本也有所降低,所以在設(shè)計與制作鐘采用單片機AT89S51,它是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。此外,AT89S51的指令系統(tǒng)引腳與8051完全兼容,片內(nèi)有128B的RAM、32條I/O口線、2個16位定時/計數(shù)器、5個中斷源、一個全雙工串行口等。</p&

45、gt;<p>  液晶顯示器(LCD)具有功耗低、體積小、重量輕、超薄等許多其他顯示器無法比擬的優(yōu)點,近年來被廣泛用于單片機控制的智能儀器、儀表和低功耗電子產(chǎn)品中。LCD可分為段式LCD、字符式LCD和點陣式LCD。其中,段式LCD和字符式LCD只能用于字符和數(shù)字的簡單顯示,不能滿足圖形曲線和漢字顯示的要求;而點陣式LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線以及漢字、動畫,并且可以實現(xiàn)屏幕滾動、反轉(zhuǎn)、閃爍等功能

46、,用途十分廣泛。</p><p>  電子時鐘用集成電路計時,譯碼代替機械式傳動,用LCD顯示器代替指針顯示,減小了計時誤差,該數(shù)字電子鐘具有時、分、秒顯示時間的功能,還可以進行時和分的校對。相對傳統(tǒng)的電子時鐘,數(shù)字電子時鐘克服了電子時鐘計時不精確的缺陷,加上調(diào)節(jié)方便,受到廣大消費者的喜愛。</p><p><b>  1、設(shè)計總體方案</b></p>

47、<p><b>  電子鐘的工作原理</b></p><p>  有振蕩器產(chǎn)生穩(wěn)定的分頻脈沖信號,作為數(shù)字鐘的時間基準,然后經(jīng)過分頻器輸出標準秒脈沖。秒計數(shù)器滿60向分計數(shù)器進位,分計數(shù)器滿60向小時計數(shù)器進位,小時計數(shù)器按照0-23的顯示規(guī)律計數(shù)。計數(shù)器的輸出分別由譯碼器送顯示器顯示。計時出現(xiàn)誤差時,可以通過校準電路校時、校分。</p><p><b

48、>  設(shè)計總體方案</b></p><p>  圖1.1為設(shè)計總體框圖。該設(shè)計采用AT89C51單片機作為控制器,液晶顯示時間,用按鈕做開關(guān)。按鍵輸入修改值,再加上軟件設(shè)計,達到實驗結(jié)果。按鍵功能:</p><p>  K1鍵:用于選擇調(diào)節(jié)對象;</p><p>  K2鍵:增加當前小時或分鐘;</p><p>  K3鍵:

49、減小當前小時或分鐘;</p><p>  K4鍵 確定調(diào)節(jié)值。</p><p>  2、主要器件介紹及功能實現(xiàn)</p><p>  2.1 AT89C52單片機</p><p>  MCS-51系列單片機是Intel公司1980年推出的高性能8位單片微型計算機,它們的指令系統(tǒng)與芯片引腳完全兼容。AT89C51是一種帶4K字節(jié)閃存可編程可擦除只

50、讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片

51、中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。主要特性:</p><p> ?。?)與MCS-51 兼容</p><p> ?。?)4K字節(jié)可編程閃爍存儲器 </p><p> ?。?)壽命:1000寫/擦循環(huán) </p><p>  

52、(4)數(shù)據(jù)保留時間:10年 </p><p> ?。?)全靜態(tài)工作:0Hz-24MHz </p><p> ?。?)三級程序存儲器鎖定 </p><p>  (7)128×8位內(nèi)部RAM </p><p> ?。?)32可編程I/O線 </p><p> ?。?)兩個16位定時器/計數(shù)器 </p>

53、<p> ?。?0)5個中斷源 </p><p> ?。?1)可編程串行通道 </p><p> ?。?2)低功耗的閑置和掉電模式 </p><p> ?。?3)片內(nèi)振蕩器和時鐘電路</p><p><b>  管腳說明:</b></p><p>  VCC:供電電壓。 </p

54、><p><b>  GND:接地。 </b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 </p&

55、gt;<p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口

56、被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 </p><p>  P

57、3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 </p><p>  P3口也可作為AT89C51的一些特殊功能口,如下表所示: </p><p><b>  口管腳 備選功能 </b></p&

58、gt;<p>  P3.0 RXD(串行輸入口) </p><p>  P3.1 TXD(串行輸出口) </p><p>  P3.2 /INT0(外部中斷0) </p><p>  P3.3 /INT1(外部中斷1) </p><p>  P3.4 T0(記時器0外部輸入) </p><p>  P3.

59、5 T1(記時器1外部輸入) </p><p>  P3.6 /WR(外部數(shù)據(jù)存儲器寫選通) </p><p>  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通) </p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。 </p><p>  RST:復(fù)位輸入。當振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。 </p

60、><p>  ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指

61、令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 </p><p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。 </p><p>  /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不

62、管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 </p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 </p><p>  XTAL2:來自反向振蕩器的輸出。 </p><p>  2.1.1振蕩器特性 &

63、lt;/p><p>  XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p>  2.2 1602LCD液晶顯示</p><p> 

64、 單片機應(yīng)用系統(tǒng)中使用的顯示器主要有發(fā)光二極管顯示器,簡稱LED(Light Emitting Diode);液晶顯示器LCD(Liquid Crystal Display);近幾年也有配置CRT顯示器的。液晶顯示器簡稱是利用液晶經(jīng)過處理后能夠改變光線傳輸方向的特性,達到顯示字符或者圖形的目的。其特點是體積小、重量輕、功耗極低、顯示內(nèi)容豐富等特點,在單片機應(yīng)用系統(tǒng)中有著日益廣泛的應(yīng)用。</p><p>  1

65、602芯片:主要用于顯示時間和定時時間。1602芯片由點陣字符液晶顯示器件和專用的行、列驅(qū)動器、控制及必要的鏈接件、結(jié)構(gòu)件組裝而成,可以顯示數(shù)字和西文字符,但不能顯示圖形,已經(jīng)可以滿足本次設(shè)計的需要。</p><p>  1602型LCD顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富等特點。1602型LCD可以顯示2行16個字符,有8位數(shù)據(jù)總線D0~D7和RS,R/W,EN三個控制端口,工作電壓為5V,并且具有字符對比

66、度調(diào)節(jié)和背光功能。</p><p>  外型尺寸:80X36X13(LXWXH)實物如圖2-3</p><p>  圖2-2 1602LCD實物圖</p><p> ?。?)接口信號說明如圖表2-1</p><p>  表2- 1 接口信號說明</p><p> ?。?)主要技術(shù)參數(shù)如圖表2-2</p>

67、<p>  表2- 2 主要技術(shù)參數(shù)</p><p><b> ?。?)基本操作程序</b></p><p>  讀狀態(tài):輸入:RS=L,RW=H,E=H輸出:D0~D7=狀態(tài)字</p><p>  讀數(shù)據(jù):輸入:RS=H,RW=H,E=H輸出:無</p><p>  寫指令:輸入:RS=L

68、,RW=L,D0~D7=指令碼,E=高脈沖 輸出:D0~D7=數(shù)據(jù)</p><p>  寫數(shù)據(jù):輸入:RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖 輸出:無</p><p>  2.3 計時功能的實現(xiàn)</p><p>  時鐘信號的產(chǎn)生可利用AT89C51片內(nèi)的定時器0產(chǎn)生定時中斷,進行時、分、秒的計時,并將信號送到顯示電路。</p><

69、p><b>  2.3.1定時方法</b></p><p>  (1)軟件定時:軟件定時靠執(zhí)行一個循環(huán)程序以進行時間延時。特點是時間精確,且不需要外加硬件電路。但軟件定時要占用CPU,因此軟件定時時間不宜太長。</p><p>  (2)硬件定時:特點是不占用CPU,但需要改變的元件參數(shù)來調(diào)節(jié)定時時間,在使用上不夠靈活。</p><p>

70、 ?。?)可編程定時器定時:通過對系統(tǒng)時鐘脈沖的計數(shù)來完成。計數(shù)值通過程序設(shè)定,改變計數(shù)值,也就改變了定時時間,在使用上比較靈活。</p><p>  2.3.2 定時/計數(shù)器的定時和計數(shù)功能</p><p>  LCD顯示器:類似于LED數(shù)碼管顯示器。每個顯示器的段電極包括a, b, c, d, e, f, g七個筆劃(段)和一個背電極BP(或COM)??梢燥@示數(shù)字和簡單的字符。<

71、/p><p>  點陣式LCD顯示器:段電極與背電極呈正交帶狀分布,液晶位于正交的帶狀電極間。點陣式LCD的控制一般采用行掃描方式。</p><p>  MCS-51單片機內(nèi)部有兩個可編程的定時/計數(shù)器,分別稱為定時/計數(shù)器0和定時/計數(shù)器1其功能如下:</p><p> ?。?)計數(shù)功能:計數(shù)是指對外部事件進行計數(shù)。外部事件的發(fā)生以輸入脈沖表示,因此計數(shù)功能的實質(zhì)就是

72、對外來脈沖進行計數(shù)。</p><p> ?。?)定時功能:定時功能也是通過定時/計數(shù)器的計數(shù)來實現(xiàn)的。不過此時的計數(shù)脈沖來自單片機內(nèi)部,機每個機器周期產(chǎn)生一個計數(shù)脈沖,也即是每個機器周期計數(shù)器加1。</p><p>  由于一個機器周期等于12個振蕩脈沖周期,因此計數(shù)頻率為振蕩頻率的1/12。這樣不但可以根據(jù)計數(shù)值計算出定時時間,也可以反過來按定時時間的要求計算出計數(shù)器的初值。</p

73、><p><b>  3、硬件電路</b></p><p><b>  3.1上電復(fù)位電路</b></p><p>  上電復(fù)位電路用電容接一個+5V的電源,當電容開始充電,向單片機輸入一個高電平;當電容充電結(jié)束開始放電,此時單片機與一個電阻相連接地為低電平。可見,電容的充放電,單片機得到一個交替出現(xiàn)的高電平和低電平。<

74、/p><p>  RST是復(fù)位端。單片機的振蕩器工作時,該引腳上出現(xiàn)持續(xù)兩個機器周期的高電平就可以實現(xiàn)復(fù)位操作,是單片機回復(fù)到初始狀態(tài)。</p><p><b>  3.2時鐘系統(tǒng)</b></p><p>  單片機利用內(nèi)部的振蕩電路,在XTAL1、XTAL2引腳上外接定時元件,內(nèi)部的振蕩電路便產(chǎn)生自激振蕩。</p><p>

75、;  最常用的內(nèi)部時鐘方式是采用外接晶振和電容組成的并聯(lián)諧振回路。</p><p><b>  3.3按鍵電路</b></p><p>  按鍵按照結(jié)構(gòu)原理可分為兩類,一類是觸點式開關(guān)按鍵,如機械式開關(guān)、導(dǎo)電橡膠式開關(guān)等;另一類是無觸點式開關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。前者造價低,后者壽命長。目前,微機系統(tǒng)中最常見的是觸點式開關(guān)按鍵。 </p>&

76、lt;p>  按鍵按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類,這兩類鍵盤的主要區(qū)別是識別鍵符及給出相應(yīng)鍵碼的方法。編碼鍵盤主要是用硬件來實現(xiàn)對鍵的識別,非編碼鍵盤主要是由軟件來實現(xiàn)鍵盤的定義與識別。</p><p>  全編碼鍵盤能夠由硬件邏輯自動提供與鍵對應(yīng)的編碼,此外,一般還具有去抖動和多鍵、竄鍵保護電路。這種鍵盤使用方便,但需要較多的硬件,價格較貴,一般的單片機應(yīng)用系統(tǒng)較少采用。非編碼鍵盤只簡單地提供

77、行和列的矩陣,其它工作均由軟件完成。由于其經(jīng)濟實用,較多地應(yīng)用于單片機系統(tǒng)中。在本套設(shè)計中由于只需要幾個功能鍵,此時,可采用獨立式按鍵結(jié)構(gòu)。</p><p>  (1)按鍵的軟件結(jié)構(gòu):</p><p>  按鍵中有一個選擇鍵、調(diào)時鍵加一鍵和減一鍵以及一個確定鍵,四個按鍵接在P1.0——P1.4口,低電平表示有按鈕按下;按鈕沒有接防抖電路,需要設(shè)計軟件防抖。</p><p

78、><b> ?。?)調(diào)時:</b></p><p>  按下調(diào)時鍵后可以調(diào)時,過程如下:調(diào)時---時加/減---調(diào)時---分加/減---確定---完成時間設(shè)置。</p><p>  3.4電子時鐘原理圖</p><p><b>  圖3-1</b></p><p>  該電子時鐘電路主要包括:

79、按鍵控制電路(P1口1~4腳引出)、聲音電路(P3口10腳引出)和LCD顯示器的驅(qū)動部分(39~32、21~23腳引出)</p><p>  C51的P0口和P2口以及1602LCD的供電源通過總線連接構(gòu)成了電子鐘的顯示模塊,P1口外接四個按鍵K1~K4構(gòu)成按鍵模塊。此外,P3口外接一個蜂鳴器構(gòu)成聲音模塊。當按一下P1口的按鍵時,單片機工作并通過P0和P2口對LCD對應(yīng)的位進行讀寫操作,同時在LCD上顯示出來,P

80、3口的蜂鳴器發(fā)出響聲。</p><p><b>  3.5 硬件調(diào)試</b></p><p>  是檢測硬件電路正常工作的途徑。常見故障:</p><p> ?。?)1602LCD顯示屛無顯示,需檢查電路,先從最小系統(tǒng)查起,再檢查1602LCD的供源電路是否正常。接線是否錯連,焊點焊接有沒有出現(xiàn)問題。</p><p> 

81、 (2)1602LCD顯示不夠亮,檢查LCD的供源電路,查看電阻有沒有選錯或這漏接,同時也要檢查電阻的焊點是否有假焊,虛焊等。</p><p> ?。?)1602LCD顯示亂碼或漏字顯示,主要檢查單片機接口部分,以及焊點有沒有出現(xiàn)問題。</p><p><b>  3.6實物硬件電路</b></p><p><b>  圖3-2 實物

82、圖</b></p><p><b>  4、軟件設(shè)計</b></p><p><b>  4.1 程序流程圖</b></p><p><b>  圖4- 1</b></p><p>  4.1.1編輯軟件(Keil uVision2)</p><

83、p>  Keil uVision2:是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),使用接近于傳統(tǒng)c語言的語法來開發(fā),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用,而且大大的提高了工作效率和項目開發(fā)周期,他還能嵌入?yún)R編,您可以在關(guān)鍵的位置嵌入,使程序達到接近于匯編的工作效率。 </p><p>  Keil C51軟件提供豐富的庫函數(shù)和功能

84、強大的集成開發(fā)調(diào)試工具,全Windows界面,使您能在很短的時間內(nèi)就能學(xué)會使用keil c51來開發(fā)您的單片機應(yīng)用程序 。 </p><p>  另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p><p>  4.2電子時鐘程序設(shè)計</p>

85、<p>  4.2.1 文件調(diào)用的頭文件名:#include<reg52.h></p><p>  4.2.2定義變量類型:</p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  4.2.3定義液晶顯示器

86、控制端口、按鍵控制:</p><p>  sbit rs=P2^0; </p><p>  sbit rw=P2^1;</p><p>  sbit en=P2^2;</p><p>  sbit s1=P1^0; </p><p>  sbit s2=P1^1;</p><p>  sbit

87、s3=P1^2;</p><p>  sbit s4=P1^3;</p><p>  4.2.4 設(shè)置LCD顯示的初值:</p><p>  uchar code table[]={" Current Time "};</p><p>  4.2.5 編寫延時程序:</p><p>  void

88、 delay(uchar time) </p><p><b>  {</b></p><p><b>  uint j;</b></p><p>  for(;time>0;time--)</p><p>  for(j=0;j<125;j++);</p><p

89、><b>  }</b></p><p>  4.2.6 編寫寫指令函數(shù):</p><p>  void write_com(uchar com) </p><p><b>  {</b></p><p><b>  en=0;</b></p><

90、p><b>  rs=0;</b></p><p><b>  delay(5);</b></p><p><b>  P0=com;</b></p><p><b>  delay(5);</b></p><p><b>  en=1;&

91、lt;/b></p><p><b>  delay(5);</b></p><p><b>  en=0;</b></p><p><b>  }</b></p><p>  void write_data(uchar dat) //寫數(shù)據(jù)函數(shù)</p>

92、<p><b>  {</b></p><p><b>  en=0;</b></p><p><b>  rs=1;</b></p><p><b>  delay(5);</b></p><p><b>  P0=dat;<

93、/b></p><p><b>  delay(5);</b></p><p><b>  en=1;</b></p><p><b>  delay(5);</b></p><p><b>  en=0;</b></p><p&

94、gt;<b>  }</b></p><p><b>  4.2.7 初始化</b></p><p>  void init() {</p><p><b>  en=0;</b></p><p><b>  rw=0;</b></p>&

95、lt;p>  write_com(0x38);//設(shè)置16X2顯示,5X7點陣,8位數(shù)據(jù)接口</p><p>  write_com(0x0c);//設(shè)置開顯示,不顯示光標</p><p>  write_com(0x06);//寫一個字符后地址指針加1</p><p>  write_com(0x01);//顯示清零,數(shù)據(jù)指針清零</p>&l

96、t;p>  4.2.8 LCD開始寫入程序: </p><p>  for(i=0;i<(sizeof(table)-1);i++) //第一行寫</p><p><b>  {</b></p><p>  write_com(0x80+i);</p><p>  write_data(table

97、[i]);</p><p><b>  }</b></p><p>  for(i=0;i<(sizeof(table1)-1);i++) //第二行寫</p><p><b>  {</b></p><p>  write_com(0x80+0x40+i);</p><p

98、>  write_data(table1[i]);</p><p><b>  }</b></p><p><b>  miao=05;</b></p><p><b>  fen=30;</b></p><p><b>  shi=12; </b>

99、</p><p>  4.2.9定時器工作方式的選擇:</p><p>  TMOD=0x01; //time0作為定時器工作在模式1下</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p>  EA=1; //開啟總

100、中斷</p><p>  ET0=1; //開啟time0中斷</p><p>  TR0=1; //啟動time0</p><p><b>  }</b></p><p>  4.2.10時分秒顯示函數(shù):</p><p>  void write_sfm(uchar add,uchar

101、num) </p><p><b>  {</b></p><p>  sh=num/10; //分離出十位</p><p>  ge=num%10; //分離出個位</p><p>  write_com(0x80+0x40+add); //第二行數(shù)據(jù)指針位置調(diào)整</p><p> 

102、 write_data(0x30+sh); //更改顯示數(shù)據(jù)的十位</p><p>  write_data(0x30+ge); //更改顯示數(shù)據(jù)的個位</p><p><b>  }</b></p><p>  4.2.11 中斷函數(shù):</p><p>  void timer0() interrupt 1 //

103、time0中斷</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256; //重裝初始值</p><p>  TL0=(65536-50000)%256;</p><p>  count++; </p><p>  if(count==10)

104、 //20次到則滿一秒</p><p><b>  {</b></p><p><b>  count=0;</b></p><p><b>  miao++;</b></p><p>  if(miao==60)</p><p><b> 

105、 {</b></p><p><b>  miao=0;</b></p><p><b>  fen++;</b></p><p>  if(fen==60)</p><p><b>  {</b></p><p><b>  fe

106、n=0;</b></p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p><b>  {</b></p><p>  shi=0; </p><p><b>  }</b><

107、/p><p>  write_sfm(4,shi); </p><p><b>  }</b></p><p>  write_sfm(7,fen); </p><p><b>  } </b></p><p>  write_sfm(10,miao);</p

108、><p><b>  }</b></p><p><b>  }</b></p><p>  4.2.12 鍵盤掃描程序:</p><p>  void keyscan() </p><p>  { if(K1==0) //按下K1 </p><

109、p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(K1==0)</b></p><p>  { num1++; </p><p>  while(!K1);//等待釋放 <

110、/p><p>  if(num1==1)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  write_com(0x0e); //顯示光標,不閃爍</p><p>  write_com(0x80+0x40+0x0b)

111、; //數(shù)據(jù)指針移動到秒的個位處</p><p>  write_com(0x0f);//顯示光標,閃爍 </p><p><b>  }</b></p><p>  if(num1==2)</p><p><b>  {</b></p><p>  write_com(0

112、x80+0x40+0x08); //數(shù)據(jù)指針移到到分鐘的個位處</p><p><b>  } </b></p><p>  if(num1==3)</p><p><b>  { </b></p><p>  write_com(0x80+0x40+0x05); //數(shù)據(jù)指針移到

113、到小時的個位處</p><p><b>  }</b></p><p>  if(num1==4)</p><p><b>  {</b></p><p>  num1=0; //清零</p><p>  write_com(0x0c); //重新顯示</p&g

114、t;<p>  TR0=1; //重新啟動計時 </p><p><b>  } </b></p><p><b>  }</b></p><p><b>  } </b></p><p>  if(num1!=0) //按下K2則選擇時/分/秒加1

115、</p><p><b>  { </b></p><p><b>  if(K2==0)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b> 

116、 if(K2==0)</b></p><p><b>  {</b></p><p>  while(!K2); </p><p>  if(num1==1) </p><p><b>  {</b></p><p>  delay(2

117、0);</p><p><b>  miao++;</b></p><p>  if(miao==60) </p><p><b>  miao=0;</b></p><p>  write_sfm(10,miao); </p><p>  write

118、_com(0x80+0x40+0x0a);</p><p><b>  }</b></p><p>  if(num1==2)</p><p><b>  {</b></p><p><b>  fen++;</b></p><p>  if(fen==

119、60)</p><p><b>  fen=0;</b></p><p>  write_sfm(7,fen); </p><p>  write_com(0x80+0x40+0x07);</p><p><b>  }</b></p><p>  i

120、f(num1==3)</p><p><b>  {</b></p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p><b>  shi=0;</b></p><p>  write_sfm(4,sh

121、i); </p><p>  write_com(0x80+0x40+0x04);</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><

122、;p>  } </p><p>  if(num1!=0)</p><p>  if(K3==0) //按下K3則選擇時/分/秒 減1</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>&

123、lt;b>  if(K3==0)</b></p><p><b>  {</b></p><p>  while(!K3);</p><p>  if(num1==1)</p><p><b>  {</b></p><p>  delay(20);<

124、/p><p><b>  miao--;</b></p><p>  if(miao==-1)</p><p><b>  miao=59;</b></p><p>  write_sfm(10,miao); </p><p>  write_com(0x80+0x40

125、+0x0a);</p><p><b>  }</b></p><p>  if(num1==2)</p><p><b>  {</b></p><p><b>  fen--;</b></p><p>  if(fen==-1)</p>

126、<p><b>  fen=59;</b></p><p>  write_sfm(7,fen); </p><p>  write_com(0x80+0x40+0x07);</p><p><b>  }</b></p><p>  if(num1==3)</p>

127、<p><b>  {</b></p><p><b>  shi--;</b></p><p>  if(shi==-1)</p><p><b>  shi=23;</b></p><p>  write_sfm(4,shi); </p&g

128、t;<p>  write_com(0x80+0x40+0x04);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(num1!=0)</p><

129、p>  if(K4==0) //確定按鍵K4</p><p><b>  { </b></p><p><b>  delay(5);</b></p><p><b>  if(K4==0)</b></p><p><b>  {</b><

130、/p><p>  while(!K4);</p><p>  num1=0; //清零</p><p>  write_com(0x0c); //重新顯示</p><p>  TR0=1; //重新啟動計時 </p><p><b>  }</b></p><p&

131、gt;<b>  } </b></p><p><b>  }</b></p><p>  4.2.13 主函數(shù):</p><p>  void main()</p><p><b>  {</b></p><p><b>  init();&

132、lt;/b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();</p><p><b>  }</b></p><p><b>  }</b>

133、;</p><p><b>  4.3生成代碼文件</b></p><p> ?。?)在選項卡項目欄下我們的時鐘周期通常設(shè)置為12MHz</p><p> ?。?)輸出欄中選擇產(chǎn)生HEX文件(此文件為最終仿真用文件)見圖4-4</p><p><b>  圖4-2</b></p>&l

134、t;p> ?。?)在C51欄中級別設(shè)置為2數(shù)據(jù)覆蓋</p><p>  (4)添加并建立目標文件直至通過生成.HEX文件,如圖4-5</p><p>  圖4-3 </p><p><b>  4.4 軟件調(diào)試</b></p><p>  4.4.1程序的仿真Proteue ISIS軟件:</p&

135、gt;<p>  Proteus ISIS是英國 Labcenter公司開發(fā)的電路設(shè)計、分析與仿真軟件,功能極其強 大。該軟件的主要特點是: </p><p> ?。?)集原理圖設(shè)計、仿真分析(ISIS) 和印刷電路板設(shè)計(ARES) 于一身??梢酝瓿蓮睦L制原理圖、仿真分析到生成印刷電路板圖的整個硬件開發(fā)過程。 </p><p> ?。?)提供幾千種電子元件(分立元件和集成電

136、路、模擬和數(shù)字電路)的電路符號、仿 真模型和外形封裝。 </p><p>  (3)支持大多數(shù)單片機系統(tǒng)以及各種外圍芯片(RS232動態(tài)仿真I2C調(diào)試器、SPI調(diào)試器、鍵盤LCD系統(tǒng)仿真等)的仿真。 </p><p> ?。?)提供各種虛擬儀器,如各種測量儀表、示波器、邏輯分析儀、信號發(fā)生器等。 </p><p>  4.4.2 具體步驟:</p>&

137、lt;p> ?。?)畫出電子鐘仿真原理圖(圖3-1)</p><p> ?。?)單機AT89C51加載1602電子鐘HEX文件如圖4-4</p><p>  (3)對程序進行仿真如圖4-5</p><p><b>  結(jié)論</b></p><p>  采用AT89C51單片機設(shè)計的電子時鐘具有較好的定時功能,定時

138、更精確。將單片機與1602LCD及其相關(guān)硬件電路連接起來,完成電子鐘的功能。</p><p>  通過用keil C51軟件編寫程序,生成.Hex文件,再通過protues ISIS軟件畫出硬件電路進行仿真。這樣避免了因硬件電路的設(shè)計不合理而造成的實物硬件電路板的焊接錯誤,而達不到預(yù)期的實驗結(jié)果。合理的電路設(shè)計加上功能模塊實現(xiàn)用1602LCD設(shè)計電子鐘的功能。</p><p>  軟件設(shè)計

139、時,在剛開始編寫程序時由于漏寫了1602LCD顯示器的顯示程序,導(dǎo)致在硬件仿真是顯示器白屏,沒有任何顯示。在將程序補進去后顯示器正常工作,顯示出實驗理想的效果。</p><p>  硬件設(shè)計時,由于PCB板式未經(jīng)布線的,所以元器件的聯(lián)系都要通過導(dǎo)線的連接建立起關(guān)聯(lián),這就加大了線路鏈接的復(fù)雜度。由于連線比較多,引腳很容易認錯。在焊接前我們采用有簡單到復(fù)雜,先連接相鄰的引腳,這樣連接時布線就更有層次,而且也不容易出錯

140、、也不會出現(xiàn)引腳錯連的故障。</p><p><b>  參考文獻</b></p><p>  [1]胡翔駿.電路基礎(chǔ)簡明教程[M].北京:高等教育出版社.2010-11</p><p>  [2]胡宴如.模擬電子技術(shù)[M].北京:高等教育出版社2011-2</p><p>  [3]楊志忠.數(shù)字電子技術(shù)[M].北

141、京:高等教育出版社2010-12</p><p>  [4]汪吉鵬.微機原理與接口技術(shù)[M]. 北京:高等教育出版社2011-7</p><p>  [5]崔武子、付鈧、孫力紅.C語言程序設(shè)計[M].北京:清華大學(xué)出版社2010-3</p><p>  [6]潘新民、王燕芳 .微型計算機控制技術(shù)[M].北京:電子工業(yè)出版社 2010-1</p>

142、<p>  [7]廖超平.EDA技術(shù)與VHDL實用教程[M].北京:高等教育出版社.20108-6</p><p>  [8]張秀國.單片機C語言程序設(shè)計教程與實訓(xùn)[M].北京:北京大學(xué)出版社.2010-6</p><p>  [9]廖芳.電子產(chǎn)品制作工藝與實訓(xùn)[M].北京:電子工業(yè)出版社.2011-1</p><p>  [10]周國雄、晏密英.單片

143、機應(yīng)用系統(tǒng)設(shè)計精講.中國鐵道出版社.2012-3</p><p>  [11]陳濤.單片機應(yīng)用及C51程序設(shè)計.機械工業(yè)出版社.2010-1</p><p>  [12]夏路易.單片機技術(shù)基礎(chǔ)教程與實踐.電子工業(yè)出版社.2010-1</p><p><b>  附錄</b></p><p>  通過對電路原理圖的分析列出

溫馨提示

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

評論

0/150

提交評論