C51单片机学习笔记(六)——液晶显示屏的使用

2023-05-16

C51单片机学习笔记(六)——液晶显示屏的使用

文章目录

    • C51单片机学习笔记(六)——液晶显示屏的使用
      • 1.LCD1602的认识
      • 2.LCD1602的引脚及其功能
      • 3.LCD模块的内部结构
      • 4.LCD1602的工作时序
      • 5.LCD1602的指令说明
      • 6.LCD1602的编程实例

1.LCD1602的认识

  • 液晶显示屏简称液晶、LCD。各种型号的液晶通常是按显示字符的行数或液晶点阵的行、列进行命名的。1602的意思就是每一行显示16个字符,共可以显示2行,常见的液晶还有0801、0802、1601等,这类液晶是字符型液晶,只能显示ASCII码字符。而LCD12864属于图形型液晶,由128*64个像素点构成,可以显示各种图形包括汉字。
  • LCD1602可显示2行ASCII码字符,每行包括16个5*10点阵(像素),有16个引脚,其实物图如下所示:
    在这里插入图片描述

2.LCD1602的引脚及其功能

在这里插入图片描述

3.LCD模块的内部结构

  • LCD1602模块的内部结构分为三部分:LCD控制器、LCD驱动器、LCD显示器
    在这里插入图片描述
  • LCD控制器和LCD驱动器一般由专用集成电路实现,大部分是HD44780或兼容芯片,HD44780是低功耗CMOS大规模点阵LCD控制器,它包含有下面的电路,他们的功能如下表:
    在这里插入图片描述
  • LCD1602显示字符的过程
    HD447780内部有80*8bit的DDRAM缓冲区,其显示位置与DDRAM地址的对应关系如下表:
    在这里插入图片描述
  • 一行有40个地址,可以存入40个字符数据,但每行最多只能显示其中的16个。可以用多余的地址存入其他数据,实现显示的快速切换。注意:编程时需要将表中的地址加上80H才能正确显示,如果要在第一行显示“R”,应该将“R”的ASCII码(0x52)写到地址0x80+ox03即0x83处。

4.LCD1602的工作时序

  • LCD1602的读操作时序
    在这里插入图片描述
    LCD1602读操作编程流程:
  • 给RS加电平(1为数据,0为指令)给R/W加高电平(读模式)
  • E = 1(使能,高电平有效),延时
  • LCD1602送数据到DB0~DB7
  • E = 0
  • 读结束
  • LCD1602的写操作时序
    在这里插入图片描述
    LCD1602的写操作编程流程:
  • 给RS加电平(1为数据,0为指令),R/W = 0(为写)
  • 单片机送数据到DB0~DB7
  • E = 1 (拉高使能线)
  • E = 0,写入生效
  • 改变RS、R/W的状态,为下次操作做准备

5.LCD1602的指令说明

在这里插入图片描述
LCD1602液晶模块共有11条指令,下面根据上面的表格做出说明:

  • 指令一:清除显示,指令码为0x01,其实质是将DDRAM全部写入空格的ASCII码0x20,地址计数器AC清零。该过程需要时间较长。
  • 指令二:光标复位,光标返回00H(复位到屏的左上方),地址计数器AC清零,DDRAM内容不变
  • 指令三:光标和显示模式设置。N——设置光标的移动方向,N=1时,读或写一个字符后,地址加1,光标加1;N=0时,地址减1,光标减1.S——用于设置整屏字符是否左移或右移,当S= 1且N = 1时,写一个字符整平左移,当S= 1且N = 0时,写一个字符时整屏显示右移,若S = 0,则整屏字符移动无效,因此常用的光标右移指令为0x06
  • 指令4:显示开/关控制D——控制整体显示的开与关,高电平显示,低电平关显示;C——控制光标的开关,高电平表示有光标,低电平无光标;B——控制光标是否杉树,高电平闪烁,低电平不闪烁常用的开显示关光标的指令为0x0c
  • 指令5:命令光标或字符移动。S/C控制光标或字符,R/L控制左右
    (S/C)(R/L) = (0)(0),文字不动,光标左移一格,AC减1
    (S/C)(R/L) = (0)(1),文字不动,光标右移一格,AC加1
    (S/C)(R/L) = (1)(0),文字全部右移一格,光标不动
    (S/C)(R/L) = (1)(1),文字全部左移一格,光标不动
  • 指令六:功能设置命令DL——高电平为8位数据总线,低电平为4位数据总线;N——低电平单行显示,高电平双行显示;F——低电平显示57的点阵字符,高电平显示510的点阵字符,常用的两行、八位数据总线、5*7的点阵指令为0x38
  • 指令七:指令为0x40+add(当D5-D0全为0时,D7~D0为0x40)该指令用于设置自定义字符的CGRAM地址。ADD前三位用于选择字符,后三位用于选择字符的8位字模数据
  • 指令八:指令为0x80+add,用于设置下一个要存入数据的DDRAM地址。add的范围是0x00~0x27,对应第一行,0x40-0x67对应显示第二行,每行可输入40个字符,默认只能显示前16个,可以通过指令3的字符移动指令来显示其他内容
  • 指令九:读忙信号和光标地址。BF:忙标志位,高电平表示忙,此时模块不能就收命令或数据,如果为低电平表示闲,可以操作
  • 指令10:写数据
  • 指令11:读数据

6.LCD1602的编程实例

  • 这是我的液晶电路原理图,主要看一下与哪个引脚相连。
    在这里插入图片描述
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
/*******引脚定义*******/

sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
#define data1602 P0
sbit BF = data1602^7; //BF表示data1602的最高位,判断是忙还是闲
/*******延时函数*******/
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
/*******忙检测函数*******/
bit LCD_busy()
{
	bit busy;
	P0 = 0xff;//防止干扰
	RS = 0;	 //命令模式
	RW = 1;   //读模式
	E = 1;
	busy = BF;//将忙标志位的数值赋给busy
	E = 0;
	return busy;
}
/*******写命令函数*******/
void LCD_write_cmd(uchar cmd)//cmd为需要写的命令
{
	while(LCD_busy());//只有当LCD_busy()为0(闲)时才跳出循环   
	RS = 0;		   //命令模式
	RW = 0;		   //写模式
	data1602 = cmd;	   //将命令内容的十六进制送到P0端口
	E = 1;
	E = 0;			//使能端,高电平有效,使命令送到LCD1602的DB0~DB7
}
/*******写数据函数*******/
void LCD_write_data(uchar dat)//dat为需要写的数据
{
	while(LCD_busy());//只有当LCD_busy()为0(闲)时才跳出循环   
	RS = 1;		   //数据模式
	RW = 0;		   //写模式
	data1602 = dat;	   //将数据内容的十六进制送到P0端口
	E = 1;
	E = 0;			//使能端,高电平有效,使命令送到LCD1602的DB0~DB7
}
/*******LCD初始化函数*******/
void LCD_init()
{
	LCD_write_cmd(0x38); //将设置“两行、八位数据、5*7的点阵”命令写入LCD的控制器
	LCD_write_cmd(0x0c); //开显示关光标
	LCD_write_cmd(0x06); //光标右移指令
	LCD_write_cmd(0x01); //清除显示
}
/*******LCD写显示地址函数*******/
void LCD_write_address(uchar x,uchar y)
{
	x&=0x0f;  //列地址限制在0~15之间
	y&=0x01;  //行地址限制在0~1
	if(y==0)
		LCD_write_cmd(x|0x80);//数据指针=80+地址变量,写入列地址
	else
		LCD_write_cmd((x+0x40)|0x80);	  //如果是第二行,将列地址写入
}
/*******LCD显示函数*******/
void LCD_display(uchar x,uchar y,uchar buf)	//x:列 y:行,buf:显示的字符
{
	LCD_write_address(x,y);//先将地址写入
	LCD_write_data(buf);	//再写入要显示的数据
}
/*******main函数*******/
void main()
{
	LCD_init();
	LCD_display(2,0,'H');
	LCD_display(3,0,'e');
	LCD_display(4,0,'l');
	LCD_display(5,0,'l');
	LCD_display(6,0,'o');
	LCD_display(8,0,'W');
	LCD_display(9,0,'o');
	LCD_display(10,0,'r');
	LCD_display(11,0,'l');
	LCD_display(12,0,'d');

	LCD_display(8,1,'W');
	LCD_display(9,1,'D');
	while(1);
}

效果如下:
在这里插入图片描述

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

C51单片机学习笔记(六)——液晶显示屏的使用 的相关文章

  • PostgreSQL操作

    一 进入PostgreSQL数据库 Linux下切换到postgres用户 xff0c 执行psql即可进入 span class token function su span postgres bash 4 4 psql 此时就进入pos
  • 渗透测试工具学习笔记(4)——tcpdump

    no GUI的抓包分析工具 Linux Unix系统默认安装 说是这么说但是manjaro下没有 xff0c pacman一下即可 抓包 xff1a 默认只抓68个字节 i interface s snaplen 大小 w file tcp
  • 渗透测试工具学习笔记(5)——dradis、keepnote、truecrypt

    过程文档记录工具 1 dradis 导入导出扫描器日志 webapp 默认在http 0 0 0 0 3000 2 keepnote 层级化 3 truecrypt 加密工具 已停止更新 官方原因是安全性不够 xff0c 但实际使用却依然较
  • 渗透测试工具学习笔记(6)——nplookup(被动信息收集)

    被动信息收集 34 开源智能 34 open source OSINT 都是公开渠道可获得的信息 与目标系统不产生直接交互 尽量避免留下一切痕迹 Passive reconnaissance no direct interaction gt
  • PCL学习笔记——合并点云

    合并点云分为两种类型 xff1a 第一种是两个点云数据集的字段类型和维度相同 xff0c 合并之后点云只是点的数量增加了 xff1b 第二种是两个点云数据集的字段类型或维度不同 xff0c 但是点的数量相同 xff0c 合并之后相当于扩展了
  • 云服务器的图形界面的安装和远程连接xfce4 + VNC

    对于阿里和腾讯的云服务器学生价真的很优惠 xff0c 但是对于凑热闹买的我还是个小白 xff0c 我想装一个图形界面 xff08 特别是最近在用腾讯的CVM做HIT操作系统的实验 xff0c 其中有个软件必须要显示图形界面 xff09 较为
  • 【ROS学习】-tf学习(tf_monitor、tf_echo、static_transform_publisher、view_frames)

    写在前面 本文的内容主要来自 ros wiki 上的教程 xff1a http wiki ros org tf 简短总结 xff1a tf monitor 将当前的坐标系转换关系打印到终端控制台 tf echo lt source fram
  • Ubuntu使用WPS打开文档出现缺失字体情况解决方法

    一 问题描述 Ubuntu 通过官网下载deb安装 WPS 之后 xff0c 打开文档出现字体缺失的问题 xff1a 二 解决方法 下载缺失的字体 xff0c 百度网盘下载链接 xff08 TODO xff09 xff0c 然后解压 xff
  • PendSV中断服务函数

    之前在系统滴答定时器中断服务函数中调用API函数xPortSysTickHandler xff09 xff0c xPortSysTickHandler xff09 函数中通过向中断和状态寄存器的bit28写入1来启动PendSV中断 xff
  • 基于sumo和车牌识别数据的城市仿真

    前言 最近希望能仿真出一个城市的交通状态 xff0c 也就是知道在不同的需求加载下城市宏观交通状态的变化情况 xff0c 同时 xff0c 因为我手头有车牌识别数据 xff0c 因此需求将来自于车牌识别数据 但是仿真过后发现 xff0c 并
  • Linux:mkdir命令详解(-p,--verbose,-v,--version,-m,-Z,--context)

    Content 1 mkdir是什么2 mkdir使用2 1 version2 2 verbose v2 3 p parents 2 4 m mode 61 MODE2 5 Z2 6 context 61 CTX 2 6 1 单纯 cont
  • Python使用阿里云发送短信的两种方式

    参考文档https help aliyun com document detail 215764 html 安装依赖包 pip install alibabacloud tea openapi pip install alibabaclou
  • 手机投屏到电脑(以win10系统为例)

    总目录 文章目录 总目录前言一 电脑设置1 安装无线显示器2 完成投影偏好设置3 启动连接应用 二 手机设置三 优缺点分析总结 前言 手机投屏到电脑个人实操记录 一 电脑设置 1 安装无线显示器 首先win 43 i 进入设置 xff0c
  • 关于 nginx 配置ssl 无法访问,解决过程

    1 单独访问 以IP 43 端口的形式访问或 接口查看是否通 这是验证自己的服务或接口没有问题 2 单独以最简单的形式启动nginx 记住是最简单 xff0c 没有多余配置 xff0c 都是默认的 这是验证nginx启动没有问题 3 检查端
  • 1、FreeRTOS使用,Main函数中需要做的事情

    1 硬件初始化 xff08 也可以放在SystemInit中 xff09 时钟初始化 中断优先级分组 中断优先级分配 xff08 设置 xff09 外设初始化 xff08 时钟 xff0c GPIO xff0c 配置参数 xff0c 是否使
  • ubuntu22.04系统配置(一)(后续有kali的配置)

    ubuntu22 04系统配置深度学习 xff08 一 xff09 xff08 后续有kali的配置 xff09 摘要系统下载以及U盘拷贝系统的基本配置nvidia smi 摘要 配置这个东西真的踩了好多坑 xff0c 之前一直用的Wind
  • GINet:Graph Interaction Network for Scene Parsing(ECCV 2020)详解

    论文地址 xff1a https arxiv org pdf 2009 06160 pdf 一 背景 Scene Parsing 任务属于语义分割的一个分支 xff0c 也是把每个像素点分成一个具体的语义类别 xff0c 它和常见的语义分割
  • C++ string切割,分解字符串,C 库函数 - strtok()

    声明 下面是 strtok 函数的声明 char strtok char str const char delim 参数 str 要被分解成一组小字符串的字符串 delim 包含分隔符的 C 字符串 返回值 该函数返回被分解的第一个子字符串
  • BGP详解

    BGP协议详解 BGP是一种边界网关协议 但是也属于动态路由协议 一 BGP的特征 xff08 一种外部路由协议 xff0c 用来在AS之间传递路由信息 xff0c 是一种增强版的距离矢量协议 xff09 1 可靠的路由更新机制 传输协议
  • el-input-number 如何实现默认不填充0

    只需要把数据设置未 undefined 的就可以了 lt el input number v model 61 num 64 change 61 handleChange min 61 1 max 61 10 label 61 描述文字 g

随机推荐

  • vue项目 el-input输入框字符限制,只显示英文及数字

    element的el input没有限制输入的内容 xff0c 想要限制输入内容就需要自己来开发 xff0c 我使用的方式是正则来判断进行再次赋值实现的 xff0c 不废话上代码 xff1b lt el input v model 61 3
  • cdn方式使用vue和element-ui进行前端开发

    安装 按照vue和element ui的官网开发指南中提供的cdn安装方式 xff0c 直接以script方式引入 要注意引入顺序 span class token comment lt 引入样式 gt span span class to
  • vue el-table 如何实现表格根据分页索引自增长

    在el table 里设置type 61 index xff0c 可以实现表格的索引自增长 xff0c 但是如果我们给表格增加了分页 xff0c 切换页面索引任然是从1 20 xff08 20是自己分页的数量 xff09 xff0c 那么想
  • Vue的计算属性和监听属性

    1 计算属性 computed 当依赖数据发生变化时 xff0c 计算属性会被重新计算 有且只有在依赖数据发生变化时它才会重新计算 xff0c 其他的数据变化对计算属性 应用场景 xff1a 数据的计算显示 v for用v if的计算 sp
  • Element UI el-form-item 遍历表单校验规则

    一 遍历表单校验规则实现案例 prop内容为 遍历数据 43 index 43 校验数据 span class token operator lt span div span class token keyword class span s
  • uni-app引入uView2.0的步骤

    引入uVIew组件可以使用uni app市场插件安装插件即可 xff0c 也可以使用npm下载安装 xff0c 不过使用npm需要在pages json使用easycom属性引用需要的组件类 在uni app插件市场右上角选择使用HBuil
  • Vue-cli创建项目步骤

    一 使用 vue cli 搭建项目 下面整个过程是基于已经安装node js和cnpm的基础上 xff0c node js如何安装就不在这里详说了 xff08 1 xff09 全局安装 vue cli xff0c 在命令提示窗口执行 xff
  • keil5建立工程

    1 xff0c 确认工程代码 主要包括代码的目录或者代码的svn路径 xff0c 其次再来确认代码的编译方法 xff0c 确认该代码是需要keil5编译还是linux gcc 43 makefile 编译 2 xff0c 确认编译手段 确认
  • win10下 frpc的开机自启动

    frp可以用来进行内网穿透 xff0c 其具体实现原理可以参考网上其他教程 xff0c 本文主要描述用户端程序frpc exe在win10下的一种开机自启动方法 本地组策略 在完成配置最后 xff0c 需要进行自启动配置 xff0c 一般的
  • qt 设置背景图片、背景色步骤

    拖一个label 控件 label 上右键选择改变样式表 xff0c 添加资源选择图片 一 设置背景图 background image xff1a 二 铺满整个label border image xff1a 三 添加图片 xff0c i
  • QT 设置按钮QPushButton 圆角、渐变色背景、背景图片、鼠标放上去、鼠标按下效果、透明背景

    设置按钮圆角 渐变色背景 背景图片 鼠标放上去 鼠标按下效果 透明背景 效果 xff1a 一 设置四角圆角 xff1a 二 设置下 左圆角 按钮鼠标放上去改变背景色 三 设置上 右圆角 四 按钮设置背景图片 xff0c 鼠标放上去 按下 更
  • processlist中状态详解

    在processlist中 xff0c 看到哪些运行状态时要引起关注 xff0c 主要有下面几个 xff1a 状态建议copy to tmp table执行ALTER TABLE修改表结构时建议 xff1a 放在凌晨执行或者采用类似pt o
  • 在oVirt上安装Win11虚拟机

    在oVirt上安装Win11虚拟机
  • 【Debugging】树莓派 SSH连接失败解决

    问题描述 在使用SSH连接时出现如下错误 xff1a Remote side unexpectedly closed network connection 解决方案 修改ssh的配置文件 etc ssh sshd config xff0c
  • ubantu 18.x 学习记录

    安装net tools 用于 ifconfig命令 span class token function sudo span span class token function apt get span span class token fu
  • 雷达辐射源调制信号仿真

    雷达辐射源调制信号仿真 说明 xff1a 通过Matlab进行单载频 xff08 CW xff09 xff0c 线性调频 xff08 LFM xff09 非线性调频 xff08 NLFM xff09 二相编码 xff08 BPSK xff0
  • nvidia-smi报错 NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.

    1 报错 xff1a nvidia smi报错 NVIDIA SMI has failed because it couldn t communicate with the NVIDIA driver Make sure that the
  • 自定义Request数据包欺骗服务器拿数据

    自定义Request数据包欺骗服务器拿数据 背景思路 xff1a 值得记录的知识点 背景 一个连接服务器的APK xff0c 登录方式 xff1a 电话号码 43 短信验证 xff0c 登录后可以查询到该账号下的几百条数据 xff0c 每一
  • Qt下C++的cout输出中文信息乱码问题解决

    在Qt中使用C 43 43 的cout时 xff0c 发现打印出的中文时乱码的 xff0c 如下 xff1a 解决办法 xff1a 第一步 xff1a 加入头文件 61 61 include lt windows h gt 61 61 解决
  • C51单片机学习笔记(六)——液晶显示屏的使用

    C51单片机学习笔记 六 液晶显示屏的使用 文章目录 C51单片机学习笔记 六 液晶显示屏的使用1 LCD1602的认识2 LCD1602的引脚及其功能3 LCD模块的内部结构4 LCD1602的工作时序5 LCD1602的指令说明6 LC