实验十:综合实验-基于单片机的示波器实现(超级详细)_第1页
实验十:综合实验-基于单片机的示波器实现(超级详细)_第2页
实验十:综合实验-基于单片机的示波器实现(超级详细)_第3页
实验十:综合实验-基于单片机的示波器实现(超级详细)_第4页
实验十:综合实验-基于单片机的示波器实现(超级详细)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 微机原理与接口实验微机原理与接口实验 综合实验综合实验 基于基于 LCD 的简易示波器实现的简易示波器实现 实验人 实验人 学学 号 号 院院 系 系 信息学院微电子学系信息学院微电子学系 实验十 综合实验 2 目录目录 实验目的实验目的 1 实验思路实验思路 1 实验原理实验原理 3 实验设计实验设计 7 电原理图电原理图 7 流程图流程图 8 各模块流程图各模块流程图 9 实验仿真结果实验仿真结果 12 实验遇到的问题及改进实验遇到的问题及改进 17 改写后的改写后的 C 语言代码语言代码 19 实验结果及展示实验结果及展示 38 实验总结实验总结 42 实验十 综合实验 1 实验目的实验目的 利用本学期学习的单片机及其接口知识 使用实验板上的外部设备自行设 计一个实验 实验思路实验思路 个人计划利用 LCD 液晶显示屏 制作一个示波器 所用的设备主要有 51 单 片机 单片机片外存储器 LCD 显示屏 AD 芯片 TLC549 预期实现功能为在 LCD 显示屏右侧显示自己的姓名或者示波器三个字 在屏幕左边的方框内显示 信号源输入的波形 同时仿照我们实际使用的示波器设计波形的上 下平移 幅 值压缩 拉伸 以及波形的展宽 压缩 并且能够测量输入波形的幅度 绝对误 差精度在 0 1V 以下 对于这个实验的难点 我个人认为主要在一下几个方面 1 1 LCDLCD 的使用 的使用 2 2 对于获取到的对于获取到的 ADCADC 数据的存储与处理 数据的存储与处理 3 3 将离散的将离散的 ADCADC 采样的数据进行连接 构成平滑的曲线 采样的数据进行连接 构成平滑的曲线 4 4 对输入波形幅度测量与显示对输入波形幅度测量与显示 关于 LCD 的使用 将在后面的实验原理中进一步介绍 这里主要就后两个 难点进行讨论 根据 LCD 屏的大小为 128 64 设计搭建一个 90 60 的方框作为波形显示窗 口 考虑到在 LCD 显示时 每个显示 Byte 为 8 1 的一列 每 128 个组成一页 所以简化设计 将第一页的最下面一行 以及第八页的最上面一行作为显示方 框的上下边界 从而中间的六页为波形显示区域 占用的点数为 90 48 考虑到需要采集 90 个样本 故设计使用片外存储器 依次存储 90 个数据 对于数据的处理 因为每个数据样本在显示时对应不同的时间点 所以为单独 的一列 主要难度是将定位到对应列的确切的点上 所以需要自行设计一个函 数能够把确切的点显示到对应的列上 横坐标是 90 个点 纵坐标是 48 个点 所以在 AD 转换后还需要进行数据处 理 因为 AD 转换后的值是在 00 FFH 之间 所以需要把 FFH 6 256 6 43 个点 因此 形成一个缩小的映射 由于 LCD 的分辨率的原因 这个将是在 LCD 的情 况下最大的分辨率 具体的对应的位置可以通过如下方法算出 00 FFH 的值被 映射到 00 2BH 0 43 的空间 所以 当被测信号电压大于等于参考电压 AD 实验十 综合实验 2 转换过来的值是 FFH 则被对应为 2BH 由于 LCD 的行是从上往下递增的 所以 AD 转换过来的值还需要进一步处理 用一个参考值减去转换值 得到显示的行 值 即显示行值 参考值 AD 转换映射值 而对参考值的改变 就可以改变显示 波形的上下位置 因为 0 256 个 AD 转换值被映射到 0 43 个映射值 所以每 5 9 个点近似对应一行 初始设定每 6 个点对应一行 这样即可确定每个点所 对应的行号 在根据其行号 可以推出其应该在哪一页中的哪一个位置 从而 可以通过对 01H 或是 80H 的循环移位得到该点在对应页中的准确位置 而如何将离散的点连成平滑的曲线 在这个计算中 我认为最重要的是不 可出现如下图左边出现的情况 这样会造成显著的视觉上有台阶的感觉 所以 在补充两个点之间的间隙时 我选择的方法是先判断下一个补充的点是否会与 前一列的点在一行上 如果是的话 就不再补充 这样可以使得补充出来的曲 线更加的平滑 这样的好处在显示方波的时候最为有效 实验十 综合实验 3 实验原理实验原理 一 一 ADAD 芯片原理芯片原理 TLC549 8 位串行 A D TLC549 是美国德州仪器 TI 公司生产的 8 位串行逐次比较型 A D 转换芯 片 通用微处理器通过串行控制线可实现对该芯片的控制 该芯片具有 4MHz 片 内系统时钟和软 硬件控制电路 转换时间最长 17 s 转换速度为 40 000 次 s 总失调误差最大为 0 5LSB 典型功耗值为 6mW 器件如左图所示 其中 1 3 脚为参考电压 输入 其中 1 脚 REF 3 脚 REF 通常为保证 器件工作良好 REF 电压应高于 REF 电压至少 1V 为减少误差 建议相差 4 75V 以上 TLC549 的工作时序图如下 从图中可以看出 其控制时序有如下特点 1 将 CS 置低 内部电路在测得 CS 下降沿后 等待 ten 后自动将前一次转 换结果的最高位 D7 位输出到 DATA OUT 端上 2 前四个 IO CLOCK 周期的下降沿依次移出第 2 3 4 和第 5 个位 D6 D5 D4 D3 片上采样保持电路在第 4 个 IO CLOCK 下降沿开始采样模 拟输入 3 接下来的 3 个 IO CLOCK 周期的下降沿移出第 6 7 8 D2 D1 D0 个 转换位 4 最后 片上采样保持电路在第 8 个 I O CLOCK 周期的下降沿后 开始 A D 转换 第 8 个 IO CLOCK 后 CS 必须为高 或 IO CLOCK 保持低电平 这种 状态 实验十 综合实验 4 二 二 LCDLCD 显示屏的工作原理显示屏的工作原理 LCD12864 分为两种 带字库和不带字库的 不带字库的显示汉字的时候可 以选择字体 而带字库的液晶 只能显示 GB2312 的宋体 当然也可以显示其 他的字体 不过不是液晶本身字库中带的了 而是用图片的形式显示 由于该实验用的是带字库的 LCD12864 所以这里主要介绍这一类 字库型液晶显示可以分为串行方式和并行方式两种 通过引脚 PSB 进行选 择 它只有一个驱动芯片 不像 Proteus 中无字库液晶有两个驱动芯片 显 示是整体显示 而不是左右屏的显示 LCD 结构图如上所示 实验十 综合实验 5 这类 LCD 的引脚如上图所示 本次实验所用的是周立功的实验箱 其本次实验所用的是周立功的实验箱 其 LCDLCD 管脚内部已经固定连接好了 管脚内部已经固定连接好了 并运用并行的方式 并运用并行的方式 从图中可以看出 LCD12864 的输入管件有 14 个 其中 D0 D7 直接与单片机 的 P0 口相连 D I 管脚为数据 命令判断管脚 R W 管脚为读 写判断管脚 E 为用于锁存数据与指令使能管脚 CS1 CS2 为 LCD 左右屏片选管脚 RST 为复 位管脚且低电平有效 LCD 显示屏主要有以下几种操作 读信号 写信号 读数据 写数据 这 里的数据为显示缓冲区中的数据 其中在这里实验里主要使用的是读信号 写 信号 写数据这三种操作 其对端口的输入要求如下 操作 R WD IE 读指令 101 写指令 00 下降沿 读数据 01 下降沿 LCD 的显示原理 实验十 综合实验 6 LCD 指令中有开显示指令和关显示指令 LCD 显示与否受控于这个软件控制 开关 需要显示时向 LCD 中写入开显示指令即可开显示 也可以通过指令关闭 LCD 显示 因此实际应用中只需将待显示的内容写入显示缓冲区 DDRAM 后 打 开显示开关即可 显示缓冲区地址与内容关系如下 行地址 X 称为页地址 列地址 Y 具有地址计数器 在读写数据后有自动加一功能 从而指向下一个 DDRAM 显示器常用的指令码如下 D7D6D5D4D3D2D1D0 功能描述 00111111 开显示 00111110 关显示 11 设置显示起始行 0 63 指定显示屏从 DDRAM 哪一行开始显示 101110 7 设置页地址 01 0 63 设置列地址 实验十 综合实验 7 实验设计实验设计 一 电原理图一 电原理图 实验十 综合实验 8 二 实验流程图二 实验流程图 因为这个实验中设计的模块比较多 故分模块进行流程图表示 其中 AD 芯 片驱动以及延时模块比较简单不做涉及 主模块主模块 MAIN MAIN 实现各模块的调用 开始 调用 LCD 初始化模块 开始 调用清屏函数 调用汉字显示模块 调用边框显示模块 调用数据处理波形并显示波形 调用显示被测波形幅值模块 结束 实验十 综合实验 9 LCDLCD 初始化模块 初始化模块 该模块包含 LCD INIT LCD CMD 写命令函数 LCD WRITE 写数据函数 BUSY 检查是否处于忙状态函数 SCREEN CHOOSE LCD 屏幕选择函数 CLEAN SCREEN 清屏函数 汉字显示模块 汉字显示模块 汉字显示中用的行列 与单字节显示中所用的行列不同 单字节中的行列 为具体的存储单元位置 汉字显示模块中的行列为 16 16 的一个汉字显示区域 在 128 64 的点阵中的 位置 YES 输入汉字显示所在的行 列 以及字符库中显示汉字的位置 根据输入的汉字所在位置 确 定汉字存储的首字节的地址 根据输入的行地址 确定实际 字节显示的行地址 根据输入的列地址 确定实际 字节显示的列地址 向 LCD 输入行列地址 向 LCD 输入数据 是否输入 16 次 行地址加 1 列地址复原 再 操作一遍 NO YES RST 置位 开启 LCD 等待 5ms LCD 预热 输入开显示命令 3FH 设置初始显示行 设置初始存储行地址 设置初始存储列地址 调用指 令输入 函数 判断 LCD 忙 NO RS RW 清零 对 P0 传输命令 EN 复位等待几个周 期后置位 命令传输 完成 NO YES RS 清零 RW 置位 进行读 指令 EN 先清零后置 位 读取 P0 数 据 P0 7 1 实验十 综合实验 10 单字节显示模块单字节显示模块 与汉字显示模块基本一致 为单字节显示 即依次调用写指令函数 确定 行地址和列地址 和写数据函数 边框显示模块边框显示模块 定义显示屏宽度为 90 高度为 48 即可显示 90 个采样点的数据构成的波 形 行地址从 0B8H 0BEH 列地址从第一个屏幕的 41H 7F 第二个显示屏的 40H 5CH 数据处理波形显示模块数据处理波形显示模块 该模块为示波器实验的核心模块 设计 ADC 数据采集和读取 根据外部按 键情况进行数据操作 将数据转换成波形等等 下面将把该模块中的几大重要 函数进行流程图分析 NO YES 设置输入行地址为 0B8H 列地 址为 40H 数据为 0FFH 绘制小 竖线 增加行地址 R0 减一 R0 赋值为 6 R0 0 行地址加 1 列地址为加 1 数 据为 01H 边框底部横线 屏幕 1 R0 赋值为 3EH NO YES 增加列地址 R0 减一 R0 0 余下的边框绘制 外部开关判断 Button1 UP 按下 显示波形上移 Button2 DOWN 按下 显示波形下移 大于 1 YES 小于 1 ADC 采样及处理 调用 ADC 采样函 数 MULTI 1 预采样一个值 且等待 50us fs 20kHz 取下一个采样点 在当前采样点与前一个 点之间加入其平均值 将采样点存入片外存储器中 Button3 INSERT 按下 显示波形横向变窄 采样率下降 Button4 MULTI 按下 显示波形幅度减小 实验十 综合实验 11 数据移位量计算 将 ADC 输出数据幅值给 DDATA DDATA 7FH 大于 YES 小于 DDATA 减去 7FH 7FH 减去 DDATA 将得到的结果除以 5 可以得 到需要移动的格数 根据需要移动的格数进行分类 确定该点在 LCD 中对应的行号 和在所在 byte 的数据值 根据前面所得的 数据点信息进行 波形绘制 判断当前点与前一个 点是否在同一行 YES NO 将当前点与前一点之间的空白 补上 此处需要判断当前点在 前一点的上面还是下面 通过循环补 1 移位 填 补当前点与前一点之间 的空白点 判断是否输出了 90 个点 如 果输出满了 90 个点 则返回 模块开始阶段 重新取数 实验十 综合实验 12 实验仿真结果实验仿真结果 1 方波 2 三角波 3 正弦波 实验十 综合实验 13 4 波形幅度压缩 5 波形横向压缩 实验十 综合实验 14 6 波形上移 7 波形下移 实验十 综合实验 15 8 测量输入波形幅度峰峰值 实验十 综合实验 16 9 可测波形的频率范围 fin 10Hz fin 20Hz fin 30Hz 正弦波形开始出现调制波的波形 即波幅出现正弦的轮廓 这个时候说明采样 频率小于等于被测波形频率的两倍了 也就是示波器测量波形频率的极限 这 就是没有外部存储器的单片机示波器的最大测量频率 后来经过调整代码 把采样和显示分开来 提高了采样率 因此被测波形 的频率上限就提高了 fin 1000Hz 实验十 综合实验 17 实验中遇到的困难实验中遇到的困难 在实际设计中遇到了如下问题 需要对代码进行修改 故说明如下 1 发现自己根据 LCD 原理编写的 LCD 驱动并不可行 而只有使用周立功编 写的教材中的实例才可以进行 由于周立功实验箱的原因 对于这个问题的具 体原因 我和几个同学讨论下来也不是很清楚 应该是与电路中的延时有关 因为我们对电路中的每个管脚的作用都进行了分析 分析结果是实际电路中的 A0 A1 A2 与我们设计时定义的 P1 口的输出管脚的实际作用是一样的 但是 由于在 LCD 的连接上增加了一串组合逻辑 最终可能导致了时序上的问题 2 没有能够成功的使用片外存储器 读取到的变量均为 0FFH 在使用在 线 debug 模式调整时 观察到 Xdata 中没有能够写入需要存储的数据 在经过 和实验老师的交流后 确认了实验箱是没有外部数据存储器的 所以在对 AD 转 换的实验流程和代码需要更改 这样的修改造成了采样频率的极端下降 因为 每次要 AD 采样一个点以后 要经过数据处理及显示 以及波形圆滑判断后才能 继续下一个点的采样 所以 由于没有外部存储器 使得采样频率变得很低 不过这完全不影响这个实验的功能实现 只是在实验的可拓展性上限制多了一 点 根据以上的问题 对代码进行如下修改 1 采用周立功教材的驱动 故用 C 语言对自己的代码进行重新编写 2 不采用记录 90 个数据的方法 而是每次只记录存储一个数据 并对其 进行操作和显示 这样造成的缺点是采样率会变得很低 因为对数据的 操作中有很多循环语句 而且还有要调用一列显示模块 以及波形是否 圆滑的条件判断语句 会占用很多的运行时间 从而造成采样率低下 但就一开始的设计目标而言 并不会有影响 只是减少了这个设计的可 拓展性 使得频率测量的范围缩小了很多 3 对实验数据处理框图进行了修改 如下 实验十 综合实验 18 按键判断 U UP P键键为为0 0 L Le ev ve el l 则则使使波波形形向向上上移移动动 D DO OW WN N键键为为0 0 L Le ev ve el l 则则使使波波形形向向下下移移动动 L LE EN NG GT TH H为为0 0 i in ns se er rt t 则则使使采采样样频频率率减减小小 横横向向压压缩缩波波形形 M MU UL LT TI I为为0 0 m mu ul lt ti i 则则纵纵向向压压缩缩波波形形 采样数据缩小映射并调整为显示的行坐标 清除该列点坐标数据 调用adc模块 获得一个采样点的值 UP DOWN LENGTH MULTI键是否按下 判断该点是否与前一个点同一行 判断该列点是否在前一列之下 判断是否为第一列 Y N 若数据超过原有的最大值或者低于原有的 最小值 更新数据的最大值和最小值 调用显示点函数 显示该点 显示该点 并更新前一列坐标值 显示该点 把该点的行信息更新到前一列行值中 判断该列点是否在前一列之上 Y N N 调用画线函数 显示该点到前一列行坐标值 调用画线函数 显示该点到前一列行坐标值 Y Y N N Y 调用显示峰峰值模块 4 后来由于内部数据存储器所剩空间不多 为了想要提高采样率 提高对 于测量波形频率上限的提高 遂利用剩下的 60 个 Byte 的数据存储器字 节空间 形成一个数组 把每次采样的点存入这个数组中 在由这个数 组的内容去显示 这样做的目的是可以大大提高被测波形的频率上限 从原来的 30Hz 到现在的 1000Hz 这样就可以把采样率提到最高 以后 如果还想要提高采样率 则必须从 AD 转换器件入手 因为 AD 的转换速 度是限制采样率的主要因素 不过这样做会有限制 就是单片机为数不 多的内部存储器很小 知道导致一次采样 60 个点 没有把 LCD 的屏填 实验十 综合实验 19 满 因此这样显示的宽度就不是很宽 所以如果有外部存储器 则可以 把每次采样的数据存入外部存储器 这样就没有宽度上的限制了 5 后来经过改进又加入了一些功能按键 如下所示 sbit UP P2 0 增加 波形上移 sbit DOWN P2 1 减少 波形下移 sbit LENGTH P2 2 波形横向压缩 sbit LENGTH P2 3 波形横向拉伸 sbit MULTI P2 4 幅值变小 sbit MULTI P2 5 幅值变大 sbit LENGTH P2 6 波形大幅横向压缩 针对低频率波形 sbit STOP P2 7 暂停 三 实验代码三 实验代码 由于程序过长 在实验之前设计的由于程序过长 在实验之前设计的 C C 程序代码在前面就不写出来了 下面是最程序代码在前面就不写出来了 下面是最 后经过实验调试过后的后经过实验调试过后的 C C 语言程序代码 语言程序代码 C C 语言代码设计语言代码设计 主要文件有 头文件 config h 配置文件 定义变量 adc h adc 函数头文件 LCM DRIVE h 驱动函数头文件 C 语言文件 adc c adc 驱动函数 LCM DISP c 主函数 实现了汇编语言中汉字显示 方框绘制 波形处理及显示等功能 LCM DRIVE c 驱动函数文件 实验十 综合实验 20 config h config h 文件名 CONFIG H 功能 配置文件 用于 LCM DISP 项目 目的在于方便项目管理 说明 所有项目 C 程序文件包含此头文件即可 ifndef CONFIG H define CONFIG H ifndefuint8 defineuint8unsigned char endif ifndefuint16 defineuint16unsigned int endif 定义 LCM 像素数宏 define LCM XMAX128 define LCM YMAX64 包含头文件 include include include LCM DRIVE H endif adc h adc h 定义函数定义函数 adc adc ifndef ifndef ADC HADC H define define ADC HADC H externextern uint8uint8 adc void adc void LCM DRIVE h LCM DRIVE h 该函数为周立功教程中的函数该函数为周立功教程中的函数 文件名 LCM DRIVE H 功能 图形液晶 TG12864B 2 驱动程序 头文件 实验十 综合实验 21 ifndef LCMDRIVE H define LCMDRIVE H 定义 LCM 操作地址 defineLCMCS1W COM uint8 volatile xdata 0 x2004 defineLCMCS1W DAT uint8 volatile xdata 0 x2005 defineLCMCS2W COM uint8 volatile xdata 0 x2000 defineLCMCS2W DAT uint8 volatile xdata 0 x2001 定义 LCM 操作的命令字 defineLCM DISPON0 x3f 打开 LCM 显示 define LCM STARTROW0 xc0 显示起始行 0 可以用 LCM STARTROW x 设置起始行 x 64 defineLCM ADDRSTRY0 xb8 页起始地址 可以用 LCM ADDRSTRX x 设置当前页 即行 x 8 defineLCM ADDRSTRX0 x40 列起始地址 可以用 LCM ADDRSTRY x 设置当前列 即更 x 64 定义宏函数 define LCM DispClr LCM DispFill 0 x00 清屏函数 清屏后设置显示起始行为 0 extern uint8 xdata disp buf LCM YMAX 8 LCM XMAX 名称 LCM DispIni 功能 LCM 显示初始化 入口参数 无 出口参数 无 注 初化显示后 清屏并设置显示起始行为 0 extern void LCM DispIni void 名称 LCM WriteByte 功能 向指定点写数据 一字节 入口参数 x x 坐标值 0 127 y y 坐标值 0 63 wrdata 所要写的数据 出口参数 无 实验十 综合实验 22 extern void LCM WriteByte uint8 x uint8 y uint8 wrdata uint8 screen 名称 LCM DispFill 功能 向显示屏填充数据 入口参数 filldata 要写入 LCM 的填充数据 出口参数 无 extern void LCM DispFill uint8 filldata 名称 LCM DispChar 功能 指定地址显示字符 入口参数 disp cyy 值 0 7 disp cxY 值 0 15 dispdata所要显示的字符 ASCII 码 注 支持显示字符 0 9 A Z a z 及空格 字符显示模式为 5 7 模为 8 8 所以 屏幕显示为 8 16 共 8 行 每行 16 个字符 extern void LCM DispChar uint8 disp cy uint8 disp cx char dispdata 名称 LCM DispStr 功能 字符串显示输出 入口参数 disp cy X 值 0 7 disp cx Y 值 0 15 disp str字串指针 出口参数 无 注 支持显示字符 0 9 A Z a z 及空格 字符显示格式为 5 7 模为 8 8 所以屏幕显示 为 8 16 共 8 行 每行 16 个字符 extern void LCM DispStr uint8 disp cy uint8 disp cx char disp str endif 实验十 综合实验 23 C C 语言函数 语言函数 adc c adc c ADC REF 连基准源的 5V 通过可调电阻调整 CLK DAT 和 CS 分别连 P11 P12 和 P13 信号发生源 的输出连 ANIN include CONFIG H sbit csadc P1 3 sbit dat P1 2 sbit clk P1 1 uint8 adc uint8 e b b 0 clk 0 csadc 0 for e 0 e 8 e clk 1 b b 1 dat 将 adc 输出数据移位传输进 b clk 0 csadc 1 clk 1 return b LCM DRIVE c LCM DRIVE c 文件名 LCM DRIVE C 功能 图形液晶 TG12864B 2 驱动程序 说明 在 LCM DRIVE H 文件中定义了 LCM 操作地址 左半屏的写命令操作地址为 2004H 写 数据操作地址为 2005H 右半屏的写命令操作地址为 2000H 写数据操作地址为 2001H 由于 GRAPHICS C 中使用了 disp buf 作为作图缓冲区 所以 LCM WriteByte LCM DispFill 均要更新 disp buf include CONFIG H 实验十 综合实验 24 LCM 复位控制脚定义 sbit LCM RST P1 0 名称 LCM Wr1Command 功能 写命令子程序 所选屏为左半屏 CS1 入口参数 command 要写入 LCM 的命令字 defineLCM Wr1Command command LCMCS1W COM command 名称 LCM Wr2Command 功能 写命令子程序 所选屏为右半屏 CS2 入口参数 command 要写入 LCM 的命令字 defineLCM Wr2Command command LCMCS2W COM command 名称 LCM Wr1Data 功能 写数据子程序 所选屏为左半屏 CS1 入口参数 wrdata 要写入 LCM 的数据 define LCM Wr1Data wrdata LCMCS1W DAT wrdata 名称 LCM Wr2Data 功能 写数据子程序 所选屏为右半屏 CS2 入口参数 wrdata 要写入 LCM 的数据 define LCM Wr2Data wrdata LCMCS2W DAT wrdata 名称 LCM DispIni 功能 LCM 显示初始化 使能显示 设置显示起始行为 0 并清屏 入口参数 无 出口参数 无 void LCM DispIni void 实验十 综合实验 25 uint16 i LCM RST 0 复位驱动芯片 for i 0 i 500 i LCM RST 1 LCM Wr1Command LCM DISPON 打开显示 LCM Wr1Command LCM STARTROW 设置显示起始行为 0 LCM Wr2Command LCM DISPON LCM Wr2Command LCM STARTROW LCM DispClr 清屏 LCM Wr1Command LCM ADDRSTRY 0 设置页 行 地址 LCM Wr1Command LCM ADDRSTRX 0 设置列地址 即列 LCM Wr2Command LCM ADDRSTRY 0 LCM Wr2Command LCM ADDRSTRX 0 名称 LCM WriteByte 功能 向指定点写数据 一字节 入口参数 x x 坐标值 0 127 y y 坐标值 0 63 wrdata所要写的数据 出口参数 无 说明 会更新 disp buf 相应存储单元 说明说明 对该函数进行修改以适应自己编写的对该函数进行修改以适应自己编写的 C C 语言的程序要求 输入变量与之前汇编语言中一样 为实际的语言的程序要求 输入变量与之前汇编语言中一样 为实际的 页号和列号 而不是之前周立功教程中的无偏移地址的具体的行号和列号 页号和列号 而不是之前周立功教程中的无偏移地址的具体的行号和列号 同时在实验中发现屏幕有闪烁的情况 所以在程序中增加同时在实验中发现屏幕有闪烁的情况 所以在程序中增加 forfor 语句来实现延时 语句来实现延时 voidvoid LCM WriteByte uint8LCM WriteByte uint8 x x uint8uint8 y y uint8uint8 wrdata wrdata uint8uint8 screen screen intint j j disp buf y x disp buf y x wrdata wrdata if screen 1 if screen 1 选择液晶控制芯片选择液晶控制芯片 即即 CS1 CS1 控制前控制前 6464 个点 个点 CS2 CS2 控制后控制后 6464 个个 实验十 综合实验 26 点点 LCM Wr1Command x LCM Wr1Command x 设置当前设置当前列地址 即列地址 即 x x 坐标坐标 forfor j 0 j 10 j j 0 j 10 j LCM Wr1Command y LCM Wr1Command y 设置当前设置当前页地址 即页地址 即 y y 坐标坐标 forfor j 0 j 10 j j 0 j 10 j for j 0 for j 0 j 5 j 5 j j 短延时短延时 LCM Wr1Data wrdata LCM Wr1Data wrdata forfor j 0 j 10 j j 0 j 10 j elseelse 调整调整 x x 变量值变量值 LCM Wr2Command x LCM Wr2Command x forfor j 0 j 10 j j 0 j 10 j LCM Wr2Command y LCM Wr2Command y forfor j 0 j 10 j j 0 j 10 j for j 0 for j 0 j 5 j 5 j j LCM Wr2Data wrdata LCM Wr2Data wrdata forfor j 0 j 10 j j 0 j 10 j 名称 LCM DispFill 功能 向显示屏填充数据 入口参数 filldata 要写入 LCM 的填充数据 出口参数 无 说明 会更新 disp buf 相应存储单元 void LCM DispFill uint8 filldata uint8 x y LCM Wr1Command LCM STARTROW 设置显示起始行为 0 LCM Wr2Command LCM STARTROW 实验十 综合实验 27 for y 0 y 8 y LCM Wr1Command LCM ADDRSTRY y 设置页 行 地址 LCM Wr1Command LCM ADDRSTRX 设置列地址 LCM Wr2Command LCM ADDRSTRY y LCM Wr2Command LCM ADDRSTRX for x 0 x 0 0 delaynodelayno for ifor i 0 0 i i 1000 1000 i i voidvoid display byte display byte LCM WriteByte col LCM WriteByte col pag pag ddata ddata screen screen 单字节显示单字节显示 voidvoid display pageclmbyte unsigneddisplay pageclmbyte unsigned charchar page page unsignedunsigned charchar clm clm unsignedunsigned charchar wdata wdata if clm 64 if clm 64 LCM WriteByte 0 x40 clm 0 xb8 page wdata 1 LCM WriteByte 0 x40 clm 0 xb8 page wdata 1 elseelse clm clm 64 clm clm 64 LCM WriteByte 0 x40 clm 0 xb8 page wdata 2 LCM WriteByte 0 x40 clm 0 xb8 page wdata 2 实验十 综合实验 30 给出行列坐标 显示一个点 每一列在同一页内只能显示一个点 给出行列坐标 显示一个点 每一列在同一页内只能显示一个点 voidvoid display dot unsigneddisplay dot unsigned charchar hang hang unsignedunsigned charchar lie lie unsignedunsigned charchar i wdata page i wdata page i hang 8 i hang 8 wdata 1 i wdata 1 3 page hang 3 display pageclmbyte page lie wdata display pageclmbyte page lie wdata 给出行起始和终止坐标 列坐标 画竖线给出行起始和终止坐标 列坐标 画竖线 voidvoid display line unsigneddisplay line unsigned charchar hang0 hang0 unsignedunsigned charchar hang hang unsignedunsigned charchar lie lie unsignedunsigned charchar page0 page i j wdata 0 wei0 wei page0 page i j wdata 0 wei0 wei page0 hang0 8 page0 hang0 8 page hang 8 page hang 8 wei0 hang0 8 wei0 hang0 8 wei hang 8 wei hang 8 j page page0 j page page0 if page0 page if page0 page 同页内同页内 for wei0 wei wei0 for wei0 wei wei0 wdata 0 x01 wei0 wdata 0 x01 page0 if page page0 相邻页相邻页 不同页不同页 for wei0 7 wei0 for wei0 7 wei0 wdata 1 wei0 wdata 1 wei0 display pageclmbyte page0 lie wdata display pageclmbyte page0 lie wdata wdata 0 wdata 0 for i 0 i j 1 i for i 0 i j 1 i display pageclmbyte page0 1 i lie 0 xff display pageclmbyte page0 1 i lie 0 xff for wei0 0 wei0 wei wei0 for wei0 0 wei0 wei wei0 wdata 1 wei0 wdata 1 wei0 display pageclmbyte page lie wdata display pageclmbyte page lie wdata voidvoid display SBQ display SBQ uintuint k l r k l r l 0 xb8 l 0 xb8 实验十 综合实验 31 screen 2 screen 2 for k 0 k 3 k for k 0 k 3 k 显示三个字显示三个字 pag l pag l col 0 x70 col 0 x70 for r 0 r 16 r for r 0 r 16 r 显示上半个字的显示上半个字的 1616 个字节个字节 ddata table 2 r 32 k ddata table 2 r 32 k display byte display byte col col pag l 0 x01 pag l 0 x01 显示下半个字显示下半个字 col 0 x70 col 0 x70 for r 0 r 16 r for r 0 r 16 r 显示下半个字的显示下半个字的 1616 个字节个字节 ddata table 2 r 1 32 k ddata table 2 r 1 32 k display byte display byte col col l l 0 x02 l l 0 x02 voidvoid display FFZ display FFZ uintuint k l r k l r l 0 xb8 l 0 xb8 screen 2 screen 2 for k 0 k 3 k for k 0 k 3 k 显示三个字显示三个字 pag l pag l col 0 x60 col 0 x60 for r 0 r 16 r for r 0 r 16 r 显示上半个字的显示上半个字的 1616 个字节个字节 ddata table1 2 r 32 k ddata table1 2 r 32 k display byte display byte col col pag l 0 x01 pag l 0 x01 显示下半个字显示下半个字 col 0 x60 col 0 x60 for r 0 r 16 r for r 0 r 16 r 显示下半个字的显示下半个字的 1616 个字节个字节 实验十 综合实验 32 ddata table1 2 r 1 32 k ddata table1 2 r 1 32 k display byte display byte col col l l 0 x02 l l 0 x02 voidvoid display frame display frame 显示方框显示方框 screen 1 screen 1 col 0 x40 col 0 x40 for pag 0 xb8 pag 0 xbf pag for pag 0 xb8 pag 0 xbf pag 显示左边的竖线显示左边的竖线 ddata 0 xff ddata 0 xff display byte display byte pag 0 xb8 pag 0 xb8 for col 0 x40 col 0 x7d col for col 0 x40 col 0 x7d col 显示左屏幕方框上方实线显示左屏幕方框上方实线 ddata 0 x80 ddata 0 x80 display byte display byte pag 0 xbf pag 0 xbf for col 0 x40 col 0 x7d col for col 0 x40 col 0 x7d col 显示左屏幕方框下方实线显示左屏幕方框下方实线 ddata 0 x01 ddata 0 x01 display byte display byte col 0 x7d col 0 x7d for pag 0 xb9 pag 0 xbe pag for pag 0 xb9 pag 0 xbe pag 显示右屏幕右侧实线显示右屏幕右侧实线 ddata 0 xff ddata 0 xff display byte display byte voidvoid refresh refresh 对于当前点所在行进行清空 刷行对于当前点所在行进行清空 刷行 实验十 综合实验 33 ucharuchar i j i j for i 1 i 7 i for i 1 i 7 i for j 1 j 91 j for j 1 j 91 j 将示波器方框中内容清空将示波器方框中内容清空 display pageclmbyte i j 0 x00 display pageclmbyte i j 0 x00 voidvoid refresh1 unsignedrefresh1 unsigned charchar lie lie ucharuchar i i for i 1 i 7 i for i 1 i 7 i display pageclmbyte i lie 0 x00 display pageclmbyte i lie 0 x00 voidvoid display fengfengzhi unsigneddisplay fengfengzhi unsigned charchar dmax unsigneddmax unsigned charchar dmin dmin floatfloat Vdis Vref 0 0193 Vdis Vref 0 0193 单位参考电压值单位参考电压值 输入的参考电压值输入的参考电压值 256 256 ucharuchar V1 V2 V3 j V1 V2 V3 j Vdis Vref dmax dmin Vdis Vref dmax dmin V1 unsignedV1 unsigned char Vdis char Vdis Vdis 10 Vdis V1 Vdis 10 Vdis V1 V2 unsignedV2 unsigned char Vdis char Vdis V3 10 Vdis V2 V3 10 Vdis V2 screen 2 screen 2 pag 0 xBE pag 0 xBE for col 0 x5D j 0 col 0 x64 col j for col 0 x5D j 0 col 0 x64 col j 显示峰峰值 个位显示峰峰值 个位 ddata number V1 16 j ddata number V1 16 j display byte display byte pag 0 xBF pag 0 xBF for col 0 x5D j 8 col 0 x64 col j for col 0 x5D j 8 col 0 x64 col j ddata number V1 16 j ddata number V1 16 j display byte display byte display dot 62 101 display dot 62 101 显示小数点显示小数点 pag 0 xbe pag 0 xbe for col 0 x66 j 0 col 0 x6D col j for col 0 x66 j 0 col 0 x6D col j 显示峰峰值 十分位显示峰峰值 十分位 实验十 综合实验 34 ddata number V2 16 j ddata number V2 16 j display byte display byte pag 0 xBF pag 0 xBF for col 0 x66 j 8 col 0 x6D col j for col 0 x66 j 8 col 0 x6D col j ddata number V2 16 j ddata number V2 16 j display byte display byte pag 0 xbe pag 0 xbe for col 0 x6E j 0 col 0 x76 col j for col 0 x6E j 0 col 0 x76 col j 显示峰峰值 百分位显示峰峰值 百分位 ddata number V3 16 j ddata number V3 16 j display byte display byte pag 0 xBF pag 0 xBF for col 0 x6E j 8 col 0 x76 col j for col 0 x6E j 8 col 0 x76 col j ddata number V3 16 j ddata number V3 16 j display byte display byte pag 0 xbe pag 0 xbe for col 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论