單片機原理及接口技術(C51編程)05.pptx_第1頁
單片機原理及接口技術(C51編程)05.pptx_第2頁
單片機原理及接口技術(C51編程)05.pptx_第3頁
單片機原理及接口技術(C51編程)05.pptx_第4頁
單片機原理及接口技術(C51編程)05.pptx_第5頁
已閱讀5頁,還剩228頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、,第5章,單片機的開關檢測、鍵盤輸入 與顯示的接口設計,單片機原理及接口技術(C51編程)(第2版),目 錄,CONTENTS,5.1 單片機控制發(fā)光二極管顯示,5.2 開關狀態(tài)檢測,5.3 單片機控制LED數(shù)碼管的顯示,5.4 單片機控制LED點陣顯示器顯示,5.5 單片機控制液晶顯示模塊1602 LCD的顯示,5.6 鍵盤接口設計,5.1 單片機控制發(fā)光二極管顯示,發(fā)光二極管常用來指示系統(tǒng)工作狀態(tài),制作節(jié)日彩燈、廣告牌匾等。 大部分發(fā)光二極管工作電流15mA之間,其內阻為20100。電流越大,亮度也越高。 為保證發(fā)光二極管正常工作,同時減少功耗,限流電阻選擇十分重要,若供電電壓為+5V,則

2、限流電阻可選13k。,5.1.1 單片機與發(fā)光二極管的連接,第2章已介紹,P0口作通用I/O用,由于漏極開路,需外接上拉電阻。而P1P3口內部有30k左右上拉電阻。 下面討論P1P3口如何與LED發(fā)光二極管驅動連接問題。 單片機并行端口P1P3直接驅動發(fā)光二極管,電路見圖5-1。 與P1、P2、P3口相比,P0口每位可驅動8個LSTTL輸入,而P1P3口每一位驅動能力,只有P0口一半。,5.1.1 單片機與發(fā)光二極管的連接,圖5-1 發(fā)光二極管與單片機并行口的連接,5.1.1 單片機與發(fā)光二極管的連接,當P0口某位為高電平時,可提供400A的拉電流;當P0口某位為低電平(0.45V)時,可提供

3、3.2mA的灌電流,而P1P3口內有30k左右上拉電阻,如高電平輸出,則從P1、P2和P3口輸出的拉電流Id僅幾百A,驅動能力較弱,亮度較差,見圖5-1(a)。 如端口引腳為低電平,能使灌電流Id從單片機外部流入內部,則將大大增加流過的灌電流值,見圖5-1(b)。AT89S51任一端口要想獲得較大的驅動能力,要用低電平輸出。如一定要高電平驅動,可在單片機與發(fā)光二極管間加驅動電路,如74LS04、74LS244等。,5.1.2 I/O端口的編程舉例,對I/O端口編程控制時,要對I/O端口特殊功能寄存器聲明,在C51的編譯器中,這項聲明包含在頭文件reg51.h中,編程時,可通過預處理命令#inc

4、lude,把這個頭文件包含進去。下面通過案例介紹如何編程對發(fā)光二極管輸出控制。,5.1.2 I/O端口的編程舉例,【例5-1】 制作流水燈,原理電路見圖5-2,8個發(fā)光二極管LED0LED7經(jīng)限流電阻分別接至P1口的P1.0P1.7引腳上,陽極共同接高電平。編寫程序來控制發(fā)光二極管由上至下的反復循環(huán)流水點亮,每次點亮一個發(fā)光二極管。,5.1.2 I/O端口的編程舉例,圖5-2 單片機控制的流水燈,5.1.2 I/O端口的編程舉例,參考程序: #include #include /包含移位函數(shù)_crol_( )的頭文件 #define uchar unsigned char #define ui

5、nt unsigned int void delay(uint i) /延時函數(shù) uchar t; while (i-) for(t=0;t120;t+); ,5.1.2 I/O端口的編程舉例,void main( ) /主程序 P1=0 xfe;/向P1口送出點亮數(shù)據(jù) while (1) delay( 500 ); /500為延時參數(shù),可根據(jù)實際需/要調整 P1=_crol_(P1,1) ; / 函數(shù)_crol_(P1,1)把P1中的數(shù)據(jù)/循環(huán)左移1位 ,5.1.2 I/O端口的編程舉例,(1)while(1) 兩種用法:,“while(1);”: while(1)后有分號,是使程序停留在這

6、指令上; “while(1) ;”:反復循環(huán)執(zhí)行大括號內程序段,本例用法,即控制流水燈反復循環(huán)顯示。,5.1.2 I/O端口的編程舉例,(2)C51函數(shù)庫中的循環(huán)移位函數(shù):循環(huán)移位函數(shù)包括:,循環(huán)左移函數(shù)“_crol_”。 循環(huán)右移函數(shù)“_cror_”。,本例用循環(huán)左移 “_crol_(P1,1)”,函數(shù)。括號第1個參數(shù)為循環(huán)左移對象,即對P1中的內容循環(huán)左移;第2個參數(shù)為左移位數(shù),即左移1位。編程中一定要把含有移位函數(shù)的頭文件intrins.h包含在內,例如第2行“#include ”。,5.1.2 I/O端口的編程舉例,在【例5-1】基礎上,編寫控制發(fā)光二極管反復循環(huán)點亮的流水燈。 【例5

7、-2】電路見圖5-2,制作由上至下再由下至上反復循環(huán)點亮顯示的流水燈,3種方法實現(xiàn)。,數(shù)組的字節(jié)操作實現(xiàn) 建立1個字符型數(shù)組,將控制8個LED顯示的8位數(shù)據(jù)作為數(shù)組元素,依次送P1口。參考程序:,5.1.2 I/O端口的編程舉例,#include #define uchar unsigned char uchar tab = 0 xfe , 0 xfd , 0 xfb , 0 xf7 , 0 xef , 0 xdf , 0 xbf , 0 x7f , 0 x7f , 0 xbf , 0 xdf , 0 xef , 0 xf7 , 0 xfb , 0 xfd , 0 xfe ; /*前8個數(shù)據(jù)為

8、左移點亮 數(shù)據(jù),后8個為右移點亮數(shù)據(jù)*/ void delay( ) uchar i,j; for(i=0; i255; i+) for(j=0; j255; j+); ,5.1.2 I/O端口的編程舉例,void main( )/主函數(shù) uchar i; while (1) for(i=0;i16; i+) P1=tabi; /向P1口送出點亮數(shù)據(jù) delay( ); /延時,即點亮一段時間 ,5.1.2 I/O端口的編程舉例,移位運算符實現(xiàn) 使用移位運算符“”、“”,把送P1口顯示控制數(shù)據(jù)進行移位,從而實現(xiàn)發(fā)光二極管依次點亮。參考程序:,#include #define uchar uns

9、igned char void delay( ) uchar i,j; for(i=0; i255; i+) for(j=0; j255; j+); ,5.1.2 I/O端口的編程舉例,void main( ) /主函數(shù) uchar i,temp; while (1) temp=0 x01;/左移初值賦給temp for(i=0; i8; i+) P1=temp;/ temp中的數(shù)據(jù)取反后送P1口 delay( );/ 延時 temp=temp1; / temp 中數(shù)據(jù)左移一位 ,5.1.2 I/O端口的編程舉例,temp=0 x80; / 賦右移初值給temp for(i=0; i1; /

10、temp 中數(shù)據(jù)右移一位 ,5.1.2 I/O端口的編程舉例,程序說明: 注意使用移位運算符“”、“”是將低位丟棄,高位補0。而循環(huán)左移函數(shù)“_crol_” 是將移出的高位再補到低位,即循環(huán)移位;同理循環(huán)右移函數(shù)“_cror_” 是將移出的低位再補到高位。,5.1.2 I/O端口的編程舉例,用循環(huán)左、右移位函數(shù)實現(xiàn) 使用C51提供的庫函數(shù),即循環(huán)左移n位函數(shù)和循環(huán)右移n位函數(shù),控制發(fā)光二極管點亮。參考程序:,#include #include /包含循環(huán)左、右移位函數(shù)的頭文件 #define uchar unsigned char void delay( ) uchar i,j; for(i=

11、0; i255; i+) for(j=0; j255; j+); ,5.1.2 I/O端口的編程舉例,void main( ) / 主函數(shù) uchar i,temp; while (1) temp=0 xfe; / 初值為11111110 for(i=0; i7; i+) P1=temp;/ temp中的點亮數(shù)據(jù)送P1/口,控制點亮顯示 delay( ); / 延時 temp=_crol_( temp,1) ; / temp 數(shù)據(jù)循環(huán)左移1位 ,5.1.2 I/O端口的編程舉例,for(i=0; i7; i+) P1=temp;/ temp中的數(shù)據(jù)送P1口輸出 delay( ); / 延時 t

12、emp=_cror_( temp,1) ; /temp中數(shù)據(jù)循環(huán)右移1位 ,目 錄,CONTENTS,5.1 單片機控制發(fā)光二極管顯示,5.2 開關狀態(tài)檢測,5.3 單片機控制LED數(shù)碼管的顯示,5.4 單片機控制LED點陣顯示器顯示,5.5 單片機控制液晶顯示模塊1602 LCD的顯示,5.6 鍵盤接口設計,5.2.1 開關檢測案例1,用I/O端口來進行開關狀態(tài)檢測,開關一端接到I/O端口引腳上,并通過上拉電阻接+5V上,開關另一端接地,當開關打開時,I/O引腳為高電平,當開關閉合時,I/O引腳為低電平。 【例5-3】 如圖5-3,單片機的P1.4P1.7接4個開關S0S3,P1.0P1.3

13、接4個發(fā)光二極管LED0LED3。 編程將P1.4P1.7上的4個開關狀態(tài)反映在P1.0P1.3引腳控制的4個發(fā)光二極管上,開關閉合,對應發(fā)光二極管點亮。例如P1.4引腳上開關S0狀態(tài),由P1.0腳上LED0顯示,P1.6引腳上開關S2狀態(tài),由P1.2腳的LED2顯示。,5.2.1 開關檢測案例1,圖5-3 開關、LED發(fā)光二極管與P1口的連接,5.2.1 開關檢測案例1,參考程序如下: #include #define uchar unsigned char void delay( ) /延時函數(shù) uchar i,j; for(i=0; i255; i+) for(j=0; j255; j+

14、); ,5.2.1 開關檢測案例1,void main( ) /主函數(shù) while (1) unsigned char temp; /定義臨時變量temp P1=0 xff; /P1口低4位置1,作為輸入;高4位置1,發(fā)光二極管熄滅 temp=P1 ,5.2.2 開關檢測案例2,【例5-4】 如圖5-4,P1.0和P1.1引腳接有兩只開關S0和S1,兩引腳上的高低電平共4種組合,4種組合分別點亮P2.0P2.3引腳控制的4只LED,即S0、S1均閉合,LED0亮,其余滅;S1閉合、S0打開,LED1亮,其余滅;S0閉合、S1打開,LED2亮,其余滅;S0、S1均打開,LED3亮,其余滅。編程實

15、現(xiàn)此功能。,5.2.2 開關檢測案例2,圖5-4 開關檢測指示器2接口電路與仿真,5.2.2 開關檢測案例2,參考程序:,#include / 包含頭文件reg51.h void main( ) /主函數(shù)main( ) char state; do P1=0 xff;/ P1口為輸入 state=P1;/ 讀入P1口的狀態(tài),送入state state=state / 屏蔽P1口的高6位,5.2.2 開關檢測案例2,switch (state) / 判P1口低2位開關狀態(tài) case 0: P2=0 x01; break; / P1.1、P1.0=00,點亮P2.0腳LED case 1: P2=

16、0 x02; break; / P1.1、P1.0=01,點亮P2.1腳LED case 2: P2=0 x04; break; / P1.1、P1.0=10,點亮P2.2腳LED case 3: P2=0 x08; break; / P1.1、P1.0=11,點亮P2.3腳LED while ( 1 ); ,程序段中用到循環(huán)結構控制語句do-while以及switch-case語句。,目 錄,CONTENTS,5.1 單片機控制發(fā)光二極管顯示,5.2 開關狀態(tài)檢測,5.3 單片機控制LED數(shù)碼管的顯示,5.4 單片機控制LED點陣顯示器顯示,5.5 單片機控制液晶顯示模塊1602 LCD的顯

17、示,5.6 鍵盤接口設計,5.3.1 LED數(shù)碼管顯示原理,LED數(shù)碼管: “8”字型,7段(不包括小數(shù)點)或8段(包括小數(shù)點),每段對應一個發(fā)光二極管,共陽極和共陰極兩種,見圖5-5。共陽極數(shù)碼管的陽極連接在一起,接+5V;共陰極數(shù)碼管陰極連在一起接地。 對于共陰極數(shù)碼管,當某發(fā)光二極管陽極為高電平時,發(fā)光二極管點亮,相應段被顯示。同樣,共陽極數(shù)碼管陽極連在一起,公共陽極接+5V,當某個發(fā)光二極管陰極接低電平時,該發(fā)光二極管被點亮,相應段被顯示。,5.3.1 LED數(shù)碼管顯示原理,圖5-5 8段LED數(shù)碼管結構及外形,5.3.1 LED數(shù)碼管顯示原理,為使LED數(shù)碼管顯示不同字符,要把某些段

18、點亮,就要為數(shù)碼管各段提供一字節(jié)的二進制碼,即字型碼(也稱段碼)。習慣上以“a”段對應字型碼字節(jié)的最低位。各字符段碼見表5-1。,5.3.1 LED數(shù)碼管顯示原理,如要在數(shù)碼管顯示某字符,只需將該字符字型碼加到各段上即可。 例如某存儲單元中的數(shù)為“02H”,想在共陽極數(shù)碼管上顯示“2”,需要把“2”的字型碼“A4H”加到數(shù)碼管各段。將欲顯示字符的字型碼作成一個表(數(shù)組),根據(jù)顯示字符從表中查找到相應字型碼,然后把該字型碼輸出數(shù)碼管各個段上,同時數(shù)碼管的公共端接+5V,此時在數(shù)碼管上顯示字符“2”。 下面介紹單片機如何控制LED數(shù)碼管顯示字符。,5.3.1 LED數(shù)碼管顯示原理,【例5-5】利用

19、單片機控制一個8段LED數(shù)碼管先循環(huán)顯示單個偶數(shù):0、2、4、6、8,再顯示單個奇數(shù):1、3、5、7、9,如此反復循環(huán)顯示。 本例原理電路及仿真結果,見圖5-6。 參考程序如下:,5.3.1 LED數(shù)碼管顯示原理,圖5-6 控制數(shù)碼管循環(huán)顯示單個數(shù)字的電路及仿真,5.3.1 LED數(shù)碼管顯示原理,#include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define out P0 uchar code seg=0 xc0,0 xa4,0 x99,0 x82,0 x80,0

20、 xf9,0 xb0,0 x92,0 xf8,0 x90,0 x01; /共陽極段碼表 void delayms(uint);,5.3.1 LED數(shù)碼管顯示原理,void main(void) uchar i; while(1) out=segi; delayms(900); i+; if(segi=0 x01)i=0; / 如段碼為0 x01,表明一個循環(huán)顯示已結束 ,5.3.1 LED數(shù)碼管顯示原理,void delayms(uint j)/ 延時函數(shù) uchar i; for(;j0;j-) i=250; while(-i); i=249; while(-i); ,5.3.1 LED數(shù)碼

21、管顯示原理,說明:語句“if(segi=0 x01)i=0; ” 含義:如果欲送出的數(shù)組元素為0 x01(數(shù)字“9”段碼0 x90的下一個元素,即結束碼),表明一個循環(huán)顯示已結束,則i=0,則重新開始循環(huán)顯示,從段碼數(shù)組表的第一個元素seg0,即段碼0 xc0(數(shù)字0)重新開始顯示。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,1. 靜態(tài)顯示方式,無論多少位LED數(shù)碼管,都同時處于顯示狀態(tài)。 多位LED數(shù)碼管工作于靜態(tài)顯示方式時,各位共陰極(或共陽極)連接在一起并接地(或接+5V);每位數(shù)碼管段碼線(adp)分別與一個8位I/O口鎖存器輸出相連。如果送往各個LED數(shù)碼管所顯示字符的段碼一經(jīng)確

22、定,則相應I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入下一個顯示字符段碼。靜態(tài)顯示方式顯示無閃爍,亮度較高,軟件控制較易。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,1. 靜態(tài)顯示方式,圖5-7為4位LED數(shù)碼管靜態(tài)顯示電路,各數(shù)碼管可獨立顯示,只要向控制各位I/O口鎖存器送相應顯示段碼,該位就能保持相應的顯示字符。 這樣在同一時間,每一位顯示的字符可各不相同。靜態(tài)顯示方式占用I/O口端口線較多。圖5-7電路,要占用4個8位I/O口(或鎖存器)。如數(shù)碼管數(shù)目增多,則需增加I/O口數(shù)目。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,1. 靜態(tài)顯示方式,圖5-7 4位LED靜態(tài)顯示的示意

23、圖,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,1. 靜態(tài)顯示方式,【例5-6】單片機控制2只數(shù)碼管,靜態(tài)顯示2個數(shù)字“27”。 原理電路見圖5-8。 單片機用P0口與P1口,分別控制加到兩個數(shù)碼管DS0與DS1的段碼,而共陽極數(shù)碼管DS0與DS1的公共端(公共陽極端)直接接至+5V,因此數(shù)碼管DS0與DS1始終處于導通狀態(tài)。利用P0口與P1口帶有的鎖存功能,只需向單片機P0口與P1口分別寫入相應的顯示字符“2”和“7”的段碼即可。 由于一個數(shù)碼管就占用一個I/O端口。如果數(shù)碼管數(shù)目增多,則需增加I/O口,但軟件編程要簡單的多。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,圖5-8 2位數(shù)

24、碼管靜態(tài)顯示的原理電路與仿真,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,1. 靜態(tài)顯示方式,參考程序如下: #include /包含8051單片機寄存器定義的頭文件 void main(void) P0=0 xa4;/將數(shù)字2的段碼送P0口 P1=0 xf8;/將數(shù)字7的段碼送P1口 while(1)/無限循環(huán) ; ,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,顯示位數(shù)較多時,靜態(tài)顯示所占的I/O口多,這時常采用動態(tài)顯示。為節(jié)省I/O口,通常將所有顯示器段碼線相應段并聯(lián)在一起,由一個8位I/O口控制,各顯示位公共端分別由另一單獨I/O口線控制。,5.3.2 LED數(shù)碼

25、管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,圖5-9:4位8段LED動態(tài)顯示器電路示意圖。其中單片機發(fā)出的段碼占用1個8位I/O(1)端口,而位選控制使用I/O(2)端口中4位口線。 動態(tài)顯示就是單片機向段碼線輸出欲顯示字符的段碼。每一時刻,只有1位位選線有效,即選中某一位顯示,其他各位位選線都無效。每隔一定時間逐位輪流點亮各數(shù)碼管(掃描方式),由于數(shù)碼管余輝和人眼的“視覺暫留”作用,只要控制好每位數(shù)碼管顯示時間和間隔,則可造成“多位同時亮”的假象,達到同時顯示效果。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,圖5-9 4位LED數(shù)碼管動態(tài)顯示示意圖,5.3.2 LED

26、數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,各位數(shù)碼管輪流點亮的時間間隔(掃描間隔)應根據(jù)實際情況定。發(fā)光二極管從導通到發(fā)光有一定的延時,如果點亮時間太短,發(fā)光太弱,人眼無法看清;時間太長,產生閃爍現(xiàn)象,且此時間越長,占用單片機時間也越多。另外,顯示位數(shù)增多,也將占用單片機大量時間,因此動態(tài)顯示實質是以執(zhí)行程序時間來換取I/O端口減少。下面是動態(tài)顯示實例。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,【例5-7】 8只數(shù)碼管,分別滾動顯示單個數(shù)字18。程序運行后,單片機控制左邊第1個數(shù)碼管顯示1,其他不顯示,延時之后,控制左邊第2個數(shù)碼管顯示1,其他不顯示,直至第8個

27、數(shù)碼管顯示8,其他不顯示,反復循環(huán)上述過程。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,動態(tài)顯示電路見圖5-10,P0口輸出段碼,P2口輸出掃描的位控碼,通過由8個NPN晶體管的位驅動電路對8個數(shù)碼管位控掃描。即使掃描速度加快,由于是虛擬仿真,數(shù)碼管的余輝也不能像實際電路那樣體現(xiàn)出來。如對本例實際硬件顯示電路進行快速掃描,由于數(shù)碼管余輝和人眼 “視覺暫留”作用,只要控制好每位數(shù)碼管顯示的時間和間隔,則可造成“多位同時亮” 假象,達到同時顯示效果。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,但虛擬仿真做不到這一點。仿真運行下,只能是一位一位點亮顯示

28、,不能看到同時顯示效果,但本例使我們了解動態(tài)掃描顯示實際過程。如采用實際硬件電路,用軟件控制快速掃描,可看到“多位同時點亮” 效果。,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,圖5-10 8只數(shù)碼管分別滾動顯示單個數(shù)字18,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,參考程序如下: #include #include #define uchar unsigned char #define uint unsigned int uchar code dis_code=0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90

29、,0 x88,0 xc0; /共陽數(shù)碼管段碼表 void delay(uint t) /延時函數(shù) uchar i; while(t-) for(i=0;i200;i+); ,5.3.2 LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示,2. 動態(tài)顯示方式,void main() uchar i,j=0 x80; while(1) for(i=0;i8;i+) j=_crol_(j,1); /_crol_(j,1)為將對象j循環(huán)左移1位 P0=dis_codei; /P0口輸出段碼 P2=j; /P2口輸出位控碼 delay(180); /延時,控制每位顯示的時間 ,目 錄,CONTENTS,5.1 單片機控制

30、發(fā)光二極管顯示,5.2 開關狀態(tài)檢測,5.3 單片機控制LED數(shù)碼管的顯示,5.4 單片機控制LED點陣顯示器顯示,5.5 單片機控制液晶顯示模塊1602 LCD的顯示,5.6 鍵盤接口設計,5.4 單片機控制LED點陣顯示器顯示,LED點陣顯示器應用非常廣泛,在許多公共場合,如商場、銀行、車站、機場、醫(yī)院隨處可見。不僅能顯示文字、圖形,還能播放動畫、圖像、視頻等信號。 LED點陣顯示器分為圖文顯示器和視頻顯示器,有單色顯示,還有彩色顯示。下面僅介紹單片機如何來控制單色LED點陣顯示器的顯示。,5.4.1 LED點陣顯示器結構與顯示原理,1. LED點陣結構,以88LED點陣顯示器為例,外形見

31、圖5-11,內部結構見圖5-12,由64個發(fā)光二極管組成,且每個發(fā)光二極管是處于行線(R0R7)和列線(C0C7)之間交叉點上。,圖5-11 88 LED點陣顯示器外形,5.4.1 LED點陣顯示器結構與顯示原理,2. LED點陣顯示原理,顯示的字符由一個個點亮的LED所構成。 由圖5-12點亮點陣中一個發(fā)光二極管條件:對應行為高電平,對應列為低電平。如在很短時間內依次點亮很多個發(fā)光二極管,LED點陣就可顯示一個穩(wěn)定字符、數(shù)字或其他圖形??刂芁ED點陣顯示器顯示,實質就是控制加到行線和列線上編碼,控制點亮某些發(fā)光二極管(點),從而顯示出由不同發(fā)光點組成的各種字符。,5.4.1 LED點陣顯示器

32、結構與顯示原理,1. LED點陣結構,圖5-12 88LED點陣顯示器(共陰極)的結構,5.4.1 LED點陣顯示器結構與顯示原理,2. LED點陣顯示原理,1616 LED點陣顯示器的結構與88LED點陣顯示模塊內部結構及顯示原理是類似的,只不過行和列均為16。1616是由4個88 LED點陣組成,且每個發(fā)光二極管也是放置在行線和列線的交叉點上,當對應某一列置0電平,某一行置1電平時,該發(fā)光二極管點亮。 下面以顯示字符“子”為例,見圖5-13。,5.4.1 LED點陣顯示器結構與顯示原理,1. LED點陣結構,圖5-13 1616 LED點陣顯示器顯示字符“子”,5.4.1 LED點陣顯示器

33、結構與顯示原理,2. LED點陣顯示原理,顯示過程如下:,先給LED點陣的第1行送高電平(行線高電平有效),同時給所有列線送高電平(列線低電平有效),從而第1行發(fā)光二極管全滅; 延時一段時間后,再給第2行送高電平,同時給所有列線送“1100 0000 0000 1111”,列線為0的發(fā)光二極管點亮,從而點亮10個發(fā)光二極管,顯示出漢字“子”的第一橫;,5.4.1 LED點陣顯示器結構與顯示原理,2. LED點陣顯示原理,延時一段時間后,再給第3行送高電平,同時加到列線的編碼為“1111 1111 1101 1111”,點亮1個發(fā)光二極管; 延時一段時間后,再給第16行送高電平,同時給列線送“1

34、111 1101 1111 1111” ,顯示出漢字“子”的最下面的一行,點亮1個發(fā)光二極管。然后再重新循環(huán)上述操作,利用人眼視覺暫留效應,一個穩(wěn)定字符“子” 顯示出來,見圖5-13。,5.4.2 控制1616 LED點陣顯示屏的案例,單片機控制1616點陣顯示屏顯示字符案例。 【例5-8】如圖5-14,利用單片機及 74LS154(4-16譯碼器)、74LS07、1616 LED點陣顯示屏來實現(xiàn)字符顯示,編寫程序,循環(huán)顯示字符“電子技術”。 圖中1616 LED點陣顯示屏16行行線R0R15電平,由P1口低4位經(jīng)4-16譯碼器74HC154的16條譯碼輸出線L0L15經(jīng)驅動后的輸出來控制。1

35、6列列線C0C15的電平由P0口和P2口控制。剩下問題是如何確定顯示字符的點陣編碼,以及控制好每一屏逐行顯示的掃描速度(刷新頻率)。,5.4.2 控制1616 LED點陣顯示屏的案例,圖5-14 控制1616LED點陣顯示器(共陰極)顯示字符,5.4.2 控制1616 LED點陣顯示屏的案例,參考程序如下: #include #define uchar unsigned char #define uint unsigned int #define out0 P0 #define out2 P2 #define out1 P1 void delay(uint j) /延時函數(shù) uchar i=2

36、50; for(;j0;j-) while(-i); i=100; ,5.4.2 控制1616 LED點陣顯示屏的案例,uchar code string= /漢字“電” 1616點陣列碼 0 x7F,0 xFF,0 x7F,0 xFF,0 x7F,0 xFF,0 x03,0 xE0,0 x7B,0 xEF,0 x7B,0 xEF,0 x03,0 xE0,0 x7B,0 xEF,0 x7B,0 xEF,0 x7B,0 xEF,0 x03,0 xE0,0 x7B,0 xEF,0 x7F,0 xBF,0 x7F,0 xBF,0 xFF,0 x00,0 xFF,0 xFF /漢字“子” 1616點陣

37、列碼 0 xFF,0 xFF,0 x03,0 xF0,0 xFF,0 xFB,0 xFF,0 xFD,0 xFF,0 xFE,0 x7F,0 xFF,0 x7F,0 xFF,0 x7F,0 xDF,0 x00,0 x80,0 x7F,0 xFF,0 x7F,0 xFF,0 x7F,0 xFF,0 x7F,0 xFF,0 x7F,0 xFF,0 x5F,0 xFF,0 xBF,0 xFF /漢字“技” 1616點陣列碼 0 xF7,0 xFB,0 xF7,0 xFB,0 xF7,0 xFB,0 x40,0 x80,0 xF7,0 xFB,0 xD7,0 xFB,0 x67,0 xC0,0 x73

38、,0 xEF,0 xF4,0 xEE,0 xF7,0 xF6,0 xF7,0 xF9,0 xF7,0 xF9,0 xF7,0 xF6,0 x77,0 x8F,0 x95,0 xDF,0 xFB,0 xFF,5.4.2 控制1616 LED點陣顯示屏的案例,/漢字“術”的1616點陣的列碼 0 x7F,0 xFF,0 x7F,0 xFB,0 x7F,0 xF7,0 x7F,0 xFF,0 x00,0 x80,0 x7F,0 xFF,0 x3F,0 xFE,0 x5F,0 xFD, 0 x5F,0 xFB,0 x6F,0 xF7,0 x77,0 xE7,0 x7B,0 x8F,0 x7C,0 xD

39、F,0 x7F,0 xFF,0 x7F,0 xFF,0 xFF,0 xFF, ; void main() uchar i,j,n; while(1) for(j=0;j4;j+)/共顯示4個漢字 ,5.4.2 控制1616 LED點陣顯示屏的案例,for(n=0;n40;n+) /每個漢字整屏掃描40次 for(i=0;i16;i+) /逐行掃描16行 out1=i%16; /輸出行碼, out0=stringi*2+j*32; /輸出列碼到C0C7,逐行掃描 out2=stringi*2+1+j*32; /輸出列碼到C8C15,逐行掃描 delay(4);/顯示并延時一段時間 out0=0

40、xff;/列線C0C7為高電平,熄滅發(fā)光二極管 out2=0 xff; /列線C8C15為高電平,熄滅發(fā)光二極管 ,5.4.2 控制1616 LED點陣顯示屏的案例,掃描顯示時,單片機通過P1口低4位經(jīng)4-16譯碼器74HC154的16條譯碼輸出線L0L15經(jīng)驅動后的輸出來控制,逐行為高電平,來進行掃描。由P0口與P2口控制列碼的輸出,從而顯示出某行應點亮的發(fā)光二極管。,以顯示漢字“子”為例,說明顯示過程。由上面程序可看出,漢字“子”的前3行發(fā)光二級管的列碼為“0 xFF,0 xFF,0 x03,0 xF0,0 xFF,0 xFB,”,5.4.2 控制1616 LED點陣顯示屏的案例,按照圖5

41、-12和圖5-14連線關系,加到從左到右發(fā)光二極管應為C0 C7的二進制編碼為“1100 0000”,即最左邊的2個發(fā)光二極管不亮,其余的6個發(fā)光二極管點亮。,第一行列碼為:“ 0 xff,0 xff”,由P0口與P2口輸出,無點亮的發(fā)光二極管。,第二行列碼為:“0 x03,0 xf0”,通過P0口與P2口輸出后,由圖5-13看出,0 x03加到列線C7 C0的二進制編碼為“0000 0011”,這里要注意加到8個發(fā)光二極管上的對應位置。,5.4.2 控制1616 LED點陣顯示屏的案例,同理,P2口輸出的0 xF0加到列線C15 C8的二進制編碼為“1111 0000”,即加到C8 C15的

42、二進制編碼為“0000 1111”,所以第二行的最右邊的4個發(fā)光二極管不亮,如圖5-13所示。對應通過P0口與P2口輸出加到第3行16個發(fā)光二極管的列碼為“0 xFF,0 xFB,”,對應于從左到右的C0 C15的二進制編碼為“1111 1111 1101 1111”,從而第3行左邊數(shù)第11個發(fā)光二極管被點亮,其余均熄滅,如圖5-13所示。其余各行點亮的發(fā)光二極管,也是由1616點陣的列碼來決定。,目 錄,CONTENTS,5.1 單片機控制發(fā)光二極管顯示,5.2 開關狀態(tài)檢測,5.3 單片機控制LED數(shù)碼管的顯示,5.4 單片機控制LED點陣顯示器顯示,5.5 單片機控制液晶顯示模塊1602

43、 LCD的顯示,5.6 鍵盤接口設計,5.5 單片機控制液晶顯示模塊1602 LCD的顯示,液晶顯示器(Liquid Crystal Display,LCD)具有省電、體積小、抗干擾能力強等優(yōu)點, LCD顯示器分為字段型、字符型和點陣圖形型。,字段型。以長條狀組成字符顯示,主要用于數(shù)字顯示,也可用于顯示西文字母或某些字符,廣泛用于電子表、計算器、數(shù)字儀表中。,字符型。專門用于顯示字母、數(shù)字、符號等。一個字符由57或510的點陣組成,在單片機系統(tǒng)中已廣泛使用。,5.5 單片機控制液晶顯示模塊1602 LCD的顯示,點陣圖形型。廣泛用于圖形顯示,如筆記本電腦、彩色電視和游戲機等。它是在平板上排列的

44、多行列的矩陣式的晶格點,點大小與多少決定了顯示的清晰度。,5.5.1 LCD 1602液晶顯示模塊簡介,單片機系統(tǒng)中常用的字符型液晶顯示模塊。由于LCD顯示面板較為脆弱,廠商已將LCD控制器、驅動器、RAM 、ROM和液晶顯示器用PCB連接到一起,稱為液晶顯示模塊(LCd Module,LCM),購買現(xiàn)成的即可。單片機只需向LCD顯示模塊寫入相應命令和數(shù)據(jù)就可顯示需要的內容。,5.5.1 LCD 1602液晶顯示模塊簡介,字符型LCD模塊常用的有16字1行、16字2行、20字2行、20字4行等模塊,型號常用1602、1604、2002、2004來表示,其中為商標名稱,16代表液晶顯示器每行可顯

45、示16個字符,02表示顯示2行。 LCD1602內有字符庫ROM(CGROM),能顯示出192個字符(57點陣),如圖5-15所示。,1字符型液晶顯示模塊LCD 1602特性與引腳,5.5.1 LCD 1602液晶顯示模塊簡介,1字符型液晶顯示模塊LCD 1602特性與引腳,圖5-15 ROM字符庫的內容,5.5.1 LCD 1602液晶顯示模塊簡介,1字符型液晶顯示模塊LCD 1602特性與引腳,由字符庫可看出顯示器顯示的數(shù)字和字母部分代碼,恰是ASCII碼表中編碼。 單片機控制LCD 1602顯示字符,只需將待顯示字符的ASCII碼寫入顯示數(shù)據(jù)存儲器(DDRAM),內部控制電路就可將字符在

46、顯示器上顯示出來。,5.5.1 LCD 1602液晶顯示模塊簡介,例如,顯示字符“A”,單片機只需將字符“A”的ASCII碼41H寫入DDRAM,控制電路就會將對應的字符庫ROM(CGROM)中的字符“A”的點陣數(shù)據(jù)找出來顯示在LCD上。 模塊內有80字節(jié)數(shù)據(jù)顯示RAM (DDRAM),除顯示192個字符(57點陣)的字符庫ROM(CGROM)外,還有64字節(jié)的自定義字符RAM(CGRAM),用戶可自行定義8個57點陣字符。,1字符型液晶顯示模塊LCD 1602特性與引腳,5.5.1 LCD 1602液晶顯示模塊簡介,LCD 1602工作電壓4.55.5V,典型5V,工作電流2mA。標準的14

47、引腳(無背光)或16個引腳(有背光)的外形及引腳分布如圖5-16所示。,1字符型液晶顯示模塊LCD 1602特性與引腳,(a) LCD 1602的外形,(b) LCD 1602的引腳,圖5-16 LCD 1602外形及引腳,5.5.1 LCD 1602液晶顯示模塊簡介,引腳包括8條數(shù)據(jù)線、3條控制線和3條電源線,見表5-2。通過單片機向模塊寫入命令和數(shù)據(jù),就可對顯示方式和顯示內容做出選擇。,1字符型液晶顯示模塊LCD 1602特性與引腳,5.5.1 LCD 1602液晶顯示模塊簡介,顯示字符首先要解決待顯示字符的ASCII碼產生。用戶只需在C51程序中寫入欲顯示的字符常量或字符串常量,C51程

48、序在編譯后會自動生成其標準的ASCII碼,然后將生成的ASCII碼送入顯示用數(shù)據(jù)存儲器DDRAM,內部控制電路就會自動將該ASCII碼對應的字符在LCD1602顯示出來。,2LCD1602字符的顯示及命令字,5.5.1 LCD 1602液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,讓液晶顯示器顯示字符,首先對其進行初始化設置:對有、無光標、光標移動方向、光標是否閃爍及字符移動方向等進行設置,才能獲得所需顯示效果。 對LCD 1602的初始化、讀、寫、光標設置、顯示數(shù)據(jù)的指針設置等,都是單片機向LCD 1602寫入命令字來實現(xiàn)。命令字見表5-3。,5.5.1 LCD 1602液晶顯示模塊

49、簡介,2LCD1602字符的顯示及命令字,5.5.1 LCD 1602液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,表5-3中11個命令功能說明如下:,命令1:清屏,光標返回地址00H位置(顯示屏的左上方)。 命令2:光標返回到地址00H位置(顯示屏的左上方)。 命令3:光標和顯示模式設置。,5.5.1 LCD 1602液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,I/D地址指針加1或減1選擇位。 I/D=1,讀或寫一個字符后地址指針加1; I/D=0,讀或寫一個字符后地址指針減1。,S屏幕上所有字符移動方向是否有效的控制位。 S=1,當寫入一字符時,整屏顯示左移(I/D=1)

50、或右移(I/D=0); S=0,整屏顯示不移動。,5.5.1 LCD 1602液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,表5-3中11個命令功能說明如下:,命令4:顯示開/關及光標設置。 D屏幕整體顯示控制位,D=0關顯示,D=1開顯示。 C光標有無控制位,C=0無光標,C=1有光標。 B光標閃爍控制位,B=0不閃爍,B=1閃爍。,5.5.1 LCD 1602液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,命令5:光標或字符移位。 S/C光標或字符移位選擇控制位。 0:移動光標, 1:移動顯示的字符。 R/L移位方向選擇控制位。0:左移,1:右移,,5.5.1 LCD 160

51、2液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,命令6:功能設置命令。 DL傳輸數(shù)據(jù)的有效長度選擇控制位。1:8位數(shù)據(jù) 線接口;0:4位數(shù)據(jù)線接口。 N顯示器行數(shù)選擇控制位。0:單行顯示,1:兩 行顯示。 F字符顯示的點陣控制位。0:顯示57點陣字符, 1:顯示510點陣字符。,5.5.1 LCD 1602液晶顯示模塊簡介,2LCD1602字符的顯示及命令字,命令7:CGRAM地址設置。 命令8:DDRAM地址設置。LCD內部有一個數(shù)據(jù)地址指 針,用戶可通過它訪問內部全部80字節(jié)的數(shù)據(jù)顯 示RAM。 命令格式:80H+地址碼。其中,80H為命令碼。 命令9:讀忙標志或地址。 BF忙標志

52、。1:LCD忙,此時LCD不能接受命令 或數(shù)據(jù);0:表示LCD不忙。 命令10:寫數(shù)據(jù)。 命令11:讀數(shù)據(jù)。,5.5.1 LCD 1602液晶顯示模塊簡介,3字符顯示位置的確定,80字節(jié)的DDRAM,與顯示屏上字符顯示位置一一對應,圖5-17給出LCD1602顯示RAM地址與字符顯示位置的對應關系。 當向DDRAM的00H0FH(第1行)、40H4FH(第2行)地址的任一處寫數(shù)據(jù)時,LCD立即顯示出來,該區(qū)域也稱為可顯示區(qū)域。 而當寫入10H27H或50H67H地址處時,字符不會顯示出來,該區(qū)域也稱為隱藏區(qū)域。如果要顯示寫入到隱藏區(qū)域的字符,需要通過字符移位命令(命令5)將它們移入到可顯示區(qū)域

53、方可正常顯示。,5.5.1 LCD 1602液晶顯示模塊簡介,3字符顯示位置的確定,需說明的是,在向DDRAM寫入字符時,首先要設置DDRAM定位數(shù)據(jù)指針,此操作可通過命令8完成。 例如,要寫字符到DDRAM的40H處,則命令8的格式為: 80H+40H=C0H,其中80H為命令代碼,40H是要寫入字符處的地址。,5.5.1 LCD 1602液晶顯示模塊簡介,圖5-17 LCD內部顯示RAM的地址映射圖,3字符顯示位置的確定,5.5.1 LCD 1602液晶顯示模塊簡介,4LCD1602的復位,LCD1602上電后復位狀態(tài)為:,清除屏幕顯示。,設置為8位數(shù)據(jù)長度,單行顯示,57點陣字符。,顯示

54、屏、光標、閃爍功能均關閉。,輸入方式為整屏顯示不移動,I/D=1。,5.5.1 LCD 1602液晶顯示模塊簡介,LCD1602的一般初始化設置為:,寫命令38H,即顯示模式設置(162顯示,57點陣,8位接口)。,寫命令08H,顯示關閉。,寫命令01H,顯示清屏,數(shù)據(jù)指針清0。,寫命令06H,寫一個字符后地址指針加1。,寫命令0CH,設置開顯示,不顯示光標。,4LCD1602的復位,5.5.1 LCD 1602液晶顯示模塊簡介,4LCD1602的復位,需注意,在進行上述設置及對數(shù)據(jù)進行讀取時,通常需要檢測忙標志位BF如果為1,則說明忙,要等待;如果BF為0,則可進行下一步操作。,5.5.1

55、LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,LCD慢顯示器件,所以在寫每條命令前,一定要查詢忙標志位BF,即是否處于“忙”狀態(tài)。如LCD正忙于處理其他命令,就等待;如不忙,則向LCD寫入命令。標志位BF連接在8位雙向數(shù)據(jù)線的D7位上。如果BF=0,表示LCD不忙;如果BF=1,表示LCD處于忙狀態(tài),需等待。 LCD1602的讀寫操作規(guī)定見表5-4。,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,LCD1602與AT89S51的接口電路見圖5-18。,圖5-18 單片機與LCD160

56、2接口電路,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,由圖5-18可看出,LCD1602的RS、R/W*和E這3個引腳分別接在P2.0、P2.1和P2.2引腳,只需通過對這3個引腳置“1”或清“0”,就可實現(xiàn)對LCD1602的讀寫操作。具體來說,顯示一個字符的操作過程為“讀狀態(tài)寫命令寫數(shù)據(jù)自動顯示”。,(1)讀狀態(tài) 是對LCD1602 的“忙”標志BF進行檢測,如果BF=1,說明LCD處于忙狀態(tài),不能對其寫命令;如果BF=0,則可寫入命令。 檢測忙標志函數(shù)具體如下:,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,void check_bu

57、sy(void) /檢查忙標志函數(shù) uchar dt; do dt=0 xff;/ dt為變量單元,初值為0 xff E=0; RS=0;/按照表5-4讀寫操作規(guī)定RS=0,E=1/時才可讀忙標志 RW=1; E=1; dt=out;/ out為P0口,P0口的狀態(tài)送入dt中 while(dt / BF=0,LCD不忙,結束檢測 ,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,函數(shù)檢測P0.7腳電平,即檢測忙標志BF,如BF=1,說明LCD處于忙狀態(tài),不能執(zhí)行寫命令;BF=0,可執(zhí)行寫命令。 (2)寫命令 寫命令函數(shù)如下:,5.5.1 LCD 1602液晶顯示模塊簡介

58、,5LCD1602基本操作,void write_command(uchar com) /寫命令函數(shù) check_busy(); E=0; /按規(guī)定RS和E同時為0時可以寫入命令 RS=0; RW=0; out=com;/將命令com寫入P0口 E=1; /按規(guī)定寫命令時,E應為正脈沖,即正/跳變,所以前面先置E=0 _nop_( );/空操作1個機器周期,等待硬件反應 E=0;/ E由高電平變?yōu)榈碗娖剑琇CD開始執(zhí)行/命令 delay(1);/延時,等待硬件響應 ,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,(3)寫數(shù)據(jù) 將要顯示字符的ASCII碼寫入LCD中的數(shù)據(jù)顯示RAM(DDRAM),例如將數(shù)據(jù)“dat”,寫入LCD模塊。 寫數(shù)據(jù)函數(shù)如下:,5.5.1 LCD 1602液晶顯示模塊簡介,5LCD1602基本操作,void write_data(uchar dat) /寫數(shù)據(jù)函數(shù) che

溫馨提示

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

評論

0/150

提交評論