久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17238|回復: 0
打印 上一主題 下一主題
收起左側

看懂時序圖,單片機驅動LCD1602液晶屏

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 nklug 于 2018-4-5 11:36 編輯

看懂時序圖,驅動LCD1602液晶屏
                    作者:贛州 盧剛(nklug
[本人原創,轉載請保留署名。201842]
  網購了幾個LCD1602液晶屏,用STC驅動它,開始只是一個點亮了的藍屏,不見字符,費了一番功夫才成功顯示出字符。現將驅動LCD1602液晶屏的經驗總結如下,希望對初次使用的朋友有所幫助。
驅動液晶屏,按下列步驟進行:
1、  把的R/W接地(原因后述),調節對比度,使屏顯出一行白色矩形塊。


我開始的不成功,是省了V0接的電阻,讓它空著,以為也能顯示字符,只不過不好看罷了,不知大錯特錯。記著一定要接V0腳的調節對比度電阻并調試好,否則只是藍屏,不出字也不出矩形塊。調整對比度有兩種方法,介紹較多的是第一種標準接法,可調電阻用10K的。第二種接法據自己的實驗,R可用510歐(最后調試成功后改用3.3K)。
這一步目的是讓它顯示出一行淺白色矩形塊,注意無須太亮。

1602液晶屏只要加上了電壓,調整好對比度,沒接單片機也能顯示出一行矩形塊,只有初始化后才會出現兩行。利用這點可作液晶屏好壞的初步判斷。
2、 設置顯示模式,讓液晶屏顯示出兩行白色矩形塊。(實質是寫好寫命令的子程序。)

通常推薦的初始化過程:
延時15ms
寫指令38H
延時5ms
寫指令38H
延時5ms
寫指令38H
延時5ms
(以上都不檢測忙信號)
(以下都要檢測忙信號)
寫指令38H
————————
寫指令08H關閉顯示
寫指令01H顯示清屏
寫指令06H光標移動設置
寫指令0cH顯示開及光標設置
完畢
我們讓程序完成四次寫38H指令就停下來,后四步暫不執行。只要四次寫指令38H成功,液晶屏就會出現兩行矩形塊。為什么要四次呢?不清楚。就照他的辦好了。
能出現兩行矩形塊,說明寫指令的子程序是正確的,后面的事也就好辦了。若不成功,則對照1602屏的寫操作時序,仔細修改程序。我開始的不成功,第二個原因就是沒弄清時序,胡亂寫沒成功就生搬硬套網上程序。
1602屏寫操作的時序圖:

時序時間參數:

從時序圖確定子程序步驟如下:①為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模式,顯示如下圖:

3、     完成初始化程序的后四步。
資料說寫指令38H后,后面的每步都要檢測忙信號。因為1602屏是個慢性子,上步沒執行完就來下一步,下一步就執行不了。我這樣想,若上一步沒完成,則檢忙這步也應該不能運行,檢忙能運行則上一步定是已經完成了。很多人說是用延時替代檢忙。我呢?用延時1mS來代替檢忙。
不讀讀忙信號,也不讀數據了(不用命令9和命令11),則可直接將R/W接地,還可省一根接線。這就是第一步把R/W接地的原因。
我的初始化過程:
延時15ms
寫指令38H
延時5ms
寫指令38H
延時5ms
寫指令38H
延時5ms
寫指令38H
延時1mS
寫指令08H關閉顯示
延時1mS
寫指令01H顯示清屏
延時1mS
寫指令06H光標移動設置
延時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
寫字符成功,屏的白色塊上就會出現更亮的字符,所以調對比度時白色塊不要調得太亮了。

5、  再次調整對比度。
調v0腳上的電阻,使得白色塊消失,只留下的清晰字符。我原是用一個510歐電阻接地,現改為用一個3.3K電阻接地。若是用第一種接法,旋轉一下中間觸點位置就行了。
液晶屏A,K分別接電源正負點亮背景燈,可在電源正與A之間串一個10~15歐電阻,適當降低點亮度,延長燈壽命。
這是試驗程序顯示了幾個字母的樣子:

6、  總結:先設置好硬件(顯出白色矩形塊),再把握好時序寫程序。
能顯示字符,自然也就能在實際應用中顯示時間電壓之類的數據了。
7、  我的試驗程序:
  1. ;STC12C5201AD6M晶體 驅動LCD1602屏
  2. ;作者:贛州 盧剛(nklug)
  3. ;2018年3月
  4. ;*******************

  5. ;端口引腳定義
  6. LCD_RS               BIT            P2.6         ;1602數據命令選擇端口
  7. LCD_RW             BIT            P2.7         ;1602讀寫選擇端口
  8. LCD_EN              BIT            P3.7         ;1602使能端口
  9. LCD_DATA         EQU          P1                      ;1602數據端口

  10. ;變量聲明
  11. ALL_FLAG EQU          20H                   ;標志位
  12. LCD_FLAG          EQU          ALL_FLAG.7      ;1602讀忙標志位
  13. LCD_DAT            EQU          30H                   ;1602數據命令字  
  14. DELAYED            EQU          31H                   ;延時字


  15. ORG 0000H
  16. SJMPSTART
  17. ORG  0030H


  18. START:
  19.      lcall LCD_INIT     ;初始化液晶

  20.      lcall uS160  
  21.      MOV lcd_dat,#84H  ;寫在何位置
  22.      lcall PR_CMD
  23.      mov 50H,#3

  24.      lcall uS160   
  25.      mov LCD_DAT,#01101110B    ;字母n的代碼
  26.      lcall PR_DATA

  27.     lcall uS160   
  28.      mov LCD_DAT,#01101011B    ;字母k的代碼
  29.      lcall PR_DATA

  30.          lcall uS160   
  31.      mov LCD_DAT,#01101100B    ;字母l的代碼
  32.      lcall PR_DATA

  33.          lcall uS160   
  34.      mov LCD_DAT,#01110101B    ;字母u的代碼
  35.      lcall PR_DATA
  36.          lcall uS160   
  37.      mov LCD_DAT,#01100111B    ;字母g的代碼
  38.      lcall PR_DATA

  39.     AJMP $
  40. ;***************
  41. ;1602初始化
  42. ;***************
  43. LCD_INIT:
  44.                     MOV                  DELAYED,#15
  45.                     LCALL       DELAY1MS
  46.                     MOV                  LCD_DAT,#38H
  47.                     LCALL       PR_CMD

  48.                     MOV                  DELAYED,#5
  49.                     LCALL       DELAY1MS                     
  50.                     MOV                  LCD_DAT,#38H
  51.                     LCALL       PR_CMD

  52.                     MOV                  DELAYED,#5
  53.                     LCALL       DELAY1MS
  54.                     MOV                  LCD_DAT,#38H      ;上三次下一次設38H,在運行過多次的片子試過僅用第一次設38H也是可以的。
  55.                     LCALL       PR_CMD               ;估計這是多次初始化后的原故,為保險還是這樣多次的設置38H好。
  56.            ;*****上面要重復3次*****
  57.            ;*****下面設置的間隔若用延時160uS則不行,用1mS至5mS都可****     
  58.                     MOV                  DELAYED,#1
  59.                     LCALL       DELAY1MS
  60. ;                            LCALL uS160
  61.                     MOV                  LCD_DAT,#38H  ;#00111000B 使用8位數據,顯示兩行,使用5×7的字型
  62.                     LCALL       PR_CMD

  63.                     MOV                  DELAYED,#1
  64.                     LCALL       DELAY1MS
  65. ;                            LCALL uS160   
  66.                     MOV                  LCD_DAT,#08H   ;顯示關無光標 光標閃    無也可以
  67.                     LCALL       PR_CMD

  68.                     MOV                  DELAYED,#1
  69.                     LCALL       DELAY1MS
  70. ;                            LCALL uS160   
  71.                     MOV                  LCD_DAT,#01H   ;#00000001H    ;清屏    無也可以
  72.                     LCALL       PR_CMD  

  73.                     MOV                  DELAYED,#1
  74.                     LCALL       DELAY1MS
  75. ;                            LCALL uS160
  76.                     MOV                  LCD_DAT,#06H  ;;字符不動,光標自動右移一格    無也可以
  77.                     LCALL       PR_CMD

  78.                     MOV                  DELAYED,#1
  79.                     LCALL       DELAY1MS
  80. ;                            LCALL uS160
  81.                     MOV                  LCD_DAT,#00001100B  ;顯示器開,無光標
  82.                     LCALL       PR_CMD
  83.                     RET

  84. ;*******************************
  85. ;1602寫數據,數據存在LCD_DAT
  86. ;*******************************
  87. PR_DATA:
  88.                     SETB         LCD_RS          ;RS高 數據
  89.                     CLR           LCD_RW          ;RW低 寫
  90.                     MOV                  LCD_DATA,LCD_DAT
  91.                     
  92.                     SETB         LCD_EN          ;先置高           
  93.                    nop           ;延時
  94.                     CLR           LCD_EN           ;產生下降沿 執行
  95.                     lcall   us40
  96.                     RET

  97. ;********************************
  98. ;1602寫命令,命令存在LCD_DAT
  99. ;*******************************  
  100. PR_CMD:
  101.                     CLR           LCD_RS
  102.                     CLR           LCD_RW           
  103.                     MOV                  LCD_DATA,LCD_DAT
  104.                     
  105.                  SETB         LCD_EN          ;先置高
  106.                     NOP
  107.                     CLR           LCD_EN
  108.                     lcall   uS40
  109.                     RET



  110. ;;*****************************************
  111. ;延時,延時時間=1毫秒*次數   次數在DELAYED
  112. ;*****************************************               
  113. DELAY1MS:         ;6.000MHz 1ms
  114.      mov R7,#6
  115. D_1:mov  R6,#200
  116. D_2: djnzR6,D_2
  117.     djnz R7,D_1
  118.     djnz DELAYED,DELAY1MS
  119.     ret  
  120. ;***********
  121. ;160uS延時
  122. ;***********
  123. uS160:
  124.         mov 42H,#192
  125. us160_a:   
  126.         djnz 42h,us160_a
  127. ret
  128. ;***********
  129. ;40uS延時
  130. ;***********
  131. uS40:
  132.         mov 42H,#192
  133. us40_a:   
  134.         djnz 42h,us40_a
  135. ret

  136. END
復制代碼


評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av黄色免费 | 免费xxxx大片国产在线 | 精品一区二区三区在线观看国产 | 中文字幕av亚洲精品一部二部 | 国产精品久久久久久婷婷天堂 | 国产精品一区二区欧美黑人喷潮水 | 天堂资源最新在线 | 免费视频久久久久 | 欧美精品一区二区三区蜜桃视频 | 亚洲精品国产a久久久久久 午夜影院网站 | 精品视频在线一区 | 欧美在线国产精品 | 欧美黄在线观看 | 久久网国产 | 色视频成人在线观看免 | 无码日韩精品一区二区免费 | 精品久久久久久久久久久 | 精品国产乱码久久久久久影片 | 一区二区三区视频在线 | 欧美区日韩区 | 成人一区二区视频 | 欧美一级久久 | 欧美一区二区在线 | 91www在线观看 | 亚洲免费在线播放 | 国产在线播放一区二区三区 | 欧美视频 亚洲视频 | 一级黄色影片在线观看 | 国产高清视频在线观看 | 69堂永久69tangcom | 欧美一区二区三区久久精品 | 久久99精品国产 | 国产成人综合一区二区三区 | 免费国产一区 | 欧产日产国产精品国产 | 乱一性一乱一交一视频a∨ 色爱av | 91免费观看国产 | 粉色午夜视频 | 欧美一区二区综合 | 久久精品亚洲一区 | 日韩视频在线观看一区二区 |