




已阅读5页,还剩62页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
讲座四 1 多位LED显示2 键盘管理模块3 点阵 字符液晶显示器4 字模提取软件 LED的工作原理 a 典型的七段式LED器件 b 共阳极LED c 共阴极LED 四位数七段LED数码管模块 左为正面图 右为背面图 LED数码管和单片机的连接1 单片机 P2 0 P2 7 a b c d e f g dp 5v 编程 以共阳极为例 MOVP2 11111001B 0F9H MOVP0 10100100B 0A4H SJMP 静态连接 静态显示 LED数码管和单片机的连接2 单片机 P2 0 P2 7 a b c d e f g dp 想一想 和静态连接的区别在哪里 单片机 P2 0 P2 7 a b c d e f g dp 电路的接法决定了必须采用逐位扫描显示方式 即从段选口送出某位LED的字型码 然后选通该位LED 并保持一段延时时间 然后选通下一位 直到所有位扫描完 怎样实现显示呢 静态 动态显示方式总结 静态显示连接所有LED的位选均共同连接到 VCC或GND 每个LED的8根段选线分别连接一个8位并行I O口 原理简单 显示无闪烁 占用I O资源较多 动态显示连接所有LED的段选线共同连接在一起共用一个8位I O口而每个LED的位选分别由一根相应的I O口线控制 因此必须采用动态扫描显示方式 例 74ls164 led proteus 独立键盘 case0 x01 key1 键盘1功能函数 break case0 x02 key2 键盘2功能函数 break case0 x04 key3 键盘3功能函数 break case0 x08 key4 键盘4功能函数 break case0 x10 key5 键盘5功能函数 break case0 x20 key6 键盘6功能函数 break case0 x40 key7 键盘7功能函数 break case0 x80 key8 键盘8功能函数 break default break 说明 采用轮询方式查询P1口 采用延时法消除键盘抖动 include 函数名称 delay 功能 用于键盘消抖的延时函数说明 无入口参数 无返回值 无 voiddelay unsignedchari for i 400 i 0 i 主函数main voidmain void unsignedcharkey while 1 P1 0 xff 要想从P1口读数据必须先给P1口写1key P1 读入P1口的数据 赋值给变量keyif key 0 x00 判断是否有键按下 当没有键按下时 P1口的数据为0 x00 delay 延时去抖key P1 再次读入P1口的数据 赋值给变量keyif key 0 x00 再次判断是否有键按下switch key 矩阵式键盘控制 4x4键盘的内部结构 市售一体成型的4x4键盘 低电平扫描 按下 0 键 低电平动作键盘动作分析表 高电平扫描 按下 0 键 高电平动作键盘动作分析表 4 4键盘扫描电路 基本原理 分行扫描检查是否有键按下若有 确定哪个键被按下 1 行扫描法的原理 判断哪一个键被按下的流程 P1 0 xfb n P1 n 2 行反转法的原理 行线 列线分别接并行口行线输出 列线输入列线输出读得的值 行线输入 行反转法的流程 ucharkeyscan void 键盘扫描函数 使用行列反转扫描法 ucharcord h cord l 行列值P3 0 x0f 行线输出全为0cord h P3 键盘最后组合码值 此处仿真 测控系统中必不可少的组成 人机界面 图1测控系统的组成部分 液晶显示器的原理 字符型液晶 1602 方法 通过向指定显示位置对应的DDRAM中写数据来显示字符 例如 在第2行第2列显示字符 a 查表1可知a对应的代码为01100001即0 x31 则可向地址0 x41中写入数据0 x31即可显示 图21602的显示地址与DDRAM地址 点阵型液晶 12864 在点阵型LCD上显示一幅图片或是字符 如上图所示 只需黑色的部分点亮 空白的点置0即可 可以将LCD看成128 64个LED灯来帮助理解 正面图 背面图 12864分类128 64点阵液晶显示屏有三种控制器 分别是KS0107 KS0108 T6963C和ST7920 三种控制器主要区别是 KS0107 KS0108 不带任何字库 T6963C带ASCII码 ST7920带国标二级字库 8千多个汉字 图312864的DDRAM地址 XY地址计数器实际上是作为DDRAM的地址指针 X地址计数器为DDRAM的页指针 Y地址计数器为DDRAM的Y 列 地址指针 X地址计数器没有记数功能 只能用指令设置 Y地址计数器具有循环记数功能 各显示数据写入后 Y地址自动加1 Y地址指针从0到63 从上图可以看出数据按字节在屏幕上是竖向排列的 上方为低位 下方为高位 因此在横向上 也就是Y 就一共是128列数据 分为CS1和CS2两个64列来写入 在竖方向上 也就是X 一字节数据显示8个点 竖向64个点分为8个字节 称做8页 X 0 7 了解这些后我们就知道要满屏显示一张图就要从y 0 127 X 0 7一共写128 8 1024个字节的数据 同样在AT89S51中存一张图就要1024个字节的空间 图片在12864上的显示 简单来说 主要分为两步 1 将一幅图片转化为一系列二进制数据2 将数据按字节 8位 写入液晶对应的DDRAM由图3可知 12864的DDRAM有128 8 1024个地址 只需将图片转化的数据按字节写入这其对应的DDRAM地址即可 字符在12864上的显示 上图中 汉字为16 16点阵 ASCII码为8 16点阵 同图片一样 一个汉字 ASCII 由16 2 8 2 个字节数据组成 字符显示原理与图片一致 只需将字符代码写入相应DDRAM地址 字体大小可以根据需要改变 小结 简而言之 无论是字符型还是点阵型LCD 其基本原理都是通过将数据写入所对应的DDRAM地址中来显示所需要的图形或是字符 12864点阵型液晶对应的DDRAM有1024个地址 当需显示的字符或图片已转为二进制数据时 确定将数据写入对应的DDRAM地址就是你所要做的工作 单片机与液晶显示器的硬件连接 液晶显示器 12864 主要包含了以下接口 图6 1 使能E 51的RD和WR经或非门接LCD的使能E 2 片选CS1 左半屏 CS2 右半屏 见图33 命令 数据选择RS 0 命令 1 数据 4 读 写选择R W 0 写 1 读 5 数据总线DB0 DB76 负压产生和负压输入 对比度 调整7 复位RST8 电源与地和背景光电源 软件编程 注意 程序的编写与硬件是分不开的 以图6为例 A11 A8对应CS2 CS1 R W RS 未用的地址线为高 见图5则当向12864的左半屏 CS1 1 CS2 0 写 R W 0 数据 RS 1 时 总线地址为0 x1111010111111111 即0 xF5FF C文件中定义如下 defineWD1XBYTE 0 xF5FF 定义了总线地址后 对外部地址的操作变得非常简单 如向左半屏写数据0 xFF WD1 0 xFF读左半屏数据 data RD1 data存储读取到的数据 举例 下面简单介绍程序编写的流程1 定义所有总线地址 defineWI1XBYTE 0 xF4FF 向左半屏写命令 defineWD1XBYTE 0 xF5FF 向左半屏写数据 defineRI1XBYTE 0 xF6FF 读左半屏命令 defineRD1XBYTE 0 xF7FF 读左半屏数据 defineWI2XBYTE 0 xF8FF 向右半屏写命令 defineWD2XBYTE 0 xF9FF 向右半屏写数据 defineRI2XBYTE 0 xFAFF 读右半屏命令 defineRD2XBYTE 0 xFBFF 读右半屏数据 2 编写底层程序 查忙 写数据 读数据 查忙 读BF标志即DB7总线 亦即读命令 BF 1表示模块在内部操作 此时模块不接受外部指令和数据 BF 0时模块为准备状态 随时可接受外部指令和数据 b RI1或者b RI2 观察b中最高位是否为0 否则忙 写数据aWD1 a或者WD2 a读数据到datadata RD1或者data RD2注意 无论是写数据还是读数据一定要先查忙 对左右半屏读命令 只有在BF 0时才能对LCD进行操作 3 LCD初始化包含开显示 0 x3F 起始行 0 xC0 设置起始页地址 0 xB8 和Y地址 0 x40 即分别向LCD的左右半屏写命令 可按括号内的数据进行初始化 具体可查阅12864的PDF资料 4 清屏 向DDRAM所有地址写0 显示一幅新图片前必须清屏 否则之前显示的数据仍存在于液晶上 5 指定位置显示一个ASCII码首先将起始页地址和起始Y地址设置好 写入ASCII码的上半部分 8个字节数据 重新设置起始页地址和起始Y地址 写入ASCII码的下半部分 另8个字节数据 注意 在对DDRAM进行读写操作后 Y地址指针自动加1 指向下一个DDRAM单元 6 指定位置显示汉字同显示ASCII码基本相似 只是上下部分分别有16个字节数据需要写入DDRAM 7 显示一张图片对于图片 必然从第0页第0列开始 可以一页一页 不分左右屏 显示 也可以先写左半屏后写右半屏 所谓的两种方法差别正在设置的起始页地址和Y地址的不同 图3 小结 12864点阵型液晶对应的DDRAM有1024个地址 无论是显示字符还是图片 灵活设置起始页地址和Y地址 可以达到想要的结果 C语言中用到总线操作必须添加头文件 absacc h 另如使用仿真器 需在debug中的setting里选择使用xbus 数据总线 可使用取字模软件将字符或图片转为一系列二进制数据 写程序 附件 3 写数据datvoidWriteData uchardat bitside CheckBusy side if side Left WD1 dat elseWD2 dat 写命令cmd side 0为左 1为右 voidWriteCmd ucharcmd bitside CheckBusy side if side Left Left 0 宏定义 WI1 cmd elseWI2 cmd 读操作时序 1 查忙程序voidCheckBusy bitside side 0为左1为右 unsignedcharbuf 0 xFF while buf if side buf RI1 单片机命令elsebuf RI2 buf 取D7若为1则忙 忙则buf 0 LCD回信号 初始化 4 初始化程序voidLCD Init WriteCmd 0 x3F Left 显示开WriteCmd 0 x3F Right WriteCmd 0 xC0 Left 起始行WriteCmd 0 xC0 Right WriteCmd 0 xB8 Left WriteCmd 0 xB8 Right 起始x y坐标 0 0 WriteCmd 0 x40 Left WriteCmd 0 x40 Right 5 清屏 一般dat 0 voidLCD Clear uchardat uchari j for i 0 i 8 i WriteCmd 0 xB8 i Left WriteCmd 0 xB8 i Right WriteCmd 0 x40 Left WriteCmd 0 x40 Right for j 0 j 64 j WriteData dat Left WriteData dat Right 总结 理解12864是如何显示字符和图形的知晓单片机与12864的硬件连接根据硬件接线 确定所有的总线地址 8个 明白如何通过总线操作对12864进行数据与命令的交换参考12864的命令字进行软件编程学会如何使用取字模软件 图6AT89C51与12864的硬件连接 LCD12864模块的20个引脚定义如下 1 Vss逻辑电源地2 VDD逻辑电源正5v3 V0LCD驱动电压4 RS数据 指令选择 高电平为数据 低电平为指令5 R W读 写选择 高电平为读数据 低电平为写数据6 E读写使能 高电平有效 下降沿锁定数据7 DB0数据输入输出引脚8 DB1数据输入输出引脚9 DB2数据输入输出引脚10 DB3数据输入输出引脚11 DB4数据输入输出引脚12 DB5数据输入输出引脚13 DB6数据输入输出引脚14 DB7数据输入输出引脚15 CS1片选择号 低电平时选择前64列16 CS2片选择号 低电平时选择后64列17 RET复位信号 低电平有效 18 VEE输出 15v电源给V0提供驱动电源19 A背光电源LED正极20 K背光电源LED负极 图5 LCD引脚图 带字库12864 带字库的12864的基本特性 1 显示分辨率 128 64点 就是64行 每行128个点 2 内置汉字字库 提供8192个16 16点阵汉字 12864内部有一个CGROM 内容掉电可以存储 所以汉字字库会存放在里面 满屏最多显示4 8 32个汉字 3 内置128个16 8点阵ASCII字符 12864一次最多可以显示4 16 64个ASCII字符 4 通讯方式 串行 并口可选 数据写入和读出可以是以串行的方式 也可以是以并行的方式 所以只要我们写入指令0 x01 整个屏幕就被清空了 LCD初始化 一般用指令0 x0c 开显示 关闭光标 既可以控制扩展功能 又可以控制绘图显示的指令 用0X30 基本指令集 指令0X06光标右移 1 汉字显示坐标 显示汉字一屏可以显示4 8 32个16 16的汉字 实物图对照下 把地址也表到实物图上去了 操作的具体流程 A进入基本指令模式 指令16 指令为0 x30 B写入xy地址 地址需要查上表 用指令8 也就是写入DDRAM C写入欲写入的汉字的编码 一般定义一个数组 直接把汉字存放在里面即可 存储的时候它就是以编码的形式 例如 ucharcodedis1 南京师范大学 例程代码 ucharcodedis3 南京师范大学 voiddisplay hz UcharI Write comd 0 x30 基本指令Write comd 0 x80 写在第一个位置上For i 0 i 8 i Write da dis3 i 把数据送到端口Delay ms 5 延时一会 2 ASCII显示坐标 它的坐标和汉字的坐标是一样的 只不过一个汉字的位置可以放两个ASCII码字符 因为前者为16 16后者为16 8 这样一行可以显示16个ASCII码了 在显示一串字符穿的时候 给一个起始地址 屏幕就会依次显示出来 自动加一功能 操作的具体流程 A进入基本指令模式 指令16 指令为0 x30 B写入xy地址 地址需要查上表 用指令8 也就是写入DDRAM C写入欲写入的汉字的编码 一般定义一个数组 直接把ASACII码存放在里面即可 存储的时候它就是以编码的形式 例如 ucharcodedis1 SH 例程代码 ucharcodedis2 SH voiddisplay ascii UcharI Write comd 0 x30 基本指令Write comd 0 x80 写在第一个位置上For i 0 i 2 i Write da dis2 i 把数据送到端口Delay ms 5 延时一会 并行写资料到模块 时序图 写指令 voidwrite cmd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 牡丹江医学院《读共产党宣言》2023-2024学年第二学期期末试卷
- 长春早期教育职业学院《建筑工程CAD》2023-2024学年第二学期期末试卷
- 黑龙江建筑职业技术学院《工程制图实验》2023-2024学年第二学期期末试卷
- 成都农业科技职业学院《社会学原著》2023-2024学年第二学期期末试卷
- 川北医学院《学科教材与课例分析》2023-2024学年第二学期期末试卷
- 岳阳职业技术学院《景观公共设施设计实验》2023-2024学年第二学期期末试卷
- 洛阳职业技术学院《跨文化学习与教学》2023-2024学年第二学期期末试卷
- 甘肃交通职业技术学院《建筑安装工程预算》2023-2024学年第二学期期末试卷
- 南京工业大学《高等化学(Ⅵ)》2023-2024学年第二学期期末试卷
- 新疆多元一体的文化课件
- 2024年贵州省德江县事业单位公开招聘医疗卫生岗笔试题带答案
- 高考二轮专题复习:图文转换
- 2024年甘肃省大数据中心招聘工作人员笔试真题
- 崇左市人民检察院招聘机关文员笔试真题2024
- 2025-2030煤油产业规划专项研究报告
- (二模)2025年4月潍坊市高三高考模拟考试地理试卷(含答案)
- 香港劳务服务合同协议
- 园林喷洒器企业数字化转型与智慧升级战略研究报告
- GB/T 9065.2-2025液压传动连接软管接头第2部分:24°锥形
- 高二下学期感恩母亲节主题班会课件
- 道路运输汛期教育培训
评论
0/150
提交评论