液晶使用范例_第1頁(yè)
液晶使用范例_第2頁(yè)
液晶使用范例_第3頁(yè)
液晶使用范例_第4頁(yè)
液晶使用范例_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一個(gè)1602的例子液晶顯示器以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點(diǎn),在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中得到越來(lái)越廣泛的應(yīng)用。     這里介紹的字符型液晶模塊是一種用5x7點(diǎn)陣圖形來(lái)顯示字符的液晶顯示器,根據(jù)顯示的容量可以分為1行16個(gè)字、2行16個(gè)字、2行20個(gè)字等等,這里以常用的2行16個(gè)字的1602液晶模塊來(lái)介紹它的編程方法。 1602采用標(biāo)準(zhǔn)的16漚涌冢渲?1602B引腳說(shuō)明:編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1VSS電源地9D2雙向數(shù)據(jù)口2VDD電源正極10D3雙向數(shù)據(jù)口3VL對(duì)比度調(diào)節(jié)11D4雙向數(shù)據(jù)口4RS數(shù)據(jù)/命令選擇1

2、2D5雙向數(shù)據(jù)口5R/W讀/寫(xiě)選擇13D6雙向數(shù)據(jù)口6E模塊使能端14D7雙向數(shù)據(jù)口7D0雙向數(shù)據(jù)口15BLK背光源地8D1雙向數(shù)據(jù)口16BLA背光源正極注意事項(xiàng):從該模塊的正面看,引腳排列從右向左為:15腳、16腳,然后才是114腳(線路板上已經(jīng)標(biāo)明)。第1腳:VSS為地電源第2腳:VDD接5V正電源第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:RW為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)R

3、S和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。 第1516腳:BLA(BL1): LED背光正極。需要背光時(shí),BLA串接一個(gè)限流電阻接VDD,BLK接地,實(shí)測(cè)該模塊的背光電流為50mA左右,一般接一個(gè)幾十歐姆的電阻,47歐、33歐等;BLK(BL2): LED背光地端。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如表1所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大

4、小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2所示,它的讀寫(xiě)操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。(說(shuō)明:1為高電平、0為低電平) 指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H 指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無(wú)效 指令4:顯示開(kāi)關(guān)控制。

5、 D:控制整體顯示的開(kāi)與關(guān),高電平表示開(kāi)顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開(kāi)與關(guān),高電平表示有光標(biāo),低電平表示無(wú)光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍 指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo) 指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符 (有些模塊是 DL:高電平時(shí)為8位總線,低電平時(shí)為4位總線)指令7:字符發(fā)生器RAM地址設(shè)置 指令8:DDRAM地址設(shè)置 指令9:讀忙信號(hào)和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示

6、忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。 指令10:寫(xiě)數(shù)據(jù) 指令11:讀數(shù)據(jù)     DM-1602液晶顯示模塊可以和單片機(jī)AT89C51直接接口,電路如圖1所示。為了節(jié)約I/O口也可以采用6線接法,只用4根數(shù)據(jù)線,高低位分別傳輸,把RW接地,只寫(xiě)不讀。這樣可以省下5根I/O口線。液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表3是DM-162的內(nèi)部顯示地址.比如第二行第一個(gè)字符的地址是40H,那么是否直接寫(xiě)入4

7、0H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷?xiě)入顯示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫(xiě)入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)     以下是在液晶模塊的第二行第一個(gè)字符的位置顯示字母“A”的程序: ORG 0000H RS EQU P3.7;確定具體硬件的連接方式 RW EQU P3.6 ;確定具體硬件的連接方式E EQU P3.5 ;確定具體硬件的連接方式MOV P1,#00000001B ;清屏并光標(biāo)復(fù)位ACALL ENABLE;調(diào)用寫(xiě)入命令子程序 MOV P

8、1,#00111000B ;設(shè)置顯示模式:8位2行5x7點(diǎn)陣 ACALL ENABLE ;調(diào)用寫(xiě)入命令子程序 MOV P1,#00001111B ;顯示器開(kāi)、光標(biāo)開(kāi)、光標(biāo)允許閃爍ACALL ENABLE ;調(diào)用寫(xiě)入命令子程序MOV P1,#00000110B ;文字不動(dòng),光標(biāo)自動(dòng)右移 ACALL ENABLE ;調(diào)用寫(xiě)入命令子程序MOV P1,#0C0H ;寫(xiě)入顯示起始地址(第二行第一個(gè)位置)ACALL ENABLE ;調(diào)用寫(xiě)入命令子程序MOV P1,01000001B ;字母A的代碼 SETB RS ;RS=1 CLR RW ;RW=0 ;準(zhǔn)備寫(xiě)入數(shù)據(jù)CLR E ;E=0 ;執(zhí)行顯示命令A(yù)C

9、ALL DELAY ;判斷液晶模塊是否忙?SETB E ;E=1 ;顯示完成,程序停車(chē)AJMP $ENABLE: CLR RS ;寫(xiě)入控制命令的子程序CLR RW CLR E ACALL DELAY SETB E RET DELAY: MOV P1,#0FFH ;判斷液晶顯示器是否忙的子程序CLR RS SETB RWCLR E NOP SETB E JB P1.7,DELAY ;如果P1.7為高電平表示忙就循環(huán)等待 RETEND 程序在開(kāi)始時(shí)對(duì)液晶模塊功能進(jìn)行了初始化設(shè)置,約定了顯示格式。注意顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無(wú)需人工干預(yù),每次輸入指令都先調(diào)用判斷液晶模塊是否忙的子程序DELAY,

10、然后輸入顯示位置的地址0C0H,最后輸入要顯示的字符A的代碼41H。6線范例:/編譯器:ICC-AVR v6.31A 日期: 2005-11-24 20:29:57 /目標(biāo)芯片 : M16 /時(shí)鐘: 8.0000Mhz /*- LCD引腳定義 1-GND  2-VCC 3-VO 4-RS 5-RW 6-EN 7到14-D0-D7 15-背景燈+ 16-背景燈- -*/ #include <iom16v.h> #include <macros.h> /*- 下面是AVR與L

11、CD連接信息 PA2 ->RS PA3 ->EN 地  ->RW PA4 ->D4 PA5 ->D5 PA6 ->D6 PA7 ->D7 要使用本驅(qū)動(dòng),改變下面配置信息即可 -*/ #define LCD_EN_PORT    PORTA   /以下2個(gè)要設(shè)為同一個(gè)口 #define LCD_EN_DDR     DDRA #defin

12、e LCD_RS_PORT    PORTA   /以下2個(gè)要設(shè)為同一個(gè)口 #define LCD_RS_DDR     DDRA #define LCD_DATA_PORT  PORTA   /以下3個(gè)要設(shè)為同一個(gè)口 #define LCD_DATA_DDR   DDRA    /一定要用高4位 #define

13、60;LCD_DATA_PIN   PINA #define LCD_RS         (1<<PA2) /0x04   portA2       out #define LCD_EN         (1<<PA3) /

14、0x08   portA3       out #define LCD_DATA       (1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7) /0xf0   portA4/5/6/7 out /*- 函數(shù)說(shuō)明 -*/ void LCD_init(void); void LCD_

15、en_write(void); void LCD_write_command(unsigned  char command)  void LCD_write_data(unsigned char data); void LCD_set_xy (unsigned char x, unsigned char y); void LCD_write_string(unsigned char X,unsigned c

16、har Y,unsigned char *s); void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data); void delay_nus(unsigned int n); void delay_nms(unsigned int n); /*=*/void LCD_init(void)     

17、;    /液晶初始化   LCD_DATA_DDR|=LCD_DATA;   /數(shù)據(jù)口方向?yàn)檩敵?  LCD_EN_DDR|=LCD_EN;       /設(shè)置EN方向?yàn)檩敵?  LCD_RS_DDR|=LCD_RS;       /設(shè)置RS方向?yàn)檩敵?  LCD_write_command(0x28);&

18、#160;   LCD_en_write();   delay_nus(40);   LCD_write_command(0x28);  /4位顯示   LCD_write_command(0x0c);  /顯示開(kāi)   LCD_write_command(0x01);  /清屏   delay_nms(2); void LCD_en_write(void)  /液晶使能  &#

19、160;LCD_EN_PORT|=LCD_EN;   delay_nus(1);   LCD_EN_PORT&=LCD_EN; void LCD_write_command(unsigned char command) /寫(xiě)指令   delay_nus(16);   LCD_RS_PORT&=LCD_RS;        /RS=0   LCD_DATA_POR

20、T&=0X0f;         /清高四位   LCD_DATA_PORT|=command&0xf0; /寫(xiě)高四位   LCD_en_write();   command=command<<4;          /低四位移到高四位   LCD_DATA_PORT&=0x0f;&

21、#160;        /清高四位   LCD_DATA_PORT|=command&0xf0; /寫(xiě)低四位   LCD_en_write();    void LCD_write_data(unsigned char data) /寫(xiě)數(shù)據(jù)   delay_nus(16);   LCD_RS_PORT|=LCD_RS;   &#

22、160;   /RS=1   LCD_DATA_PORT&=0X0f;       /清高四位   LCD_DATA_PORT|=data&0xf0;  /寫(xiě)高四位   LCD_en_write();   data=data<<4;           

23、0;   /低四位移到高四位   LCD_DATA_PORT&=0X0f;        /清高四位   LCD_DATA_PORT|=data&0xf0;   /寫(xiě)低四位   LCD_en_write(); void LCD_set_xy( unsigned char x, unsigned char y

24、60;)  /寫(xiě)地址函數(shù)     unsigned char address;     if (y = 0) address = 0x80 + x;     else   address = 0xc0 + x;     LCD_write_comma

25、nd( address);    void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) /列x=015,行y=0,1     LCD_set_xy( X, Y ); /寫(xiě)地址         while (*s) 

26、60;/ 寫(xiě)顯示字符            LCD_write_data( *s );       s +;             void LCD_write_char(unsigned char X,unsigned char Y,unsign

27、ed char data) /列x=015,行y=0,1   LCD_set_xy( X, Y ); /寫(xiě)地址   LCD_write_data( data);    /*=*/void delay_1us(void)                 /1us延時(shí)函數(shù)  

28、;     asm("nop");    void delay_nus(unsigned int n)       /N us延時(shí)函數(shù)       unsigned int i=0;    for (i=0;i<n;i+)    delay_1us();    void delay_1ms(void)                 /1ms延時(shí)函數(shù)       unsigned i

溫馨提示

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

評(píng)論

0/150

提交評(píng)論