ImageVerifierCode 换一换
格式:DOC , 页数:4 ,大小:53KB ,
资源ID:3175616      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3175616.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机如何根据LCD时序图来写底层驱动.doc)为本站会员(sk****8)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

单片机如何根据LCD时序图来写底层驱动.doc

1、一般来说,LCD 模块的控制都是通过 MCU 对 LCD 模块的内部寄存器、显存进行操作来最终完成的;在此我们设计了三个基本的时序控制程序,分别是: 写寄存器函数(LCD_RegWrite) 数据写函数(LCD_DataWrite) 数据读函数(LCD_DataRead) 这三个函数需要严格的按照 LCD 所要求的时序来编写,下面可以看看 MzL02 模块时序图:图 3.2 MzL02 模块的 6800 时序示意注意:上图是该模块的控制 IC 资料中的原版时序图,其实有些示意不是太稳妥(少标出了 RW 线信号的要求),或者说是不太严谨,不过这些不作讨论,请看分析即可;而 EP 的有效触发沿在图

2、中很有可能示意有误,实测为上升沿。图中 CS1B(CS2)的信号即为片选 CS,RS 即为数据/寄存器的选择端口 A0 信号,E 为 EP;当作写入寄存器数据操作时,首先要将 A0 置低,以通知 LCD 模块即将进行的是对寄存器的操作;而 RW 线需要置低,以示即将要进行的是写入的操作;然后片选 CS 信号置低,装载数据至总线,然后在 EP 线上产生一个上升沿以触发 LCD 模块将总线上的数据最终载入;在前面的操作完成后一般都会将各个信号线的状态恢复。而数据(显存)写入、数据读出的操作时序也比较类似,这里就不多作介绍,直接参考例程即可。/=/ 函数: void LCD_RegWrite(uns

3、igned char Command)/ 描述: 写一个字节的数据至 LCD 中的控制寄存器当中 / 参数: Command 写入的数据,低八位有效(byte) / 返回: 无 /=void LCD_RegWrite(unsigned char Command) LCD_A0 = 0; /A0 置低,示意进行寄存器操作 LCD_RW = 0; /RW 置低,示意进行写入操作 LCD_EP = 0; /EP 先置低,以便后面产生跳变沿 LCD_CS = 0; /片选 CS 置低DAT_PORT = Command; /装载数据置总线 LCD_EP = 1; /产生有效的跳变沿 LCD_CS =

4、1; /片选置高 数据写入以及读出的函数源码如下: /= / 函数: void LCD_DataWrite(unsigned char Dat) / 描述: 写一个字节的显示数据至 LCD 中的显示缓冲 RAM 当中 / 参数: Data 写入的数据 / 返回: 无/=void LCD_DataWrite(unsigned char Dat) LCD_A0 = 1; /A0 置高,示意进行显存数据操作 LCD_RW = 0; /RW 置低,示意进行写入操作 LCD_EP = 0; /EP 先置低,以便后面产生跳变沿 LCD_CS = 0; /片选 CS 置低 DAT_PORT = Dat; /

5、装载数据置总线 LCD_EP = 1; /产生有效的跳变沿 LCD_CS = 1; /片选置高 /= / 函数: unsigned char LCD_DataRead(void) / 描述: 从 LCD 中的显示缓冲 RAM 当中读一个字节的显示数据 / 参数: 无 / 返回: 读出的数据, /= unsigned char LCD_DataRead(void) unsigned char Read_Data; DAT_PORT = 0xff; /51 的端口想要输入前,要先给端口全置 1 LCD_A0 = 1; /A0 置高,示意进行显存数据操作 LCD_RW = 1; /RW 置高,示意进

6、行读出操作 LCD_EP = 0; /EP 先置低,以便后面产生跳变沿 LCD_CS = 0; /片选 CS 置低 LCD_EP = 1; /产生有效的跳变沿 LCD_EP = 0; Read_Data = DAT_PORT; /读出数据 LCD_CS = 1; /片选置高return Read_Data; /返回读到的数据 以上便是要介绍的最基本的时序操作程序,它们几乎是整个 LCD 驱动程序当中与底层硬件打交道的代码了,这样的话,当要改变驱动 LCD 的 MCU 端口时或者换用别的 MCU 来驱动 LCD 时,基本上只需要在这些代码里作一下修改即可。关于读 LCD 状态而在一般的 LCD

7、模块当中,还有一个功能同样重要,就是读 LCD 状态;可以通过此操作获取当前 LCD 模块的忙状态以及一些相关的状态信息,当 LCD 模块正处于忙状态时,则不宜对它进行数据的写入或读出操作(有很多较老式的 LCD 控制器规定在忙的状态下时不允许写入或读出数据)。所以在很多 LCD 的驱动程序当中,会在寄存器写入、数据写入/读出的操作前加入读取 LCD 状态并判别忙状态的代码;这点可以参考网上流传的很多 LCD 驱动程序。不过,对于 MzL02 这样的较新出的 LCD 控制器来说,已经对忙状态不是很在乎了,或者说影响已经很小甚至没有了;所以我们在前面的代码当中并没有加入这样的代码。至于有没有必要

8、加读状态判忙的代码,要视具体的 LCD 控制器而定。关于时序的时间要求时序的一个非常重要的数据就是类似上图中标出的 tAS88 之类的时间长短要求,只是上图中并没有标出它们的具体最大最小值要求而已;但在编写这类的时序接口程序时它们还是非常重要的,当然还要看 MCU 的端口操作速度以及 MCU 的指令执行速度。打个比方,有的时序里就会有要求某些信号的电平保持最小宽度,而如果 MCU 的指令执行速度以及端口操作速度非常快的话,就需要酌情在连续操作端口的代码之间加入适量的延时(通用用空操作来代替,具体多少个多少时长视具体的 MCU 以及 LCD 控制器而定)以保证该信号的脉冲宽度满足要求。在本文的所列出的源代码当中,并没有如前所述的为时序的要求而插入空操作或延时处理,因为 MCU 的速度并不是非常快,况且现在的 LCD 控制器的总线速度都挺快的了,没有必要加入而已。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。