LCD顯示的秒表單片機課程設計_第1頁
LCD顯示的秒表單片機課程設計_第2頁
LCD顯示的秒表單片機課程設計_第3頁
LCD顯示的秒表單片機課程設計_第4頁
LCD顯示的秒表單片機課程設計_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

蕪湖職業(yè)技術學院 信息工程系單 片 機 課 程 設 計題目:1602LCD顯示的秒表系別/班級:信息工程系 11級嵌入式技術與應用專業(yè)小組成員:王玉瑤 吳秋云吳穎盈 項念念小組成員學號: 11蕪湖職業(yè)技術學院 信息工程系目錄132334454.1AT89C5154.21602LCD85166217298319361602LCD 372蕪湖職業(yè)技術學院 信息工程系1602LCD秒表的顯示原理圖 43一、單片機原理單片機控制秒表是集于單片機技術、模擬電子技術、數(shù)字技術為一體的機電一體化高科技產(chǎn)品,具有功耗低,安全性高,使用方便等優(yōu)點。它是一種在線式實時控制計算機,需要有較強的抗干擾能力,較低的成本。本次設計內容為以8051單片機為核心的秒表,采用數(shù)碼管顯示,單片機技術控制。利用單片機的定時器 /計數(shù)器定時和技術的原理,用集成電路芯片、 LCD數(shù)碼管以及按鍵來設計計時器。將軟、硬件有機地結合起來,使它擁有正確的計時、暫停、清零、并同時可以用數(shù)碼管顯示,在現(xiàn)實生活中應用廣泛。二、課程設計的任務與要求設計任務:利用 AT89C51單片機結合1602LCD顯示器設計一個秒表設計要求:1.本設計實現(xiàn)一個 1602LCD顯示秒表2. 利用AT89C51控制整個電路來實現(xiàn)秒表的顯示。大體上可以講1602LCD秒表的顯示主要包括硬件和軟件兩部分。 重點就是各部分硬件的連接設計以及程序的編寫。 本章講述的就是系統(tǒng)硬件的設計,其中包括各模塊的器件選擇和電路設計。3蕪湖職業(yè)技術學院 信息工程系三、 課程設計目的《MCS-51單片機原理及應用》課的課程設計是四個學生一組完成一個老師給的一個題目,叫1602LCD顯示的秒表。為了讓我們能夠綜合運用自己學的課程的基本知識, 能夠進行單片機的應用,掌握單片機程序設計調試和應用電路設計、分析及調試檢測。通過這個實驗:、使我們增進對單片機知識的進一步認識,也同時加深對單片機理論知識的理解。2、使我們掌握單片機的內部功能模塊的應用,3、使我們了解和掌握單片機應用系統(tǒng)的軟硬件設計過程, 方法即實現(xiàn),為了以后設計和實現(xiàn)單片機應用系統(tǒng)打下基礎。四、芯片資料4、1AT89C514蕪湖職業(yè)技術學院 信息工程系AT89C51是128字節(jié)內部RAM,4KB可編程Flash存儲器(可擦寫1000次),三級程序存儲器保密,靜態(tài)工作頻率:0Hz-24MHz,2個16位定時/計數(shù)器,一個串行通訊口,6個中斷源,32條I/O引線,有片內時種振蕩器。輸入輸出引腳資料:P0端口[P0.0-P0.7]P0是一個8位漏極開路型雙向I/O端口,端口置1(對端口寫1)時作高阻抗輸入端。作為輸出口時能驅動8個TTL。在訪問外部程序和外部數(shù)據(jù)存儲器時, P0口是分時轉換的地址(低8位)/數(shù)據(jù)總線,訪問期間內部的上拉電阻起作用。P1端口[P1.0-P1.7]P1是一個帶有內部上拉電阻的8位雙向I/0端口。輸出時可驅動4個TTL。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。5蕪湖職業(yè)技術學院 信息工程系P2端口[P2.0-P2.7]P2是一個帶有內部上拉電阻的8位雙向I/0端口。輸出時可驅動4個TTL。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。在訪問外部程序和16位外部數(shù)據(jù)存儲器時,P2口送出高8位地址。而在訪問8位地址的外部數(shù)據(jù)存儲器時其引腳上的內容在此期間不會改變。P3端口[P3.0-P3.7]P2是一個帶有內部上拉電阻的8位雙向I/0端口。輸出時可驅動4個TTL。端口置1時,內部上拉電阻將端口拉到高電平,作輸入用。其它控制或復用引腳:ALE/PROG30訪問外部存儲器時,ALE(地址鎖存允許)的輸出用于鎖存地址的低位字節(jié)。即使不訪問外部存儲器,ALE端仍以不變的頻率輸出脈沖信號(此頻率是振蕩器頻率的1/6)。在訪問外部數(shù)據(jù)存儲器時,出現(xiàn)一個ALE脈沖。PSEN29該引是外部程序存儲器的選通信號輸出端。當AT89C51由外部程序存儲器取指令或常數(shù)時, 每個機器周期輸出 2個脈沖即兩次有效。但訪問外部數(shù)據(jù)存儲器時,將不會有脈沖輸出。EA/Vpp31外部訪問允許端。當該引腳訪問外部程序存儲器時,應輸入低電平。要使AT89C51只訪問外部程序存儲器(地址為0000H-FFFFH),這時該引腳必須保持低電平。6蕪湖職業(yè)技術學院 信息工程系AT89C51特殊功能寄存器列表(適用于同一架構的芯片)符號地址注釋*ACCE0H累加器*BF0H乘法寄存器*PSWD0H程序狀態(tài)字SP81H堆棧指針DPL82H數(shù)據(jù)存儲器指針低8位DPH83H數(shù)據(jù)存儲器指針高8位*IEA8H中斷允許控制器*IPD8H中斷優(yōu)先控制器*P080H端口0*P190H端口1*P2A0H端口2*P3B0H端口3PCON87H電源控制及波特率選擇*SCON98H串行口控制器SBUF99H串行數(shù)據(jù)緩沖器*TCON88H定時器控制TMOD89H定時器方式選擇TL08AH定時器0低8位TL18BH定時器1低8位TH08CH定時器0低8位TH18DH定時器1高8位帶*號的特殊功能寄存器都是可以位尋址的寄存器4.11602LCD7蕪湖職業(yè)技術學院 信息工程系1602字符型LCD簡介:字符型液晶顯示模塊是一種專門用于顯示字母、 數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。1602LCD分為帶背光和不帶背光兩種,基控制器大部分為 HD44780.1602LCD主要技術參數(shù):顯示容量:16×2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能說明:1602LCD采用標準的14腳(無背光)或 16腳(帶背光)接口,各引腳接口說明如下表 1所示:編號 符號 引腳說明 編號 符號 引腳說明1 VSS 電源地 9 D2 數(shù)據(jù)2 VDD 電源正極 10 D3 數(shù)據(jù)3 VL 液晶顯示偏壓 11 D4 數(shù)據(jù)4 RS 數(shù)據(jù)/命令選擇 12 D5 數(shù)據(jù)8蕪湖職業(yè)技術學院 信息工程系5 R/W 讀/寫選擇 13 D6 數(shù)據(jù)6 E 使能信號 14 D7 數(shù)據(jù)7 D0 數(shù)據(jù) 15 BLA 背光源正極8 D1 數(shù)據(jù) 16 BLK 背光源負極表1:引腳接口說明第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。9蕪湖職業(yè)技術學院 信息工程系第15腳:背光源正極。第16腳:背光源負極。1602LCD的指令說明及時序:1602液晶模塊內部的控制器共有 11條控制指令,如下表 2所示:表2:控制命令表1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內容實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼 01H,光標復位到地址 00H位置。10蕪湖職業(yè)技術學院 信息工程系指令2:光標復位,光標返回到地址 00H。指令3:光標和顯示模式設置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關控制。D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示C:控制光標的開與關,高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示 5x10的點陣字符。指令7:字符發(fā)生器RAM地址設置。指令8:DDRAM地址設置。指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。11蕪湖職業(yè)技術學院 信息工程系與HD44780相兼容的芯片時序下表 3如下:讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0—D7=狀態(tài)字寫指令輸入RS=L,R/W=L,D0—D7=指令碼,E=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0—D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖輸出無表3:基本操作時序表讀寫操作時序如圖 2和3所示:圖2讀操作時序圖3寫操作時序1602LCD的RAM地址映射及標準字庫表 :12蕪湖職業(yè)技術學院 信息工程系液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平, 表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,圖 4是1602的內部顯示地址。圖41602LCD內部顯示地址例如第二行第一個字符的地址是 40H,因為寫入顯示地址時要求最高位D7恒定為高電平 1所以實際寫入的數(shù)據(jù)應該是 01000000B40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài) 。1602液晶模塊內部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如圖5所示,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼13蕪湖職業(yè)技術學院 信息工程系圖5字符代碼與圖形對應圖1602LCD的一般初始化(復位)過程 :延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設置14蕪湖職業(yè)技術學院 信息工程系寫指令08H:顯示關閉寫指令01H:顯示清屏寫指令06H:顯示光標移動設置寫指令0CH:顯示開及光標設置五、電路分析總體設計分析本系統(tǒng)中,硬件電路主要有電源電路,晶振電路,復位電路,顯示電路以及一些按鍵電路等,本系統(tǒng)采用AT89C51單片機為中心器件,利用定時器計數(shù)器定時和記數(shù)的原理,結合硬件電路如電源電路,晶振電路,復位電路,顯示電路,蜂鳴器電路以及一些按鍵電路等來設計計數(shù)器,將軟、硬件有機地結合起來。硬件系統(tǒng)采用PROTEUS功能來實現(xiàn),簡單且易于觀察,在仿真中就可以觀察到實際的工作狀態(tài)。5.1電源電路電源電路是系統(tǒng)最基本的部分,任何電路都離不開電源部分,隨著半導體工藝的發(fā)展,穩(wěn)壓電路也采用集成電路器件來制成??刹捎锚毩⒌姆€(wěn)壓電源。這種供電方式的優(yōu)點是穩(wěn)壓可靠,且有各種成熟電路可供選擇。由集成穩(wěn)壓器具有體積小,外界線路簡單,使用方便,工作可靠等優(yōu)點。因此,在各種電子設備中應用十分普遍,為了跟上15蕪湖職業(yè)技術學院 信息工程系時代的發(fā)展,可采用W7800系列三端穩(wěn)壓器,主要利用它的輸出電壓是固定的在使用中不能進行調整等優(yōu)點。5.2晶振電路AT89C51內部的振蕩電路是一個高增益反相放大器,引腳RXD和TXD分別是此反向振蕩放大器的輸入端和輸出端。該反向放大器可以配置為內部方式的片內振蕩器。如圖所示,這里選用12MHE的內部振蕩方式,電路如下:電容器C1,C2起穩(wěn)定振蕩頻率,快速起振的作用,C1,C2可在20~100PF之間取,這里取30PF,接線時要使晶振振蕩器盡可能接近單片機。5.3復位電路采用上電+按鍵復位電路,上電后,由于電容充電,使 RST持續(xù)一段時間高電平時間。當單片機已在運行之中時,按下復位按鍵也能使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電加開關復位的操作。這不僅能時單片機復位,而且還能使單片機的外圍芯片也同時復位,當程序出現(xiàn)錯誤時,可以隨時使電路復位。16蕪湖職業(yè)技術學院 信息工程系復位是單片機的初始化操作。其主要功能是把 PC初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化之外,當由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時, 為擺脫困境,也需按復位鍵重新啟動。除 PC之外,復位操作還對其他一些寄存器有影響,它們的復位狀態(tài)如表 1所示。寄存器復位狀態(tài)寄存器復位狀態(tài)PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3FFHSCON00HIPXX000000BSBUF不定IE0X000000BPCON0XXX0000BTMOD00H表1一些寄存器的復位狀態(tài)因STC89C52單片機需高電平(3.7~5.5V)復位,且復位時流入單片機的電流不能超過10mA。具體參數(shù):根據(jù)所需要的復位參數(shù)可得當按下SW鍵時出現(xiàn)兩個機器周期的高電平在單片機REST端產(chǎn)生的壓降等于:VCCR2=5V)10K4.17VR1R2(0.2K1K17蕪湖職業(yè)技術學院 信息工程系圖復位電路5.4顯示電路顯示電路既可以選用液晶顯示器,也可以選用數(shù)碼管顯示,我們采用液晶顯示電路1602LCD引腳接口說明編號符號引腳說明編號符號引腳說明1VSS電源地9D2DataI/O2VDD電源正極10D3DataI/O3VL液晶顯示偏壓信號11D4DataI/O4RS數(shù)據(jù)命令選擇端口(H/L)12D5DataI/O5R/W讀/寫選擇端(H/L)13D6DataI/O6E使能信號14D7DataI/O7D1DataI/O15BLA背光源正極8D1DataI/O16BLK背光源負極顯示電路部分引腳分析 :3腳:VL,液晶顯示偏壓信號,用于調整 LCD1602的顯示對比度,一般會外接電位器用以調整偏壓信號,此腳電壓為0時可以得到最強的對比度。18蕪湖職業(yè)技術學院 信息工程系4腳:RS,數(shù)據(jù)/命令選擇端,當此腳為高電平時,可以對1602進行數(shù)據(jù)字節(jié)的傳輸操作,而為低電平時,則是進行命令字節(jié)的傳輸操作。命令字節(jié),即是用來對LCD1602的一些工作方式作設置的字節(jié); 數(shù)據(jù)字節(jié),即使用以在 1602上顯示字節(jié)。5腳:R/W,讀寫選擇端。當此腳為高電平可對 LCD1602進行讀數(shù)據(jù)操作,反之進行寫數(shù)據(jù)操作。6腳:E,使能信號,其實是 LCD1602的數(shù)據(jù)控制時鐘信號,利用該信號的上升沿實現(xiàn)對 LCD1602的數(shù)據(jù)傳輸。7~14腳:8位并行數(shù)據(jù)口,使得對 LCD1602的數(shù)據(jù)讀寫大為方便?;静僮鲿r序:1)讀狀態(tài):輸入:RS=L,RW=H,E=H;輸出:D0~D7=狀態(tài)字2)寫指令:輸入:RS=L,RW=L,D0~D7=指令碼,E=高脈沖;輸出:無3)讀數(shù)據(jù):輸入:RS=H,RW=H,E=H;輸出:D0~D7=數(shù)據(jù)4)寫數(shù)據(jù):輸入:RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖;輸出:無需要兩個寫時序:①當我們要寫指令字,設置LCD1602的工作方式時:需要把RS置為低電平,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一個高脈沖將數(shù)據(jù)寫入。②當我們要寫入數(shù)據(jù)字,在1602上實現(xiàn)顯示時:需要把RS置為高電平,RW置為低電平,然后將數(shù)據(jù)送到數(shù)據(jù)口D0~D7,最后E引腳一19蕪湖職業(yè)技術學院 信息工程系個高脈沖將數(shù)據(jù)寫入。六、代碼分析#include<reg51.h>,#include<intrins.h> 皆屬于頭文件,前者是定義 51單片機特殊功能寄存器和位寄存器的,后者包含特殊指令例如: crol(),cror() 。#defineucharunsignedchar,#defineuintunsignedint,define delayNOP(){nop();nop();nop()} 皆屬于宏定義,后者是將三個延時周期定義在一起,用一個 delayNOP()表示。VoidLCD_intialize,voidLCD_Set_POS(uchar),voidDisplay_String(char*,char) ;皆為調用函數(shù),第一個是調用 LCD20蕪湖職業(yè)技術學院 信息工程系初始化函數(shù);第二個是調用 LCD的顯示位置函數(shù);第三個是調用 LCD寫數(shù)據(jù)函數(shù);第四個是調用 LCD指定行上顯示字符串函數(shù)。SbitK1=P1^0,sbitK2=P2^1,sbitBEEP=3^0,sbitLCD_RS=P2^0,sbitLCD_RW=P2^1,sbitLCD_EN=P2^2;皆為個函數(shù)接口聲明,定義K1、K2為兩個控制開關;定義BEEP為揚聲器接口;RS為寄存器選擇高電平(1)時選擇數(shù)據(jù)寄存器、低電平(0)時選擇指令寄存器;RS為讀寫信號,高電平(1)時驚醒讀操作,低電平(0)時進行寫操作;E(或EN)端為使能端(enable),將單片機與LCD1602顯示器連接。UcharKeyCount=0;KeyCount 為按鍵計數(shù)變量,用于累計按鍵的次數(shù)。定義其為無符號整型,并且付初值為 0.uchar code msg1[]={"Second Watch 0 "} ,uchar codemsg2[]={">>>> "} ;定義兩個一維數(shù)組,在 protues 仿真軟件中,當按下 play鍵后,1602LCD顯示屏是會出現(xiàn)這兩個數(shù)組中的字符。ucharcodePrompts[][16]={{"::1---->"},{"::2---->::2"},{"::1->2::3-->"},{"::1->2::3-->4"}21蕪湖職業(yè)技術學院 信息工程系}定義一個二維數(shù)組,將其中的一維顯示于 1602LCD上。K1為啟??刂瓢粹o,第一次按下時開始計數(shù),顯示“: :1-- ”;當?shù)诙伟聪聲r停止計數(shù),顯示 "::2---->::2 " ;uchar Time_Buffer[] ={0,0,0,0} , ucharLCD_Display_Buffer[] ={"00:00:00:00"}; 定義兩個數(shù)組,一個用于計時緩沖,一個用于顯示時間緩沖。voidBeeP(){uchari,j=70;for(i=0;i<180;i++){while(--j);BEEP=~BEEP;}BEEP=0;}定義一個調用蜂鳴器的子函數(shù)。For(i=0;i<180;i++)用于控制蜂鳴器響的時間,BEEP=~BEEP用于使蜂鳴器進行短暫的響一下又不響的效果。因為蜂鳴器接地,只有當P3.0接入高電平(即1)時,蜂鳴器才工作。所以在響了一聲過后,級(執(zhí)行完成之后)將BEEP賦值為0,讓它處于不導通狀態(tài),蜂鳴器不響。voidDelayX(uintms){22蕪湖職業(yè)技術學院 信息工程系uchari;while(ms--)for(i=0;i<120;i++);}定義一個延時子函數(shù)voidShow_Second(){uchari;LCD_Set_POS(0X45); 設置LCD顯示起點for(i=3;i!=0xff;i--){將兩位整數(shù)的1、100s,秒,分,時轉換為 8位數(shù)字字符LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'0';在i=3,2,1,0時分別顯示時,分,秒,1/100sLCD_Write_Data(LCD_Display_Buffer[2*i+1]);LCD_Write_Data(LCD_Display_Buffer[2*i]);LCD_Write_Data(':');}定義顯示計時函數(shù)}LCD_Set_POS(0X45),調用函數(shù),用于調用設置顯示位置函數(shù),在此子函數(shù)中又嵌套了一個函數(shù)調用,LCD_Write_Command(Position|0X80) ( 即LCD_Write_Command(0X45|0X80))函數(shù)。進行或操作:23蕪湖職業(yè)技術學院 信息工程系45010001018010000000C511000101或操作后得到結果 C5,即LCD_Write_Command(0XC5),調用該函數(shù)(即向LCD寫指令函數(shù))。LCD_Busy_Check()用于檢測LCD是否處于忙狀態(tài),假如處于忙狀態(tài), RS為0(選擇指令寄存器),RW為1(進行讀操作),EN為1(寄存器使能)。DelayNOP()表示延時四個機器周期。Result=(bit)(P0&0X80) ,P0的初始狀態(tài)是FF.進行與操作:FF1111111180100000008010000000與操作后得到的結果80,即return為80(10000000)將EN賦值為0,即寄存器使能端禁止用。返回至LCD寫指令子程序,RS=0(選擇指令寄存器),RW=0(進行寫操作),EN=0(使能端禁止使用)。延時兩個機器周期,將 cmd(0XC5)的值賦給P0口,延時四個空白機器周期。使能端置1,延時四個空白機器周期。EN=0寄存器禁止使用。voidTime0()interrupt1using0{TH0=-10000/256;TL0=-10000%256;24蕪湖職業(yè)技術學院 信息工程系Time_Buffer[0]++;if(Time_Buffer[0]==100){Time_Buffer[0]=0;Time_Buffer[1]++;}if(Time_Buffer[1]==60) // 秒{Time_Buffer[1]=0;Time_Buffer[2]++;}if(Time_Buffer[2]==60) // 分{Time_Buffer[2]=0;Time_Buffer[3]++;}if(Time_Buffer[3]==24) // 時Time_Buffer[3]=0;}此函數(shù)為中斷函數(shù),interrupt1using0 為定時器T0工作于0號寄存器,TH0=-10000/256,TL0=-10000%256,用于計算定時器的初值,除得的放在高八位,余的的放在第八位。接下來的代碼用于控制在1602LCD顯示屏中秒表自動進位換算的的效果, (1小時=60分鐘,1分鐘=60秒,1秒=100毫秒)當小時到達 24時,清零。voidmain(){25蕪湖職業(yè)技術學院 信息工程系uchari;IE=0x82;TMOD=0X01;TH0=-10000/256;TL0=-10000%256;LCD_Initialize();Display_String(msg1,0x00);Display_String(msg2,0x40);While(1){if(K1==0){DelayX(100);i=++KeyCount;switch(i){Case1:Case3:TR0=1;Display_String(Promts[i-1],0);break;Case2:Case4:TR0=0;26蕪湖職業(yè)技術學院 信息工程系Display_String(Promts[i-1],0);break;default:TR0=0;break;}while(K1==0);Beep();}elseif(K2==0){TR0=0;KeyCount=0;for(i=0;i<4;i++)Time_Buffer[i]=0;Display_String(msg1,0);Beep();DelayX(100);While(K2==0);}Show_Second();}27蕪湖職業(yè)技術學院 信息工程系}主函數(shù),中斷允許寄存器 IE,IE=0x82=10000010表示EA為1,CPU開放中斷;ET0=1,允許外部中斷 1中斷。定時/計數(shù)器方式控制寄存器TMOD,TMOD=0x01=00000001,表示在T0方式字段中工作方式為方式1,是定時器方式,定時器的技術不受外部引腳輸入電平的控制,而只受定時器運行控制位( TR0、TR1)的控制。進行高低8為賦初值。接著調用初始化 LCD子函數(shù),在其子函數(shù)中進行順序執(zhí)行, 每個都先延時5毫秒,接著調用寫指令函數(shù)。返回至主程序。接著調用顯 示 函 數(shù) , 在 LCD 指 定 行 上 顯 示 字 符 串 ,Display_String(msg1,0x00) ,msg1為一個一維數(shù)組(SecondWatch0),即Display_String(Second Watch0,0x00),在該子函數(shù)中調用設置顯示位置子函數(shù),在該子函數(shù)中調用寫指令子函數(shù)進行或操作:000000000080100000008010000000與操作后得到結果為 80,即LCD_Write_Command(0X80),調用該函數(shù)(即向LCD寫指令函數(shù))。LCD_Busy_Check()用于檢測LCD是否處于忙狀態(tài),假如處于忙狀態(tài),RS為0(選擇指令寄存器),RW為1(進行讀操作),EN為1(寄存器使能)。DelayNOP()表示延時四個機器周期。Result=(bit)(P0&0X80) ,P0的初始狀態(tài)是FF.進行與操作:28蕪湖職業(yè)技術學院 信息工程系FF1111111180100000008010000000與操作后得到的結果80,即return為80(10000000)將EN賦值為0,即寄存器使能端禁止用。返回至LCD寫指令子程序,RS=0(選擇指令寄存器),RW=0(進行寫操作),EN=0(使能端禁止使用)。延時兩個機器周期,將 cmd(0X80)的值賦給P0口,延時四個空白機器周期。使能端置1,延時四個空白機器周期。EN=0寄存器禁止使用。Display_String(msg2,0x40); 該調用函數(shù)類似于上面所述。 While(1)進入死循環(huán)。在里面進行著秒表的計數(shù)功能,以及蜂鳴器的工作。七、設計分析7、1系統(tǒng)設計分析設計的電路主要是能多次記時和查詢時間, 記時的多少通過顯示電路顯示出來,每一次計時可以通過控制電路查詢出來。 設計框圖如圖2-1所示;用1602LCD設計的秒表系統(tǒng)框圖外圍電路顯示電路單片機電源電路 鍵盤電路29蕪湖職業(yè)技術學院 信息工程系7、2顯示部分設計分析顯示部分是本次設計的重要部分,一般有以下兩種方案:方案一:采用LED顯示,在單片機應用系統(tǒng)中最常用的 LED數(shù)碼管為7段數(shù)碼管,可利用LED顯示器靈活地構成所要求位數(shù)的顯示,分靜態(tài)顯示和動態(tài)顯示。對于靜態(tài)顯示方式,所需的譯碼驅動裝置很多,引線多而復雜,且可靠性也較低。而對于動態(tài)顯示方式,雖可以避免靜態(tài)顯示的問題,但設計上如果處理不當,易造成亮度低,有閃爍等問題。方案二:采用LCD顯示。是一種低功耗顯示器件,具有顯示內容豐富、體積小、重量輕、壽命長、使用方便、安全省電等優(yōu)點,在計算器、萬用表、袖珍式儀表和低功耗微機應用系統(tǒng)中得到廣泛使用。 其顯示的質量高,每個顯示器每一點在收到信號后就一直保持那種彩色和亮度,恒定發(fā)光,而不像陽極射線管顯示器那樣刷新亮點, 畫面質量高且不閃爍。鑒于上述原因,我們采用方案二。7、3軟件設計分析在軟件設計中,一般采用模塊化的程序設計方法,它具有明顯的優(yōu)點。把一個多功能的復雜程序劃分為若干個簡單的、功能單一的程序模塊,有利于程序的設計和調試,有利于程序的優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結構層次一目了然??偭鞒虉D:30蕪湖職業(yè)技術學院 信息工程系八、調試成功與否圖一 剛啟動時截圖31蕪湖職業(yè)技術學院 信息工程系圖二運行時截圖圖三按下清零后截圖調試成功,調試結果如上圖所示。32蕪湖職業(yè)技術學院 信息工程系KeilC51 軟件是目前最流行的開發(fā) 8051系列的單片機的軟件工具。KeilC51 提供了包括 C語言編譯器,宏匯編,連接器,庫管理和一個功能強大的仿真調試器等在內的完整開發(fā)方案, 通過一個集成開發(fā)環(huán)境uVision3IDE 將這些部分結合起來。打開Keil 軟件,將代碼輸入調試并在錯誤全被解決的情況下生成對應的hex文件;打開Proteus軟件,將對應的原理圖和生成的 hex文件連接。在調試過程中我們出現(xiàn)了如下錯誤:1:“單機錯誤信息,讓指針跳到錯誤行,一步步調試之后得知是代碼輸入時輸入法錯誤,把大寫” V”改寫為小寫”v”。2:33蕪湖職業(yè)技術學院 信息工程系當我們把上面的錯誤改了之后, 又出現(xiàn)了以上錯誤,我們通過書籍、小組成員的共同努力,知道了是由于我們修改代碼中一些不能修改和覆蓋的變量,導致出現(xiàn)了以上錯誤。在我們細心尋找下發(fā)現(xiàn)時少了一個分號。3:34蕪湖職業(yè)技術學院 信息工程系當我們把分號加上了之后,又出現(xiàn)了如上圖所示的錯誤。我們全組成員齊心協(xié)力,根據(jù)錯誤提示,將一個一個的錯誤改正。4:當我們再次運行時,又出現(xiàn)以上的兩個錯誤。通過我們全組同學的努力以及其他同學的幫忙,我們得知是由于輸入時的馬虎, 我們在前面定義的是propts,而這里出現(xiàn)了 promts,所以導致了錯誤。根據(jù)錯誤,一步一步的檢查、調試之后,我們把錯誤全部解決,如圖:35蕪湖職業(yè)技術學院 信息工程系九、參考文獻張大明.單片機控制實訓指導及綜合應用實訓[M].北京:機械工業(yè)出版社陳益飛.單片機原理及應用技術.北京[M]:國防工業(yè)出版社,2011張偉.張杰編著.單片機原理及應用.北京[M]:機械工業(yè)出版社,孫余凱.精選實用電子電路260例[M].北京:電子工業(yè)出版社.,郭天祥51單片機C語言教程.北京:電子工業(yè)出版社閆玉德俞虹.MCS-單片機原理與應用北京:機械工業(yè)出版社陳益飛.單片機原理及應用技術[M].北京:國防工業(yè)出版社.,彭偉單片機C語言程序設計實訓100例.北京:電子工業(yè)出版社36蕪湖職業(yè)技術學院 信息工程系1602LCD秒表的顯示源代碼://------------------------------------Main.c-----------------------------------------//名稱:用 1602LCD設計秒表//-----------------------------------------------------------------------------------//說明:首次按下 K1鍵時開始計時,再次按下時暫停,第三次按下時繼續(xù)// 累計計時,再次按下時停止計時, K2鍵用于清零秒表//-----------------------------------------------------------------------------------include<reg51.h>include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}//LCD控制函數(shù)voidLCD_Initialize();voidLCD_Set_POS(uchar);voidLCD_Write_Data(uchar);voidDisplay_String(uchar*,uchar);sbitK1=P1^0;sbitK2=P2^1;sbitBEEP=P3^0;sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;ucharKeyCount=0;ucharcodemsg1[]={"SecondWatch0"};ucharcodemsg2[]={">>>> "};ucharcodePrompts[][16]={{"::1----> "},{"::2---->::2 "},{"::1->2::3--> "},{"::1->2::3-->4"}}//計時緩沖與顯示緩沖ucharTime_Buffer[] ={0,0,0,0};ucharLCD_Display_Buffer[]={"00:00:00:00"};//-------------------------------------------------------------------------------------//蜂鳴器//-------------------------------------------------------------------------------------voidBeeP()37蕪湖職業(yè)技術學院 信息工程系{uchari,j=70;for(i=0;i<180;i++){while(--j);BEEP=~BEEP;}BEEP=0;}//-------------------------------------------------------------------------------------//延時//-------------------------------------------------------------------------------------voidDelayX(uintms){uchari;while(ms--)for(i=0;i<120;i++);}//-------------------------------------------------------------------------------------//顯示計時//-------------------------------------------------------------------------------------voidShow_Second(){uchari;LCD_Set_POS(0X45); //設置LCD顯示起點for(i=3;i!=0xff;i--){將兩位整數(shù)的1、100s,秒,分,時轉換為8位數(shù)字字符LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'0';//在i=3,2,1,0時分別顯示時,分,秒, 1/100sLCD_Write_Data(LCD_Display_Buffer[2*i+1]);LCD_Write_Data(LCD_Display_Buffer[2*i]);LCD_Write_Data(':');}}//------------------------------------------------------------------------------------//Time0中斷//------------------------------------------------------------------------------------voidTime0()interrupt1using0{TH0=-10000/256;TL0=-10000%256;38蕪湖職業(yè)技術學院 信息工程系Time_Buffer[0]++;if(Time_Buffer[0]==100){Time_Buffer[0]=0;Time_Buffer[1]++;}if(Time_Buffer[1]==60) //秒{Time_Buffer[1]=0;Time_Buffer[2]++;}if(Time_Buffer[2]==60) //分{Time_Buffer[2]=0;Time_Buffer[3]++;}if(Time_Buffer[3]==24) //時Time_Buffer[3]=0;}//------------------------------------------------------------------------------------//主函數(shù)//------------------------------------------------------------------------------------voidmain(){uchari;IE=0x82;TMOD=0X01;TH0=-10000/256;TL0=-10000%256;LCD_Initialize();Display_String(msg1,0x00);Display_String(msg2,0x40);While(1){if(K1==0){DelayX(100);i=++KeyCount;switch(i){Case1:Case3:TR0=1;Display_String(Promts[i-1],0);break;Case2:Case4:TR0=0;Display_String(Promts[i-1],0);39蕪湖職業(yè)技術學院 信息工程系break;default:TR0=0;break;}while(K1==0); //Beep();}elseif(K2==0){TR0=0;KeyCount=0;for(i=0;i<4;i++)Time_Buffer[i]=0;Display_String(msg1,0);Beep();DelayX(100);While(K2==0); //}Show_Second();}}//-------------------------------------160LCD.C-------------------------------------//1602LCD顯示驅動函數(shù)//----------------------------------------------------------------------------------include<reg51.h>include<intrins.h>defineucharunsignedchardefineuintunsignedintdefineDelayNOP(){_nop();_nop();_nop();_nop();}sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;bitLCD_Busy_Check();voidLCD_Busy_Check();voidLCD_Initialize();voidLCD_Write_Command(uchar);voidLCD_Write_Data(uchar);//------------------------------------------------------------------------------//延時//------------------------------------------------------------------------------voidDelayMS(uintms){40蕪湖職業(yè)技術學院 信息工程系uchart;while(ms--)for(t=0;t<120;t++);}//------------------------------------------------------------------------------//LCD忙檢查//------------------------------------------------------------------------------bitLCD_Busy_Check(){bitResult;LCD_RS=0;LCD_RW=1;LCD_EN=1;DelayNOP();Result=(bit)(P0&0X80);LCD_EN=0;returnResult;}//-----------------------------------------------------------------------------//向LCD寫指令//-----------------------------------------------------------------------------VoidLCD_Write_Command(ucharcmd){While(LCD_Busy_Check());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_(); _nop_();P0=cmd; DelayNOP();LCD_EN=1;DelayNOP();LCD_EN=0;}//----------------------------------------------------------------------------//向LCD寫數(shù)據(jù)//----------------------------------------------------------------------------voidLCD_Write_Data(ucharstr){while(LCD_Busy_Check());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=str;DelayNOP();LCD_EN=1;DelayNOP();LCD_EN=0;}//----------------------------------------------------------------------------//初始化LCD//----------------------------------------------------------------------------voidLCD_Initialize(){41蕪湖職業(yè)技術學院 信息工程系DelayMS(5);LCD_Write_Command(0x38);DelayMS(5);LCD_Write_Command(0x0c);DelayMS(5);LCD_Write_Command(0x06);DelayMS(5);LCD_Write_Command(0x01);DelayMS(5);}//----------------------------------------------------------------------------//設置顯示位置//----------------------------------------------------------------------------VoidLCD_Set_POS(ucharPosition){LCD_Write_Command(Position|0X80);}//----------------------------------------------------------------------------//顯示函數(shù),在 LCD指定行上顯示字符串//----------------------------------------------------------------------------voidDisplay_String(uchar*str,ucharLineNo){uchark;LCD_Set_POS(LineNo);for(k=0;k<16;k++)LCD_Write_Data(str[k]);}42蕪湖職業(yè)技術學院 信息工程系1602LCD秒表的顯示原理圖 目 錄1IPTV全網(wǎng)簡介.................................................錯誤!未定義書簽。1.1全網(wǎng)系統(tǒng)架構...........................................................錯誤!未定義書簽。1.1.1系統(tǒng)整體架構錯誤!未定義書簽。.................................................43蕪湖職業(yè)技術學院 信息工程系1.1.2內容服務平臺(內容運營商提供)錯誤!未定義書簽。.............1.1.3運營支撐平臺(內容運營商提供)錯誤!未定義書簽。.............1.1.4網(wǎng)絡承載分發(fā)平臺(電信運營商提供)錯誤!未定義書簽。/....1.1.5終端錯誤!未定義書簽。.................................................................2前端系統(tǒng)項目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論