LCD1602顯示屏的驅動設置及例程_第1頁
LCD1602顯示屏的驅動設置及例程_第2頁
LCD1602顯示屏的驅動設置及例程_第3頁
LCD1602顯示屏的驅動設置及例程_第4頁
LCD1602顯示屏的驅動設置及例程_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、LCD1602顯示屏的驅動設置及例程一般來說,LCD1602有16條引腳,據(jù)說還有14條引腳的,與16腳的相比缺少了背光電源A(15腳)和地線K(16腳)。我手里這塊LCD1602的型號是HJ1602A,是繪晶科技公司的產(chǎn)品,它有16條引腳。如圖1所示:圖1再來一張它的背面的,如圖2所示:引腳號符號引腳說明引腳號符號引腳說明1VSS電源地9D2數(shù)據(jù)端口2VDD電源正極10D3數(shù)據(jù)端口3VO偏壓信號11D4數(shù)據(jù)端口4RS命令/數(shù)據(jù)12D5數(shù)據(jù)端口5RW讀/寫13D6數(shù)據(jù)端口6E使能14D7數(shù)據(jù)端口7D0數(shù)據(jù)端口15A背光正極8D1數(shù)據(jù)端口16K背光負極圖2它的16條引腳定義如下:對這個表的說明:

2、1. VSS接電源地。2. VDD接+5V。3. VO是液晶顯示的偏壓信號,可接10K的3296精密電位器?;蛲瑯幼柚档腞M065/RM063藍白可調電阻。見圖3。圖34. RS是命令/數(shù)據(jù)選擇引腳,接單片機的一個I/O,當RS為低電平時,選擇命令;當RS為高電平時,選擇數(shù)據(jù)。5. RW是讀/寫選擇引腳,接單片機的一個I/O,當RW為低電平時,向LCD1602寫入命令或數(shù)據(jù);當RW為高電平時,從LCD1602讀取狀態(tài)或數(shù)據(jù)。如果不需要進行讀取操作,可以直接將其接VSS。6. E,執(zhí)行命令的使能引腳,接單片機的一個I/O。7. 

3、;D0D7,并行數(shù)據(jù)輸入/輸出引腳,可接單片機的P0P3任意的8個I/O口。如果接P0口,P0口應該接4.7K10K的上拉電阻。如果是4線并行驅動,只須接4個I/O口。8. A背光正極,可接一個1047歐的限流電阻到VDD。9. K背光負極,接VSS。見圖4所示。圖4二基本操作LCD1602的基本操作分為四種:1. 讀狀態(tài):輸入RS=0,RW=1,E=高脈沖。輸出:D0D7為狀態(tài)字。2. 讀數(shù)據(jù):輸入RS=1,RW=1,E=高脈沖。輸出:D0D7為數(shù)據(jù)。3. 寫命令:輸入RS=0,RW=0,E=高脈沖。輸出:無。4. 寫數(shù)據(jù):輸入RS

4、=1,RW=0,E=高脈沖。輸出:無。讀操作時序圖(如圖5): 圖5寫操作時序圖(如圖6):圖6時序時間參數(shù)(如圖7):圖7三DDRAM、CGROM和CGRAMDDRAM(Display Data RAM)就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。共80個字節(jié),其地址和屏幕的對應關系如下(如圖8): 圖8DDRAM相當于計算機的顯存,我們?yōu)榱嗽谄聊簧巷@示字符,就把字符代碼送入顯存,這樣該字符就可以顯示在屏幕上了。同樣LCD1602共有80個字節(jié)的顯存,即DDRAM。但LCD1602的顯示屏幕只有16×2大小,因此,并不是所有寫入DDRAM的字符代碼都能在屏幕上

5、顯示出來,只有寫在上圖所示范圍內的字符才可以顯示出來,寫在范圍外的字符不能顯示出來。這樣,我們在程序中可以利用下面的“光標或顯示移動指令”使字符慢慢移動到可見的顯示范圍內,看到字符的移動效果。前面說了,為了在液晶屏幕上顯示字符,就把字符代碼送入DDRAM。例如,如果想在屏幕左上角顯示字符A,那么就把字符A的字符代碼41H寫入DDRAM的00H地址處即可。至于怎么寫入,后面會有說明。那么為什么把字符代碼寫入DDRAM,就可以在相應位置顯示這個代碼的字符呢?我們知道,LCD1602是一種字符點陣顯示器,為了顯示一種字符的字形,必須要有這個字符的字模數(shù)據(jù),什么叫字符的字模數(shù)據(jù),看看下面的這個圖就明白

6、了(如圖9)。圖9上圖的左邊就是字符A的字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“”代表0,用“”代表1。從而顯示出A這個字形。從下面的圖可以看出,字符A的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好與該字符的ASCII碼一致,這樣就給了我們很大的方便,我們可以在PC上使用P2=A這樣的語法。編譯后,正好是這個字符的字符代碼。在LCD1602模塊上固化了字模存儲器,就是CGROM和CGRAM,HD44780內置了192個常用字符的字模,存于字符產(chǎn)生器CGROM(Character Generator ROM)中,另外還有8個允許用戶自定義的字符產(chǎn)生RAM,稱為CG

7、RAM(Character Generator RAM)。下圖(如圖12)說明了CGROM和CGRAM與字符的對應關系。從ROM和RAM的名字我們也可以知道,ROM是早已固化在LCD1602模塊中的,只能讀取;而RAM是可讀寫的。也就是說,如果只需要在屏幕上顯示已存在于CGROM中的字符,那么只須在DDRAM中寫入它的字符代碼就可以了;但如果要顯示CGROM中沒有的字符,比如攝氏溫標的符號,那么就只有先在CGRAM中定義,然后再在DDRAM中寫入這個自定義字符的字符代碼即可。和CGROM中固化的字符不同,CGRAM中本身沒有字符,所以要在DDRAM中寫入某個CGROM不存在的字符,必須在CGR

8、AM中先定義后使用。程序退出后CGRAM中定義的字符也不復存在,下次使用時,必須重新定義。圖10上面這個圖(如圖10)說明的是5×8點陣和5×10點陣字符的字形和光標的位置。先來說5×8點陣,它有8行5列。那么定義這樣一個字符需要8個字節(jié),每個字節(jié)的前3個位沒有被使用。例如,定義攝氏溫標的符號0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00。 圖11上面這個圖(如圖11)說明的是設置CGRAM地址指令。從這個指令的格式中我們可以看出,它共有aaaaaa這6位,一共可以表示64個地址,即64個字節(jié)。一個5×8點陣字符

9、共占用8個字節(jié),那么這64個字節(jié)一共可以自定義8個字符。也就是說,上面這個圖的6位地址中的DB5DB4DB3用來表示8個自定義的字符,DB2DB1DB0用來表示每個字符的8個字節(jié)。這DB5DB4DB3所表示的8個自定義字符(0-7)就是要寫入DDRAM中的字符代碼。我們知道,在CGRAM中只能定義8個自定義字符,也就是只有07這8個字符代碼,但在下面的這個表(如圖12)中一共有16個字符代碼(××××0000b-××××1111b)。實際上,如圖所示,它只能表示8個自定義字符 (×××

10、×0000b=××××1000b, ××××0001b=××××1001b依次類推)。也就是說,寫入DDRAM中的字符代碼0和字符代碼8是同一個自定義字符。 5×10點陣每個字符共占用16個字節(jié)的空間,所以CGRAM中只能定義4個這樣的自定義字符。那么如何在CGRAM中自定義字符呢?在上面的介紹中,我們知道有一個設置CGRAM地址指令,同寫DDRAM指令相似,只須設置好某個自定義字符的字模數(shù)據(jù),然后按照上面介紹的方法,設置好CGRAM地址,依次寫入這個字模

11、數(shù)據(jù)即可。我們在后面的例子中再進行說明。 圖12四LCD1602指令1工作方式設置指令(如圖13) 圖13×:不關心,也就是說這個位是0或1都可以,一般取0。DL:設置數(shù)據(jù)接口位數(shù)。DL=1:8位數(shù)據(jù)接口(D7D0)。DL=0:4位數(shù)據(jù)接口(D7D4)。N=0:一行顯示。N=1:兩行顯示。F=0:5×8點陣字符。F=1:5×10點陣字符。說明:因為是寫指令字,所以RS和RW都是0。LCD1602只能用并行方式驅動,不能用串行方式驅動。而并行方式又可以選擇8位數(shù)據(jù)接口或4位數(shù)據(jù)接口。這里我們選擇8位數(shù)據(jù)接口(D7D0)。我們的設置是8位數(shù)據(jù)接口,

12、兩行顯示,5×8點陣,即0b00111000也就是0x38。(注意:NF是10或11的效果是一樣的,都是兩行5×8點陣。因為它不能以兩行5×10點陣方式進行顯示,換句話說,這里用0x38或0x3c是一樣的)。2顯示開關控制指令(如圖14)圖14D=1:顯示開,D=0:顯示關。C=1:光標顯示,C=0:光標不顯示。B=1:光標閃爍,B=0:光標不閃爍。說明:這里的設置是顯示開,不顯示光標,光標不閃爍,設置字為0x0c。3進入模式設置指令(如圖15、16)圖15I/D=1:寫入新數(shù)據(jù)后光標右移。I/D=0:寫入新數(shù)據(jù)后光標左移。S=1:顯示移動。S=0:顯示不移動。&

13、#160;圖16說明:這里的設置是0x06。4光標或顯示移動指令(如圖17、18)圖17 圖18說明:在需要進行整屏移動時,這個指令非常有用,可以實現(xiàn)屏幕的滾動顯示效果。初始化時不使用這個指令。5清屏指令(如圖19)圖19說明:清除屏幕顯示內容。光標返回屏幕左上角。執(zhí)行這個指令時需要一定時間。6光標歸位指令(如圖20) 圖20說明:光標返回屏幕左上角,它不改變屏幕顯示內容。7設置CGRAM地址指令(如圖21)圖21說明:這個指令在上面已經(jīng)介紹過。用法在后面例子中說明。8設置DDRAM地址指令(如圖22)圖22說明:這個指令用于設置DDRAM地址。在對DDRAM進行讀寫之前,

14、首先要設置DDRAM地址,然后才能進行讀寫。前面我們說過,DDRAM就是LCD1602的顯示存儲器。我們要在它上面進行顯示,就要把要顯示的字符寫入DDRAM。同樣,我們想知道DDRAM某個地址上有什么字符,也要先設置DDRAM地址,然后將它讀出到單片機。9讀忙信號和地址計數(shù)器AC(如圖23)圖23說明:這個指令用來讀取LCD1602狀態(tài)。對于單片機來說,LCD1602屬于慢速設備。當單片機向其發(fā)送一個指令后,它將去執(zhí)行這個指令。這時如果單片機再次發(fā)送下一條指令,由于LCD1602速度較慢,前一條指令還未執(zhí)行完畢,它將不接受這新的指令,導致新的指令丟失。因此這條讀忙指令可以用來判斷LCD1602

15、是否忙,能否接收單片機發(fā)來的指令。當BF=1,表示LCD1602正忙,不能接受單片機的指令;當BF=0,表示LCD1602空閑,可以接收單片機的指令。RS=0,表示是指令;RW=1,表示是讀取。這條指令還有一個副產(chǎn)品:即可以得到地址記數(shù)器AC的值(address counter)。LCD1602維護了一個地址計數(shù)器AC,用來記錄下一次讀寫CGRAM或DDRAM的位置。需要強調的是:這條指令我一次也沒有執(zhí)行成功。很多網(wǎng)友似乎也是這樣。好在我們有另外的辦法,也就是延時。通過查看每條指令的執(zhí)行時間,再經(jīng)過一些試驗,可以確定指令的延時。這樣就可以在上一條指令執(zhí)行完畢后再執(zhí)行下一條指令了。10寫數(shù)據(jù)到C

16、GRAM或DDRAM指令(如圖24)圖24說明:RS=1,數(shù)據(jù);RW=0,寫。指令執(zhí)行時,要在DB7DB0上先設置好要寫入的數(shù)據(jù),然后執(zhí)行寫命令。11從CGRAM或DDRAM讀數(shù)據(jù)指令(如圖25)圖25說明:RS=1,數(shù)據(jù);RW=1,讀。先設置好CGRAM或DDRAM的地址,然后執(zhí)行讀取命令。數(shù)據(jù)就被讀入后DB7DB0。 五實例下面我們就以一個實例來結束這篇文章。先介紹一下背景:單片機最小系統(tǒng)(擴充了外部RAM 62256)。采用STC89C52RC,晶振22.1184MHZ。以5×8點陣,16×2行,8位數(shù)據(jù)端口。首先在第一行顯示“I love MCU!”,第二

17、行顯示“LCD1602 Test!”。延時一段時間,清屏。然后在第一行顯示自定義字符:攝氏溫標標志。第二行顯示圓周率(pai)標志。再延時一段時間,清屏。最后在第一行顯示“Welcome to my blog!”,顯示方式是從屏幕右面移入,左面移出。周而復始(如圖26)。圖26例程:1. #include<reg52.h>2. #include"./delay/delay.h"3. 4. sbit RS = P24;5. sbit RW = P25;6. sbit E = P26;7. 8. #define LCDPORT P09. #define LCD_WR

18、ITE_DATA 110. #define LCD_WRITE_COM 011. void lcd_write(unsigned char byte,unsigned char flag)12. 13. if(flag)14. 15. RS = 1;/數(shù)據(jù)16. 17. else18. 19. RS = 0;/命令20. 21. RW = 0;/寫22. E = 1;/使能23. LCDPORT = byte;24. delay_us(10);25. E = 0;26. 27. void lcd_init()28. 29. delay_ms(15);30. lcd_write(0x38,LCD

19、_WRITE_COM);/設置工作方式,8位數(shù)據(jù)接口,兩行顯示,5*8點陣字符31. delay_ms(5);32. lcd_write(0x38,LCD_WRITE_COM);33. delay_ms(5);34. lcd_write(0x38,LCD_WRITE_COM);35. delay_ms(5);36. lcd_write(0x38,LCD_WRITE_COM);37. delay_ms(5);38. lcd_write(0x38,LCD_WRITE_COM);39. delay_ms(5);40. lcd_write(0x08,LCD_WRITE_COM);/關閉顯示41. de

20、lay_ms(5);42. lcd_write(0x01,LCD_WRITE_COM);/清屏43. delay_ms(5);44. lcd_write(0x06,LCD_WRITE_COM);/寫入新數(shù)據(jù)之后光標后移,顯示移動45. delay_ms(5);46. lcd_write(0x0c,LCD_WRITE_COM);/顯示開,光標不顯示,光標不閃爍47. delay_ms(5);48. 49. void dis_lcd_write(unsigned char x,unsigned char y,unsigned char byte)50. 51. unsigned char i =

21、0;52. /*byte*/53. if(y = 0)54. 55. lcd_write(0x80+x,LCD_WRITE_COM);56. lcd_write(byte,LCD_WRITE_DATA);57. 58. if(y = 1)59. 60. lcd_write(0x80+0x40+x,LCD_WRITE_COM);61. lcd_write(byte,LCD_WRITE_DATA);62. 63. 64. void dis_lcd_src(unsigned char x,unsigned char y,unsigned char *src) 65. 66. if(y = 0)67.

22、 68. lcd_write(0x80+x,LCD_WRITE_COM);69. 70. if(y = 1)71. 72. lcd_write(0x80+0x40+x,LCD_WRITE_COM);73. 74. 75. while(*src != '0')76. 77. lcd_write(*src,LCD_WRITE_DATA);78. src+;79. 80. 自定義字符緩沖區(qū):CGRAM 1602能存儲8個自定義字符,這8個自定義字符存儲空間的首地址分別是:0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。在以0x40來說,它的存儲空間如圖所示不過字符的像素通常是5X7。如果需要更大像素的字符,就只能用多個5X7的字符拼合。每個自定義字符的字節(jié)有8個,最后一個是0x00;每個字節(jié)的高3位為0,即000? ?。比如說:uchar  code table1=0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00;/字符 1. void lcd_dis_self()2. 3. unsigned char i = 6;

溫馨提示

  • 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

提交評論