嵌入式小白,今天用到1602,被CGRAM DDRAM CGROM搞得乱七八糟,特此记录一下,供大家参考。

首先,1602液晶显示屏除了电源、地以外,有3个控制引脚 RS R/W E 和8个数据引脚DB0-7。建议8个数据引脚接在同一组上,程序写起来比较简单。硬件连接参考如图。

连接上硬件电路,就要写程序了,从名字可以看出来,1602显示两行,每行16个字符,一个字符包含的点阵可以自己设置(后边介绍)。

首先显示内容分为两种,一种是常用字符,存储在CGROM中,用户可以直接调用,另一种是自定义的字符,比如自己设计的一些奇怪的图形之,存储在CGRAM。当时被这两个名词和DDRAM搞得很乱,这里详细解释一下。

DDRAM是显示用的,从RAM可以看出来,是读的意思,地址与显示位置如下,每行40个地址,1602只用到前16个,共两行,对应关系如下。

当我们想在指定位置写入内容时,要先指定地址,如在第一行第一位写入,地址位是00H,再加上DB7的1,即80H(0010000000),第二行第一位是40H,再加上DB7的1,即C0H(0011000000),依次类推。

LCD的已有的字模存储在CGROM中,自定义的存储在CGRAM,留给自定义的位置只有8个地址,字模地址为01000000-01000111八个地址,也就是最多自定义8个符号或者图形。

根据这条指令,来写一个摄氏度℃的自定义符号,对应图如下

字符对应的数组为table【】={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00},将℃写入指定的位置之前,要先把对应数组写入CGRAM存储,再写入DDRAM显示。如果直接用已有的字符,可以直接把数组写入DDRAM显示。

区分清楚自定义字符和已有字符,程序就简单了。主要步骤是延时函数、写指令、写数据、初始化、主函数。

下面举两个例子,写入常规字符串12345,写入字符串℃。

程序一

#include<reg52.h>    //包含头文件

#define uint unsigned int  //预定义

#define uchar unsigned char

sbit rs=P2^6;    //1602的数据/指令选择控制线 
sbit rw=P2^5;        //1602的读写控制线 
sbit en=P2^7;        //1602的使能控制线 
/*P0口接1602的D0~D7*/ 
uchar code table[]="1234";             //要显示的内容放入数组table
void delay(uint n)       //延时函数                       

    uint x,y;  
    for(x=n;x>0;x--) 
        for(y=110;y>0;y--); 

void lcd_wcom(uchar com)  //1602写命令函数                 

    rs=0;            //选择指令寄存器 
    rw=0;            //选择写 
    P0=com;            //把命令字送入P2 
    delay(5);            //延时一小会儿,让1602准备接收数据 
    en=1;           //使能线电平变化,命令送入1602的8位数据口 
    en=0; 

void lcd_wdat(uchar dat)        //1602写数据函数       

    rs=1;        //选择数据寄存器 
    rw=0;        //选择写 
    P0=dat;        //把要显示的数据送入P2 
    delay(5);        //延时一小会儿,让1602准备接收数据 
    en=1;        //使能线电平变化,数据送入1602的8位数据口 
    en=0; 

void lcd_init()              //1602初始化函数       

    lcd_wcom(0x38);       //8位数据,双列,5*7字形       
    lcd_wcom(0x0c);      //开启显示屏,关光标,光标不闪烁 
    lcd_wcom(0x06);    //显示地址递增,即写一个数据后,显示位置右移一位 
    lcd_wcom(0x01);    //清屏 

void main()            //主函数 
{     
    uchar m=0; 
    lcd_init();       //液晶初始化 
    lcd_wcom(0x80);   //显示地址设为80H(即00H,)上排第一位       
    for(m=0;m<4;m++)     //将table[]中的数据依次写入1602显示 
    { 
            lcd_wdat(table[m]);           
            delay(200); 
    } 
    while(1);        //动态停机

}

程序二

#include<reg52.h>    //包含头文件

#define uint unsigned int  //预定义

#define uchar unsigned char

sbit rs=P2^6;    //1602的数据/指令选择控制线 
sbit rw=P2^5;        //1602的读写控制线 
sbit en=P2^7;        //1602的使能控制线 
/*P0口接1602的D0~D7*/ 
uchar code table[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};             //要显示的内容放入数组table
void delay(uint n)       //延时函数                       

    uint x,y;  
    for(x=n;x>0;x--) 
        for(y=110;y>0;y--); 

void lcd_wcom(uchar com)  //1602写命令函数                 

    rs=0;            //选择指令寄存器 
    rw=0;            //选择写 
    P0=com;            //把命令字送入P2 
    delay(5);            //延时一小会儿,让1602准备接收数据 
    en=1;           //使能线电平变化,命令送入1602的8位数据口 
    en=0; 

void lcd_wdat(uchar dat)        //1602写数据函数       

    rs=1;        //选择数据寄存器 
    rw=0;        //选择写 
    P0=dat;        //把要显示的数据送入P2 
    delay(5);        //延时一小会儿,让1602准备接收数据 
    en=1;        //使能线电平变化,数据送入1602的8位数据口 
    en=0; 

void lcd_init()              //1602初始化函数       

    lcd_wcom(0x38);       //8位数据,双列,5*7字形       
    lcd_wcom(0x0c);      //开启显示屏,关光标,光标不闪烁 
    lcd_wcom(0x06);    //显示地址递增,即写一个数据后,显示位置右移一位 
    lcd_wcom(0x01);    //清屏 

void main()            //主函数 
{     
    uchar m;

lcd_init();       //液晶初始化

lcd_wcom(0x40);//设定CGRAM地址,把自定义字符存储进去

for(m=0;m<8;m++)     //将table[]中的数据依次写入1602显示 
    { 
            lcd_wdat(table[m]);           
            delay(200);

}

lcd_wcom(0x85);   //显示地址设为85H,上排中间位

lcd_wdat(0);

while(1);        //动态停机

}

总结:区分DDRAM和CGRAM,DDRAM是字符对应在屏幕上的位置,CGRAM是把自己定义的字符存在8个字节里,即lcd_wcom(0x40)。

明天继续研究如何用液晶屏幕显示年月日,待续……

LCD1602液晶显示屏的入门级应用(一)相关推荐

  1. 和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?

     目录 1.简介和驱动原理 2.实践 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_38106923/cate ...

  2. STC89C52单片机 LCD1602液晶显示屏

    LCD1602显示 VVcat #include <reg52.h>typedef unsigned char uchar; typedef unsigned int uint;sbit ...

  3. 51单片机——LCD1602液晶显示屏

    如下图:红框就是LCD1602液晶显示屏,他是可插拔的,插上去后数码管就会乱码无效了,因为他两共用了MCU的8个P0口 LCD1602原理图 从上面两幅图可以看出来 LCD1602的LCD_D0~LC ...

  4. 外设驱动库开发笔记33:LCD1602液晶显示屏驱动

      LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形.在这一章我们就来讨论LCD ...

  5. STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创

    STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创 A0,A1,A2全部悬空,那么PCF8574的IIC地址为0x4e.(具体原因,看PCF ...

  6. 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...

    描述 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符.LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示, ...

  7. LCD1602液晶显示屏模块资料

    模块实例https://blog.csdn.net/qq_38393591/article/details/108643827 LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符. ...

  8. LCD1602液晶显示屏的工作原理图是什么呢?

    本文重点是由深圳市兴宇合电子技术人员为大家介绍LCD1602液晶显示屏的工作原理以及原理图,希望对大家有所帮助. (1)LCD1602液晶显示屏工作原理如下: LCD1602液晶显示屏通过电压来改变填 ...

  9. LCD1602液晶显示屏用51单片机怎么驱动?(详细笔记附设计源码)

    LCD1602液晶显示 (一)LCD1602简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母.数字.符号的点阵型液晶模块.它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符 ...

最新文章

  1. Vue入坑——vue-router如何传递参数
  2. Ubuntu18.04 VMtools的安装与卸载
  3. java项目大小_Java项目仅在调整窗口大小之后出现
  4. 基于matlab/simulink的双电机速度跟踪伺服系统仿真,基于MatlabSimulink的伺服系统仿真pdf.doc...
  5. 广州python平均薪资_爬取广州的python和Java薪资,为什么Python 高于Java(有代码)...
  6. CS224n——lecture3课程导学
  7. pb string 接收dll按值返回_JavaScript 是如何工作的:JavaScript 的共享传递和按值传递...
  8. [BZOJ1877][SDOI2009]SuperGCD
  9. Web App:赌的就是互联网未来并 非无可挑剔
  10. Luogu4494 [HAOI2018]反色游戏 【割顶】
  11. 凸优化第二章凸集 2.4 广义不等式
  12. HBase 源码解析
  13. 以德服人——合格的产品经理
  14. java 使用JEP解析字符串计算公式 求值(附带自定义函数编写)
  15. Windows 95 下载
  16. Ajax-ajax实例2-根据邮政编码获取地区信息
  17. dellr420部署os_dell r420 H310/H810阵列配置教程及常见问题
  18. linkMap深度解析
  19. Python求最小公倍数和最大公约数(附加辗转相除)
  20. RocketMq最强总结 带你rocket从入门到入土为安

热门文章

  1. EXCEL复制粘贴特别慢
  2. 【并发】Amdahl's Law 阿姆达尔定律
  3. English语法_定语从句 - 限定性与非限定性
  4. 日记:2011年6月深圳2周找工作总结
  5. 【优化求解】基于和声搜索算法对IEEE33节点进行无功优化matlab代码
  6. [Oracle 11g r2(11.2.0.4.0)]集群守护进程CSS资源管理
  7. Microsoft CSP简介
  8. 如何把illustrator圆圈5等分?
  9. 2021-03-27 深度信念网络(DBN)学习笔记
  10. V语言04语句表达式