日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机:LCD1602

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机: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腳(帶背光)接口,各引腳接口說明如表

  • 編號符號引腳說明編號符號引腳說明
    1VSS電源地9D2數據
    2VDD電源正極10D3數據
    3VL液晶顯示偏壓,對比度調節11D4數據
    4RS數據/命令選擇12D5數據
    5R/W讀/寫選擇13D6數據
    6E使能信號14D7數據
    7D0數據15BLA背光源正極
    8D1數據16BLK背光源負極

    表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條控制指令
    如下表所示:

    序號指令RSR/WD7D6D5D4D3D2D1D0
    1清顯示0000000001
    2光標返回000000001*
    3置輸入模式00000001I/DS
    4顯示開/關控制0000001DCB
    5光標或字符移位000001S/CR/L**
    6置功能00001DLNF**
    7置字符發生存貯器地址0001字符發生存貯器地址
    8置數據存貯器地址001顯示數據存貯器地址
    9讀忙標志或地址01BF計數器地址
    10寫數到CGRAM或DDRAM)10要寫的數據內容
    11從CGRAM或DDRAM讀數11讀出的數據內容

    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=H,E=H輸出D0—D7=狀態字
    寫指令輸入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 仿真電路圖

    我的電路圖
    ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200220113836983.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Fja3RvbWFz,size_16,color_FFFFFF,t_70 =80*120)

    以下內容來源于:單片機教程網


    上圖是仿真效果 顯示2行字符.
    /*****************************************
    電路連接
    P0------DB0~DB7
    P2.6------RS
    P2.5------RW
    P2.7------E
    *****************************************/

    3.2 代碼:

  • main.c
  • #include <reg52.h> #include "lcd1602.h"void lcdInit();uchar code table[]="i study mcu"; uchar code table1[]="2020-02-20";void main() {uchar num;lcdInit();lcdWriteCom(0x80);for(num=0;num<11;num++){lcdWriteData(table[num]);delay_n10us(50);}lcdWriteCom(0x80+0x40);for(num=0;num<10;num++){lcdWriteData(table1[num]);delay_n10us(50);}while(1); } void lcdInit() {lcdWriteCom(0x38); //設置8位數據格式,2行,5*7lcdWriteCom(0x0c);//設置顯示開,關光標,不閃爍。lcdWriteCom(0x06);//寫字符后,地址指針+1;lcdWriteCom(0x01);//顯示清0,數據指針清0delay_n10us(500); //延時5MS }
  • lcd1602.h
  • #ifndef _LCD1602_H #define _LCD1602_H #include "reg52.h" #ifndef uint #define uint unsigned int #endif#ifndef uchar #define uchar unsigned char #endif#define LCD_DB P0sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_E=P2^7;void lcdWriteData(uchar dat); void lcdWriteCom(uchar com); void delay_n10us(uint n);#endif
  • lcd1602.c
  • #include "lcd1602.h" void delay_n10us(uint n);void lcdWriteCom(uchar com) {LCD_DB=com;LCD_RS=0; //指令LCD_RW=0; //寫入LCD_E=1; //允許delay_n10us(5); //不知道是什么原因,這里不加延時,第2行不能顯示。LCD_E=0; //產生下降沿delay_n10us(5); }void lcdWriteData(uchar dat) {LCD_DB=dat;LCD_RS=1; //數據LCD_RW=0; //寫入LCD_E=1;//delay_n10us(5);//這里延時有沒有都可以。LCD_E=0;delay_n10us(5); }void delay_n10us(uint n) //延時10us的整數倍。 {uchar a;uint b;for(b=n;b>0;b--)for(a=2;a>0;a--); }

    總結

    以上是生活随笔為你收集整理的单片机:LCD1602的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。