51单片机-LCD1602显示(无字库)

2023-05-16

51单片机-LCD1602显示(无字库)

        • LCD1602液晶显示屏显示
          • 字符显示
          • 汉字的显示
        • LCD1602液晶显示屏引脚说明
        • LCD1602液晶显示屏11条控制指令
        • LCD1602读写时序图
        • LCD1602的RAM地址映射
        • LCD1602默认字库

LCD1602液晶显示屏显示

字符显示

       用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

汉字的显示

       汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。

LCD1602液晶显示屏引脚说明

引脚功能
VDD电源正极
VSS电源地
VL液晶显示偏压
RS数据/命令选择
R/W读/写选择
E使能信号
D0~D7数据
BLA背光源正极
BLK背光源负极
  • VSS为地电源。
  • VDD接5V正电源。
  • VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 >* RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
  • R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
  • E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
  • D0~D7为8位双向数据线。
  • BLA背光源正极。
  • BLK背光源负极。

LCD1602液晶显示屏11条控制指令

指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0
清显示0 0 0 0 0 0 0 0 0 1
光标返回0 0 0 0 0 0 0 0 1 *
置输入模式0 0 0 0 0 0 0 1 I/D S
显示开/关控制0 0 0 0 0 0 1 D C B
光标或字符移位0 0 0 0 0 1 S/C R/L * *
置功能0 0 0 0 1 DL N F * *
置字符发生存贮器地址0 0 0 1 字符发生存贮器地址
置数据存贮器地址0 0 1 显示数据存贮器地址
读忙标志或地址0 1 BF 计数器地址
写数到CGRAM或DDRAM1 0 要写的数据内容
从CGRAM或DDRAM读数1 1 读出的数据内容
  • 清显示,指令码01H,光标复位到地址00H位置。
  • 光标复位,光标返回到地址00H。
  • 光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
  • 显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
  • 光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。
  • 功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
  • 字符发生器RAM地址设置。
  • DDRAM地址设置。
  • 读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
  • 写数据。
  • 读数据。

LCD1602读写时序图

读时序
写时序

符号时限
tc400ns~
tpw150ns~
tr,tf~25ns
tsp130ns~
thd110ns~
td~200ns
thd220ns~
tsp240ns~

LCD1602的RAM地址映射

地址映射

LCD1602默认字库

在这里插入图片描述
       其中00H-07H用户可以自定义保存字符。通过字模软件或者自己编写字模代码写入字库中,后期可以调用使用。
下面为参考程序

/*delayms()函数自己补全*/
#define EN			P3^4
#define RS  			P3^5
#define RW  			P3^6
#define DATAPORT		P0

sbit En = EN;
sbit Rs = RS;
sbit Rw = RW;



void lcd_delayms(){						
	unsigned int x,y;
	for(x=1;x>0;x--)
	for(y=114;y>0;y--);
}




unsigned char StrLen(char *str){
	unsigned char num=0;
	unsigned char i=0;
	while(str[i++]!='\0')num++;
	return num;
}

unsigned char StrLen(char *str){
	unsigned char num=0;
	unsigned char i=0;
	while(str[i++]!='\0')num++;
	return num;
}

/*用于向LCD1602发送指令码*/
void Lcd1602_SendCode(unsigned char codes){
	Rs = 0;
	Rw = 0;
	En = 0;
	DATAPORT = codes;
	lcd_delayms();
	En = 1;
	lcd_delayms();
	En = 0;
	DATAPORT = 0XFF;
}

/*用于向LCD1602发送数据*/
void Lcd1602_SendData(unsigned char datas){
	Rs = 1;
	Rw = 0;
	En = 0;
	DATAPORT = datas;
lcd_delayms();
	En = 1;
lcd_delayms();
	En = 0;
	DATAPORT = 0XFF;
}

/*LCD1602初始化*/
void Lcd1602_Init(){
	 Lcd1602_SendCode(0x38);  //设置16*2显示,5*7点阵,8位数据接口
	 Lcd1602_SendCode(0x38);  //设置16*2显示,5*7点阵,8位数据接口
	 Lcd1602_SendCode(0x38);
	 Lcd1602_SendCode(0x08);  //只开显示
	 Lcd1602_SendCode(0x01);  //清屏,光标复位到地址00H位置
	
	/*光标右移|显示移动:0x07*/
	/*光标右移|显示不移动:0x06*/
	/*光标左移|显示移动:0x05*/
	/*光标左移|显示不移动:0x04*/
	 Lcd1602_SendCode(0x06);
	/*显示开|光标显示|光标闪烁:0x0f*/ 
	/*显示开|光标显示|光标不闪烁:0x0e*/ 
	/*显示开|光标不显示:0x0c*/ 
	 Lcd1602_SendCode(0x0c);
	
	
}

/*LCD1602单个字节显示在屏幕固定位置*/
//POSI为LCD1602屏幕位置,datas为显示字符
void Lcd1602_Byte_Show(unsigned char POSI,unsigned char datas){
	Lcd1602_Init();
	if(POSI>15)Lcd1602_SendCode(0x80|((0x80|(POSI-16))+0x40));
	else Lcd1602_SendCode(0x80|POSI);
	Lcd1602_SendData(datas);
}


/*LCD1602双行显示同一字符串*/
//str为显示字符串,time为单个字符出现的先后时间
void Lcd1602_String_Repeat(unsigned char *str,unsigned char time)
{   
		unsigned char x;		
		unsigned char num=StrLen(str);
		Lcd1602_Init();
    Lcd1602_SendCode(0x80);    
    for(x=0;x<num;x++)
    {
        Lcd1602_SendData(str[x]);
        delayms(time);
    }
    Lcd1602_SendCode(0x80+0x40);    
    for(x=0;x<num;x++)
    {
			Lcd1602_SendData(str[x]);
        delayms(time);
    }
}

/*LCD1602显示完整字符串(不超过两行)*/
//str为显示字符串,time为单个字符出现的先后时间
void Lcd1602_String_noRepeat(unsigned char *str,unsigned char time)
{   
		unsigned char x;		
		unsigned char num=StrLen(str);
		Lcd1602_Init();
    Lcd1602_SendCode(0x80);   
	    for(x=0;x<num;x++)
    {
        Lcd1602_SendData(str[x]);
        delayms(time);
    }
if(num>16){
    Lcd1602_SendCode(0x80+0x40);    
    for(x=16;x<num;x++)
    {
			Lcd1602_SendData(str[x]);
        delayms(time);
    }
}
else{
}	
}


/*LCD1602固定位置显示字符串*/
//colu_posi为显示的液晶行位(0:第一行,1:第二行),arr_posi为显示在单行的位置,str为显示字符串
void Lcd1602_String_FixPosi(bit colu_posi,unsigned char arr_posi,unsigned char *str)   //posi为十六进制
{																			//	colu_posi,0为第一行

		unsigned char x=0;
		unsigned char temp;	
		unsigned char str_num = StrLen(str);
		if(colu_posi)temp = (0x80|arr_posi)+0x40;
		 else temp = (0x80|arr_posi);
	
		Lcd1602_Init();
    Lcd1602_SendCode(temp);    
    for(;x<str_num;x++)Lcd1602_SendData(str[x]);
}

//sav_posi只能为0-7
void Down_To_Cgrom(unsigned char sav_posi,unsigned char *table){
	unsigned char m;
	sav_posi=sav_posi<<3;
Lcd1602_Init();
	 Lcd1602_SendCode(0x40|sav_posi);
	    for(m=0;m<8;m++)     //将table[]中的数据依次写入1602显示 
    { 
            Lcd1602_SendData(table[m]);           
    } 
}

您的点赞是我创造的动力 ^v^~~!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机-LCD1602显示(无字库) 的相关文章

  • Android studio 添加多语言支持

    环境 xff1a Android studio 3 2 执行步骤 xff1a 一 生成对应语言文件夹 选中你的工程 gt res gt 右键点击new gt 选中Android resource directory Available qu
  • VNC 远程环境搭建教程

    最近因项目需要使用到 VNC 远程工具 xff0c 因此记录使用过程 一 在 VNC 官网下载 VNC 服务端和客户端安装包 进入下载页面 二 注册 VNC 官网账号 三 在本地安装 VNC 客户端 xff0c 被远程电脑安装 VNC 服务
  • Ubuntu桌面出现Accept clipboard from viewers,Send clipboard to viewers,Send primary selection to vi等三行错误时

    如上图的错误时 1 输入以下神秘代码 sudo apt get install gnome core2 重启vnc服务3 若还不行 xff0c 则修改xstartup脚本 方法见下链接第五部分 修改xstartup
  • Python+ADB实现Android手机QQ自动点赞

    1 前言 前段时间看了些爬虫的知识 xff0c 然后又看到selenium xff0c Appium xff0c 在Appium环境设置过程中 xff0c 意外地看到这个帖子adb命令模拟按键事件 KeyCode xff0c 然后结合相关搜
  • Go语言汇编入门

    虽然在前面的文章中 xff0c 分析代码已经接触了一些Go语言的汇编代码的注解 xff0c 比如在slice和Go语言笔记以及以后的文章中都会使用到Go汇编 本章主要讲解Go汇编大致流程的框架 xff0c 对于刚接触Go汇编理解Go函数栈是
  • Holistic++ Scene Understanding论文翻译解析笔记

    Holistic 43 43 Scene Understanding 摘要 我们提出了一个新的3D整体场景理解问题 xff0c 它l共同解决了单视角图片的两个问题 xff08 1 xff09 整体场景的语义分析和重建 xff08 2 3D人
  • windows server 2012R2制作qcow2镜像

    一 环境准备 xff1a 1 windows server 2012R2的iso镜像 2 物理机一台 xff1a 要求支持硬件虚拟化 xff0c 并且装好了centos系统 xff0c 在windows上安装vmware 然后在vmware
  • VNC无法连接,出现“TOO MANY SECURITY FAILURES”(安全故障太多)

    通过VNC VIEWER远程管理 xff0c 连接的时候报错 too many security failures 这是因为VNC的黑名单机制 xff0c 用来保护你的服务器 如果有人暴力破解 xff0c 将会触发VNC的黑名单机制 处理方
  • java.sql.SQLException: #HY000

    勾选自动递增 将 type类型改成int xff0c binyint是boolean xff0c 类型是1 xff0c 2 xff0c 3 xff0c 4 xff0c 不是true false 就好了
  • jqgrid表格高度宽度设置

    jqgrid表格高度宽度设置 问题说明 gt 页面上使用上面搜索框 xff0c 下面是jqgrid表格形式 xff0c 总是出现 xff0c grid表格加载宽度 高度问题 本文通过主要解决表格高度宽度变化适应的问题 grid宽度 1 修改
  • 梯度下降法及matlab实现

    个人博客文章链接 xff1a http www huqj top article id 61 162 梯度下降法 xff08 gradient descent xff09 xff0c 是机器学习中最常用的参数调优算法 xff0c 所谓梯度下
  • 命令执行判断($?:命令回传值、&&、||)

    1 概述 当在linux中输入命令时 xff0c 命令可能成功也可能失败 xff0c 此时可以通过命令回传值来判断 xff08 符号 xff1a xff09 xff0c 命令回传值可以和 amp amp 与 一起使用 2 符号 amp am
  • LXC/KVM虚拟化基本概念

    1 LXC 其名称来自Linux软件容器 xff08 Linux Containers xff09 的缩写 一种操作系统层虚拟化 xff08 Operating system level virtualization xff09 技术 xf
  • 解决VNC连接安了Ubuntu MATE系统的树莓派3b时出现灰屏的问题

    1 xff09 首先安装vncserver服务 xff08 这一步有没有用我也不知道 xff0c 一般人都是装的tightvncserver 当然 xff0c 我也装了 xff09 sudo apt get install vnc4serv
  • Ubuntu18.04安装CUDA10、CUDNN

    上篇记录了Ubuntu下安装INVIDIA显卡驱动的方法 xff0c 尽管可以选择CUDA自带的驱动 xff0c 但为了避免不必要的问题 xff0c 尽量单独安装 如果没有单独安装驱动 xff0c 建议多找几篇博客 xff0c 对比来看 x
  • IDEA mavne项目转gradle项目

    文章目录 前言一 配置gradle二 将mavne项目转换为gradle1 找到项目根目录2 执行命令转换3 重启项目 配置IDEA 的 gradle4 转换后的样子 总结 前言 不知道小伙伴有没有遇到过这个问题 就是由于项目是用maven
  • 2016,再见 2017,还请多多指教

    先来一个象征意义上的序 今天是2017 01 01 新年的第一天 昨天适合总结 今天适合制作新年计划 昨天没做总结 于是今天总结和新年计划一起来吧 充满回忆的2016 昨天在驾校练车练了一天 倒库终于能倒进去了 回到住处已经下午5点 买了路
  • 3. 云计算的落地实践(下)

    本章讲解知识点 云计算如何落地实践 ISO镜像文件 创建虚拟机入门 创建数据节点 配置 VMWare创建虚拟机三种网络模式 1 云计算的落地实践 上一章我们讲了云计算的业界实践 即 搭建IaaS后 用于创建虚拟机 在虚拟机上部署PaaS 用
  • deepin15.8配置深度显卡驱动

    以deepin15 8为例 xff0c 电脑为联想的y7000 刚开始以网上下载 run文件的方式进行安装显卡驱动 xff0c 后来在下载cmake等一下工具的时候 xff0c 总会提示与显卡驱动某个模块版本冲突 xff0c 所以索性放弃了
  • 关于调用第三方接口时传递参数是File类型的解决方式

    最近在做一个项目 xff0c 需要频繁的调用第三方的接口 xff0c 本以为都是基本的数据类型 xff0c 没想到需要传一个文件类型的参数 xff0c 我想着调用接口的时候直接用文件流把文件写到connection不就行了 xff0c 这就

随机推荐

  • C#中?、?.、? ?、? ?=的用法和说明

    一 可空类型修饰符 xff1f 引用类型能用空引用来表示一个不存在的值 xff0c 但是值类型不能 例如 xff1a string str 61 null int i 61 null 编译报错 为了使值类型也能使用可空类型 xff0c 就可
  • TortorliseGit(小乌龟)创建删除(远程和本地)分支

    以下两篇文章分别为删除和创建 1 使用TortorliseGit 小乌龟 删除本地分支 xff0c 远程分支 2 使用TortoiseGit操作分支的创建与合并
  • UML类图的几种关系浅析

    类图中的主要关系有如下几种 关联关系 聚合关系 组合关系依赖关系泛化关系细化关系 注 xff1a 以下图片均来自网络 xff0c 侵删 1 关联关系 关联关系是类与类之间的连接 xff0c 表示一类对象与另一类对象之间有联系 xff0c 通
  • 关于c#创建界面的几种方式

    c 创建界面有很多种方式 xff0c 下面列举5中创建界面的方式 1 windows窗体 xff0c 这种窗体设计界面是最简单的一种 这种可以直接从工具箱拿出组件进行使用 xff0c 能够很好的设计界面 2 用户控件类 3 组件类 4 窗口
  • .ova文件转换成.ovf和.vmdk格式

    一 准备工具 xff1a 下载软件 xff1a OVFTool x64 下载地址 xff1a https pan baidu com s 1YDtHh0 OnK0Lm5C4KoF4 w 二 安装后 xff0c 去安装路径下 xff0c 按住
  • 【Word】如何在数学公式同一行末尾填写编号

    使用word插入公式框后 xff0c 在公式框中打完公式的末尾处 xff08 依旧在框内 xff09 加上 xff08 编号 xff09 xff0c 然后回车即可 xff01 xff01 超神器 xff01 再也不用手动空格啦 输入公式序号
  • 使用Xmanager软件远程调用图形化(可视化)安装Oracle数据库

    安装Oracle xff0c 使用调用图形化界面进行安装 xff0c 此次不能使用VNC远程到服务器本地进行图形化安装 xff0c 只能远程调用图形化进行本地安装 xff0c 方法如下 xff1a 一 Linux系统安装所需要的依赖组 xf
  • js中怎么删除对象的某个key值?js 遍历数组,有用!!

    参考 xff1a https blog csdn net denghaolinzy article details 87913561 formThead cate false id true out trade no true produc
  • UDP数据包的延迟及丢包检测(C++)

    摘要 本文记录通过数据报套接字来检测UDP数据包的延迟和丢包的思路和简单的代码实现 思路 UDP协议及用户数据报协议在传输层提供了无连接 不可靠的传输服务 xff0c 端到端的延迟以及丢包率是反应当前网络环境好坏的重要评价标准 Ping检测
  • 二叉树前中后序遍历非递归实现C++

    前几天面试过程中面试官让手写一下二叉树后序遍历的非递归写法 xff0c 当时没有写出来 xff0c 本想着可能是因为面试太紧张的原因 xff0c 才这么简单的题都没写出来 xff0c 后来特地去研究了一下 xff0c 发现二叉树的后序遍历非
  • Arcgis(AE)二次开发问题解决 创建组件”ToolbarControl”失败等

    本文提供 xff08 Arcgis二次开发 xff08 AE xff09 xff09 遇到的以下问题参考解决办法 xff1a 1 必须有许可证才能使用此ActiveX 控件 xff1b 2 命名空间 ESRI ArcGIS 中不存在类型或命
  • C++11右值引用和移动语义

    C 43 43 11中加入了很多新特性 xff0c 其中非常有用的一个就是右值引用和移动语义 xff0c 移动语义主要体现在移动构造函数和移动赋值函数
  • MacOS安装Minikube踩坑记录

    安装minikube macos可以通过两种方式安装minikube xff0c 第一种通过下载二进制文件的方式 xff0c 第二种通过brew直接安装 这里推荐直接通过brew安装 xff0c 更加简单方便 brew install mi
  • 线性回归原理及实现(一):最小二乘法

    线性回归到底要干什么 xff0c 顾名思义很简单 xff0c 即在已有数据集上通过构建一个线性的模型来拟合该数据集特征向量的各个分量之间的关系 xff0c 对于需要预测结果的新数据 xff0c 我们利用已经拟合好的线性模型来预测其结果 关于
  • 史上最简单Opencv相机畸变矫正教学

    最近因为项目需要研究了一下摄像头的畸变矫正 xff0c 我打算通过写这篇博客记录一下相关流程 其实关于摄像头畸变矫正的原理 xff0c 网络上已经有非常多的博客可以参考了 xff0c 我在博客里也就不再赘述了 利用Opencv库中的接口 x
  • 利用逆透视变换获取车载图象的鸟瞰图

    近年来在人工智能潮流下 xff0c 各行各业对无人驾驶技术的发展投来了越来越多的关注 在智能驾驶系统的研究中 xff0c 车道线检测的研究是非常重要的一环 xff1b 鉴于绝大多数城市道路交通环境特性和车道线本身特性 xff0c 当前车道线
  • 相机参数标定(camera calibration)及标定结果如何使用

    文章转自https blog csdn net aoulun article details 78768570一直都想写一写这个主题 xff0c 但是 xff0c 一直都感觉有点虚 xff0c 也没有去整理 在网上搜了一下 xff0c 发现
  • elasticsearch7.6.0启动报错问题

    elasticsearch7 6 0启动报错 xff1a 2020 04 08T03 00 20 624 WARN o e t TcpTransport node 1 exception caught on transport layer
  • VScode使用之SSH免密登录配置

    终端电脑生成秘钥对 打开cmd xff0c 输入ssh keygen t rsa一路回车 xff0c 秘钥对文件目录需要记录一下后面需要使用 将公钥放到目标机上 将之前生成的id rsa pub这个文件 xff0c 放到目标机上 注意 xf
  • 51单片机-LCD1602显示(无字库)

    51单片机 LCD1602显示 xff08 无字库 xff09 LCD1602液晶显示屏显示字符显示汉字的显示 LCD1602液晶显示屏引脚说明LCD1602液晶显示屏11条控制指令LCD1602读写时序图LCD1602的RAM地址映射LC