单片机:LCD1602
index
- 1. 參考資料:
- 2. 中文資料
- 2.1. 液晶顯示器各種圖形的顯示原理
- 2.1.1 基本原理
- 2.1.2 字符的顯示
- 2.1.3 漢字的顯示
- 2.2 1602字符型LCD簡介
- 2.3 1602存儲空間
- 2.3.1 DDRAM :
- 2.3.2 CGROM:
- 2.4 1602控制指令
- 2.5 基本操作時序表
- 2.5.1 讀寫操作時序如圖所示
- 2.6 1602LCD的RAM地址映射及標準字庫表
- 3. 51單片機驅動LCD1602的電路圖+程序
- 3.1 編程思路:
- 3.2 仿真電路圖
- 3.2 代碼:
1. 參考資料:
本文在此LCD1602中文資料的基礎上修改完成。
2. 中文資料
2.1. 液晶顯示器各種圖形的顯示原理
2.1.1 基本原理
點陣圖形式液晶由M×N個顯示單元組成,假設LCD顯示屏有64行,每行有128列,每8列對應1字節的8位,即每行由16字節,共16×8=128個點組成,屏上64×16=1024個顯示單元與顯示RAM區1024字節相對應,每一字節的內容和顯示屏上相應位置的亮暗對應。例如屏的第一行的亮暗由RAM區的000H——00FH的16字節的內容決定,當(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(000H)=FFH,(001H)=00H,(002H)=FFH,……(00EH)=FFH,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。
2.1.2 字符的顯示
用LCD顯示一個字符時比較復雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應的顯示RAM區的8字節,還要使每字節的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內帶字符發生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據在LCD上開始顯示的行列號及每行的列數找出顯示RAM對應的地址,設立光標,在此送上該字符對應的代碼即可。
2.1.3 漢字的顯示
漢字的顯示一般采用圖形的方式,事先從微機中提取要顯示的漢字的點陣碼(一般用字模提取軟件),每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據在LCD上開始顯示的行列號及每行的列數可找出顯示RAM對應的地址,設立光標,送上要顯示的漢字的第一字節,光標位置加1,送第二個字節,換行按列對齊,送第三個字節……直到32B顯示完就可以LCD上得到一個完整漢字
2.2 1602字符型LCD簡介
字符型液晶顯示模塊是一種專門用于顯示字母、數字、符號等點陣式LCD,目前常用161,162,202和402行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖
圖一
1602LCD的基本參數及引腳功能
1602LCD分為帶背光和不帶背光兩種,控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如下圖
圖二
LCD1602主要技術參數:
- 顯示容量:16×2個字符
- 芯片工作電壓:4.5—5.5V
- 工作電流:2.0mA(5.0V)
- 模塊最佳工作電壓:5.0V
- 字符尺寸:2.95×4.35(W×H)mm
引腳功能說明
1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表
| 1 | VSS | 電源地 | 9 | D2 | 數據 |
| 2 | VDD | 電源正極 | 10 | D3 | 數據 |
| 3 | VL | 液晶顯示偏壓,對比度調節 | 11 | D4 | 數據 |
| 4 | RS | 數據/命令選擇 | 12 | D5 | 數據 |
| 5 | R/W | 讀/寫選擇 | 13 | D6 | 數據 |
| 6 | E | 使能信號 | 14 | D7 | 數據 |
| 7 | D0 | 數據 | 15 | BLA | 背光源正極 |
| 8 | D1 | 數據 | 16 | BLK | 背光源負極 |
表1 引腳接口說明表
- 第1腳:VSS為地電源。
- 第2腳:VDD接5V正電源。
- 第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。
- 第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。
- 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。
- 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
- 第7~14腳:D0~D7為8位雙向數據線。
- 第15腳:背光源正極。
- 第16腳:背光源負極。
2.3 1602存儲空間
2.3.1 DDRAM :
顯示用RAM直接和屏幕上的點相對應,屏幕上的一個點和DDRAM中的一個位對應,字符屏的DDRAM和圖形屏的DDRAM有一點點區別。
2.3.2 CGROM:
字模存儲用空間。你要顯示某個ASCII字符時,要顯示字符的字模就存在這里,對于字符屏,要顯示某個字符時,往DDRAM里寫字符的索引(一般都是ASCII碼)就可以完成顯示。比如你寫0x38,則顯示為數字8。
字符屏的DDRAM一般和IC能顯示的最大字符數相同。有的IC可以控制顯示80個字符,但屏幕只顯示20個字符。對于圖形屏,往DDRAM里寫什么樣的數據,屏幕上就會顯示什么樣的點,比如你寫0x38, 則顯示00111000。圖形屏的DDRAM一般都會比屏幕顯示大個2倍以上,為的是簡化翻屏,以及實現其他特殊顯示效果 。
CGRAM是用戶自建字模區,有時ASCII碼表不能滿足個人對字符的要求,則需要在這里寫入字模。字模的方式和CGROM中的一樣。
一般寫入到這里的字模,其索引值為(0x00~0x07),建立好字模后,往DDRAM中寫索引0x00,新建的字符就會顯示出來。
2.4 1602控制指令
1602液晶模塊內部的控制器共有11條控制指令
如下表所示:
| 1 | 清顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 | 光標返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * |
| 3 | 置輸入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S |
| 4 | 顯示開/關控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
| 5 | 光標或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * |
| 6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * |
| 7 | 置字符發生存貯器地址 | 0 | 0 | 0 | 1 | 字符發生存貯器地址 | |||||
| 8 | 置數據存貯器地址 | 0 | 0 | 1 | 顯示數據存貯器地址 | ||||||
| 9 | 讀忙標志或地址 | 0 | 1 | BF | 計數器地址 | ||||||
| 10 | 寫數到CGRAM或DDRAM) | 1 | 0 | 要寫的數據內容 | |||||||
| 11 | 從CGRAM或DDRAM讀數 | 1 | 1 | 讀出的數據內容 |
1602液晶模塊的讀寫操作,屏幕和光標的操作都是通過指令編程來實現的。(說明1為高電平,0為低電平)
- 指令1:清顯示,指令碼01H,光標復位到地址00H位置
- 指令2:光標復位,光標返回到地址00H
- 指令3:輸入方式選擇指令,用于設置光標和畫面移動方式:
I/D = 1:表示數據讀寫操作后,AC自動加1;
I/D = 0:表示數據讀寫操作后,AC自動減1;
S = 1:表示數據讀寫操作后,畫面平移;
S= 0:表示數據讀寫操作后,畫面保持不變; - 指令4:顯示開關控制。
D:顯示開關:D= 1:開;D = 0:關;
C:光標開關:C= 1:開;C= 0:關;
B:閃爍開關:B= 1:開;B= 0:關;。 - 指令5:光標或顯示移位 ,用于在不影響DDRAM的情況下使光標、畫面移動:
S/C = 1:畫面平移1個字符位;
S/C = 0:光標平移1個字符位;
R/L = 1:右移;
R/L = 0:左移; - 指令6:功能設置命令,用于設置工作方式(初始化指令):
DL= 1:表示8位數據接口;
DL = 0:表示4位數據接口;
N = 1:表示2行顯示;
N = 0:表示1行顯示;
F = 1:表示510的點陣字符;
F = 0:表示57的點陣字符; - 指令7:字符發生器RAM地址設置。
- 指令8:DDRAM地址設置。
- 指令9:讀忙信號和光標地址, BF:忙標志位,高電平表示忙,此時模塊不能接收命令或數據,如果為低電平表示不忙。
- 指令10:寫數據指令,用于將地址碼寫入DDRAM以使LCD顯示出相應的圖形或將用戶自創的圖形存入CGRAM內:
- 指令11:讀數據指令,根據當前設置的地址,從DDRAM和CGRAM中讀出數據
2.5 基本操作時序表
與HD44780相兼容,時序表如下:
| 寫指令 | 輸入 | RS=L,R/W=L,D0—D7=指令碼,E=高脈沖 | 輸出 | 無 |
| 讀數據 | 輸入 | RS=H,R/W=H,E=H | 輸出 | D0—D7=數據 |
| 寫數據 | 輸入 | RS=H,R/W=L,D0—D7=數據,E=高脈沖 | 輸出 | 無 |
2.5.1 讀寫操作時序如圖所示
- 讀操作時序
- 寫操作時序
2.6 1602LCD的RAM地址映射及標準字庫表
液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在,哪里顯示字符,圖是1602的內部顯示地址。
圖:LCD1602內部顯示地址
例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態。
1602液晶模塊內部的字符發生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,如圖10-58所示,這些字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。
LCD1602程序詳見:http://www.51hei.com/mcu/2210.html
3. 51單片機驅動LCD1602的電路圖+程序
3.1 編程思路:
- 設置1602液晶的功能;
- 設置1602液晶的輸入方式;
- 設置1602液晶的顯示方式;
- 清屏;
3.2 仿真電路圖
我的電路圖

以下內容來源于:單片機教程網
上圖是仿真效果 顯示2行字符.
/*****************************************
電路連接
P0------DB0~DB7
P2.6------RS
P2.5------RW
P2.7------E
*****************************************/
3.2 代碼:
總結
以上是生活随笔為你收集整理的单片机:LCD1602的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式开发板RS485协议串口编程——角
- 下一篇: RS485通信和Modbus通信协议汇总