標題: 看懂時序圖,單片機驅動LCD1602液晶屏 [打印本頁]
作者: nklug 時間: 2018-4-2 11:18
標題: 看懂時序圖,單片機驅動LCD1602液晶屏
本帖最后由 nklug 于 2018-4-5 11:36 編輯
看懂時序圖,驅動LCD1602液晶屏
作者:贛州 盧剛(nklug)
[本人原創,轉載請保留署名。2018年4月2日]
網購了幾個LCD1602液晶屏,用STC驅動它,開始只是一個點亮了的藍屏,不見字符,費了一番功夫才成功顯示出字符。現將驅動LCD1602液晶屏的經驗總結如下,希望對初次使用的朋友有所幫助。
驅動液晶屏,按下列步驟進行:
1、 把的R/W接地(原因后述),調節對比度,使屏顯出一行白色矩形塊。
對比度調整.png (4.06 KB, 下載次數: 72)
下載附件
調對比度
2018-4-2 11:05 上傳
我開始的不成功,是省了V0接的電阻,讓它空著,以為也能顯示字符,只不過不好看罷了,不知大錯特錯。記著一定要接V0腳的調節對比度電阻并調試好,否則只是藍屏,不出字也不出矩形塊。調整對比度有兩種方法,介紹較多的是第一種標準接法,可調電阻用10K的。第二種接法據自己的實驗,R可用510歐(最后調試成功后改用3.3K)。
這一步目的是讓它顯示出一行淺白色矩形塊,注意無須太亮。
一行.png (3.07 MB, 下載次數: 99)
下載附件
一行
2018-4-2 10:59 上傳
1602液晶屏只要加上了電壓,調整好對比度,沒接單片機也能顯示出一行矩形塊,只有初始化后才會出現兩行。利用這點可作液晶屏好壞的初步判斷。
2、 設置顯示模式,讓液晶屏顯示出兩行白色矩形塊。(實質是寫好寫命令的子程序。)
IMG_20180329_153124.jpg (1.14 MB, 下載次數: 73)
下載附件
兩行
2018-4-2 11:00 上傳
通常推薦的初始化過程:
延時15ms
寫指令38H
延時5ms
寫指令38H
延時5ms
寫指令38H
延時5ms
(以上都不檢測忙信號)
(以下都要檢測忙信號)
寫指令38H
————————
寫指令08H關閉顯示
寫指令01H顯示清屏
寫指令0cH顯示開及光標設置
完畢
我們讓程序完成四次寫38H指令就停下來,后四步暫不執行。只要四次寫指令38H成功,液晶屏就會出現兩行矩形塊。為什么要四次呢?不清楚。就照他的辦好了。
能出現兩行矩形塊,說明寫指令的子程序是正確的,后面的事也就好辦了。若不成功,則對照1602屏的寫操作時序,仔細修改程序。我開始的不成功,第二個原因就是沒弄清時序,胡亂寫沒成功就生搬硬套網上程序。
1602屏寫操作的時序圖:
時序.jpg (44.18 KB, 下載次數: 95)
下載附件
時序
2018-4-2 11:03 上傳
時序時間參數:
參數.jpg (36.05 KB, 下載次數: 93)
下載附件
參數
2018-4-2 11:03 上傳
從時序圖確定子程序步驟如下:①為RS和R/W賦值;②為D0~D7數據口賦值,延時后再設置E;③將E置高電平,E=1;延時tpw;④將E清零,產生重要的執行下降沿;⑤下降沿后要延時tHD2,確保數據口在這段時間內不變;⑥依靠子程序以后的延時,來滿足E信號周期最小值tc。
我用STC12C5201AD 6M晶振驅動1602屏,根據每步程序所要用的時間和時序要求,寫的代碼如下,實際運行通過。
;*****************************
;1602寫命令,命令存在LCD_DAT,
;*****************************
PR_CMD:
CLR LCD_RS ; ①為RS和R/W賦值
CLR LCD_RW ;實際上R/W腳接地了,此句可無
MOV LCD_DATA,LCD_DAT ; ②為D0~D7數據口賦值
SETB LCD_EN ;③將E置高電平
NOP ;延時
CLR LCD_EN ; ④將E清零,產生重要的下降沿
lcall uS40 ;⑤下降沿后延時
RET
將38H改為34H,是一行5*10模式,顯示如下圖:
IMG_20180329_153427.jpg (1.35 MB, 下載次數: 90)
下載附件
一行5*10
2018-4-2 11:08 上傳
3、 完成初始化程序的后四步。
資料說寫指令38H后,后面的每步都要檢測忙信號。因為1602屏是個慢性子,上步沒執行完就來下一步,下一步就執行不了。我這樣想,若上一步沒完成,則檢忙這步也應該不能運行,檢忙能運行則上一步定是已經完成了。很多人說是用延時替代檢忙。我呢?用延時1mS來代替檢忙。
不讀讀忙信號,也不讀數據了(不用命令9和命令11),則可直接將R/W接地,還可省一根接線。這就是第一步把R/W接地的原因。
我的初始化過程:
延時15ms
寫指令38H
延時5ms
寫指令38H
延時5ms
寫指令38H
延時5ms
寫指令38H
延時1mS
寫指令08H關閉顯示
延時1mS
寫指令01H顯示清屏
延時1mS
延時1mS
寫指令0cH顯示開及光標設置
延時1mS
完畢
后面的五步都將原來的檢測忙改為延時,試驗結果延時160uS不夠,延時1mS至5mS都行,其余沒試。
我試驗過,整個初始化過程中,只用第一步寫38H指令和最后一步寫指令0CH也可以,中間六步省去也行。為保險其見,仍寫八個指令。
4、 顯示字符。
寫數據子程序與寫命令子程序基本相同,僅R/S的值不同。運行本子程序前先延時1mS,確保前一步運行已經完成。
;*****************************
;1602寫數據,數據存在LCD_DAT
;*****************************
PR_DATA:
SETB LCD_RS ;RS高 數據
CLR LCD_RW ; 實際上R/W腳接地了,此句可無
MOV LCD_DATA,LCD_DAT
SETB LCD_EN ;先置高
nop ;延時
CLR LCD_EN ;產生下降沿 執行
lcall us40
RET
寫字符成功,屏的白色塊上就會出現更亮的字符,所以調對比度時白色塊不要調得太亮了。
塊上字.png (4.82 MB, 下載次數: 91)
下載附件
塊上字
2018-4-2 11:08 上傳
5、 再次調整對比度。
調v0腳上的電阻,使得白色塊消失,只留下的清晰字符。我原是用一個510歐電阻接地,現改為用一個3.3K電阻接地。若是用第一種接法,旋轉一下中間觸點位置就行了。
液晶屏A,K分別接電源正負點亮背景燈,可在電源正與A之間串一個10~15歐電阻,適當降低點亮度,延長燈壽命。
這是試驗程序顯示了幾個字母的樣子:
字符.png (1.98 MB, 下載次數: 104)
下載附件
字符
2018-4-2 11:09 上傳
6、 總結:先設置好硬件(顯出白色矩形塊),再把握好時序寫程序。
能顯示字符,自然也就能在實際應用中顯示時間電壓之類的數據了。
7、 我的試驗程序:
- ;STC12C5201AD6M晶體 驅動LCD1602屏
- ;作者:贛州 盧剛(nklug)
- ;2018年3月
- ;*******************
- ;端口引腳定義
- LCD_RS BIT P2.6 ;1602數據命令選擇端口
- LCD_RW BIT P2.7 ;1602讀寫選擇端口
- LCD_EN BIT P3.7 ;1602使能端口
- LCD_DATA EQU P1 ;1602數據端口
- ;變量聲明
- ALL_FLAG EQU 20H ;標志位
- LCD_FLAG EQU ALL_FLAG.7 ;1602讀忙標志位
- LCD_DAT EQU 30H ;1602數據命令字
- DELAYED EQU 31H ;延時字
- ORG 0000H
- SJMPSTART
- ORG 0030H
- START:
- lcall LCD_INIT ;初始化液晶
- lcall uS160
- MOV lcd_dat,#84H ;寫在何位置
- lcall PR_CMD
- mov 50H,#3
- lcall uS160
- mov LCD_DAT,#01101110B ;字母n的代碼
- lcall PR_DATA
- lcall uS160
- mov LCD_DAT,#01101011B ;字母k的代碼
- lcall PR_DATA
- lcall uS160
- mov LCD_DAT,#01101100B ;字母l的代碼
- lcall PR_DATA
- lcall uS160
- mov LCD_DAT,#01110101B ;字母u的代碼
- lcall PR_DATA
- lcall uS160
- mov LCD_DAT,#01100111B ;字母g的代碼
- lcall PR_DATA
- AJMP $
- ;***************
- ;1602初始化
- ;***************
- LCD_INIT:
- MOV DELAYED,#15
- LCALL DELAY1MS
- MOV LCD_DAT,#38H
- LCALL PR_CMD
- MOV DELAYED,#5
- LCALL DELAY1MS
- MOV LCD_DAT,#38H
- LCALL PR_CMD
- MOV DELAYED,#5
- LCALL DELAY1MS
- MOV LCD_DAT,#38H ;上三次下一次設38H,在運行過多次的片子試過僅用第一次設38H也是可以的。
- LCALL PR_CMD ;估計這是多次初始化后的原故,為保險還是這樣多次的設置38H好。
- ;*****上面要重復3次*****
- ;*****下面設置的間隔若用延時160uS則不行,用1mS至5mS都可****
- MOV DELAYED,#1
- LCALL DELAY1MS
- ; LCALL uS160
- MOV LCD_DAT,#38H ;#00111000B 使用8位數據,顯示兩行,使用5×7的字型
- LCALL PR_CMD
- MOV DELAYED,#1
- LCALL DELAY1MS
- ; LCALL uS160
- MOV LCD_DAT,#08H ;顯示關無光標 光標閃 無也可以
- LCALL PR_CMD
- MOV DELAYED,#1
- LCALL DELAY1MS
- ; LCALL uS160
- MOV LCD_DAT,#01H ;#00000001H ;清屏 無也可以
- LCALL PR_CMD
- MOV DELAYED,#1
- LCALL DELAY1MS
- ; LCALL uS160
- MOV LCD_DAT,#06H ;;字符不動,光標自動右移一格 無也可以
- LCALL PR_CMD
- MOV DELAYED,#1
- LCALL DELAY1MS
- ; LCALL uS160
- MOV LCD_DAT,#00001100B ;顯示器開,無光標
- LCALL PR_CMD
- RET
- ;*******************************
- ;1602寫數據,數據存在LCD_DAT
- ;*******************************
- PR_DATA:
- SETB LCD_RS ;RS高 數據
- CLR LCD_RW ;RW低 寫
- MOV LCD_DATA,LCD_DAT
-
- SETB LCD_EN ;先置高
- nop ;延時
- CLR LCD_EN ;產生下降沿 執行
- lcall us40
- RET
- ;********************************
- ;1602寫命令,命令存在LCD_DAT
- ;*******************************
- PR_CMD:
- CLR LCD_RS
- CLR LCD_RW
- MOV LCD_DATA,LCD_DAT
-
- SETB LCD_EN ;先置高
- NOP
- CLR LCD_EN
- lcall uS40
- RET
- ;;*****************************************
- ;延時,延時時間=1毫秒*次數 次數在DELAYED
- ;*****************************************
- DELAY1MS: ;6.000MHz 1ms
- mov R7,#6
- D_1:mov R6,#200
- D_2: djnzR6,D_2
- djnz R7,D_1
- djnz DELAYED,DELAY1MS
- ret
- ;***********
- ;160uS延時
- ;***********
- uS160:
- mov 42H,#192
- us160_a:
- djnz 42h,us160_a
- ret
- ;***********
- ;40uS延時
- ;***********
- uS40:
- mov 42H,#192
- us40_a:
- djnz 42h,us40_a
- ret
- END
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
www.国产91|
av免费成人|
国产高清毛片
|
天天影视亚洲综合网
|
欧美在线视频一区二区
|
黄色在线免费观看
|
欧美精品在线播放
|
国产欧美精品一区二区色综合朱莉
|
av天天干
|
久久精品国产久精国产
|
婷婷五月色综合香五月
|
69福利影院|
国产福利在线
|
国产精品入口麻豆www
|
成人福利视频网站
|
亚洲成人精品国产
|
久久99国产精品
|
免费在线观看成年人视频
|
久久99精品久久久久久青青日本
|
农村真人裸体丰满少妇毛片
|
欧美精品一区在线
|
www.一级毛片|
日日日视频
|
avav在线看|
国产欧美一区二区三区在线看
|
超碰电影
|
国产精品福利视频
|
激情五月婷婷
|
jⅰzz亚洲|
日韩一区二区精品
|
色爱综合网
|
亚洲国产欧美日韩
|
99免费在线视频
|
亚洲国产一区二区三区,
|
成人一区二区三区在线
|
亚洲精品福利视频
|
久久aⅴ乱码一区二区三区
91综合网
|
91精品久久久久久久久久
|
欧美一级做性受免费大片免费
|
一级毛片色一级
|
欧美成人一区二免费视频软件
|