1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          初識LCD1602及編程實現字符顯示

          來源:互聯網轉載 時間:2023-10-25 15:09:40

          一、LCD1602基礎知識及接線方法

        1. LCD1602是一種工業字符型液晶,能夠同時顯示16x02即32字符(16列兩行)

        2. 引腳說明

        3. 第 1 腳: VSS 為電源地

          第 2 腳: VDD 接 5V 正電源

          第 3 腳: VL 為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個 10K 的電位器調整對比度。

          第 4 腳:RS 為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。

          • 當RS=1時,發的是高電平數據(寫的內容)

          • 當RS=0時,發的是低電平數據(寫的地址)

          第 5 腳:R/W 為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當 RS 和 R/W 共同為低電平時可以寫入指令或者顯示地址,當 RS 為低電平 R/W 為高電平時可以讀忙信號,當 RS 為高電平 R/W 為低電平時可以寫入數據。

          第 6 腳:E 端為使能端,當 E 端由高電平跳變成低電平時,液晶模塊執行命令。

          第 7~14 腳:D0~D7 為 8 位雙向數據線。

          第 15 腳:背光源正極。

          第 16 腳:背光源負極。

        4. LCD1602和上官一號的接線方式

        5. 左側:LCD1602,右側:上官一號
          //電源線
          VSS---GND
          VDD---5V
          //對比度
          VO---GND
          //控制線
          RS---P1.0
          RW---P1.1
          E---P1.4
          //背光燈
          A---5V
          K---GND
          //數據
          D0到D7---P0.1到P0.7

          二、如何讓C51單片機發送的數據,顯示在LCD1602的顯示屏上

          1.首先要確認兩件事

          • 告訴LCD1602顯示屏,在哪里顯示

          • 顯示什么內容

          2.內部顯示地址

          3.舉例:在第一行的05位置寫一個字符“c”,怎么寫:

          • 告訴LCD1602顯示屏,在哪里顯示

          • 首先定義到05的地址,正常05轉換成二進制是0000 0101,但是要求寫入顯示地址時要求最高位 D7 恒定為高電平 1,所以05轉換成二進制后為1000 0101在轉換成十六進制是:0x85,所以單片機最后傳到LCD1602的數據,告訴傳到05位置,顯示真正的地址是0x85

          • 顯示什么內容

          • 直接寫字符就可以,比如寫個字符"c"

          三、LCD1602寫時序分析

          1.寫操作時序

          • 怎么區分寫的是地址,還是內容?

          • 參數上述的引腳說明中的第四引腳

          • 第 4 腳:RS 為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。

          • 當RS=1時,發的是高電平數據(寫的內容)

          • 當RS=0時,發的是低電平數據(寫的地址)

          • 一般用的時候會封裝成兩個函數,一個是專門寫地址的函數,一個是專門寫內容的函數

          • RW:在寫操作時,可以一直寫0,即RW=0;

          • E:是一個從低電平上升到高電平(這個過程中有一個延時,時間是25ns)然后高電平持續的時間是150ns,最后從高電平下降到低電平的過程(這個過程中也有一個延時,時間是25ns),剛才說的延時時間,一般可以用 _nop_() 函數來替代

          2.讀操作時序

          • 其他指令暫不做考慮,暫時只看指令9

          指令 9:讀忙信號和光標地址。BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。

          • 怎么檢測忙數據?

          RS :通過看指令9得知,RS=0

          RW:在讀操作時,可以一直寫1,即RW=1

          E:是一個從低電平上升到高電平(這個過程中有一個延時,時間是25ns)然后高電平持續的時間是150ns,最后從高電平下降到低電平的過程(這個過程中也有一個延時,時間是25ns),剛才說的延時時間,一般可以用 _nop_() 函數來替代

          • D7的最高位地址要為BF;BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙

          所以D7的最高位地址是1,例如(1000 0000,轉換成十六進制是0x80);

          • 寫操作時序和讀操作時序的區別

          寫操作時序:在低電平時就開始寫入了

          讀操作時序:在高電平時才開始讀取數據

          3.LCD1602 初始化過程(8bit)

          (1)延時 15ms

          (2)寫指令 38H(不檢測忙信號)

          (3)延時 5ms

          (4)以后每次寫指令,讀/寫數據操作均需要檢測忙信號

          (5)寫指令 38H:顯示模式設置

          (6)寫指令 08H:顯示關閉

          (7)寫指令 01H:顯示清屏

          (8)寫指令 06H:顯示光標移動設置

          (9)寫指令 0CH:顯示開及光標設置

          四、編程實現LCD1602顯示字符“C”

        6. 編寫代碼

        7. #include "reg52.h" #include "intrins.h" #define databuffer P0 //定義8位數據線,P0端口組sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^4;void check_busy(){char tmp = 0x80; //做一個臨時的變量databuffer = 0x80; //讓總線的開始數據也是0x80while(tmp & 0x80){ // 0x80轉成二進制為1000 0000 0&上任何數,都是0,所以當tmp為1時,tmp&0x80就一直循環,當tmp為0時,tmp&0x80循環停止RS = 0;RW = 1;EN = 0;_nop_(); //執行一個空函數,延時約1微秒EN = 1;_nop_();_nop_();tmp = databuffer; //讀取數據_nop_();EN = 0;_nop_();} }void Write_Cmd_Func(char cmd){check_busy();RS = 0; //發的是低電平數據(寫的地址)RW = 0;EN = 0;_nop_();databuffer = cmd; //發送指令_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_(); }void Write_Data_Func(char dataShow){check_busy();RS = 1; //發的是高電平數據(寫的內容)RW = 0;EN = 0;_nop_();databuffer = dataShow; //發送數據_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_(); }void Delay15ms() //@11.0592MHz {unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i); }void Delay5ms() //@11.0592MHz {unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i); }void LCD1602_INIT(){//(1)延時 15ms Delay15ms(); //(2)寫指令 38H(不檢測忙信號) Write_Cmd_Func(0x38); //(3)延時 5ms Delay5ms(); //(4)以后每次寫指令,讀/寫數據操作均需要檢測忙信號 check_busy(); //(5)寫指令 38H:顯示模式設置 Write_Cmd_Func(0x38); //(6)寫指令 08H:顯示關閉 Write_Cmd_Func(0x08); //(7)寫指令 01H:顯示清屏 Write_Cmd_Func(0x01); //(8)寫指令 06H:顯示光標移動設置 Write_Cmd_Func(0x06); //(9)寫指令 0CH:顯示開及光標設置Write_Cmd_Func(0x0c); }void main() {char position = 0x80 + 0x05; //定義一個要顯示的位置char dataShow = 'C'; //定義一個要顯示的內容LCD1602_INIT(); //初始化LCD1602液晶顯示Write_Cmd_Func(position); //選擇要顯示的地址Write_Data_Func(dataShow); //發送要顯示的內容 }
        8. 執行結果

        9. 五、編程實現LCD1602顯示一行

        10. 編程代碼

        11. #include "reg52.h" #include "intrins.h" #define databuffer P0 //定義8位數據線,P0端口組sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^4;void check_busy(){char tmp = 0x80;databuffer = 0x80;while(tmp & 0x80){RS = 0;RW = 1;EN = 0;_nop_();EN = 1;_nop_();_nop_();tmp = databuffer; //讀取數據_nop_();EN = 0;_nop_();} }void Write_Cmd_Func(char cmd){check_busy();RS = 0; //發的是低電平數據(寫的地址)RW = 0;EN = 0;_nop_();databuffer = cmd; //發送指令_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_(); }void Write_Data_Func(char dataShow){check_busy();RS = 1; //發的是高電平數據(寫的內容)RW = 0;EN = 0;_nop_();databuffer = dataShow; //發送數據_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_(); }void Delay15ms() //@11.0592MHz {unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i); }void Delay5ms() //@11.0592MHz {unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i); }void LCD1602_INIT(){//(1)延時 15ms Delay15ms(); //(2)寫指令 38H(不檢測忙信號) Write_Cmd_Func(0x38); //(3)延時 5ms Delay5ms(); //(4)以后每次寫指令,讀/寫數據操作均需要檢測忙信號 check_busy(); //(5)寫指令 38H:顯示模式設置 Write_Cmd_Func(0x38); //(6)寫指令 08H:顯示關閉 Write_Cmd_Func(0x08); //(7)寫指令 01H:顯示清屏 Write_Cmd_Func(0x01); //(8)寫指令 06H:顯示光標移動設置 Write_Cmd_Func(0x06); //(9)寫指令 0CH:顯示開及光標設置Write_Cmd_Func(0x0c); }void LCD1602_showLine(char row,char col,char *string){switch(row){case 1:Write_Cmd_Func(0x80+col); //選擇要顯示的地址while(*string){Write_Data_Func(*string); //發送要顯示內容string++;}break;case 2:Write_Cmd_Func(0x80+0x40+col);while(*string){Write_Data_Func(*string);string++;}break;}}void main() {LCD1602_INIT(); //初始化LCD1602液晶顯示LCD1602_showLine(1,5,"NO.1"); //第一行要顯示的內容LCD1602_showLine(2,2,"Hello China!"); //第二行要顯示的內容 }
        12. 執行結果

        13. c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          存貸比是什么意思?銀行存貸比是指銀行貸款總額/存款總額,存貸比越高,說明銀行資金得到了充足的運用,可以為銀行帶來更多的效益,但同時也會帶來較高的風險。銀行在經營過程中,不僅要達成一定的效益,也要應對客戶的取款需求,因此存貸比不宜過高也不宜過低。銀行存貸比多少合適?依據國家相關規定,商業銀行存貸比不得超過75%。對資本充足率、撥備覆蓋率良好的中小銀行,允許有條件適當突破存貸比。存貸比和貸存比一樣嗎?...

          黃金價格為什么下跌?1.美元指數開始走強。黃金和美元的關系通常是相反的。貨幣危機結束了黃金失去了作為避險工具的意義,所以很多人放棄了黃金,持有美元。如果美元指數走強黃金的價格可能會下跌。2.需求下降導致黃金價格下降。世界上有三個國家特別喜愛黃金。俄羅斯把黃金作為它的資產儲備,印度把黃金作為它的珠寶,中國買下黃金作為壓箱底傳給后代。如果黃金的需求突然減少黃金的價格就會下跌。如果需求增加黃金價格就會上...

          今日加拿大元對人民幣匯率表當前匯率5.1787加拿大元100人民幣517.8700Tips:100加拿大元兌換517.8700人民幣匯率更新時間:2022/10/99:21:482022年9月30日銀行間外匯市場人民幣匯率中間價為:1美元對人民幣7.0998元,1歐元對人民幣6.9892元,100日元對人民幣4.9276元,1港元對人民幣0.90444元,1英鎊對人民幣7.9481元,1澳大利亞元...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>