前言
作為常見的一種顯示方案,被廣泛運用于實際的產品,相對于數碼管,其顯示穩定,無頻閃,顯示內容豐富,相對于屏幕,控制簡單,被廣泛運用于對體積要求不嚴格的場所。
1602
其顯示為每行16個字符,兩行。被成為1602,大多數1602模塊基于HD44780液晶芯片進行控制,其內部含有Ascii字庫,可直接顯示所對應的Ascii字符。其每個字符為5*8像素點陣,可通過漢字取模來增加1602對一些簡單漢字的顯示。
字符型LCD1602通常分為14條引腳和16引腳兩種,16引腳多出來的是背光電源線VCC(15引腳)和地線(16引腳),其控制原理與14引腳LCD完全一樣,由于其引腳使用較多,可通過IIC轉接減少所使用的IO。
操作時序
1602 含3個控制端,分別是:RS(數據/命令選擇端)、RW(讀寫控制端)、E(使能信號),RW和RS指示了讀、寫的方向和內容。
在讀數據(或者Busy標志)期間,EN線必須保持高電平;
而在寫指令(或者數據)過程中,EN線上必須送出一個正脈沖。RW、RS的組合一共有四種情況,分別對應四種操作:
讀狀態
在進行讀寫指令和數據時,需要檢測當前1602是否處于忙狀態,處于忙狀態時不能讀寫。當D0-D7數據引腳不全為0時,單片機處于忙狀態。需要等待。
Input:
RS=L;
RW=H;
E=H;
Output:
D0- D7
void readSta() //讀狀態
{
unsignedchar Sa;
LCD=0xff; //單片機讀狀態時,保證自己是高電位
RS=0;
RW=1;
E=1;
do{
Sa=LCD;
}while(Sa&0x80);//拉低七位 判斷最高位為0不忙跳出循環為1忙不跳出循環
}
寫狀態(指令)
向1602中寫入一個字節的控制指令來達到一定的控制效果,常見指令如下。
# 01H:清除DDRAM的所有單元,光標被移動到屏幕左上角。
# 02H:DDRAM所有單元的內容不變,光標移至左上角。
輸入方式設置:
這些指令規定了兩個方面:一是寫入一個DDRAM單元后,地址指針如何改變(加一還是減一);二是屏幕上的內容是否滾動。
# 04H:寫入DDRAM后,地址指針減一,比如第一個字符寫入8FH,則下一個字符會寫入8EH;屏幕上的內容不滾動。
# 05H:寫入DDRAM后,地址指針減一,同上一種情況;每一個字符寫入以后,屏幕上的內容向右滾動一個字符位。
# 06H:寫入DDRAM后,地址指針加一,比如第一個字符寫入80H,則下一個字符會寫入81H;屏幕上的內容也是不滾動。這應該是最常用的一種顯示方式。
# 07H:寫入DDRAM后,地址指針加一,同上一種情況;每一個字符寫入以后,屏幕上的內容向左滾動一個字符位。
屏幕開關、光標開關、閃爍開關設置
# 08H、09H、0AH、0BH:關閉顯示屏,實質上是不把DDRAM中的內容對應顯示在屏幕上,對DDRAM的操作還是在進行的,執行這條指令,接著對 DDRAM進行寫入,屏幕上沒有任何內容,但是接著執行下面的某條指令,就能看到剛才屏幕關閉期間,對DDRAM操作的效果了。
# 0cH:打開顯示屏,不顯示光標,光標所在位置的字符不閃爍。
# 0dH:打開顯示屏,不顯示光標,光標所在位置的字符閃爍。
# 0eH:打開顯示屏,顯示光標,光標所在位置的字符不閃爍。
# 0fH:打開顯示屏,顯示光標,光標所在位置的字符閃爍。
關于光標的位置:光標所在的位置指示了下一個被寫入的字符所處的位置,加入在寫入下一個字符前沒有通過指令設置DDRAM的地址,那么這個字符就應該顯示在光標指定的地方。
設置光標移動、整體畫面是否滾動。
# 10H:每輸入一次該指令,AC就減一,對應了光標向左移動一格。整體的畫面不滾動。
# 14H:每輸入一次該指令,AC就加一,對應了光標向右移動一格。整體的畫面不滾動。
# 18H:每輸入一次該指令,整體的畫面就向左滾動一個字符位。
# 1CH:每輸入一次該指令,整體的畫面就向右滾動一個字符位。畫面在滾動的時候,每行的首尾是連在一起的,也就是每行的第一個字符,若左移25次,就會顯示在該行的最后一格。在畫面滾動的過程中,AC的值也是變化的。
顯示模式設定指令,設定了顯示幾行,顯示什么樣的點陣字符,數據總線占用幾位。
# 20H:4位總線,單行顯示,顯示5×7的點陣字符。
# 24H:4位總線,單行顯示,顯示5×10的點陣字符。
# 28H:4位總線,雙行顯示,顯示5×7的點陣字符。
# 2CH:4位總線,雙行顯示,顯示5×10的點陣字符。
# 30H:8位總線,單行顯示,顯示5×7的點陣字符。
# 34H:8位總線,單行顯示,顯示5×10的點陣字符。
# 8H:8位總線,雙行顯示,顯示5×7的點陣字符。這是最常用的一種模式。3CH:8位總線,雙行顯示,顯示5×10的點陣字符。
RS = L
RW = L
然后將數據送到數據口 D0~D7,最后 E引腳一個高脈沖將數據寫入。
/*寫指令函數*/
void write_con(u8 con){
P0=con; //送出指令
RS=0;RW=0;EN=1; //寫指令時序
delay(200);
EN=0;
}
寫數據
RS = H
RW = L
然后將數據送到數據口 D0~D7,最后 E引腳一個高脈沖將數據寫入。
void write_dat(u8 dat){
P0=dat; //送出數據
RS=1;RW=0;EN=1;//寫數據時序
delay(200);
EN=0;
}
讀數據
RS=H,RW=H,E=H
讀出D0~D7數據
審核編輯:湯梓紅
-
單片機
+關注
關注
6063文章
44925瀏覽量
647001 -
液晶
+關注
關注
6文章
617瀏覽量
70237
發布評論請先 登錄
LCD1602的引腳說明和使用51單片機控制1602液晶顯示的代碼免費下載

使用51單片機進行LCD1602液晶顯示的控制代碼程序免費下載

評論