lcd1602程序(【无标题】lcd1602模块介绍及编写使用程序「建议收藏」)

发布时间:2025-12-10 19:23:37 浏览次数:9

【无标题】lcd1602模块介绍及编写使用程序「建议收藏」-lcd1602程序设计思路

【无标题】lcd1602模块介绍及编写使用程序「建议收藏」Lcd1602液晶,单片机

文章目录

前言 一、Lcd1602模块功能引脚介绍 二、程序编写,时序图分析 1.Lcd1602初始化 2.基本时序程序编写 2.显示hello在液晶屏 最后

前言

Lcd1602 液晶,从它的名字我们就可以看出它的显示容量,显示2行,每行16个字符的液晶,
对于单片机的学习最主要还是要学会查看产品数据手册,即使相同的功能模块也会由于不同的生产厂家不同而有所差异,下面结合数据手册对Lcd1602内容进行一个分享


一、Lcd1602模块功能引脚介绍

Lcd1602 液晶一共 16 个引脚,每个引脚的功能,都可以在它的数据手册上获得,在进行程序编写之前得弄明白

引脚1,2,15,16这里就不做介绍了,只需要按照他的数据手册引脚说明对应接入电路就OK 引脚3液晶显示偏压信号,可以看见液晶显示时是通过增强对比,观察小黑点得到显示的内容。引脚3外部接下拉电阻来确定显示的黑点和不显示的之间的对比度
(下拉电阻并不一定是个固定阻值,可以是个滑动变阻器,改变3引脚的电压,显示不同的对比度) 引脚4数据命令选择端,高电平(High)为数据选择端,低电平(Low)为命令选择端 引脚5读写选择端,高电平(High)读取液晶内部的数据或状态,低电平(Low)写入数据或者命令 引脚6使能信号,结合时序图会更好的理解使能信号如何使用 引脚7~14普通I/O口,通过这 8 个引脚读写数据和命令

二、程序编写,时序图分析

1.Lcd1602初始化


代码如下(示例):

void LcdInit1602(){    LcdWriteCmd(0x38);        // 16*2显示,5*7点阵,8位数据口LcdWriteCmd(0x08);  //关闭显示LcdWriteCmd(0x0C);        // 开显示,不显示光标LcdWriteCmd(0x06);        // 地址加1,当写入数据后光标右移LcdWriteCmd(0x01);        // 清屏}

是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活CLion DataGrip DataSpell dotCover dotMemory dotTrace GoLand PhpStorm PyCharm ReSharper ReShaC++ Rider RubyMine WebStorm 全家桶 刷新

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…

2.基本时序程序编写

读操作时序

写操作时序

(1)读状态:RS=L,WR=H,E=H,P0=状态

bit7busy()主函数部分,do…while()判断是否忙位

    Lcd1602_DB = 0xFF;    Lcd1602_RS = 0;    Lcd1602_WR = 1;    Lcd1602_E = 1;    sta = Lcd1602_DB; //读取状态字
  对控制器每次进行读写操作前,都必须进行读写检测,确保bit7为0,表示不忙可以进行读写,将其封装成函数void bit7busy();

(2)读数据:RS=H,WR=H,E=H ,P0=数据
(3)写指令:RS=L,WR=L,P0=指令码,E=高脉冲(前三项准备好,使能引脚拉高拉低读取指令码到1602)
(4)写数据:RS=H,WR=L,P0=数据,E=高脉冲

void LcdWriteCmd(unsigned char cmd){         bit7busy();            //将忙位检测封装成函数Lcd1602_RS = 0;        //选择写指令Lcd1602_WR = 0;    //选择写Lcd1602_E = 0;         //E使能拉低P0=cmd;                //把指令送入P0DelayMs(2);            //延时一小会儿,让1602准备接收数据Lcd1602_E = 1;         //使能线电平变化上升沿,命令送入1602的8位数据口DelayMs(2);            //延时,让数据发送Lcd1602_E = 0;       //使能线拉低}void LcdWriteDat(unsigned char dat){        bit7busy();Lcd1602_RS = 1;       //选择写数据Lcd1602_WR = 0;   //选择写Lcd1602_E = 0;        //E使能拉低P0=dat;DelayMs(2); Lcd1602_E = 1; DelayMs(2); Lcd1602_E = 0; }

数据手册里面还有时间上的要求,在51里面不需要额外操作来满足,但在运行速度快点的单片机,可以试着加延时

2.显示hello在液晶屏

在这之前先了解一下,1602 液晶内部带了 80 个字节的显示 RAM,用来存储我们发送的数据

第一行RAM地址从 0x00到 0x27,第二行地址从 0x40 到 0x67,
其中
第一行 0x00 到 0x0F与液晶上第一行 16 个字符显示位置相对应的,
第二行 0x40 到 0x4F 是与第二行 16 个字符显示位置相对应的
由于是字符显示,与ACSII字符表对应

void LcdShowStr(unsigned char y,unsigned char x,unsigned char *str,unsigned char len){    if(y==1)  // 第一行 LcdWriteCmd(0x80+x); // 第一行显示起始地址 0x80第一行第一个字符地址    else    // 第二行 LcdWriteCmd(0x80+0x40+x);  // 第二行显示起始地址 0x80+0x40是第二行第一个字符地址while(len--){      LcdWriteDat(*str++);}}

显示个hello在液晶上

LcdShowStr(1,0,"hello",5)

最后

作为一名学生,这也算是我学习的小记录,如果有不妥的地方欢迎指出

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477