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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、講座四v1.多位led顯示v2.鍵盤管理模塊v3.點陣、字符液晶顯示器v4.字模提取軟件led的工作原理的工作原理(a)典型的七段式led器件 (b) 共陽極led (c) 共陰極led四位數(shù)七段led數(shù)碼管模塊(左為正面圖、右為背面圖)led數(shù)碼管和單片機的連接1 單片機p2.0p2.7abcdefgdp +5v +5vabcdefgdpp0.0p0.7編程:(以共陽極為例)movp2,#11111001b(0f9h)movp0,#10100100b(0a4h)sjmp$靜態(tài)連接靜態(tài)顯示led數(shù)碼管和單片機的連接2 單片機p2.0p2.7abcdefgdpp0.0p0.1p0.2p0.3想一

2、想:和靜態(tài)連接的區(qū)別在哪里? 單片機 p2.0p2.7abcdefgdpp0.0p0.1p0.2p0.3靜態(tài)、動態(tài)顯示方式總結(jié)q靜態(tài)顯示連接q所有l(wèi)ed的位選均共同連接到+vcc或gnd,每個led的8根段選線分別連接一個8位并行i/o口。q原理簡單;顯示無閃爍;占用i/o資源較多。v動態(tài)顯示連接 所有l(wèi)ed的段選線共同連接在一起共用一個 8位i/o口而每個led的位選分別由一根相應(yīng)的i/o口線控制。因此必須采用動態(tài)掃描顯示方式。例:74ls164+led(proteus)獨立鍵盤case 0 x01: key1(); /鍵盤1功能函數(shù)。 break; case 0 x02: key2();/

3、鍵盤2功能函數(shù)。 break; case 0 x04: key3(); /鍵盤3功能函數(shù)。 break; case 0 x08: key4();/鍵盤4功能函數(shù)。 break; case 0 x10: key5(); /鍵盤5功能函數(shù)。 break; case 0 x20: key6();/鍵盤6功能函數(shù)。 break; case 0 x40: key7(); /鍵盤7功能函數(shù)。 break; case 0 x80: key8();/鍵盤8功能函數(shù)。 break; default:break; 說明 :采用輪詢方式查詢p1口,采用延時法消除鍵盤抖動*/#include /* 函數(shù)名稱:dela

4、y()功能:用于鍵盤消抖的延時函數(shù)說明:無 入口參數(shù):無返回值 :無*/void delay() unsigned char i; for (i=400;i0;i-);/ 主函數(shù) main()void main(void) unsigned char key; while(1) p1=0 xff; /要想從p1口讀數(shù)據(jù)必須先給p1口寫1 key=p1; /讀入p1口的數(shù)據(jù),賦值給變量key if(key!=0 x00) /判斷是否有鍵按下,當(dāng)沒有鍵按下時,p1口的數(shù)據(jù)為0 x00 delay(); /延時去抖 key=p1; /再次讀入p1口的數(shù)據(jù),賦值給變量key if(key!=0 x00

5、) /再次判斷是否有鍵按下 switch(key) 矩陣式鍵盤控制4x4 鍵盤的內(nèi)部結(jié)構(gòu)市售一體成型的4x4鍵盤低電平掃描按下“0”鍵x3x2x1x0y3y2y1y0動作按鍵11 101110key 01101key 11011key 20111key 311 011110key 41101key 51011key 60111key 710 111110key 81101key 91011key a0111key b01 111110key c1101key d1011key e0111key fxx xx1111無按鍵按下低電平動作鍵盤動作分析表高電平掃描按下“0”鍵x3x2x1x0y3y2

6、y1y0動作按鍵00 010001key 00010key 10100key 21000key 300 100001key 40010key 50100key 61000key 701 000001key 80010key 90100key a1000key b10 000001key c0010key d0100key e1000key fxx xx0000無按鍵按下高電平動作鍵盤動作分析表44鍵盤掃描電路基本原理:分行掃描檢查是否有鍵按下若有,確定哪個鍵被按下1. 行掃描法的原理行掃描法的原理 判斷哪一個鍵被按下的流程 p1=0 xfe; n=p1; n&=0 xf0; if(n!

7、=0 xf0) delay(); p1=0 xfe; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(0 xe0):display(0);break; case(0 xd0):display(1);break; case(0 xb0):display(2);break; case(0 x70):display(3);break; p1=0 xfd; n=p1; n&=0 xf0; if(n!=0 xf0) delay(); p1=0 xfd; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(

8、0 xe0):display(4);break; case(0 xd0):display(5);break; case(0 xb0):display(6);break; case(0 x70):display(7);break; p1=0 xfb; n=p1; n&=0 xf0; if(n!=0 xf0) delay(); p1=0 xfb; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(0 xe0):display(8);break; case(0 xd0):display(9);break; case(0 xb0):display(

9、10);break; case(0 x70):display(11);break; p1=0 xf7; n=p1; n&=0 xf0; if(n!=0 xf0) delay(); p1=0 xf7; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(0 xe0):display(12);break; case(0 xd0):display(13);break; case(0 xb0):display(14);break; case(0 x70):display(15);break; void display(unsigned char i)

10、 unsigned char table=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; p2=0 xfe; p0=tablei;2. 行反轉(zhuǎn)法的原理行反轉(zhuǎn)法的原理行線、列線分別接并行口行線輸出,列線輸入列線輸出讀得的值,行線輸入行反轉(zhuǎn)法的流程 uchar keyscan(void)/鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法 uchar cord_h,cord_l;/行列值 p3=0 x0f; /行線輸出全為0 cord_h=p3&0 x0f; /讀

11、入列線值 if(cord_h!=0 x0f) /先檢測有無按鍵按下 delay(100); /去抖 if(cord_h!=0 x0f) cord_h=p3&0 x0f; /讀入列線值 p3=cord_h|0 xf0; /輸出當(dāng)前列線值 cord_l=p3&0 xf0; /讀入行線值 return(cord_h+cord_l);/鍵盤最后組合碼值 此處仿真此處仿真測控系統(tǒng)中必不可少的組成人機界面圖1 測控系統(tǒng)的組成部分液晶顯示器的原理v字符型液晶(1602)方法:通過向指定顯示位置對應(yīng)的ddram中寫數(shù)據(jù)來顯示字符。例如:在第2行第2列顯示字符 a,查表1 可知a對應(yīng)的代碼為01

12、100001即0 x31,則可向地址0 x41中寫入數(shù)據(jù)0 x31即可顯示。圖2 1602的顯示地址與ddram地址點陣型液晶(12864)在點陣型lcd上顯示一幅圖片或是字符,如上圖所示,只需黑色的部分點亮,空白的點置0即可??梢詫cd看成128*64個led燈來幫助理解。正面圖正面圖背面圖背面圖12864分類12864點陣液晶顯示屏有三種控制器,分別是ks0107(ks0108)、t6963c和st7920,三種控制器主要區(qū)別是:ks0107(ks0108)不帶任何字庫、t6963c帶ascii碼,st7920帶國標(biāo)二級字庫(8千多個漢字)。圖3 12864的ddram地址xy地址計數(shù)器

13、實際上是作為ddram的地址指針,x地址計數(shù)器為ddram的頁指針,y地址計數(shù)器為ddram的y(列)地址指針。x地址計數(shù)器沒有記數(shù)功能,只能用指令設(shè)置。y地址計數(shù)器具有循環(huán)記數(shù)功能,各顯示數(shù)據(jù)寫入后,y地址自動加1,y地址指針從0到63。從上圖可以看出數(shù)據(jù)按字節(jié)在屏幕上是豎向排列的。上方為低位,下方為高位。因此在橫向上(也就是y)就一共是128列數(shù)據(jù)。分為cs1和cs2兩個64列來寫入。在豎方向上(也就是x)一字節(jié)數(shù)據(jù)顯示8個點,豎向64個點分為8個字節(jié),稱做8頁(x=0-7)。了解這些后我們就知道要滿屏顯示一張圖就要從y=0127、x=07一共寫1288=1024個字節(jié)的數(shù)據(jù)。同樣在at8

14、9s51中存一張圖就要1024個字節(jié)的空間。 圖片在12864上的顯示v簡單來說,主要分為兩步:v1)將一幅圖片轉(zhuǎn)化為一系列二進制數(shù)據(jù)v2)將數(shù)據(jù)按字節(jié)(8位)寫入液晶對應(yīng)的ddram由圖3可知,12864的ddram有128*8=1024個地址,只需將圖片轉(zhuǎn)化的數(shù)據(jù)按字節(jié)寫入這其對應(yīng)的ddram地址即可。字符在12864上的顯示上圖中,漢字為16*16點陣,ascii碼為8*16點陣,同圖片一樣,一個漢字(ascii)由16*2(8*2)個字節(jié)數(shù)據(jù)組成,字符顯示原理與圖片一致,只需將字符代碼寫入相應(yīng)ddram地址。字體大小可以根據(jù)需要改變。小結(jié)v簡而言之,無論是字符型還是點陣型lcd,其基本

15、原理都是通過將數(shù)據(jù)寫入所對應(yīng)的ddram地址中來顯示所需要的圖形或是字符。v12864點陣型液晶對應(yīng)的ddram有1024個地址,當(dāng)需顯示的字符或圖片已轉(zhuǎn)為二進制數(shù)據(jù)時,確定將數(shù)據(jù)寫入對應(yīng)的ddram地址就是你所要做的工作!單片機與液晶顯示器的硬件連接v液晶顯示器(12864)主要包含了以下接口(圖6) :v1)使能e(51的rd和wr經(jīng)或非門接lcd的使能e)v2)片選cs1(左半屏)、cs2(右半屏),見圖3v3)命令/數(shù)據(jù)選擇rs(0命令,1數(shù)據(jù))v4)讀/寫選擇r/w(0寫,1讀)v5)數(shù)據(jù)總線db0db7v6)負壓產(chǎn)生和負壓輸入(對比度)調(diào)整v7)復(fù)位rstv8)電源與地和背景光電源

16、軟件編程注意:程序的編寫與硬件是分不開的。以圖6為例,a11a8對應(yīng)cs2、cs1、r/w、rs,未用的地址線為高。見圖5則當(dāng)向12864的左半屏(cs1=1,cs2=0)寫(r/w=0)數(shù)據(jù)(rs=1)時,總線地址為0 x1111010111111111。即0 xf5ff。c文件中定義如下:#define wd1 xbyte0 xf5ff定義了總線地址后,對外部地址的操作變得非常簡單。如向左半屏寫數(shù)據(jù)0 xff : wd1=0 xff 讀左半屏數(shù)據(jù) : data=rd1(data存儲讀取到的數(shù)據(jù))舉例v下面簡單介紹程序編寫的流程v1)定義所有總線地址v#define wi1 xbyte0 x

17、f4ff/向左半屏寫命令v#define wd1 xbyte0 xf5ff /向左半屏寫數(shù)據(jù)v#define ri1 xbyte0 xf6ff /讀左半屏命令v#define rd1 xbyte0 xf7ff /讀左半屏數(shù)據(jù)v#define wi2 xbyte0 xf8ff /向右半屏寫命令v#define wd2 xbyte0 xf9ff/向右半屏寫數(shù)據(jù)v#define ri2 xbyte0 xfaff /讀右半屏命令v#define rd2 xbyte0 xfbff/讀右半屏數(shù)據(jù)v2)編寫底層程序(查忙,寫數(shù)據(jù),讀數(shù)據(jù))查忙(讀bf標(biāo)志即db7總線,亦即讀命令)bf=1表示模塊在內(nèi)部操作,

18、此時模塊不接受外部指令和數(shù)據(jù); bf=0時模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù);b=ri1 或者 b=ri2,觀察b中最高位是否為0,否則忙。寫數(shù)據(jù)awd1=a或者wd2=a讀數(shù)據(jù)到datadata=rd1或者data=rd2注意:無論是寫數(shù)據(jù)還是讀數(shù)據(jù)一定要先查忙(對左右半屏讀命令),只有在bf=0時才能對lcd進行操作3)lcd初始化包含開顯示(0 x3f),起始行(0 xc0),設(shè)置起始頁地址(0 xb8)和y地址(0 x40),即分別向lcd的左右半屏寫命令??砂蠢ㄌ杻?nèi)的數(shù)據(jù)進行初始化。具體可查閱12864的pdf資料。4)清屏(向ddram所有地址寫0)顯示一幅新圖片前必須清屏,

19、否則之前顯示的數(shù)據(jù)仍存在于液晶上。5)指定位置顯示一個ascii碼首先將起始頁地址和起始y地址設(shè)置好,寫入ascii碼的上半部分(8個字節(jié)數(shù)據(jù))重新設(shè)置起始頁地址和起始y地址,寫入ascii碼的下半部分(另8個字節(jié)數(shù)據(jù))注意:在對ddram進行讀寫操作后,y地址指針自動加1,指向下一個ddram 單元。6)指定位置顯示漢字 同顯示ascii碼基本相似,只是上下部分分別有16個字節(jié)數(shù)據(jù)需要寫入ddram。7)顯示一張圖片對于圖片,必然從第0頁第0列開始,可以一頁一頁(不分左右屏)顯示,也可以先寫左半屏后寫右半屏。所謂的兩種方法差別正在設(shè)置的起始頁地址和y地址的不同。圖3小結(jié)v12864點陣型液晶

20、對應(yīng)的ddram有1024個地址,無論是顯示字符還是圖片,靈活設(shè)置起始頁地址和y地址,可以達到想要的結(jié)果。vc語言中用到總線操作必須添加頭文件“absacc.h”,另如使用仿真器,需在debug中的setting里選擇使用xbus(數(shù)據(jù)總線)。v可使用取字模軟件將字符或圖片轉(zhuǎn)為一系列二進制數(shù)據(jù)。寫程序:寫程序:附件v3)寫數(shù)據(jù)datvvoid writedata(uchar dat,bit side)vv checkbusy(side);vif(side=left)vwd1=dat;velsevwd2=dat;v寫命令cmd(side0為左,1為右)void writecmd(uchar cm

21、d, bit side) checkbusy(side);if(side=left)/left=0(宏定義)wi1=cmd;elsewi2=cmd;讀操作時序v1)查忙程序vvoid checkbusy(bit side)/side0為左1為右vv unsigned char buf=0 xff;v while(buf)vif(!side)vbuf=ri1;/單片機命令velsevbuf=ri2; v buf&=0 x80; /取d7若為1則忙,忙則buf != 0(lcd回信號)vv初始化:初始化:v4)初始化程序vvoid lcd_init()vv writecmd(0 x3f,l

22、eft);/顯示開v writecmd(0 x3f,right);vwritecmd(0 xc0,left);/起始行v writecmd(0 xc0,right);vwritecmd(0 xb8,left);vwritecmd(0 xb8,right);/起始x,y坐標(biāo)(0,0)vwritecmd(0 x40,left);vwritecmd(0 x40,right);v5)清屏(一般dat=0)vvoid lcd_clear(uchar dat)vv uchar i,j;vfor(i=0;i8;i+)vwritecmd(0 xb8+i,left);vwritecmd(0 xb8+i,righ

23、t);vwritecmd(0 x40,left);vwritecmd(0 x40,right);vfor(j=0;j64;j+)vwritedata(dat,left);vwritedata(dat,right);vvv總結(jié)v理解12864是如何顯示字符和圖形的v知曉單片機與12864的硬件連接v根據(jù)硬件接線,確定所有的總線地址(8個)v明白如何通過總線操作對12864進行數(shù)據(jù)與命令的交換v參考12864的命令字進行軟件編程v學(xué)會如何使用取字模軟件圖6 at89c51與12864的硬件連接lcd12864模塊的20個引腳定義如下:1.vss 邏輯電源地2.vdd邏輯電源正5v3.v0lcd驅(qū)動

24、電壓4.rs 數(shù)據(jù)/指令選擇:高電平為數(shù)據(jù), 低電平為指令5.r/w讀/寫選擇:高電平為讀數(shù)據(jù), 低電平為寫數(shù)據(jù)6.e讀寫使能,高電平有效, 下降沿鎖定數(shù)據(jù)7.db0數(shù)據(jù)輸入輸出引腳8.db1數(shù)據(jù)輸入輸出引腳9.db2數(shù)據(jù)輸入輸出引腳10.db3數(shù)據(jù)輸入輸出引腳11.db4數(shù)據(jù)輸入輸出引腳12.db5數(shù)據(jù)輸入輸出引腳13.db6數(shù)據(jù)輸入輸出引腳14.db7數(shù)據(jù)輸入輸出引腳15.cs1片選擇號,低電平時選擇前64列16.cs2片選擇號,低電平時選擇后64列17.ret復(fù)位信號,低電平有效。18.vee輸出15v電源給v0提供驅(qū)動電源19.a背光電源led正極20.k背光電源led負極圖圖5.lc

25、d引腳圖引腳圖帶字庫12864v帶字庫的帶字庫的12864的基本特性:的基本特性:(1)顯示分辨率)顯示分辨率:12864點點 (就是(就是64行,每行行,每行128個點)個點)(2)內(nèi)置漢字字庫,提供)內(nèi)置漢字字庫,提供8192個個1616點陣漢字(點陣漢字(12864內(nèi)內(nèi)部有一個部有一個cgrom,內(nèi)容掉電可以存儲,所以漢字字庫會,內(nèi)容掉電可以存儲,所以漢字字庫會存放在里面。滿屏最多顯示存放在里面。滿屏最多顯示4*8=32個漢字)。個漢字)。(3)內(nèi)置)內(nèi)置 128個個168點陣點陣ascii字符(字符(12864一次最多可以一次最多可以顯示顯示4*16=64個個ascii字符)。字符)。

26、(4)通訊方式:串行、并口可選)通訊方式:串行、并口可選 (數(shù)據(jù)寫入和讀出可以是以(數(shù)據(jù)寫入和讀出可以是以串行的方式,也可以是以并行的方式。)串行的方式,也可以是以并行的方式。)所以只要我們寫入指令所以只要我們寫入指令0 x01,整個屏幕就被清空了。,整個屏幕就被清空了。lcd初始化:初始化:一般用指令一般用指令0 x0c,開顯示,關(guān)閉光標(biāo),開顯示,關(guān)閉光標(biāo) 既可以控制擴展功能,又可以控制繪圖顯示的指令!用既可以控制擴展功能,又可以控制繪圖顯示的指令!用0x30,基本指令集,基本指令集指令指令0x06光標(biāo)右移光標(biāo)右移1.漢字顯示坐標(biāo)漢字顯示坐標(biāo) 顯示漢字一屏可以顯示顯示漢字一屏可以顯示4*8=

27、32個個16*16的漢字。實的漢字。實物圖對照下,把地址也表物圖對照下,把地址也表到實物圖上去了。到實物圖上去了。 操作的具體流程:操作的具體流程:a進入基本指令模式(指令進入基本指令模式(指令16,指令為,指令為0 x30)b寫入寫入xy地址(地址需要查上表,用指令地址(地址需要查上表,用指令8,也就是寫入,也就是寫入ddram)c寫入欲寫入的漢字的編碼(一般定義一個數(shù)組,直接把漢字存放在里面即可,寫入欲寫入的漢字的編碼(一般定義一個數(shù)組,直接把漢字存放在里面即可,存儲的時候它就是以編碼的形式。例如:存儲的時候它就是以編碼的形式。例如:uchar code dis1=“南京師范大學(xué)南京師范大

28、學(xué);)例程代碼:例程代碼:uchar code dis3 = “南京師范大學(xué)南京師范大學(xué);void display_hz()uchar i;write_comd(0 x30);/基本指令基本指令write_comd(0 x80);/寫在第一個位置上寫在第一個位置上for(i=0;i8;i+)write_da(dis3i);/把數(shù)據(jù)送到端口把數(shù)據(jù)送到端口delay_ms(5);/延時一會延時一會 2.ascii顯示坐標(biāo):顯示坐標(biāo):它的坐標(biāo)和漢字的坐標(biāo)是一樣的,只不過一個漢字的位置可以放兩個它的坐標(biāo)和漢字的坐標(biāo)是一樣的,只不過一個漢字的位置可以放兩個ascii碼字符。因為前者為碼字符。因為前者為1

29、6*16后者為后者為16*8,這樣一行可以顯示,這樣一行可以顯示16個個ascii碼了。在顯示一串字符穿的時候,給一個起始地址,屏幕就碼了。在顯示一串字符穿的時候,給一個起始地址,屏幕就會依次顯示出來(自動加一功能)。會依次顯示出來(自動加一功能)。 操作的具體流程:操作的具體流程:a進入基本指令模式(指令進入基本指令模式(指令16,指令為,指令為0 x30)b寫入寫入xy地址(地址需要查上表,用指令地址(地址需要查上表,用指令8,也就是寫入,也就是寫入ddram)c寫入欲寫入的漢字的編碼(一般定義一個數(shù)組,直接把寫入欲寫入的漢字的編碼(一般定義一個數(shù)組,直接把asacii碼存放碼存放在里面即可,存儲的時候它就是以編碼的形式。例如:在里面即可,存儲的時候它就是以編碼的形式。例如:uchar code dis1=sh;)例程代碼:例程代碼:uchar code dis2 = sh;void display_ascii()uchar i;write_comd(0 x30);/基本指令基本指令write_

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論