




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 陜西理工學(xué)院畢業(yè)設(shè)計(jì)畢業(yè)設(shè)計(jì) 題 目 用PG12864LCD設(shè)計(jì)的指針式電子鐘 學(xué)生姓名 王康康 學(xué)號(hào) 1110064047 所在院(系) 物理與電信工程學(xué)院 專業(yè)班級(jí) 電子信息科學(xué)與技術(shù)1102 指導(dǎo)教師 楊創(chuàng)華 完成地點(diǎn) 實(shí)驗(yàn)樓1104教室 2015年5月目錄引言11 設(shè)計(jì)任務(wù)及方案論證11.1設(shè)計(jì)任務(wù)與要求11.2 總體方案論證與設(shè)計(jì)12系統(tǒng)硬件設(shè)置12.1 STC89C51單片機(jī)簡(jiǎn)介12.2顯示模塊設(shè)計(jì)32.2.1 PG12864LCD的特性介紹42.2.2 LCD12864引腳介紹42.2.3 12864內(nèi)部功能器件及相關(guān)功能52.2.4 12864液晶與單片機(jī)接口電路62.3設(shè)置
2、模塊82.4 振蕩電路92.5 復(fù)位電路93系統(tǒng)軟件設(shè)計(jì)93.1總體軟件設(shè)計(jì)93.2 時(shí)鐘函數(shù)模塊103.3 指針時(shí)鐘設(shè)計(jì)113.3.1 實(shí)現(xiàn)功能113.3.2實(shí)現(xiàn)算法113.3.3 函數(shù)設(shè)計(jì)133.4 顯示函數(shù)模塊153.4.1實(shí)現(xiàn)功能173.4.2 函數(shù)設(shè)計(jì)173.5.1 功能183.5.2 函數(shù)183.6主函數(shù)模塊194.設(shè)計(jì)結(jié)果205.使用方法206.設(shè)計(jì)進(jìn)度207.教學(xué)單位可以提供的條件20致謝21參考文獻(xiàn)21用PG12864LCD設(shè)計(jì)的指針式電子鐘王康康(陜西理工學(xué)院物理與電信工程學(xué)院電子信息科學(xué)與技術(shù)專業(yè)電信1102班,陜西漢中 723000)指導(dǎo)教師:楊創(chuàng)華 摘要本設(shè)計(jì)采用的是
3、STC89C51單片機(jī),通過單片機(jī)內(nèi)部定時(shí)器定時(shí)實(shí)現(xiàn)時(shí)鐘定時(shí)計(jì)數(shù)功能,并以模擬時(shí)鐘的形式顯示在LCD_12864上。同時(shí)可通過三個(gè)按鍵可實(shí)現(xiàn)時(shí)間的調(diào)節(jié)。 關(guān)鍵詞時(shí)鐘 AT89C51單片機(jī) LCD12864液晶By using the analog electronic clock design PG12864LCDWang kangkang (Grade11,Class2,Major Electronic Information Science and Technology,Physics Dept.,Shaanxi University of Technology,Hanzhong 7230
4、00,Shaanxi)Tutor:Yang chuanghua Abstract :This design uses STC89C51 microcontroller, through the MCU internal timer from time to time to achieve the clock timing and counting function and in the form of analog clock display on the LCD 12864. At the same time can be adjusted by the three keys to real
5、ize the time. Keywords: AT89C51microcontroller LCD12864 LCD clock引言如今二十一電子鐘、機(jī)械式手表等鐘表已經(jīng)普遍存在于市場(chǎng),并且鐘表已經(jīng)成為人們生活中不可缺少的一部分。在生活中到處都能看到其身影。當(dāng)穿行于馬路上時(shí)總會(huì)看到幾乎每個(gè)人手腕上戴著一塊手表。當(dāng)大人家里做客時(shí)總能看到大廳里面掛著個(gè)鐘表。當(dāng)打開手機(jī)時(shí)屏幕上依舊是鐘表的畫面。時(shí)間伴隨著我們鐘表也成為我們生活中必不可少的一大部分。當(dāng)今市場(chǎng)有好多電子鐘,但大多數(shù)是純數(shù)字式的,指針式的電子鐘比較新穎,而且具有真實(shí)表盤式時(shí)鐘的效果。用PG12864LCD設(shè)計(jì)的模擬電子鐘采用PG1286
6、4LCD液晶屏,用來(lái)模擬表盤與時(shí)分秒指針指示當(dāng)前時(shí)鐘,此模擬指針式電子鐘實(shí)現(xiàn)的功能為:在PG12864顯示屏上顯示圓形表盤與時(shí)分秒三個(gè)指針表示當(dāng)前時(shí)刻;三個(gè)按鍵,K1鍵用來(lái)選擇工作模式;K2鍵用來(lái)選擇調(diào)整時(shí)分秒;K3鍵用來(lái)調(diào)節(jié)大小。1 設(shè)計(jì)任務(wù)及方案論證 1.1設(shè)計(jì)任務(wù)與要求利用單片機(jī)等器件做一個(gè)簡(jiǎn)易的模擬指針式時(shí)鐘,硬件設(shè)計(jì)以單片機(jī)為主,主要包括顯示模塊、復(fù)位模塊、時(shí)鐘模塊。采用PG12864液晶屏作為顯示單元,液晶屏上顯示圓形表盤、時(shí)、分、秒指針,并且設(shè)置按鈕可以調(diào)節(jié)時(shí)間,軟件設(shè)計(jì)主要是通過單片機(jī)編程軟件Keil C51設(shè)計(jì),模擬仿真是利用仿真軟件Proteus對(duì)所設(shè)計(jì)的硬件電路和程序進(jìn)行
7、調(diào)試。 1.2 總體方案論證與設(shè)計(jì)在設(shè)計(jì)中要包含顯示模塊,控制器,設(shè)置模塊;方案一:利用基于MFC的Windows應(yīng)用程序在屏幕上顯示一個(gè)指針式時(shí)鐘,并可通過菜單選項(xiàng)對(duì)時(shí)間調(diào)節(jié),設(shè)計(jì)的時(shí)鐘畫面清晰,顯示準(zhǔn)確,但缺點(diǎn)是時(shí)間必須與系統(tǒng)機(jī)器時(shí)間一樣,不可以隨意設(shè)置時(shí)間,另外此方案涉及微軟基礎(chǔ)類庫(kù),對(duì)于不熟悉的我們難度較大。方案二:因此我們采用另一套方案,顯示模塊用LCD12864模塊,可以顯示系統(tǒng)時(shí)間;整個(gè)代碼實(shí)現(xiàn)主要由51單片機(jī)來(lái)實(shí)現(xiàn);設(shè)置模塊為按鍵處理可自行調(diào)節(jié)時(shí)間,整體流程以AT89C51單片機(jī)為控制核心,將得到的數(shù)據(jù)通過LCD12864模塊顯示出來(lái),同時(shí)通過相應(yīng)的按鍵調(diào)整相應(yīng)的值,此方案具有
8、設(shè)計(jì)簡(jiǎn)單,成本低廉,可執(zhí)行度高等優(yōu)點(diǎn),因此采用本方案。圖2.1 STC89C51管腳圖2系統(tǒng)硬件設(shè)置 2.1 STC89C51單片機(jī)簡(jiǎn)介 在設(shè)計(jì)中可用STC89C5代替AT89C51,此芯片具有速度更高,功能更全,壽命更長(zhǎng),價(jià)格更低等優(yōu)點(diǎn);我們采用雙列直插40引腳的 STC89C51,它可以實(shí)現(xiàn)ISP在線編程功能,然而AT89C51則不可以,將AT89C51的程序通過軟件直接下載到STC89C51中后,就可以代替AT單片機(jī)直接工作,基本上都不需要做修改就可以正常工作了,STC公司推出的51系列單片機(jī)芯片是兼容其它51單片機(jī)的,而51單片機(jī)作為單片機(jī)界的應(yīng)用最廣泛芯片,幾乎每一個(gè)高等院校、普通學(xué)
9、校、網(wǎng)站、業(yè)余單片機(jī)培訓(xùn)都是用51單片機(jī)作為基礎(chǔ)而學(xué)習(xí)的,正是因?yàn)槿绱丝梢岳玫膮⒖假Y料和例子也是最多的, 而且由于STC89C51自帶有EEPROM,其在程序中更是可以直接修改,斷電之后也不會(huì)丟失數(shù)據(jù)。STC89C51單片機(jī)管腳圖如圖2.1所示:STC89C51單片機(jī)的引腳介紹:-VCC:供電電壓-GND:接地 -P0口:P0口是一個(gè)8位雙向I/O口,當(dāng)每個(gè)引腳第一次被寫1時(shí),定義其為高阻態(tài)輸入,此外P0能夠用來(lái)作為外部程序數(shù)據(jù)存儲(chǔ)器,為此它可以被定義為數(shù)據(jù)/地址的第八位,在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此外
10、P0作為數(shù)據(jù)口時(shí),需外接上拉電阻。-P1口:P1口緩沖器能接收輸出4TTL門電流,當(dāng)P1口管腳寫入1后,由于P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,所以被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,正是由于內(nèi)部上拉的緣故,在FLASH編程和校驗(yàn)時(shí),P1口可以作為第八位地址接收;-P2口:P2口也是一個(gè)內(nèi)部具有上拉電阻的8位雙向I/O口,P2口緩沖器同樣可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入,并因此在作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流,正是由于內(nèi)部上拉的緣故,P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)
11、存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位,在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容,P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 -P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流,當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入,作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 此外P3口除了作為一般的I/O口外,更重要的用途是它還有復(fù)用功能,如下所示:§P3.0 RXD第二功能可作
12、為串行輸入口;§P3.1 TXD第二功能可作為串行輸出口;§P3.2 /INT0(外部中斷0);§P3.3 /INT1(外部中斷1);§P3.6/WR第二功能可作為外部數(shù)據(jù)寄存器寫選通;§P3.7/RD第二功能可作為外部數(shù)據(jù)寄存器讀選通;§P3口同時(shí)為閃爍編程和編程校驗(yàn)接受一些控制信號(hào);§RST:復(fù)位輸入,當(dāng)振蕩器復(fù)位時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平,當(dāng)STC89C51通電,時(shí)鐘電路開始工作,在RESET引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位;初始化后,程序計(jì)數(shù)器PC指向0000H,P0-P3輸出口全部為
13、高電平,指針堆棧寫入07H,其它專用的寄存器被寫“0”,RESET由高轉(zhuǎn)低時(shí),單片機(jī)內(nèi)部即從0000H地址開始執(zhí)行,但是,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài)。 表2.1 8051的初始態(tài)表 特殊功能寄存器 初始態(tài) 特殊功能寄存器 初始態(tài) ACC 00H B 00H PSW 00H SP 07H DPH 00H TH0 00H DPL 00H TL0 00H IP xxx00000B TH1 00H IE 0xx00000B TL1 00H TMOD 00H TCON 00H SCON xxxxxxxxB SBUF 00H P0-P3 1111111B PCON 0xxxxx
14、xxB AALE/PROG:地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié),當(dāng)訪問外部存儲(chǔ)器時(shí),在FLASH編程期間,此引腳用于輸入編程脈沖;而在平常,ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6,因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的,然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖,如想禁止ALE的輸出可在SFR8EH地址上置0,此時(shí)ALE只有在執(zhí)行MOVX,MOVC指令時(shí)ALE才起作用;另外,該引腳被略微拉高,如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效1;-PSEN:外部程序存儲(chǔ)器的選通信號(hào),在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN
15、有效,但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn); -EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器,注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器,在FLASH編程期間,此引腳也用于施加12V編程電源(VPP); -XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入; -XTAL2:來(lái)自反向振蕩器的輸出;振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出,該
16、反向放大器可以配置為片內(nèi)振蕩器,石晶振蕩和陶瓷振蕩均可采用,如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接,有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度1。 2.2顯示模塊設(shè)計(jì) 本設(shè)計(jì)顯示模塊采用不帶字庫(kù)PGLCD12864。2.2.1 PG12864LCD的特性介紹 PG12864LCD是像素可尋址的圖形液晶顯示屏模塊,PG12864LCD特性如下: §工作電壓為+5V,可自帶驅(qū)動(dòng)LCD所需的負(fù)電壓; §全屏幕點(diǎn)陣,點(diǎn)陣數(shù)為128列*64行,可顯示8行*4行個(gè)(16*16點(diǎn)陣)漢字,也可完成圖像,字符的顯
17、示3; §與CPU接口采用5條位控制總線和8位并行數(shù)據(jù)總線輸入輸出; §內(nèi)部有顯示數(shù)據(jù)鎖存器,自帶EL驅(qū)動(dòng); §簡(jiǎn)單的操作指令; §數(shù)據(jù)口可以采用串行傳輸與并行傳輸2.2.2 LCD12864引腳介紹 表2.2 LCD12864引腳管腳號(hào)管腳名稱管腳功能描述1VSS接地2VDD接電壓3V0液晶顯示器驅(qū)動(dòng)電壓4RSRS=“H”表示DB7-DB0為顯示數(shù)據(jù);RS=“L”表示DB7-DB0為顯示指令數(shù)據(jù)5R/WR/W=“H”,E=“H”數(shù)據(jù)被讀到DB7-DB0R/W=“L”,E=“HL”數(shù)據(jù)被寫到IR或DR6ER/W=“L”,E信號(hào)下降沿鎖存DB7DB0R/W
18、=“H”,E=“H”DDRAM數(shù)據(jù)讀到DB7DB07DB0數(shù)據(jù)線8DB1數(shù)據(jù)線9DB2數(shù)據(jù)線10DB3數(shù)據(jù)線11DB4數(shù)據(jù)線12DB5數(shù)據(jù)線13DB6數(shù)據(jù)線14DB7數(shù)據(jù)線15CS1H:選擇芯片(右半屏)信號(hào)16CS2H:選擇芯片(左半屏)信號(hào)17RET復(fù)位低電平有效18VOUT驅(qū)動(dòng)負(fù)電壓19LED+背光電源20LED-背光接地 通過DB0- DB7數(shù)據(jù)線和AT89C51IO口連接,對(duì)應(yīng)的管腳必須有效,在顯示的時(shí)候,要通過列驅(qū)動(dòng)和行驅(qū)動(dòng)來(lái)控制液晶屏顯示,在驅(qū)動(dòng)時(shí),對(duì)應(yīng)的都有相應(yīng)的控制器來(lái)控制3,由于其顯示分為左半屏和右半屏,當(dāng)CS0為1時(shí),左半屏開顯示;CS1為1時(shí),右半屏開顯示,12864管
19、腳功能如表2-2所示。2.2.3 12864內(nèi)部功能器件及相關(guān)功能§指令寄存器(IR)指令寄存器是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對(duì)應(yīng);當(dāng)D/I=0時(shí),在E信號(hào)下降沿的作用下,指令碼寫入指令寄存器。§數(shù)據(jù)寄存器(DR)數(shù)據(jù)寄存器是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對(duì)應(yīng),當(dāng)D/I=1時(shí),在下降沿作用下,圖形顯示數(shù)據(jù)寫入數(shù)據(jù)寄存器,或在E信號(hào)高電平作用下由數(shù)據(jù)寄存器讀到DB0-DB7數(shù)據(jù)總線,DR和DDRAM之間的數(shù)據(jù)傳輸是12864模塊內(nèi)部自動(dòng)執(zhí)行的4。§忙標(biāo)志(BF)BF標(biāo)志提供內(nèi)部工作情況,BF=1表示模塊內(nèi)部操作在忙狀態(tài),此時(shí)模塊不接受外部指令和數(shù)據(jù);B
20、F=0時(shí),模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù),利用STATUS READ指令,可以將BF讀到DB7總線,從而檢驗(yàn)?zāi)K工作狀態(tài)。§顯示控制觸發(fā)器DFF 此觸發(fā)器是用于模塊屏幕顯示開和關(guān)狀態(tài)的控制,DFF=1為開顯示(DISPLAY OFF),DDRAM的內(nèi)容就顯示在屏幕上;DFF=0為關(guān)顯示(DISPLAY OFF),關(guān)閉屏幕,DDF的狀態(tài)是由指令DISPLAY ON/OFF和RST信號(hào)控制的。§XY地址計(jì)數(shù)器 XY地址計(jì)數(shù)器是一個(gè)9位計(jì)數(shù)器,高3位是X地址計(jì)數(shù)器,低6位為Y地址計(jì)數(shù)器,XY地址計(jì)數(shù)器實(shí)際上是作為DDRAM的地址指針,X地址計(jì)數(shù)器為D
21、DRAM的頁(yè)指針,Y地址計(jì)數(shù)器為DDRAM的列地址指針。X地址計(jì)數(shù)器是沒有記數(shù)功能的,只能用指令設(shè)置;Y地址計(jì)數(shù)器具有循環(huán)記數(shù)功能,當(dāng)數(shù)據(jù)寫進(jìn)去時(shí),Y的地址數(shù)據(jù)就會(huì)自動(dòng)加1,Y地址指針可以表示從0-63;§顯示數(shù)據(jù)RAM(DDRAM)DDRAM是存儲(chǔ)圖形顯示數(shù)據(jù)的。數(shù)據(jù)為1表示顯示選擇,數(shù)據(jù)為0表示顯示非選擇,DDRAM與地址和顯示位置的關(guān)系見DDRAM地址表。§Z地址計(jì)數(shù)器Z地址計(jì)數(shù)器可以循環(huán)記數(shù),共有六位,它是用于顯示行掃描,當(dāng)完成一行掃描,這個(gè)計(jì)數(shù)器的內(nèi)容就會(huì)自動(dòng)加1,并指向下一行數(shù)據(jù)掃描,當(dāng)復(fù)位后Z地址計(jì)數(shù)器自動(dòng)清0;Z地址計(jì)數(shù)器可以用DISPLAY START L
22、INE指令預(yù)置,所以,就由這條指令控制屏幕顯示的起始行,因?yàn)镈DRAM共64行,因此可以循環(huán)滾動(dòng)顯示64行5。各功能指令介紹如下顯示開/關(guān)指令 R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00000111111/0DB0為1時(shí),LCD開顯示;DB0為0,關(guān)閉顯示。顯示起始行(ROW)設(shè)置指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00011顯示起始行(063)該指令設(shè)置了屏幕最上一行顯示RAM的行號(hào),要想實(shí)現(xiàn)滾屏顯示的效果,可以改變顯示起始行設(shè)置指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00010111頁(yè)號(hào)
23、(07)4、列地址(Y Address)設(shè)置指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00001顯示列地址(063)顯示RAM的64行可按8行為一頁(yè)將其分為8頁(yè);設(shè)置了頁(yè)地址和列地址,就唯一確定了顯示RAM中的一個(gè)單元,這樣CPU就可以用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進(jìn)一個(gè)字節(jié)的數(shù)據(jù)。讀狀態(tài)指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB010BUSY0ON/OFFREST0000該指令用來(lái)查詢12864內(nèi)部控制器的狀態(tài),各參量含義如下:BUSY:1-內(nèi)部在工作,也就是忙狀態(tài);0-正常狀態(tài)ON/OFF:1-顯示關(guān)閉;0-顯示打
24、開RESET:1-復(fù)位狀態(tài);0-正常狀態(tài)在BUSY和RESET狀態(tài)時(shí),除讀狀態(tài)指令外,其它指令均對(duì)12864模塊內(nèi)部無(wú)效5,除此之外在操作之前要查詢BUSY狀態(tài),以確定是否可以對(duì)12864模塊進(jìn)行操作。寫數(shù)據(jù)指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB001寫顯示數(shù)據(jù)讀數(shù)據(jù)指令R/WRSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB011讀顯示數(shù)據(jù) 要提醒的是,每次進(jìn)行讀數(shù)據(jù)之前,都要有一次空讀操作,緊接著才會(huì)讀出想要讀的單元中的數(shù)據(jù),而且每當(dāng)完成一次讀、寫數(shù)據(jù)指令,內(nèi)部的列地址就會(huì)自動(dòng)加1, 2.2.4 12864液晶與單片機(jī)接口電路 在
25、實(shí)際編程時(shí),12864與單片機(jī)的連接有并行和串行兩種方式可以選擇,串行模式占用引腳較少(2個(gè)),速度較慢;并行模式占用引腳較多(11個(gè)),但傳輸速度較快,因?yàn)橐淮蝹?位,速度自然就快,因此我們采用并行傳輸。12864的數(shù)據(jù)口DB0-DB7分別接單片機(jī)的P1.0-P1.7用來(lái)傳輸數(shù)據(jù);控制口RS、RW、EN分別接P3.2、P3.1、P3.0。 順便在此和大家分享一下調(diào)試中遇到的各種問題及如何應(yīng)對(duì): 一:硬件問題1:這種情況是新手最常碰到的問題,碰到這種情況首先要確定你的接線沒有任何問題,如果是51單片機(jī),用P0口一定要加10K的上拉電阻,不然程序正常了也顯示不出來(lái)。2: 另外要注意第三腳VO的連
26、接方式,這個(gè)是對(duì)比度電位引腳,實(shí)際中常采用10k的可變電阻滑動(dòng)端連接VO腳,固定端的一段接VCC,另外一端應(yīng)根據(jù)實(shí)際硬件連接。如果用的是1602,另一端直接接到GND就可以了,但是對(duì)于12864就應(yīng)該看18腳的標(biāo)記了,如果寫的是NC ,那么另一端直接接地,如果是VEE,那么就應(yīng)該接到18腳,因?yàn)檫@時(shí)的18腳是負(fù)壓輸出端。 根據(jù)這點(diǎn)確定你的對(duì)比對(duì)調(diào)節(jié)電路接法正確無(wú)誤。3:關(guān)于串并行選擇的問題。串并行選擇對(duì)于有字庫(kù)的12864適用(1602的四線驅(qū)動(dòng)也可以叫做串行驅(qū)動(dòng)),如果有PSB引腳,那么你的屏應(yīng)該可以支持串并行了。串并行的選擇決定于PSB引腳的電位,一般是低電平為串行模式,高電平為并行模式。
27、有些同志在使用的時(shí)候?qū)SB進(jìn)行了電位定義但是沒有任何顯示,這是你應(yīng)該注意一下LCM板上焊點(diǎn),尤其是和PSB引腳相連的那些起跳線作用的焊點(diǎn)。因?yàn)榇蠖鄰S家在出廠的時(shí)候就預(yù)先設(shè)置為并行模式,也就是接到高電位上(VCC)。碰到這種情況把焊點(diǎn)跳線重新焊接一下,接到低電位上就可以了。模式選擇錯(cuò)誤不顯示是小問題,由于屏電路的不同,可能你在驅(qū)動(dòng)的時(shí)候損壞屏或者單片機(jī),因?yàn)檫x擇不對(duì),定義的電位相當(dāng)于短路。二:軟件問題 軟件問題一般也就是定義的引腳不對(duì),這種情況出現(xiàn)于真正的初學(xué)者,在copy別人的程序或者屏本身的模板程序沒有修改引腳的定義,這種情況比較簡(jiǎn)單,只需要把引腳對(duì)應(yīng)的端口重新定義一下就可以了。三:顯示不
28、清楚A:屏上的VO引腳(3腳)電位不對(duì)如果你按照上面的說法接了對(duì)比度電路,這時(shí)你只需要調(diào)節(jié)電位器的旋鈕就可以了,最終可以得到你滿意的對(duì)比度,使顯示最清晰。一般這個(gè)腳的電壓是 - 6.2V左右,這個(gè)電壓的顯示效果是最好的。B:電源問題很多同學(xué)在現(xiàn)成的實(shí)驗(yàn)板上做試驗(yàn),電源取自電腦USB口,這種情況容易出現(xiàn)顯示不清楚的情況,原因是供電電流不夠,因?yàn)殡娔X的口為500mA供電。碰到此類情況,用外接電源,肯定可以解決。所謂的網(wǎng)上的那些個(gè)底層驅(qū)動(dòng)程序,個(gè)人覺得沒有必要,所謂知其然知其所以然,就是這個(gè)道理。 圖2-3 12864接口電路引腳號(hào)12864引腳STC89C51引腳7-14DB0-DB7P1.0-P
29、1.75WRP3.14RSP3.26CEP3.017RST地表2.3 12864引腳分配 2.3設(shè)置模塊設(shè)置模塊采用三個(gè)按鍵與單片機(jī)與GND連接按鍵與單片機(jī)的接口電路如圖2-4所示。圖2-4 按鍵電路 按鍵一端與GND連接,另一端與單片機(jī)GPIO口連接(相應(yīng)的引腳接到P3.0, P3.1. P3.3上),當(dāng)I/O為低電平則按鍵按下;其中K1:模式選擇鍵(正常計(jì)時(shí)與調(diào)節(jié)時(shí)間模式)K2:時(shí)分秒選擇按鍵K3:調(diào)節(jié)時(shí)/分/秒大小。按鍵選用觸動(dòng)開關(guān)。 2.4 振蕩電路圖2-5 振蕩電路振蕩電路選為內(nèi)部振蕩方式。由于所要設(shè)計(jì)的時(shí)間由內(nèi)部自帶的定時(shí)器中斷和軟件計(jì)數(shù)相結(jié)合產(chǎn)生的,故從計(jì)算方便以及系統(tǒng)的效率角度
30、出發(fā),設(shè)計(jì)選用12兆頻率的晶振,其電路如圖2-5所示。2.5 復(fù)位電路單片機(jī)采用高電平(I/O口為1時(shí))復(fù)位。單片機(jī)選用12兆頻率晶振,起振為一毫秒,所以兩個(gè)機(jī)器周期的用時(shí)為兩微秒。單片機(jī)單次上電復(fù)位所需的最短延時(shí)應(yīng)該大于上電延時(shí)與單片機(jī)起振延時(shí)兩者之和。延遲一個(gè)時(shí)間還太小,不能夠促使單片機(jī)有一個(gè)較好的工作開始7。復(fù)位電路使單片機(jī)保持在復(fù)位狀態(tài)并且維持一個(gè)延時(shí),這樣可以給電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電壓穩(wěn)定,再進(jìn)行一個(gè)延時(shí)狀態(tài),給時(shí)鐘振蕩器由起振到穩(wěn)定的一個(gè)延時(shí);在單片機(jī)開始進(jìn)入運(yùn)行狀態(tài)之前,至少推遲2個(gè)機(jī)器周期的延時(shí)間。當(dāng)單片機(jī)RET端為高電平的時(shí)單片機(jī)復(fù)位,主要是復(fù)位電路由電阻、
31、電容晶振組成;電容充電的時(shí)RST端為高電平,此時(shí)單片機(jī)開始復(fù)位;當(dāng)該電容電充滿,此時(shí)單片機(jī)完成復(fù)位。 初始化i<2i=0 i=0開中斷通過K2,K3調(diào)節(jié)時(shí)分秒否是是否圖3-1系統(tǒng)圖圖2-6 復(fù)位電路 3系統(tǒng)軟件設(shè)計(jì) 3.1總體軟件設(shè)計(jì)軟件設(shè)計(jì)是較難部分,利用keil軟件編寫程序,并生成Hex文件,下載到單片機(jī)。由于本程序涉及的模塊較多,所以編寫程序采用模塊化設(shè)計(jì),C語(yǔ)言具有編寫靈活性好、移植方便、便于模塊化設(shè)計(jì)的優(yōu)點(diǎn),所以采用如果時(shí)為12令是其為0 時(shí)加一分=60? 分加一秒=60?繼續(xù)執(zhí)行上面的步驟20次中斷到?jīng)]秒加一開相關(guān)中斷,裝初值開定時(shí)器,定時(shí)模式開始 中斷次數(shù)計(jì)數(shù)圖3-2 時(shí)鐘
32、框圖C語(yǔ)言給單片機(jī)編寫程序。框圖如圖3-1所示。其中K1:模式選擇鍵(正常計(jì)時(shí)與調(diào)節(jié)時(shí)間模式) K2:用于時(shí)/分/秒選擇按鍵K3:用于調(diào)節(jié)時(shí)/分/秒大小按鍵i:用于統(tǒng)計(jì)K1鍵按下的次數(shù)3.2 時(shí)鐘函數(shù)模塊時(shí)鐘定時(shí)由單片機(jī)內(nèi)部定時(shí)器中斷來(lái)完成。中斷50ms來(lái)一次,20次為一秒。因此20次中斷秒加一同時(shí)秒針轉(zhuǎn)過一格。同理秒滿60分加一同時(shí)分針轉(zhuǎn)一格。當(dāng)分滿60時(shí)加一同時(shí)時(shí)針走一下6。時(shí)鐘部分如圖3-2所示。 3.3 指針時(shí)鐘設(shè)計(jì) 3.3.1 實(shí)現(xiàn)功能實(shí)現(xiàn)指針時(shí)鐘的動(dòng)態(tài)顯示,并且具有可以在LCD_12864顯示器上畫點(diǎn)以、畫線以及畫圓的功能。 3.3.2實(shí)現(xiàn)算法LCD_12864模擬時(shí)鐘畫圖主要采用
33、Bresenham的算法。Bresenham算法是計(jì)算機(jī)圖形學(xué)領(lǐng)域使用最廣泛的直線掃描轉(zhuǎn)換方法。Bresenham算法,可以說是DDA算法的簡(jiǎn)化,兩者大致的異同:DDA算法,是某一個(gè)長(zhǎng)的方向,每一次變化一個(gè)單位或者一個(gè)單位像素,另外一個(gè)方向的變化量可以通過浮點(diǎn)運(yùn)算和四舍五入計(jì)算得到。而Bresenham算法對(duì)于下一個(gè)點(diǎn)的坐標(biāo)的取值,則是通過判斷一個(gè)反復(fù)迭代的誤差因數(shù)是否大于零,而在迭代的計(jì)算誤差因數(shù)的時(shí)候,只用到了整型數(shù)的加法和移位操作,計(jì)算量非常小,是最高效的單步畫線算法。由于Bresenham算法僅用到了整形數(shù)的加法和移位操作,大大減少了計(jì)算機(jī)運(yùn)算量,便于在小型的計(jì)算機(jī)系統(tǒng)中(例如單片機(jī)系
34、統(tǒng)等)實(shí)現(xiàn)其功能。也就是這個(gè)原因,Bresenham算法的運(yùn)用更為廣泛了。其原理是:通過各行、各列像素中心構(gòu)造一組虛擬網(wǎng)格線,按直線從起點(diǎn)到終點(diǎn)的順序計(jì)算直線各垂直網(wǎng)格線的交點(diǎn),然后確定該列像素中與此交點(diǎn)最近的像素。該算法的優(yōu)點(diǎn)在于可以采用增量計(jì)算,使得對(duì)于每一列,只要檢查一個(gè)誤差項(xiàng)的符號(hào),就可以確定該列所求的像素。1)畫直線LCD畫直線,也就是確定直線光柵化后的一系列坐標(biāo),在LCD點(diǎn)陣中顯示出來(lái),也有人叫直線光柵化。實(shí)現(xiàn)這種光柵直線的算法有中點(diǎn)畫線法Bresenham算法是DDA算法畫線算法的一種改進(jìn)算法。本質(zhì)上它也是采取了步進(jìn)的思想。不過它比DDA算法作了優(yōu)化,避免了步進(jìn)時(shí)浮點(diǎn)數(shù)運(yùn)算,同時(shí)
35、為選取符合直線方程的點(diǎn)提供了一個(gè)好思路。首先通過直線的斜率確定了在x方向進(jìn)行單位步進(jìn)還是y方向進(jìn)行單位步進(jìn):當(dāng)斜率k的絕對(duì)值|k|<1時(shí),在x方向進(jìn)行單位步進(jìn);當(dāng)斜率k的絕對(duì)值|k|>1時(shí),在y方向進(jìn)行單位步進(jìn)。 下面以|k|<1時(shí)推導(dǎo)Bresenham算法的數(shù)學(xué)依據(jù):已知有一直線y = kx+b,|k|<1。我們通過斜率確定了x方向?yàn)閱挝徊竭M(jìn)。當(dāng)x = Xm時(shí),y = Ym。那么當(dāng)x 執(zhí)行一個(gè)單位步進(jìn)時(shí)(即x = Xm+1時(shí)),y等于Ym還是等于Ym+1更符合這個(gè)直線方程呢?單憑肉眼我們很難得出結(jié)論,最好的辦法當(dāng)然是比較Ym和Ym+1和真實(shí)的方程的y值的差是多少(即Y
36、real = k*(Xm+1)+b),看看哪一個(gè)更靠近真實(shí)的方程的y值。我們?cè)O(shè) Dupper = Ym+1 - Yreal = Ym+1 - k*(Xm+1)+b); 表示Ym+1和方程真實(shí)值的差Ddown = Yreal - Ym = k*(Xm+1)+b)- Ym; 表示Ym和方程真實(shí)值的差那就是我們要比較Dupper和Ddown的大小。假設(shè)Diff = Dupper - Ddown = (Ym+1 - k*(Xm+1)+b) - (k*(Xm+1)+b)- Ym) 令X 為線段x方向的間距,Y 為線段y方向的間距。Pm = X* Diff = 2*X* Ym-2*Y*
37、 Xm-2*Y-X*(2b-1);那么Pm+1 = Pm+2*X*(Ym+1- Ym)-2*Y;其中Ym+1- Ym取0還是1,取決于Pm的符號(hào)。根據(jù)等式Diff = Dupper - Ddown = (Ym+1 - k*(Xm+1)+b) - (k*(Xm+1)+b)- Ym)以及k = Y/X,我們可以得出起始像素(x0,y0)的參數(shù)p0的值:P0 =X-2*Y;同理我們推出|k|>1的情況,Qm = 2*Xm*Y-2*Ym*X+(2b-2)*X+Y;Qm+1 = Qm+2*(Xm+1-Xm)*Y-2*X;其中Xm+1-Xm等于0還是1,取決于Qm的符號(hào)其中第一個(gè)參數(shù)Q0 = Y-2
38、*X; 明白了數(shù)學(xué)原理,我們很快能確定算法步驟:1. 輸入線段的起點(diǎn)和終點(diǎn)。2. 判斷線段的斜率是否存在(即起點(diǎn)和終點(diǎn)的x坐標(biāo)是否相同),若相同,即斜率不存在,只需計(jì)算y方向的單位步進(jìn)(Y+1次),x方向的坐標(biāo)保持不變即可繪制直線。3. 計(jì)算線段的斜率k,分為下面幾種情況處理a. k等于0,即線段平行于x軸,即程序只需計(jì)算x方向的單位步進(jìn),y方向的值不變b. |k|等于1,即線段的x方向的單位步進(jìn)和y方向的單位步進(jìn)一樣,皆為1。直接循環(huán)X次計(jì)算x和y坐標(biāo)。4. 根據(jù)輸入的起點(diǎn)和終點(diǎn)的x、y坐標(biāo)值的大小決定x方向和y方向的單位步進(jìn)是1還是-16. 畫出第一個(gè)點(diǎn)。7. 若|k| <
39、1,設(shè)m =0,計(jì)算P0,如果Pm>0,下一個(gè)要繪制的點(diǎn)為(Xm+單位步進(jìn),Ym),Pm+1 = Pm -2*Y;否則要繪制的點(diǎn)為(Xm+單位步進(jìn),Ym+單位步進(jìn))Pm+1 = Pm+2*X-2*Y;8. 重復(fù)執(zhí)行第七步X-1次;9. 若|k| <1,設(shè)m =0,計(jì)算Q0,如果Qm>0,下一個(gè)要繪制的點(diǎn)為(Xm,Ym+單位步進(jìn)),Pm+1 = Pm -2*X;否則要繪制的點(diǎn)為(Xm+單位步進(jìn),Ym+單位步進(jìn))Pm+1 = Pm+2*Y-2*X;10. 重復(fù)執(zhí)行第9步Y(jié)-1次;2)畫圓Bresenham畫圓算法又稱中點(diǎn)畫圓算法,與Bresenham 直線算法一樣,其基本的方法是
40、利用判別變量來(lái)判斷選擇最近的像素點(diǎn),判別變量的數(shù)值僅僅用一些加、減和移位運(yùn)算就可以計(jì)算出來(lái)。為了簡(jiǎn)便起見,考慮一個(gè)圓心在坐標(biāo)原點(diǎn)的圓,而且只計(jì)算八分圓周上的點(diǎn),其余圓周上的點(diǎn)利用對(duì)稱性就可得到。只需要知道了圓上的一個(gè)點(diǎn)的坐標(biāo) (x, y) ,利用八對(duì)稱性,我們馬上就能得到另外七個(gè)對(duì)稱點(diǎn)的坐標(biāo)。將圓平均分為8個(gè)部分1.只要畫出1中1/8圓的圓周,剩下的就可以通過對(duì)稱關(guān)系畫出這個(gè)圓X變化從0->R那為什么不采用從-R->R呢,Y=+-sqrt(R2-x2);dy/dx=-x/(sqrt(R2-x2) =-x/y所以采用從-R到R,每次橫坐標(biāo)增1,計(jì)算量大,而且在(x=+-R,y=0)處
41、,x的很小變化就引起了y的很大變化。 所以不是采用x從-R->R變化。而是采用1/8畫圓法。2.在2這1/8圓周上,x值單調(diào)增加,y值單調(diào)遞減,且fabs(dx/dy)=fabs(-x/y)<=1;所以圓周上相應(yīng)點(diǎn)的y值變化小于1,假設(shè)當(dāng)前點(diǎn)為(x1,y1)這下個(gè)點(diǎn)為(x1+1,y1)或(x1+1,y1-1)d1=(x1+1)2+y12-R2;d2=R2-(x1+1)2-(y1-1)2;p=d1-d2 ,若p>0 選點(diǎn)(x1+1,y1-1)否則選點(diǎn)(x1+1,y1)接下來(lái)就是求p了,p=2(x1+1)2+2y12-2y1-2R2+1。P1=3-2R(坐標(biāo)為x=0,y
42、=R)然后仿照線段算法得出p(i+1)=p(i)+4(Xi-Yi)+10(pi>0)否則P(i+1)=p(i)+4Xi+6這樣就可以成功畫出1/8圓弧了3.接下來(lái)的問題,是剩下的部分怎么處理存儲(chǔ)器將前1/8的坐標(biāo)存儲(chǔ)起來(lái),然后通過鏡像求出其他圓弧坐標(biāo),調(diào)整順序輸出,即可得到。 3.3.3 函數(shù)設(shè)計(jì)1:實(shí)現(xiàn)功能從指定坐標(biāo)處繪制一個(gè)點(diǎn)或擦除一個(gè)點(diǎn)2:實(shí)現(xiàn)依據(jù)通過LCD_set_XY確定坐標(biāo),然后根據(jù)擦除還是繪制再確定點(diǎn)在坐標(biāo)的位置,再判斷是擦除還是繪制,最后使用LCD_write_byte函數(shù)寫入數(shù)據(jù)。圖3.3為流程圖。定位XY坐標(biāo)向LCD繪/擦出點(diǎn)開始結(jié)束 圖3-3 擦/繪點(diǎn) 確定線段兩端
43、點(diǎn)的坐標(biāo)關(guān)系沿兩間的軌跡繪點(diǎn)或擦點(diǎn)開始結(jié)束圖3-4 繪直線框圖 2: void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit Mode)第 13 頁(yè) 共 26 頁(yè)(1)實(shí)現(xiàn)功能在LCD_12864上繪制一條線段(2)實(shí)現(xiàn)依據(jù)利用兩點(diǎn)式(直線方程)在直線點(diǎn)的軌跡上繪制/擦除點(diǎn)以完成繪線。(3)具體流程圖如圖3-4所示。 3:void Clock_Plate()(1)實(shí)現(xiàn)功能繪制一個(gè)指針式模擬時(shí)鐘的圓盤。(2)實(shí)現(xiàn)依據(jù)利用圓的軌跡方程找到點(diǎn)的坐標(biāo),再根據(jù)點(diǎn)的坐標(biāo)繪制圖形。(3) 流程圖圖3-5所示。確定圓心坐標(biāo)及其半徑長(zhǎng)度沿圓的軌跡進(jìn)行繪點(diǎn)開始結(jié)束 圖3
44、-5 繪制指針圓盤框圖重繪秒針重繪分針開始結(jié)束重繪時(shí)針圖3-7 重新繪制指針判斷重新繪哪一條指針擦除指針上一秒狀態(tài)開始結(jié)束圖3-6 繪制指針框圖 圖3-8 隨時(shí)間繪制指針繪制時(shí)針表盤開始讀取時(shí)間根據(jù)時(shí)間繪制時(shí)分秒針結(jié)束4:void Repaint_A_Hand(uchar i)(1) 實(shí)現(xiàn)功能根據(jù)當(dāng)前時(shí)間繪制對(duì)應(yīng)的指針,并擦除上次顯示的指針(2) 實(shí)現(xiàn)依據(jù)利用圓的弧度與時(shí)間的對(duì)應(yīng)關(guān)系,由于圓的弧度隨時(shí)間而變化,據(jù)此從圓心到圓弧對(duì)應(yīng)時(shí)間的位置畫出直線就是指針。(3) 繪制指針框圖如圖3-6所示。 5:void Display_HMS_Hand()第 15 頁(yè) 共 26 頁(yè)(1)實(shí)現(xiàn)功能重新繪制模
45、擬的秒針、分針、時(shí)針。 (2)實(shí)現(xiàn)依據(jù)調(diào)用Repaint_A_Hand函數(shù)設(shè)置當(dāng)前參 數(shù),據(jù)此繪制當(dāng)前時(shí)間對(duì)應(yīng)的指針。(3)重新繪制指針如圖3-7所示。第 1 頁(yè) 共 26 頁(yè) 6:void Display_ClockZhizhen()(1)實(shí)現(xiàn)功能讀取時(shí)間繪制指針時(shí)鐘到LCD_12864上 (2)實(shí)現(xiàn)依據(jù)讀取時(shí)間,由于指針隨時(shí)間而變化,繪制的模擬指針時(shí)鐘,另外判斷調(diào)節(jié)按鍵的鍵值是否為退出鍵的鍵值,若是則返回菜單界面。 (3)流程圖如圖3-8所示。 3.4 顯示函數(shù)模塊通過LCD_Check_Busy()檢測(cè)LCD是否忙碌,通過LCD_Write_Command向LCD發(fā)送寫命令,通過void
46、 LCD_Write_Data向lcd發(fā)送寫數(shù)據(jù)命令,通過LCD_Initialize初始化12864顯示屏。由于用的LCD_12864是自帶字庫(kù)的,故可以直接顯示字符和漢字,同時(shí)根據(jù)液晶顯示屏的要求對(duì)應(yīng)圓盤的大小都是可以規(guī)定的。1) lcd_12864寫命令函數(shù)void writecmd(uchar cmd)/ LCD_12864液晶寫命令 while(readstatus() & 0x80)!= 0x00); /LCD_12864液晶顯示讀狀態(tài) LCDDATA=0x00; RW=0; RS=0; EN=0; LCDDATA=cmd; delay(2); EN=1; delay(3)
47、; EN=0;2) lcd_12864寫數(shù)據(jù)函數(shù)void writedate(uchar date) /LCD_12864液晶寫數(shù)據(jù) while(readstatus() &0x80 )!=0x00); LCDDATA=0x00; RW=0; RS=1; EN=0; LCDDATA=date; delay(2); EN=1; delay(3); EN=0;3) LCD_12864液晶顯示讀狀態(tài)函數(shù)uchar readstatus()/LCD_12864液晶顯示讀狀態(tài) uchar i; LCDDATA=0xff; RW=1; RS=0; EN=0; delay(2); EN=1; del
48、ay(3); i=LCDDATA; delay(3); EN=0; return(i);4) LCD_12864液晶讀數(shù)據(jù)函數(shù)uchar readdate()/LCD_12864液晶讀數(shù)據(jù) uchar i; while(readstatus() &0x80 )!=0x00); RW=1; RS=1; EN=0; delay(2); EN=1; delay(3); i=LCDDATA; delay(3); EN=0; return i; 5) LCD_12864液晶初始化函數(shù)void LCD_init()/ LCD_12864液晶初始化 writecmd(0x30); delayms(1
49、); writecmd(0x30); delayms(1); writecmd(0x0c); delayms(1); writecmd(0x01); delayms(1); writecmd(0x06); delayms(1);3.4.1實(shí)現(xiàn)功能通過LCD_12864顯示指針式電子時(shí)鐘。3.4.2 函數(shù)設(shè)計(jì)1:uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2)(1)實(shí)現(xiàn)功能寫雙參函數(shù)(2)實(shí)現(xiàn)依據(jù)狀態(tài)位char Status_BIT_01():用于判斷是讀/寫指令還是讀/寫數(shù)據(jù)2:uchar LCD_Write_Comma
50、nd_P1(uchar cmd,uchar para1)(1)實(shí)現(xiàn)功能寫單參數(shù)函數(shù)(2)實(shí)現(xiàn)依據(jù)通過態(tài)位char Status_BIT_01(),判斷是讀/寫指令還是讀/寫數(shù)據(jù)3:uchar LCD_Write_Command(uchar cmd)(1)實(shí)現(xiàn)功能寫無(wú)參數(shù)函數(shù)(2)實(shí)現(xiàn)依據(jù)狀態(tài)位char Status_BIT_01():用于判斷是讀/寫指令還是讀/寫數(shù)據(jù)4:uchar LCD_Write_Data(uchar dat)(1)實(shí)現(xiàn)功能寫數(shù)據(jù)(2)實(shí)現(xiàn)依據(jù)通過判斷狀態(tài)位char Status_BIT_03(),數(shù)據(jù)是否為自動(dòng)寫狀態(tài)5:void Set_LCD_POS(uchar ro
51、w,uchar col)reentrant(1)實(shí)現(xiàn)功能設(shè)置當(dāng)前顯示地址(2)實(shí)現(xiàn)依據(jù)通過調(diào)用寫雙參數(shù)函數(shù),使LCD完成準(zhǔn)備工作。6:void cls()(1)實(shí)現(xiàn)功能清屏(2)實(shí)現(xiàn)依據(jù)先調(diào)用雙參數(shù)、無(wú)參數(shù)函數(shù)來(lái)配置地址指針,再判斷狀態(tài)位Status_BIT_3(),來(lái)判斷是否要進(jìn)行寫數(shù)據(jù),然后調(diào)用寫數(shù)據(jù)(LCD_Write_Data())函數(shù),當(dāng)向LCD寫好數(shù)據(jù),再調(diào)用無(wú)參函數(shù)來(lái)完成自動(dòng)寫結(jié)束,最后在重置地址指針5。(3)流程圖,如圖3.9所示。設(shè)置正常顯示模式置ROM為0000將RAM中寫滿0X00開始結(jié)束圖3.9 設(shè)置當(dāng)前地址7:char LCD_Initialise()(1)實(shí)現(xiàn)功能L
52、CD的初始化(2)實(shí)現(xiàn)依據(jù)通過雙參數(shù)LCD_Write_Command_P2來(lái)在LCD上顯示區(qū)首地址,文本區(qū)顯示區(qū)寬度,圖形顯示區(qū)首地址,圖形顯示區(qū)寬度,通過LCD_Write_Command_P1()(寫單參數(shù)函數(shù))及無(wú)參函數(shù)實(shí)現(xiàn)光標(biāo)形狀,及顯示方式設(shè)置。3.5中斷服務(wù)函數(shù)模塊通過單片機(jī)內(nèi)部定時(shí)器定時(shí)50毫秒,中斷20次為一毫秒。此時(shí)秒針加1,當(dāng)滿60,分加一;當(dāng)分滿60時(shí)加一;由于采用12進(jìn)制計(jì)時(shí),故時(shí)滿12則清零。 3.5.1 功能 時(shí)分秒計(jì)時(shí)功能 3.5.2 函數(shù)void exter0() interrupt 1 /中斷服務(wù)函數(shù) TH0=(65536-50000)/256;/定時(shí)器裝載初值約為50ms TL0=(65536-50000)%256; tt+
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45370-2025紡織品紗線導(dǎo)電性能的測(cè)定
- GB/T 45327-2025富鋰鐵酸鋰
- 2024年銀行從業(yè)資產(chǎn)評(píng)估試題及答案
- 信息流在物流中的重要性與試題及答案
- 明晰思路:2024年證券從業(yè)資格考試試題及答案
- 動(dòng)脈瘤栓塞術(shù)后的護(hù)理
- 如何制作網(wǎng)球教案
- 年度客戶滿意度提升計(jì)劃
- 提升決策能力的訓(xùn)練計(jì)劃
- 工作計(jì)劃中應(yīng)關(guān)注的關(guān)鍵績(jī)效指標(biāo)
- 2024年思政考試準(zhǔn)備試題及答案
- 2024年婁底市公安局警務(wù)輔助人員招聘考試真題
- 總經(jīng)理聘任合同模板7篇
- PLC應(yīng)用技術(shù)課件 任務(wù)6. S7-1200 PLC控制電動(dòng)機(jī)正反轉(zhuǎn)
- 福建省龍巖市2024屆高考一模地理試題(含答案)(含答案)
- 天津市和平區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末物理試題【含答案、解析】
- 《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》解讀與培訓(xùn) (五)
- 浙江首考2025年1月普通高等學(xué)校招生全國(guó)統(tǒng)考化學(xué)試題及答案
- 《中醫(yī)養(yǎng)生學(xué)》課件-八段錦
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- DBJ33T 1104-2022 建設(shè)工程監(jiān)理工作標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論