已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LCD1602 液晶显示完全资料 一 关于 LCD1602 在编写 LCD1602 程序前 我们必须了解其手册上一些非常重要 的信息 如果这些信息不能理解透彻 编程可能会遇到或多或 少的问题 在此先大致归纳几点 1 管脚 1602 共 16 个管脚 但是编程用到的主要管脚不过三个 分别 为 RS 数据命令选择端 R W 读写选择端 E 使能信号 以后编程便主要围绕这三个管脚展开进行初始化 写命令 写 数据 以下具体阐述这三个管脚 RS 为寄存器选择 高电平选择数据寄存器 低电平选择指令寄 存器 R W 为读写选择 高电平进行读操作 低电平进行写操作 E 端为使能端 后面和时序联系在一起 除此外 D0 D7 分别为 8 位双向数据线 2 操作时序 RSR W 操作说明 00 写入指令码 D0 D7 01 读取输出的 D0 D7 状态字 10 写入数据 D0 D7 11 从 D0 D7 读取数据 注 关于 E H 脉冲 开始时初始化 E 为 0 然后置 E 为 1 再 清 0 读取状态字时 注意 D7 位 D7 1 禁止读写操作 D7 0 允许 读写操作 所以对控制器每次进行读写操作前 必须进行读写检测 即 后面的读忙子程序 3 指令集 LCD 1602 初始化指令小结 0 x38 设置 16 2 显示 5 7 点阵 8 位数据接口 0 x01 清屏 0 x0F 开显示 显示光标 光标闪烁 0 x08 只开显示 0 x0e 开显示 显示光标 光标不闪烁 0 x0c 开显示 不显示光标 0 x06 地址加 1 当写入数据的时候光标右移 0 x02 地址计数器 AC 0 此时地址为 0 x80 光标归原点 但是 DDRAM 中断内容不变 0 x18 光标和显示一起向左移动 4 显示地址 LCD1602 内部 RAM 显示缓冲区地址的映射图 00 0F 40 4F 分别对应 LCD1602 的上下两行的每一个字符 只要往对应的 RAM 地址写入要显示字符的 ASCII 代码 就可以显示出来 5 读写时序 时序图 1602 手册中有 这里不引用了 时序图很重要 编程就 是根据时序图设置寄存器 让 LCD 工作 二 LCD1602 程序编写流程 LCD1602 在了解完以上信息后便可以编写 这里我们把程序分 为以下几步 1 定义 LCD1602 管脚 包括 RS R W E 这里定义是指这些管 脚分别接在单片机哪些 I O 口上 现举例如下 sbit EN P3 4 sbit RS P3 5 sbit RW P3 6 2 显示初始化 在这一步进行初始化及设置显示模式等操作 包括以下步骤 设置显示方式 延时 清理显示缓存 设置显示模式 通常推荐的初始化过程如下 延时 15ms 写指令 38H 延时 5ms 写指令 38H 延时 5ms 写指令 38H 延时 5ms 注 以上写 38H 指令可以看情况省略 1 2 步 以上都不检测忙信号 以下都要检测忙信号 写指令 38H 写指令 08H 关闭显示 写指令 01H 显示清屏 写指令 06H 光标移动设置 写指令 0cH 显示开及光标设置 3 设置显示地址 写显示字符的位置 4 写显示字符的数据 三 LCD1602 各子程序模块及主程序编写 现在按照上面编写程序的流程 给出各子程序模块及主程序的 例子 1 头文件 宏定义 定义管脚等 include include define uchar unsigned char define uint unsigned int sbit EN P3 4 sbit RS P3 5 sbit RW P3 6 uchar code table0 QQ 545699636 此条语句为显示 字符串时定义的字符串数组 2 LCD1602 基本初始化子程序 void LCD1602 EN 0 RS 1 RW 1 P0 0 xff 这里 P0 为与 LCD D0 D7 相连的 I O 口 3 读忙子程序 void read busy P0 0 xff RS 0 RW 1 EN 1 while P0 P0 和 10000000 相与 D7 位若不为 0 停在此处 EN 0 若为 0 跳出进入下一步 这条语句的 作用就是检测 D7 位 若忙在此等待 不忙跳出读忙 子程序执行读写指令 4 写指令写数据子程序 void write uchar i bit j read busy P0 i 其中 i 0 写指令 i 1 写数据 RS j RW 0 EN 1 EN 0 5 延时子程序 void delay uint c 功能为提供初始化等其他子程序中 的延时 1xc MS uint a b for a 0 a c a for b 0 b 120 b 6 LCD1602 初始化子程序 void init 完全按照要求初始化流程来 中间省略了一 步写指令 38H delay 15 write 0 x38 0 delay 5 write 0 x38 0 write 0 x08 0 write 0 x01 0 write 0 x06 0 write 0 x0c 0 7 显示单个字符子程序 void display lcd byte uchar y uchar x uchar z Y 0 1 起始行 X 0 15 起始列 Z 想写字符的 ASCII 码 if y 是否显示在第二行 若在第一行 Y 0 不进入 IF 语句 若在第二行 进入 IF 语句 x 0 x40 第二行起始地址加上列数为字符显示地址 x 0 x80 设置数据指针位置 write x 0 write z 1 写入数据 8 显示字符串子程序 void display lcd text uchar y uchar x uchar table Y X 同上字符显示 table 字符串数组 uchar z 0 uchar t t strlen table x 求得字符串长度加上起始列位置 while x t 功能为 LCD 显示到字符串最后一个字 符 防止字符串 没有 16 个字符 从而不够位产生乱码 display lcd byte y x table z 逐位显示数组内 字符 x z 9 主程序 主程序里除了放入初始化程序外就是加入自己编写的显示子程 序 根据你所要的不用功能可以编写各种类型的显示子程序 这里不做详细介绍 以下举例为显示一个字符和显示字符串的 显示子程序 void main LCD1602 init display lcd byte 0 0 A 显示一个字符 display lcd text 1 3 table 显示字符串 while 1 到此 让 LCD1602 显示的操作流程和编程思想基本可以告一段 落了 这里有一个完整的显示程序可显示 2 行英文 修改运行 但是 1602 的功能实现远不止这些 利用 1602 你可 以做出动态效果的显示 并且除了显示一般字符外 1602 还支 持自定义字符等等其他一些功能 下面在最后简单介绍下显示 动态效果和自定义字符 一 显示动态效果 显示动态效果包括让一个字符或字符串原位置闪烁 或者 前后移动等等 其实动态效果原理很简单 就是简单的利用延 时 例如让字符原位置闪烁 可以认为是先让 1602 显示字符 延时一段时间后 可以显示空格或者直接清屏操作都可以达到 让字符消失不见的效果 再延时一段时间后再让 1602 显示这个 字符 同理 让字符前后移动也是这样 例如让字符在第一个位 置显示 延时一段时间后让其在后面第二个位置显示 只要显 示地址加 1 然后显示即可 字符串也是同样的道理 在这里补充一点就是如何让字符串从 1602 第 16 个地址外 进入 动态向前移动 其实可以通过显示地址表我们知道起始 位置开始后 1602 一行只能显示 16 个字符 但是一行的地址却 远远不止 16 个 大家可以看到第一行显示地址是从 00 27 然 而能显示在 1602 可见范围的只有 00 0F 后面的位置其实就是 起到一个缓冲的作用 你完全可以让字符数据存在在 10 地址后 的 RAM 中 只不过 我们无法看到就是了 如果存在 10 前的地 址我们就能看到显示 因此 我们可以先把显示起始地址设在 10 地址后的某一个 位置 然后让字符显示地址每次加 1 当加到 0F 时 我们就可 以看到字符串第一个字符出现在 1602 的最末一位 然后继续向 前移动 下面给出一段字符串移动显示的例子 void display lcd byte uchar y uchar x uchar z if y x 0 x40 x 0 x80 write x 0 write z 1 void display lcd text uchar y uchar x uchar table uchar z 0 uchar t t strlen table x while x 0 i 这里的循环就是为了字符串从后往 前显示 display lcd text 0 i table0 i 减一次 首个字符 就往前去一位 delay 200 while 1 二 显示自定义字符 要想显示自定义字符 首先就得取得想要的图形或者字符的字 模数组 可以通过手动提取的方法 取得相应的字模 如下图所示 对应一个字符显示区域 每 8 个字节 组成一个 点阵数组 要想让某一格子显示就让那一位为 1 每行自定义 5 位 全白 为 0 x00 全黑为 0 x1f 一共 8 行 每行一位数据 将生成的点阵数组保存到 CGRAM 存储器中 生成自定义字符 1602 内部 CGRAM 用于自定义的字符点阵的存储 总共 64 字节 由上一步点阵提取可知 每一个字符由 8 个字节数据组成 所 以 64 字节 CGRAM 存储器 能够存储 8 组自定义字符的点阵数组 按照 CGRAM 地址划分为 0 7 为第一组 8 15 为第二组 依次类 推 56 63 为第 8 组数据 CHARACTER CODE 是数据的显示地址 0 7 的范围 能存储 8 位 自定义的字符 能存八个自定义 每个字符存放的 CGRAM ADDRESS 是存储数据的地址 从 0 63 共 64 个字节 存储 64 个数据 我们写入的数据是 0 x40 0 x7F 共 128 位 把字符 数组内的 8 个数送进这 8 个地址 每存完一个字符的 8 位 下 次地址直接转到 0 x48 CGRAM DATA 字模每一行 5 位数据存 内部常用字符显示时 显示编码是从 0 x20 开始的 0 x00 0 x0F 是专门留给自定义字符显示的 0 x00 0 x07 和 0 x08 0 x0F 内容 是一样的 例如 调用 0 x01 位置和 0 x09 位置 显示的内容是 一样的 LCD1602 自定义显示字符的方式共四步 如下面所示 1 设置向 CGRAM 中存入这个数据 初始地址是 0 x40 然后存一 位向后加 8 总共能存 8 位自定义的字符 2 然后可以把自定义的数据送入到 LCD 的 CGRAM 中 3 向 LCD 写指令 送入需要显示数据的地址 4 向 LCD 写指令 把显示的数据指向 LCD 的 CGRAM 存储的位置 显示出自定义字符 举例如下 1 建立一个字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年厨房五金行业市场营销创新战略制定与实施分析研究报告
- 硫酸铝钾企业县域市场拓展与下沉战略分析报告
- 2024年山南市卫生系统考试真题
- 2025年厦门市消防救援局政府专职消防员招聘考试试卷真题
- 新能源汽车高压安全与防护 2.1高压触电事故紧急救助-教案
- 工厂转让买卖的合同10篇
- 2026年中考数学真题完全解读(黑龙江省齐齐哈尔卷)
- 2026年中考数学真题完全解读(四川省成都卷)
- 2026创新会议面试题及答案
- 远离烟草危害守护清新呼吸小学主题班会课件
- 电费回收考核管理办法
- 第五元素工程识图课件
- 施工进场计划方案(3篇)
- JG/T 358-2012建筑能耗数据分类及表示方法
- T/CEMIA 014-2018光纤预制棒用四氯化硅充装规范
- 电力电容器课件
- 华为经营管理-华为激励机制(6版)
- 肠癌的治疗与护理
- DZ∕T 0346-2020 矿产地质勘查规范 油页岩、石煤、泥炭(正式版)
- (高清版)DZT 0426-2023 固体矿产地质调查规范(1:50000)
- 全国矿产资源潜力评价总体实施方案
评论
0/150
提交评论