單片機與液晶顯示器課件_第1頁
單片機與液晶顯示器課件_第2頁
單片機與液晶顯示器課件_第3頁
單片機與液晶顯示器課件_第4頁
單片機與液晶顯示器課件_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

講座四1.多位LED顯示2.鍵盤管理模塊3.點陣、字符液晶顯示器4.字模提取軟件LED的工作原理(a)典型的七段式LED器件(b)共陽極LED(c)共陰極LEDLED數碼管和單片機的連接1

單片機P2.0P2.7abcdefgdp+5v+5vabcdefgdpP0.0P0.7編程:(以共陽極為例)MOV P2,#11111001B(0F9H)MOV P0,#10100100B(0A4H)SJMP $靜態(tài)連接靜態(tài)顯示LED數碼管和單片機的連接2

單片機P2.0P2.7abcdefgdpP0.0P0.1P0.2P0.3想一想:和靜態(tài)連接的區(qū)別在哪里?靜態(tài)、動態(tài)顯示方式總結靜態(tài)顯示連接所有LED的位選均共同連接到+VCC或GND,每個LED的8根段選線分別連接一個8位并行I/O口。原理簡單;顯示無閃爍;占用I/O資源較多。動態(tài)顯示連接所有LED的段選線共同連接在一起共用一個8位I/O口而每個LED的位選分別由一根相應的I/O口線控制。因此必須采用動態(tài)掃描顯示方式。例:74ls164+led(proteus)

獨立鍵盤矩陣式鍵盤控制4x4鍵盤的內部結構市售一體成型的4x4鍵盤X3 X2 X1 X0Y3 Y2 Y1 Y0動作按鍵1 1 1 01 1 1 0Key01 1 0 1Key11 0 1 1Key20 1 1 1Key31 1 0 11 1 1 0Key41 1 0 1Key51 0 1 1Key60 1 1 1Key71 0 1 11 1 1 0Key81 1 0 1Key91 0 1 1KeyA0 1 1 1KeyB0 1 1 11 1 1 0KeyC1 1 0 1KeyD1 0 1 1KeyE0 1 1 1KeyFx x x x1 1 1 1無按鍵按下低電平動作鍵盤動作分析表高電平掃描-按下“0”鍵X3 X2 X1 X0Y3 Y2 Y1 Y0動作按鍵0 0 0 10 0 0 1Key00 0 1 0Key10 1 0 0Key21 0 0 0Key30 0 1 00 0 0 1Key40 0 1 0Key50 1 0 0Key61 0 0 0Key70 1 0 00 0 0 1Key80 0 1 0Key90 1 0 0KeyA1 0 0 0KeyB1 0 0 00 0 0 1KeyC0 0 1 0KeyD0 1 0 0KeyE1 0 0 0KeyFx x x x0 0 0 0無按鍵按下高電平動作鍵盤動作分析表基本原理:分行掃描檢查是否有鍵按下若有,確定哪個鍵被按下1.行掃描法的原理判斷哪一個鍵被按下的流程

P1=0xfe;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfe;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(0);break;

case(0xd0):display(1);break;

case(0xb0):display(2);break;

case(0x70):display(3);break;

}

}

}

P1=0xfd;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfd;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(4);break;

case(0xd0):display(5);break;

case(0xb0):display(6);break;

case(0x70):display(7);break;

}

}

}

P1=0xfb;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfb;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(8);break;

case(0xd0):display(9);break;

case(0xb0):display(10);break;

case(0x70):display(11);break;

}

}

}

P1=0xf7;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xf7;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(12);break;

case(0xd0):display(13);break;

case(0xb0):display(14);break;

case(0x70):display(15);break;

}

}

}}

voiddisplay(unsignedchari){

unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

P2=0xfe;

P0=table[i];

}行反轉法的流程

ucharkeyscan(void)//鍵盤掃描函數,使用行列反轉掃描法{ucharcord_h,cord_l;//行列值P3=0x0f;//行線輸出全為0cord_h=P3&0x0f;//讀入列線值if(cord_h!=0x0f)//先檢測有無按鍵按下{delay(100);//去抖if(cord_h!=0x0f){cord_h=P3&0x0f;//讀入列線值P3=cord_h|0xf0;//輸出當前列線值cord_l=P3&0xf0;//讀入行線值return(cord_h+cord_l);//鍵盤最后組合碼值}

此處仿真測控系統(tǒng)中必不可少的組成——人機界面圖1測控系統(tǒng)的組成部分點陣型液晶(12864)在點陣型LCD上顯示一幅圖片或是字符,如上圖所示,只需黑色的部分點亮,空白的點置0即可??梢詫CD看成128*64個LED燈來幫助理解。正面圖背面圖12864分類128×64點陣液晶顯示屏有三種控制器,分別是KS0107(KS0108)、T6963C和ST7920,三種控制器主要區(qū)別是:KS0107(KS0108)不帶任何字庫、T6963C帶ASCII碼,ST7920帶國標二級字庫(8千多個漢字)。圖312864的DDRAM地址XY地址計數器實際上是作為DDRAM的地址指針,X地址計數器為DDRAM的頁指針,Y地址計數器為DDRAM的Y(列)地址指針。X地址計數器沒有記數功能,只能用指令設置。Y地址計數器具有循環(huán)記數功能,各顯示數據寫入后,Y地址自動加1,Y地址指針從0到63。從上圖可以看出數據按字節(jié)在屏幕上是豎向排列的。上方為低位,下方為高位。因此在橫向上(也就是Y)就一共是128列數據。分為CS1和CS2兩個64列來寫入。在豎方向上(也就是X)一字節(jié)數據顯示8個點,豎向64個點分為8個字節(jié),稱做8頁(X=0-7)。了解這些后我們就知道要滿屏顯示一張圖就要從y=0…127、X=0…7一共寫128×8=1024個字節(jié)的數據。同樣在AT89S51中存一張圖就要1024個字節(jié)的空間。

圖片在12864上的顯示簡單來說,主要分為兩步:1)將一幅圖片轉化為一系列二進制數據2)將數據按字節(jié)(8位)寫入液晶對應的DDRAM 由圖3可知,12864的DDRAM有128*8=1024個 地址,只需將圖片轉化的數據按字節(jié)寫入這其 對應的DDRAM地址即可。

字符在12864上的顯示 上圖中,漢字為16*16點陣,ASCII碼為8*16點陣,同圖片一樣,一個漢字(ASCII)由16*2(8*2)個字節(jié)數據組成,字符顯示原理與圖片一致,只需將字符代碼寫入相應DDRAM地址。字體大小可以根據需要改變。小結簡而言之,無論是字符型還是點陣型LCD,其基本原理都是通過將數據寫入所對應的DDRAM地址中來顯示所需要的圖形或是字符。12864點陣型液晶對應的DDRAM有1024個地址,當需顯示的字符或圖片已轉為二進制數據時,確定將數據寫入對應的DDRAM地址就是你所要做的工作!單片機與液晶顯示器的硬件連接液晶顯示器(12864)主要包含了以下接口(圖6):1)使能E(51的RD和WR經或非門接LCD的使能E)2)片選CS1(左半屏)、CS2(右半屏),見圖33)命令/數據選擇RS(0——命令,1——數據)4)讀/寫選擇R/W(0——寫,1——讀)5)數據總線DB0~DB76)負壓產生和負壓輸入(對比度)調整7)復位RST8)電源與地和背景光電源軟件編程 注意:程序的編寫與硬件是分不開的。以圖6為例,A11~A8對應CS2、CS1、R/W、RS,未用的地址線為高。見圖5 則當向12864的左半屏(CS1=1,CS2=0)寫(R/W=0)數據(RS=1)時,總線地址為0x1111010111111111。即0xF5FF。 C文件中定義如下:#defineWD1XBYTE[0xF5FF] 定義了總線地址后,對外部地址的操作變得非常簡單。 如向左半屏寫數據0xFF : WD1=0xFF 讀左半屏數據 : data=RD1(data存儲讀取到的數據)舉例下面簡單介紹程序編寫的流程1)定義所有總線地址#defineWI1XBYTE[0xF4FF] //向左半屏寫命令#defineWD1XBYTE[0xF5FF] //向左半屏寫數據#defineRI1XBYTE[0xF6FF] //讀左半屏命令#defineRD1XBYTE[0xF7FF] //讀左半屏數據#defineWI2XBYTE[0xF8FF] //向右半屏寫命令#defineWD2XBYTE[0xF9FF] //向右半屏寫數據#defineRI2XBYTE[0xFAFF] //讀右半屏命令#defineRD2XBYTE[0xFBFF] //讀右半屏數據2)編寫底層程序(查忙,寫數據,讀數據)查忙(讀BF標志即DB7總線,亦即讀命令)

BF=1表示模塊在內部操作,此時模塊不接受外部指令和數據;

BF=0時模塊為準備狀態(tài),隨時可接受外部指令和數據;

b=RI1

或者b=RI2,觀察b中最高位是否為0,否則忙。寫數據a WD1=a 或者 WD2=a讀數據到data data=RD1 或者

data=RD2

注意:無論是寫數據還是讀數據一定要先查忙(對左右半屏讀命令),只有在BF=0時才能對LCD進行操作3)LCD初始化 包含開顯示(0x3F),起始行(0xC0),設置起始頁地址(0xB8)和Y地址(0x40),即分別向LCD的左右半屏寫命令??砂蠢ㄌ杻鹊臄祿M行初始化。具體可查閱12864的PDF資料。4)清屏(向DDRAM所有地址寫0) 顯示一幅新圖片前必須清屏,否則之前顯示的數據仍存在于液晶上。5)指定位置顯示一個ASCII碼 首先將起始頁地址和起始Y地址設置好,寫入ASCII碼的上半部分(8個字節(jié)數據) 重新設置起始頁地址和起始Y地址,寫入ASCII碼的下半部分(另8個字節(jié)數據) 注意:在對DDRAM進行讀寫操作后,Y地址指針自動加1,指向下一個DDRAM單元。6)指定位置顯示漢字

同顯示ASCII碼基本相似,只是上下部分分別有16個字節(jié)數據需要寫入DDRAM。 7)顯示一張圖片

對于圖片,必然從第0頁第0列開始,可以一頁一頁(不分左右屏)顯示,也可以先寫左半屏后寫右半屏。所謂的兩種方法差別正在設置的起始頁地址和Y地址的不同。圖3

小結12864點陣型液晶對應的DDRAM有1024個地址,無論是顯示字符還是圖片,靈活設置起始頁地址和Y地址,可以達到想要的結果。C語言中用到總線操作必須添加頭文件“absacc.h”,另如使用仿真器,需在debug中的setting里選擇使用xbus(數據總線)??墒褂萌∽帜\浖⒆址驁D片轉為一系列二進制數據。寫程序:附件3)寫數據datvoidWriteData(uchardat,bitside){ CheckBusy(side); if(side==Left) WD1=dat; else WD2=dat;}寫命令cmd(side——0為左,1為右)voidWriteCmd(ucharcmd,bitside){ CheckBusy(side); if(side==Left) //Left=0(宏定義) WI1=cmd; else WI2=cmd;}讀操作時序1)查忙程序voidCheckBusy(bitside) //side——0為左1為右{unsignedcharbuf=0xFF; while(buf){ if(!side) buf=RI1;//單片機命令 else buf=RI2; buf&=0x80; //取D7若為1則忙,忙則buf!=0(LCD回信號) }}初始化:4)初始化程序voidLCD_Init(){ WriteCmd(0x3F,Left);//顯示開 WriteCmd(0x3F,Right); WriteCmd(0xC0,Left);//起始行 WriteCmd(0xC0,Right); WriteCmd(0xB8,Left); WriteCmd(0xB8,Right);//起始x,y坐標(0,0) WriteCmd(0x40,Left); WriteCmd(0x40,Right);}5)清屏(一般dat=0)voidLCD_Clear(uchardat){ uchari,j; for(i=0;i<8;i++){ WriteCmd(0xB8+i,Left); WriteCmd(0xB8+i,Right); WriteCmd(0x40,Left); WriteCmd(0x40,Right); for(j=0;j<64;j++){ WriteData(dat,Left); WriteData(dat,Right); } }}總結理解12864是如何顯示字符和圖形的知曉單片機與12864的硬件連接根據硬件接線,確定所有的總線地址(8個)明白如何通過總線操作對12864進行數據與命令的交換參考12864的命令字進行軟件編程學會如何使用取字模軟件圖6AT89C51與12864的硬件連接LCD12864模塊的20個引腳定義如下:1.Vss

邏輯電源地

2.VDD邏輯電源正5v

3.V0LCD驅動電壓

4.RS數據/指令選擇:高電平為數據,低電平為指令

5.R/W讀/寫選擇:高電平為讀數據,低電平為寫數據6.E讀寫使能,高電平有效,下降沿鎖定數據

7.DB0數據輸入輸出引腳

8.DB1數據輸入輸出引腳

9.DB2數據輸入輸出引腳

10.DB3數據輸入輸出引腳

11.DB4數據輸入輸出引腳

12.DB5數據輸入輸出引腳

13.DB6數據輸入輸出引腳

14.DB7數據輸入輸出引腳

15.CS1片選擇號,低電平時選擇前64列

16.CS2片選擇號,低電平時選擇后64列

17.RET復位信號,低電平有效。

18.VEE輸出-15v電源給V0提供驅動電源

19.A背光電源LED正極

20.K背光電源LED負極圖5.LCD引腳圖帶字庫12864帶字庫的12864的基本特性:(1)顯示分辨率:128×64點(就是64行,每行128個點)(2)內置漢字字庫,提供8192個16×16點陣漢字(12864內部有一個CGROM,內容掉電可以存儲,所以漢字字庫會存放在里面。滿屏最多顯示4*8=32個漢字)。(3)內置128個16×8點陣ASCII字符(12864一次最多可以顯示4*16=64個ASCII字符)。(4)通訊方式:串行、并口可選(數據寫入和讀出可以是以串行的方式,也可以是以并行的方式。)所以只要我們寫入指令0x01,整個屏幕就被清空了。LCD初始化:一般用指令0x0c,開顯示,關閉光標既可以控制擴展功能,又可以控制繪圖顯示的指令!用0X30,基本指令集指令0X06光標右移1.漢字顯示坐標顯示漢字一屏可以顯示4*8=32個16*16的漢字。實物圖對照下,把地址也表到實物圖上去了。操作的具體流程:A進入基本指令模式(指令16,指令為0x30)B寫入xy地址(地址需要查上表,用指令8,也就是寫入DDRAM)C寫入欲寫入的漢字的編碼(一般定義一個數組,直接把漢字存放在里面即可,存儲的時候它就是以編碼的形式。例如:ucharcodedis1[]=“南京師范大學";)例程代碼:ucharcodedis3[]={“南京師范大學"};voiddisplay_hz(){ UcharI; Write_comd(0x30);//基本指令 Write_comd(0x80);//寫在第一個位置上 For(i=0;i<8;i++) { Write_da(dis3[i]);//把數據送到端口 Delay_ms(5);//延時一會}}2.ASCII顯示坐標:它的坐標和漢字的坐標是一樣的,只不過一個漢字的位置可以放兩個ASCII碼字符。因為前者為16*16后者為16*8,這樣一行可以顯示16個ASCII碼了。在顯示一串字符穿的時候,給一個起始地址,屏幕就會依次顯示出來(自動加一功能)。操作的具體流程:A進入基本指令模式(指令16,指令為0x30)B寫入xy地址(地址需要查上表,用指令8,也就是寫入DDRAM)C寫入欲寫入的漢字的編碼(一般定義一個數組,直接把ASACII碼存放在里面即可,存儲的時候它就是以編碼的形式。例如:ucharcodedis1[]="SH";)例程代碼:ucharcodedis2[]={"SH"};voiddisplay_ascii(){ UcharI; Write_comd(0x30);//基本指令 Write_comd(0x80);//寫在第一個位置上 For(i=0;i<2;i++) { Write_da(dis2[i]);//把數據送到端口 Delay_ms(5);//延時一會}}并行寫資料到模塊:時序圖:寫指令:voi

溫馨提示

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

評論

0/150

提交評論