座(外設(shè)之液晶顯示器LCD).ppt
2012年大學(xué)生電子競賽培訓(xùn)講座五,外設(shè)之液晶顯示器,南京師范大學(xué)電氣與自動化工程學(xué)院高翔,講座內(nèi)容,LCD的應(yīng)用LCD的原理LCD的使用(MSP430如何與12864交換數(shù)據(jù)),LCD的應(yīng)用一數(shù)據(jù)顯示,應(yīng)用二圖形顯示,應(yīng)用三菜單,應(yīng)用三補充子菜單,LCD的原理,LCD液晶顯示器12864:128*64個點(分辨率)LCD的分類字符型內(nèi)部含有字庫,字符、漢字的顯示依賴字庫實現(xiàn)。點陣型內(nèi)部沒有字庫,所有顯示數(shù)據(jù)依賴用戶自己寫入。,點陣型12864,在點陣型LCD上顯示一幅圖片或是字符,如上圖所示,只需黑色的部分點亮,空白的點置0即可??梢詫CD看成128*64個LED燈來幫助理解。,(1)無顯示的12864,(2)顯示一幅圖片,LCD12864,LCD顯示推理過程一幅畫面128*64個點內(nèi)部128*64bit的DDRAM(顯示數(shù)據(jù)RAM)并行通信程序本質(zhì)單片機通過并行通信向LCD內(nèi)部的DDRAM中寫入想要顯示的數(shù)據(jù)LCD實時根據(jù)DDRAM中的數(shù)據(jù)更新顯示,DDRAM地址,圖片顯示,簡單來說,主要分為兩步:1)將一幅圖片轉(zhuǎn)化為一系列二進制數(shù)據(jù)2)將數(shù)據(jù)按字節(jié)(8位)寫入液晶對應(yīng)的DDRAM,12864的DDRAM有128*8=1024個地址,只需將圖片轉(zhuǎn)化的數(shù)據(jù)按字節(jié)寫入這其對應(yīng)的DDRAM地址即可。,字符顯示,同圖片一樣,漢字、字符也是由一個個點組成。上圖中,漢字為16*16點陣,ASCII碼為8*16點陣,字體大小可以根據(jù)需要改變。每8個點組成1個字節(jié),所以一個漢字(ASCII)由16*2(8*2)個字節(jié)數(shù)據(jù)組成,字符顯示原理與圖片一致,只需將字符代碼寫入相應(yīng)DDRAM地址。,LCD的使用(硬件),1)使能E2)片選CS1(左半屏)、CS2(右)高有效3)命令/數(shù)據(jù)選擇RS(0命令,1數(shù)據(jù))4)讀/寫選擇R/W(0寫,1讀)5)數(shù)據(jù)總線DB0DB76)負(fù)壓產(chǎn)生和負(fù)壓輸入(對比度)調(diào)整7)復(fù)位RST8)電源與地和背景光電源,硬件接線圖,LCD的使用(軟件),初始化字符的顯示Ascii(1字節(jié))、漢字(2字節(jié))圖片的顯示大小不超過128*64(1024字節(jié))實時數(shù)據(jù)的顯示一般每采集N個數(shù)據(jù)顯示一次,N<128,LCD的初始化,初始化的工作主要有:打開顯示確定起始行(DDRAM與LCD的對應(yīng)關(guān)系)確定DDRAM的指針起始位置頁地址0-7列地址0-127,命令寄存器一,命令寄存器二,字符顯示過程,準(zhǔn)備工作(1)使用取模軟件獲得漢字或ascii碼的字模;(2)明確該漢字在LCD上顯示位置頁地址0-7列地址0-15軟件流程(3)將頁、列地址寫入LCD的命令寄存器,以確定指針位置(4)將字符對應(yīng)的字模數(shù)據(jù)寫入對應(yīng)的DDRAM,圖片的顯示,準(zhǔn)備工作(1)使用取模軟件獲得圖片的數(shù)據(jù);(2)明確該圖片在LCD上顯示位置起始位置(x,y)圖片大小(x1,y1)軟件流程(3)圖片顯示順序為從左到右,從上到下,每次顯示一頁(8行)(4)每次換行、換屏都需通過寫入頁、列地址重新定義指針位置,每次寫完指針自動加1(5)將數(shù)據(jù)寫入對應(yīng)的DDRAM,N個實時數(shù)據(jù)顯示,準(zhǔn)備工作(1)寫一函數(shù)實現(xiàn)對DDRAM中任一頁、任一列寫入一個字節(jié)數(shù)據(jù)軟件(2)作N次循環(huán),每次顯示一個數(shù)據(jù)(3)根據(jù)數(shù)據(jù),確定其在DDRAM中的地址頁地址列地址(4)將該數(shù)據(jù)寫入DDRAM對應(yīng)地址空間,總結(jié),無論是顯示字符、圖片還是顯示實時采集數(shù)據(jù),其實質(zhì)都是一樣:確定它們在DDRAM中的位置將它們對應(yīng)的字模數(shù)據(jù)寫入DDRAM中,實例分析,底層程序(涉及硬件)(1)查忙(2)寫數(shù)據(jù)()讀數(shù)據(jù)(不常用,一般不需)(3)寫命令軟件對外接口程序(屬于頂層,不涉及硬件)(4)初始化(5)清屏(6)連續(xù)顯示漢字或ASCII碼(7)顯示圖片(8)顯示實時數(shù)據(jù)曲線(9)折線圖,預(yù)定義(硬件接口),#definePort_IO;P10SEL=0 x00;P9SEL#defineLcd_DataP10OUT/P1.0P1.7#defineLcd_Data_INP10IN/P1.0P1.7#defineSetEP9OUT|=BIT0/E=1,-P3.0#defineClrEP9OUTData_IN;_Nop();ClrE;SetRW;/1_read,0_writeClrDI;/1_data,0_cmdwhile(buf)if(side=0)SetCS1;ClrCS2;/enableCS1_Nop();_Nop();/delay1usbeforandaftersetESetE;_Nop();buf=Lcd_Data_IN;,ElseClrCS1;SetCS2;/enableCS2_Nop();_Nop();/delay1usbeforandaftersetESetE;_Nop();buf=Lcd_Data_IN;buf,(2)寫數(shù)據(jù),voidWriteData(uchardat,ucharside)CheckBusy(side);ClrE;ClrRW;SetDI;Lcd_Data=dat;if(side=Left)SetCS1;ClrCS2;elseClrCS1;SetCS2;_Nop();/delay1usbeforandaftersetESetE;_Nop();ClrE;,(3)寫命令,voidWriteCmd(ucharcmd,ucharside)CheckBusy(side);ClrE;ClrRW;/1_read,0_writeClrDI;/1_data,0_cmdLcd_Data=cmd;if(side=Left)SetCS1;/leftClrCS2;elseClrCS1;/rightSetCS2;_Nop();/delay1usbeforandaftersetESetE;_Nop();ClrE;,(4)初始化,voidLcd_Init()Port_Init();/顯示開WriteCmd(0 x3F,Left);WriteCmd(0 x3F,Right);/起始行WriteCmd(0 xC0,Left);WriteCmd(0 xC0,Right);/起始x,y坐標(biāo)(0,0)WriteCmd(0 xB8,Left);WriteCmd(0 xB8,Right);WriteCmd(0 x40,Left);WriteCmd(0 x40,Right);,voidPort_Init(void)Port_IO;Ctrl_OUT;Data_OUT;,(5)清屏,voidLcd_Clear(void)uchari,j;for(i=0;i<8;i+)WriteCmd(0 xB8+i,Left);WriteCmd(0 xB8+i,Right);WriteCmd(0 x40,Left);WriteCmd(0 x40,Right);for(j=0;j<64;j+)WriteData(0,Left);WriteData(0,Right);,(6)連續(xù)顯示字符,關(guān)鍵在于區(qū)分ASCII碼和漢字ASCII都小于0 xA0漢字的第一個字節(jié)必然大于或等于0 xA0Ascii碼注意其字庫數(shù)組里數(shù)據(jù)的順序漢字的字模應(yīng)定義為一結(jié)構(gòu)體結(jié)構(gòu)體包含兩部分漢字的內(nèi)碼(2字節(jié))漢字的字模數(shù)據(jù)(32字節(jié))16*16大小顯示步驟分2步根據(jù)漢字內(nèi)碼在字庫中查找漢字的位置(數(shù)組編號)根據(jù)該編碼得到漢字的字模,并將這些字模寫入LCD的DDRAM,小結(jié),液晶顯示器的重要特點使用之前必須初始化!當(dāng)要顯示新的數(shù)據(jù)時,應(yīng)考慮是否需要清屏,合理使用清屏程序很重要。LCD顯示內(nèi)容與DDRAM中的數(shù)據(jù)一一對應(yīng),你不清屏,LCD上面就會一直顯示,字模軟件的作用,將要顯示的圖片、漢字、ASCII碼轉(zhuǎn)化為12864可以辨認(rèn)的二進制數(shù)據(jù)。舉例:“南”的字模為:0 x04,0 xE4,0 x24,0 x24,0 x64,0 xA4,0 x24,0 x3F,0 x24,0 xA4,0 x64,0 x24,0 x24,0 xF6,0 x24,0 x00,0 x00,0 xFF,0 x00,0 x09,0 x09,0 x09,0 x09,0 x7F,0 x09,0 x09,0 x09,0 x49,0 x80,0 x7F,0 x00,0 x00,取模軟件的使用,一、參數(shù)設(shè)置1.LCD顯示方式XY地址計數(shù)器從左到右、從上到下單字節(jié)數(shù)據(jù)格式縱向8點下高位2.字體格式漢字orASCII碼字體類型和大小宋體16點陣Asc8X16E,參數(shù)設(shè)置如下圖所示,點擊參數(shù)確認(rèn),取模軟件的使用(續(xù)),二、輸入所要轉(zhuǎn)化的數(shù)據(jù)(1)漢字直接在對話框中輸入漢字點擊“輸入字串”按鈕即可(2)ASCII碼直接點擊右邊的藍(lán)色ASCII碼按鈕,就可生成所有ASCII碼字模,取模軟件的使用(續(xù)2),(3)圖片保證圖片像素小于12864Bmp格式點擊載入圖片按鈕選擇圖片點擊數(shù)據(jù)保存,總結(jié)與任務(wù),理解12864是如何顯示字符和圖形的;知曉單片機與12864的硬件連接;明白如何通過總線操作實現(xiàn)單片機與12864之間數(shù)據(jù)與命令的交換;參考12864的命令字進行軟件編程;學(xué)會如何使用取字模軟件;,作業(yè),又見作業(yè),結(jié)合zlg7290,要求按下“A”顯示你組所在三人的姓名,學(xué)號按下“B”顯示一副圖片(任意)按下“C”顯示2個周期的正弦波“l(fā)cd.c”寫一顯示128個數(shù)據(jù)的函數(shù)無返回值、形參為數(shù)據(jù)(0-4095)的首地址VoidData_Display(unsignedint*dat)“main.c”定義大小為128的UINT型數(shù)組,并初始化Unsignedintdisplay_data128;初始化為2個周期的正弦波數(shù)據(jù)(04095)“main.c”以該數(shù)組為實參,調(diào)用該函數(shù)顯示波形Data_Display(display_data);,