




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 液晶控制電路和方案51.1相關(guān)硬件和軟件介紹51.1.1 STC89C5251.1.2 帶字庫的12864液晶51.1.3 不帶字庫的12864液晶61.1.4 取模軟件61.2液晶顯示控制設(shè)計(jì)電路71.2.1系統(tǒng)的總體設(shè)計(jì)思路和框圖7系統(tǒng)方案選擇7系統(tǒng)功能圖和流程圖8系統(tǒng)電路原理圖92. 程序的設(shè)計(jì)和調(diào)試112.1帶字庫的12864指令112.2不帶字庫的12864指令132.3程序調(diào)試14工程的建立和程序編譯14硬件調(diào)試143. 液晶設(shè)計(jì)結(jié)果顯示153.1帶字庫液晶顯示結(jié)果153.2不帶字庫液晶顯示結(jié)果154. 設(shè)計(jì)總結(jié)154.1設(shè)計(jì)中遇到的問題154.2設(shè)計(jì)心得165. 參考文獻(xiàn)1
2、6附錄16附錄1:帶字庫12864程序源代碼16附錄2:不帶字庫12864程序源代碼24課程設(shè)計(jì)論文開題報(bào)告課程設(shè)計(jì)應(yīng)達(dá)到的目的 本課程是在單片機(jī)原理及應(yīng)用B課程主要內(nèi)容學(xué)習(xí)之后,通過一個單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)和調(diào)試,訓(xùn)練學(xué)生綜合運(yùn)用課本知識,獨(dú)立解決工程實(shí)際問題的能力:使學(xué)生加深對單片機(jī)結(jié)構(gòu)、工作原理的理解,提高學(xué)生綜合應(yīng)用知識的能力、分析解決問題的能力和單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)技能;同時培養(yǎng)學(xué)生查閱資料和撰寫科技報(bào)告的能力。課題名稱單片機(jī)控制液晶顯示器的應(yīng)用設(shè)計(jì)目的1.掌握單片機(jī)擴(kuò)展總線的工作原理和操作時序;2.掌握128*64圖形點(diǎn)陣LCD顯示模塊的工作原理、控制方式和控制命令;3.掌握通過單
3、片機(jī)總線時序控制LCD顯示模塊的程序的編寫方法。設(shè)計(jì)要求1.單片機(jī)通過擴(kuò)展總線和12864圖形點(diǎn)陣LCD顯示模塊相連;2.單片機(jī)擴(kuò)展總線的地址線和LCD的控制線相連;3.使用過取字模軟件,完成本人姓名和學(xué)號的顯示字模;4.編程實(shí)現(xiàn)姓名和學(xué)號的顯示設(shè)置按鍵;5.實(shí)現(xiàn)不同方式顯示本人姓名和學(xué)號。單片機(jī)控制12864液晶的應(yīng)用摘要:漢字的使用很廣泛,顯示漢字始終是計(jì)算機(jī)在我國應(yīng)用普及的一個障礙。隨著單片機(jī)和顯示技術(shù)的發(fā)展,加上人們不滿足單片機(jī)系統(tǒng)采用LED數(shù)碼管的簡單顯示,利用單片機(jī)控制液晶顯示成為當(dāng)前顯示系統(tǒng)的主流。本文主要介紹了89C51單片機(jī)為控制設(shè)備,12864液晶顯示器為顯示設(shè)備。實(shí)現(xiàn)的一
4、個可以顯示漢字、字符和動態(tài)顯示漢字的液晶顯示器設(shè)備。通過按鍵控制可以實(shí)現(xiàn)顯示的漢字顯示和左右移動。利用液晶顯示器顯示漢字操作靈活,漢字顯示果可以大大提高。Abstact:The use of Chinese charactersis very wide,display Chinese characters is always an obstacle in the popularization of computer application in our country.With the development of MCU and display technology,and people d
5、on't satisfy SCM system using simple LED digital display tube,control the use of single-chip LCD display system now become the main stream.This paper mainly introduces the 89C51 microcontroller as the control equipment, 12864LCD as display equipment.An implementation can display Chinese characte
6、rs,characters and dynamic displayof liquid crystal display Chinese characters.Through the button control can display the Chinese characters display and move around.Use LCD display Chinese characters of flexible operation,display of Chinese characters can be greatly improved.1. 液晶控制電路和方案1.1相關(guān)硬件和軟件介紹1
7、.1.1 STC89C5289C52內(nèi)置8位中央處理單元、256字節(jié)內(nèi)部數(shù)據(jù)存儲器RAM、8k片內(nèi)程序存儲器(ROM)32個雙向輸入/輸出(I/O)口、3個16位定時/計(jì)數(shù)器和5個兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)時鐘振蕩電路。此外,89C52還可工作于低功耗模式,可通過兩種軟件選擇空閑和掉電模式。在空閑模式下凍結(jié)CPU而RAM定時器、串行口和中斷系統(tǒng)維持其功能。掉電模式下,保存RAM數(shù)據(jù),時鐘振蕩停止,同時停止芯片內(nèi)其它功能。本次設(shè)計(jì)通過89C52控制12864液晶顯示器和矩陣鍵盤,從而實(shí)現(xiàn)漢字和字符的顯示。1.1.2 帶字庫的12864液晶帶字庫的12864顯示漢字和符號時,不需要使
8、用字模提取軟件來提取字模,如果想顯示自定義的字符,也可以使用字模提取來實(shí)現(xiàn)顯示。下面介紹下帶字庫12864液晶引腳功能:引腳標(biāo)志說明1GND接地2VCC接5V3V0接可調(diào)電阻4RS/CS并行模式:RS=0,指令;RS=1,數(shù)據(jù)。串行模式:片選。5R/W并行模式:R/W=0,寫;R/W=1,讀。串行模式:數(shù)據(jù)。6E并行模式:允許信號。串行模式:數(shù)據(jù)。7D0-D7并行模式:數(shù)據(jù)串行模式:不連接89101112131415PSB并行模式:PSB=1;串行模式:PSB=016NC不連接17RST復(fù)位18NC不連接19LED+背光正極,接5V20LED-背光負(fù)極,接地1.1.3 不帶字庫的12864液晶
9、不帶字庫的12864可以通過取字模軟件顯示各種自定義的字符和圖片,液晶本身中不帶有字庫。下面介紹不帶字庫12864的引腳功能:引腳標(biāo)志說明1GND接地2VCC接5V3V0可調(diào)電阻4D/I1:數(shù)據(jù) 0:指令5R/W1:讀 0:寫6E1:可讀寫 0:不可讀寫7D0-D7數(shù)據(jù)總線89101112131415CS1左半屏片選信號。1:選中;0:不選中。16CS2左半屏片選信號。1:選中;0:不選中。17RST復(fù)位信號,低電平有效。18VEELCD 負(fù)壓驅(qū)動腳(-1018V)。19NC20NC1.1.4 取模軟件取字模軟件使用的是ZIMO21,在液晶顯示時,選取的字體是12號,此字體對應(yīng)的液晶點(diǎn)陣正好是
10、16X16大小。所以液晶一頁可以顯示4X8=32個字。取字模軟件也可以設(shè)定各種字體和自定義的圖片,使用比較方便。1.2液晶顯示控制設(shè)計(jì)電路12864液晶顯示器可以顯示字母、數(shù)字符號、中文字型及自定圖形顯示,只要一個最小的微處理系統(tǒng),將液晶顯示模塊的接口作為I/O設(shè)備直接與之連接,就可以進(jìn)行控制液晶顯示器和數(shù)據(jù)傳輸,從而達(dá)到理想的顯示效果。選擇按鍵接高電平,即可實(shí)現(xiàn)單片機(jī)對液晶顯示漢字的控制。系統(tǒng)的總體設(shè)計(jì)思路和框圖整個系統(tǒng)主要由STC89C51芯片、LCD12864液晶和矩陣鍵盤構(gòu)成,具體如下圖1所示:STC89C51XTALP0口RSTP2.0P2.1P2.2P2.3P3.3P1口時鐘電路復(fù)
11、位電路矩陣鍵盤LCD12864D0-D7RSRWEPSBRST圖1.系統(tǒng)整體框圖系統(tǒng)方案選擇 時鐘模塊 利用晶體本身的特性,可以利用晶振與電容搭建振蕩電路與89C51引腳XTAL1及XTAL2相連,設(shè)計(jì)中使用12M的晶振向單片機(jī)提供一個頻率定度較高的時鐘脈沖,具體連接見原理圖圖2。復(fù)位電路STC89C51的復(fù)位引腳RST外接開關(guān)復(fù)位電路,當(dāng)電路工作后,閉合開關(guān),只要在RST引腳上出現(xiàn)2個機(jī)器周期以上的高電平,單片機(jī)即可復(fù)位。若RST始終保持高電平,則可對STC89C51循環(huán)復(fù)位。開關(guān)復(fù)位電路的組成如原理圖(見原理圖圖3)電阻和開關(guān)串聯(lián)后與電容并聯(lián),然后與電阻串聯(lián)對+5V電壓進(jìn)行分壓,電阻一端接
12、地另一端接復(fù)位信號引腳RST。矩陣鍵盤鍵盤處主要通過按鍵來顯示不同的信息,如班級、姓名等。本來想使用獨(dú)立鍵盤,雖然獨(dú)立鍵盤電路簡單,使用方便,但是獨(dú)立鍵盤按鍵較多時占用I/O端口多,造成I/O口資源的浪費(fèi),所以電路中使用了矩陣鍵盤,具體電路如原理圖圖4所示。液晶顯示模塊.帶字庫的12864模塊由于在Proteus中無法仿真,只能以實(shí)物運(yùn)行。具體電路和結(jié)果詳見后。.不帶字庫的12864模塊在Proteus中有不帶字庫的12864,而實(shí)際中不帶字庫的12864第18腳要接負(fù)電平,所以在仿真中進(jìn)行。系統(tǒng)功能圖和流程圖系統(tǒng)功能圖按鍵功能按鍵功能1顯示“單片機(jī)課程設(shè)計(jì)”9顯示學(xué)號2顯示課題10滾動顯示3
13、顯示課題11滾動顯示4顯示指導(dǎo)老師12顯示“自定義顯示字符”5清屏13顯示自定義字符6顯示院系14顯示自定義字符7顯示姓名15顯示自定義字符8顯示班級16顯示自定義字符流程圖判斷鍵值,顯示相應(yīng)字符檢測是否有鍵按下?向12864寫入數(shù)據(jù)延時去抖動檢測是否有鍵按下?開始12864液晶初始化向12864寫入命令檢測12864是否忙?否是是否是否系統(tǒng)電路原理圖由于帶字庫和不帶字庫的12864液晶顯示系統(tǒng)的區(qū)別在于液晶的連接電路不同,其他模塊連接是相同的,具體如下:時鐘模塊圖2.時鐘模塊復(fù)位模塊圖3.復(fù)位模塊矩陣鍵盤圖4.矩陣模塊不帶字庫的12864液晶連接圖5:不帶字庫的12864液晶連接帶字庫的12
14、864液晶連接圖6:帶字庫的12864液晶連接2. 程序的設(shè)計(jì)和調(diào)試2.1帶字庫的12864指令清除顯示RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB00000000001功能:清除顯示屏幕,把DDRAM 位址計(jì)數(shù)器調(diào)整為“00H”。位址歸位RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB0000000001X功能:把DDRAM 位址計(jì)數(shù)器調(diào)整為“00H”,游標(biāo)回原點(diǎn),該功能不影響顯示DDRAM。進(jìn)入設(shè)定點(diǎn)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB000000001I/DS功能:把DDRAM 位址計(jì)數(shù)器調(diào)整為“00H”,游標(biāo)回原點(diǎn),該功能
15、不影響顯示DDRAM功能.執(zhí)行該命令后,所設(shè)置的行將顯示在屏幕的第一行。顯示起始行是由Z 地址計(jì)數(shù)器控制的,該命令自動將A0-A5 位地址送入Z 地址計(jì)數(shù)器,起始地址可以是0-63 范圍內(nèi)任意一行。Z 地址計(jì)數(shù)器具有循環(huán)計(jì)數(shù)功能,用于顯示行掃描同步,當(dāng)掃描完一行后自動加一。顯示狀態(tài)開/關(guān)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB00000001DCB功能: D=1;整體顯示ON C=1;游標(biāo)ON B=1;游標(biāo)位置ON。游標(biāo)或顯示移位控制RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB0000000S/CR/LXX功能:設(shè)定游標(biāo)的移動與顯示的移位控制位:這個
16、指令并不改變DDRAM 的內(nèi)容。功能設(shè)定RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB00001DLX0REXX功能:DL=1(必須設(shè)為1) RE=1;擴(kuò)充指令集動作RE=0:基本指令集動作。設(shè)定CGRAM 位址RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB00001AC5AC4AC3AC2AC1AC0功能:設(shè)定CGRAM 位址到位址計(jì)數(shù)器(AC)。設(shè)定DDRAM 位址RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB0001AC6AC5AC4AC3AC2AC1AC0功能:設(shè)定DDRAM 位址到位址計(jì)數(shù)器(AC)。讀取忙碌狀態(tài)(BF)和位址。R
17、WRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB001BFAC6AC5AC4AC3AC2AC1AC0功能:讀取忙碌狀態(tài)(BF)可以確認(rèn)內(nèi)部動作是否完成,同時可以讀出位址計(jì)數(shù)器(AC)的值。寫資料到RAMRWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB010D7D6D5D4D3D2D1D0功能:寫入資料到內(nèi)部的RAM(DDRAM/CGRAM/TRAM/GDRAM)。讀出RAM 的值RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB011D7D6D5D4D3D2D1D0功能:從內(nèi)部RAM 讀取資料(DDRAM/CGRAM/TRAM/GDRAM)。待命模式
18、(12H)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB00000000001功能:進(jìn)入待命模式,執(zhí)行其他命令都可終止待命模式。卷動位址或IRAM 位址選擇(13H)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB0000000001SR功能:SR=1;允許輸入卷動位址SR=0;允許輸入IRAM 位址。反白選擇(14H)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB000000001R1R0功能:選擇4 行中的任一行作反白顯示,并可決定反白的與否。睡眠模式(015H)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB000000
19、01SLXX功能:SL=1;脫離睡眠模式SL=0;進(jìn)入睡眠模式。擴(kuò)充功能設(shè)定(016H)RWRSDB7 DB6 DB5DB4 DB3 DB2 DB1DB0000011XREG0功能:RE=1;擴(kuò)充指令集動作RE=0;基本指令集動作G=1;繪圖顯示ON G=0;繪圖顯示OFF。2.2不帶字庫的12864指令行設(shè)置命令RWRSD7D6D5D4D3D2D1D00011XXXXXX顯示的起始行為0xC0,有規(guī)律的改變起始行號,可以實(shí)現(xiàn)滾屏的效果。頁設(shè)置指令RWRSD7D6D5D4D3D2D1D00010111XXX顯示的起始頁為0xB8,分為8頁,每頁有8行。列地址設(shè)置RWRSD7D6D5D4D3D2
20、D1D00001XXXXXX第一列為0x40,一直到0x7F,共64列,兩塊驅(qū)動芯片,共128列。讀狀態(tài)指令RWRSD7D6D5D4D3D2D1D010BUSY0ON/OFFRST0000BUSY為1內(nèi)部忙,不能對液晶操作,為0正常工作;ON/OFF:1為顯示關(guān)閉,為0顯示打開;RST:1為復(fù)位,0為正常。屏幕選擇CS1CS2選屏00全屏01左半屏10右半屏11不選2.3程序調(diào)試工程的建立和程序編譯1、新建工程在菜單Project-New Project 中新建工程;2、選擇CPU根據(jù)對話框選擇CPU 類型(公司、型號等)本次課程設(shè)計(jì)采用ATMEL 公司的STC89C51,3、新建文件點(diǎn)擊Fi
21、le-New,新建文件,并保存為yangjirui.c;4、添加源文件點(diǎn)擊Project-Window 中Target1文件夾右邊的“”號,顯示子文件夾Source Group 1,選中Source Group 1 文件夾并點(diǎn)擊鼠標(biāo)“右鍵”,出現(xiàn)快捷菜單。點(diǎn)擊Add Files To Group Source Group1,在對話框中完成源文件向工程的添加。添加完成后,在Project Workspace 窗口的Source Group 1 項(xiàng)前多了“”號,點(diǎn)擊“”號即可看到所添加的文件。5、編譯用快捷按鈕Build target 對工程進(jìn)行編譯,在Output Window 中有編譯提示信息
22、,可根據(jù)該信息對源文件進(jìn)行修改。6、軟件仿真點(diǎn)擊Strat/Stop Debug Session,可對程序進(jìn)行設(shè)置斷點(diǎn)、單步、連續(xù)等執(zhí)行操作。7、HEX 文件設(shè)置選中Target1 文件夾并點(diǎn)擊鼠標(biāo)“右鍵”,選擇快捷菜單中的Option for Target Target1。在“Output”對話框中選中復(fù)選框(Create HEX File),即可使工程在編譯時生成緊湊的機(jī)器碼。硬件調(diào)試1.按照設(shè)計(jì)的電路連接電路,并且檢查連線無誤;2.將生成的HEX文件下載到STC89C51中,按下矩陣鍵盤,看相應(yīng)的按鍵按下后12864是否有相應(yīng)的字符顯示;3.如果不能出現(xiàn)相應(yīng)的字符顯示,再修改程序,重新進(jìn)
23、行硬件調(diào)試。3. 液晶設(shè)計(jì)結(jié)果顯示3.1帶字庫液晶顯示結(jié)果通過實(shí)物的連接,由最小系統(tǒng)、帶字庫12864液晶和矩陣鍵盤的連接,可以通過按鍵顯示相應(yīng)的漢字和特定字符,液晶顯示可以顯示課題、姓名、班級、學(xué)號、指導(dǎo)老師以及特定字符,而且可以實(shí)現(xiàn)字符的循環(huán)顯示。3.2不帶字庫液晶顯示結(jié)果不帶字庫液晶通過仿真實(shí)現(xiàn),通過按下對應(yīng)的按鍵,從而實(shí)現(xiàn)字符的顯示具體實(shí)驗(yàn)結(jié)果如下圖所示:左圖為相應(yīng)按鍵按下的顯示,右圖為滾動顯示過程中截圖4. 設(shè)計(jì)總結(jié)經(jīng)過一個多星期的準(zhǔn)備和實(shí)踐,我完成了電路的設(shè)計(jì)和連接,程序的編寫和編譯調(diào)試,最終實(shí)現(xiàn)了帶字庫12864和不帶字庫12864的字符顯示(包括漢字,自定義字符),字符的移動顯
24、示。過程中雖然遇到一些問題,在自己的檢查和老師同學(xué)同學(xué)的幫助下都一一解決??偟膩碚f,這次的課程設(shè)計(jì)是成功的。4.1設(shè)計(jì)中遇到的問題1.12864液晶是分為兩種的,一種帶字庫,另一種是不帶字庫的,在沒接觸課程設(shè)計(jì)之前我是不了解12864的,所以對12864的概念很是模糊,所以要分清概念,不同的液晶使用方法和指令是不一樣的。2. 在課程設(shè)計(jì)過程中感覺自己的知識還是很欠缺,所以在查閱資料這方面要盡可能做的充分點(diǎn),書本是我們知識的主要來源,課程設(shè)計(jì)是我們平時學(xué)習(xí)的糅合,要求我們一點(diǎn)一點(diǎn)的將知識復(fù)習(xí)、歸納、組合、然后將它們應(yīng)用到課題中。3. 設(shè)計(jì)過程中,程序基本完善,還是會有很多問題,原理圖的設(shè)計(jì)、修改
25、,程序的調(diào)試,文件的燒入等,用什么方式,字符的定位、滾動,這些問題經(jīng)過反復(fù)修改終于一一解決。4.2設(shè)計(jì)心得1. 實(shí)驗(yàn)最關(guān)鍵是要有耐心,有時實(shí)驗(yàn)電路和程序并不能一次成功,所以要有良好的心理素質(zhì),有克服一切困難的勇氣,勇于尋找問題的根源,一次次反復(fù)的實(shí)驗(yàn),才能達(dá)到目的。這同時也是一個學(xué)習(xí)與進(jìn)步的過程,可以幫助我們自主尋找問題的根源,自主學(xué)習(xí)尋找解決問題的辦法,最終實(shí)實(shí)在在地學(xué)到知識,提高本領(lǐng),掌握技能。2. 在器件的選擇上要注意,相同類型的器件不同的類型使用方法不同,所以要在使用硬件前先熟悉硬件的用法,這是編寫好程序的前提。5. 參考文獻(xiàn)1. 單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)(第二版),謝維成等
26、編著,清華大學(xué)出版社,2009.7.2. 單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)(第四版),馬忠梅等 編著,北京航空航天大學(xué)出版社。3. 單片機(jī)原理及應(yīng)用實(shí)驗(yàn)與課程設(shè)計(jì)指導(dǎo)書,岳俊生 宗慧編,南京工程學(xué)院,2013.3.4. 單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例基于8051+Proteus仿真,彭偉編,北京電子工業(yè)出版社,200906。5. 中文圖形顯示控制芯片ST7920 的原理與應(yīng)用.洪家平 編著.附錄附錄1:帶字庫12864程序源代碼#include <reg52.H>#include <intrins.H>#define uchar unsigned char#define u
27、int unsigned int#define LCD_DATA P0 /數(shù)據(jù)口sbit RS = P20; /并行的指令/數(shù)據(jù)選擇信號, H數(shù)據(jù), L命令sbit RW = P21; /并行讀寫選擇信號, H讀, L寫sbit E = P22; /并行使能端, H有效, L無效sbit PSB = P23; /并/串接口選擇, H并,L串sbit RET = P33; /復(fù)位, L有效uchar code datas1 = "單片機(jī)課程設(shè)計(jì) "uchar code datas2 = "課題:單片機(jī)控制"uchar code datas3 = "
28、;液晶顯示器的應(yīng)用"uchar code datas4 = "指導(dǎo)老師:岳俊生"uchar code datas5 = " 通信工程學(xué)院 "uchar code datas6 = "姓名:楊濟(jì)瑞 "uchar code datas7 = "班級:光纖1 0 1 "uchar code datas8 = "學(xué)號:208100234 "/自定義圖形“心形”uchar code datas9=0x00,0x00,0x00,0x00,0x18,0x30,0x24,0x48,0x42,0x84,
29、0x81,0x02,0x80,0x02,0x40,0x04,0x20,0x08,0x10,0x10,0x08,0x20,0xE4,0x4A,0x92,0x8A,0xE1,0x04,0xA0,0x04,0x90,0x04;/自定義圖形“卐”uchar code datas10 =0x81,0xFF,0x81,0x00,0x81,0x00,0x81,0x00,0x81,0x00,0x81,0x00,0x81,0x00,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x01;/
30、自定義圖形“卐”uchar code datas11 =0x81,0xFF,0x81,0x00,0x81,0x00,0x81,0x00,0x81,0x00,0x81,0x00,0x81,0x00,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x01;/自定義圖形“小人”uchar code datas12 =0x07,0xC0,0x08,0x20,0x07,0xC0,0x08,0x20,0x18,0x30,0x28,0x28,0x28,0x28,0x28,0x28,0x
31、08,0x20,0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20,0x08,0x20,0x08,0x20,0x1C,0x70;uchar code datas13 = "瑞獻(xiàn)四海影音傳情"uchar code datas14 = "自定義顯示字符 "/延時約2usvoid delayUs()_nop_();_nop_();/延時 1msvoid delayMs(uint a) uint i, j; for(i = a; i > 0; i-) for(j = 100; j > 0; j-);/檢測LCD是否處于忙狀
32、態(tài), 若忙返回1, 空閑返回0int checkBusy() int busy; RS = 0; RW = 1; E = 1; delayUs(); busy = (bit)(LCD_DATA&0x80); E = 0; return busy;void writeCmd(uchar cmd)while(checkBusy();/等待LCD到空閑 RS = 0; RW = 0; E = 0; delayUs(); LCD_DATA = cmd; delayUs(); E = 1; delayUs(); E = 0;/寫數(shù)據(jù)void writeData(uchar dat)while(c
33、heckBusy();/等待LCD到空閑 RS = 1; RW = 0; E = 0; delayUs(); LCD_DATA = dat; delayUs(); E = 1; delayUs(); E = 0;/初始化LCDvoid init() PSB = 1; /并口方式 writeCmd(0x30); /基本指令, 擴(kuò)充指令為34H delayMs(10); writeCmd(0x0c); /顯示開, 關(guān)光標(biāo) delayMs(10); writeCmd(0x01); /清屏 delayMs(10);void setPosition(uchar x, uchar y) uchar p;
34、switch(x%4) case 0: p = 0x80; break; /第一行開始地址 case 1: p = 0x88; break; /第二行 case 2: p = 0x90; break; /第三行 case 3: p = 0x98; break; /第四行 p += y; writeCmd(p);void display() /顯示自定義符號函數(shù)uchar i;writeCmd(0x30);writeCmd(0x40);for(i=0;i<16;i+)writeData(datas9i*2);writeData(datas9i*2+1);writeCmd(0x50);for
35、(i=0;i<16;i+)writeData(datas10i*2);writeData(datas10i*2+1);writeCmd(0x60);for(i=0;i<16;i+)writeData(datas11i*2);writeData(datas11i*2+1);writeCmd(0x70);for(i=0;i<16;i+)writeData(datas12i*2);writeData(datas12i*2+1);void writeString(uchar * str) uchar i = 0; while(stri != '0') writeDat
36、a(stri+); /*/*LCD12864*/void main() init();while(1)uchar temp;P1 = 0x7f;/按鍵掃描temp = P1;temp=temp & 0x0f;if(temp!=0x0f)delayMs(10); /延時去抖動temp = P1;temp =temp & 0x0f;if(temp!=0x0f)temp = P1;switch(temp)case 0x7e:setPosition(0, 0); writeString(datas1);break;case 0x7d:setPosition(2, 0); writeSt
37、ring(datas2); setPosition(1, 0); writeString(datas3);break; case 0x7b:setPosition(3, 0); writeString(datas4);break;case 0x77:writeCmd(0x01);break;P1 = 0xbf;temp = P1;temp=temp & 0x0f;if(temp!=0x0f)delayMs(5);temp = P1;temp =temp & 0x0f;if(temp!=0x0f)temp = P1;switch(temp)case 0xbe:setPositio
38、n(0, 0); writeString(datas5);break;case 0xbd:setPosition(2, 0); writeString(datas6);break; case 0xbb:setPosition(1, 0); writeString(datas7);break;case 0xb7:setPosition(3, 0); writeString(datas8);break;P1 = 0xdf;temp = P1;temp=temp & 0x0f;if(temp!=0x0f)delayMs(5);temp = P1;temp =temp & 0x0f;i
39、f(temp!=0x0f)temp = P1;switch(temp)case 0xde:setPosition(0, 0); /循環(huán)顯示 writeString(datas1); setPosition(2, 0); writeString(datas2); setPosition(1, 0); writeString(datas3); setPosition(3, 0); writeString(datas4);delayMs(3000);setPosition(0, 0); writeString(datas4); setPosition(2, 0); writeString(datas
40、1); setPosition(1, 0); writeString(datas2); setPosition(3, 0); writeString(datas3);delayMs(3000);setPosition(0, 0); writeString(datas3); setPosition(2, 0); writeString(datas4); setPosition(1, 0); writeString(datas1); setPosition(3, 0); writeString(datas2);delayMs(3000);setPosition(0, 0); writeString
41、(datas2); setPosition(2, 0); writeString(datas3); setPosition(1, 0); writeString(datas4); setPosition(3, 0); writeString(datas1);delayMs(3000);setPosition(0, 0); writeString(datas1); setPosition(2, 0); writeString(datas2); setPosition(1, 0); writeString(datas3); setPosition(3, 0); writeString(datas4
42、);break;case 0xdd:setPosition(0, 0); writeString(datas5); setPosition(2, 0); writeString(datas6); setPosition(1, 0); writeString(datas7); setPosition(3, 0); writeString(datas8);delayMs(3000);setPosition(0, 0); writeString(datas8); setPosition(2, 0); writeString(datas5); setPosition(1, 0); writeStrin
43、g(datas6); setPosition(3, 0); writeString(datas7);delayMs(3000);setPosition(0, 0); writeString(datas7); setPosition(2, 0); writeString(datas8); setPosition(1, 0); writeString(datas5); setPosition(3, 0); writeString(datas6);delayMs(3000);setPosition(0, 0); writeString(datas6); setPosition(2, 0); writ
44、eString(datas7); setPosition(1, 0); writeString(datas8); setPosition(3, 0); writeString(datas5);delayMs(3000);setPosition(0, 0); writeString(datas5); setPosition(2, 0); writeString(datas6); setPosition(1, 0); writeString(datas7); setPosition(3, 0); writeString(datas8);break; case 0xdb:setPosition(0,
45、 0); writeString(datas13);break;case 0xd7:setPosition(2, 0); writeString(datas14);break;P1 = 0xef;temp = P1;temp=temp & 0x0f;if(temp!=0x0f)delayMs(5);temp = P1;temp =temp & 0x0f;if(temp!=0x0f)temp = P1;switch(temp)case 0xee:display();writeCmd(0x98);writeData(0x00);writeData(0x00);break;case
46、0xed: display();writeCmd(0x89);writeData(0x00);writeData(0x02);break; case 0xeb: display();writeCmd(0x8A);writeData(0x00);writeData(0x04);break;case 0xe7: display();writeCmd(0x9B);writeData(0x00);writeData(0x06);break; 附錄2:不帶字庫12864程序源代碼#include <reg51.h>#include <intrins.h>#include "source.h"#define uchar unsigned char
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 感染性疾病科護(hù)理
- 手機(jī)行業(yè)報(bào)告
- 弱電施工文案情緒管理
- 托班安全教育:保護(hù)小手
- 2025年變頻技術(shù)應(yīng)用模塊項(xiàng)目構(gòu)思建設(shè)方案
- 四年級數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)及答案
- 2025年電容器用鈮粉鈮絲項(xiàng)目建議書
- 2025年智能計(jì)量終端項(xiàng)目發(fā)展計(jì)劃
- 陜西航空職業(yè)技術(shù)學(xué)院《植物基食品配料開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西藝術(shù)職業(yè)學(xué)院《染整助劑》2023-2024學(xué)年第二學(xué)期期末試卷
- 工業(yè)互聯(lián)網(wǎng)基礎(chǔ) 課件 3.1 工業(yè)互聯(lián)網(wǎng)平臺概述
- 智慧酒店智能化系統(tǒng)解決方案
- 2025年合肥濱湖職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫完美版
- 《中建三局工程管理實(shí)習(xí)報(bào)告》2000字
- 家庭牧場申請書
- 軍隊(duì)文職考試(會計(jì)學(xué))近年考試真題題庫(含真題、典型題)
- 2025年遼寧醫(yī)藥職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 模塊綜合試卷-2024版化學(xué)高三總復(fù)習(xí)
- 福建省寧德市2024-2025學(xué)年九年級上學(xué)期期末考試道德與法治試題
- 第3課 珍惜水資源(說課稿)-2023-2024學(xué)年五年級下冊科學(xué)教科版
- 2025年中儲糧集團(tuán)公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論