段式液晶显示方法.doc_第1页
段式液晶显示方法.doc_第2页
段式液晶显示方法.doc_第3页
段式液晶显示方法.doc_第4页
段式液晶显示方法.doc_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

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

文档简介

MSP430F413单片机 段式LCD设计 中遇到的晶振、LCD驱动等问题 2011-08-11 17:40这次设计所用到的微控制器为 德州仪器(TI)的16位单片机 MSP430F413。单从价格上面来说,这个是单片机也算是TI里面的最便宜的 可以直接驱动段式96段 LCD 的单片机了,当时设计之初也是奔着价位而来的,由于在工作中用到过MSP430单片机做过低功耗类的产品,所以对单片机的外围以及硬件结构还是略知一二的。相对于stc单片机的开发工具来说 430的开发工具也只是个JTAG接口,但是这个接口的价格嘛也得60元左右,由于以前做过MSP430的项目,所以开发工具是现成的!好了,言归正传,这次所用的LCD是淘宝上买的,详细资料如图所示:是个四位的 lcd, 以前确实没有接触过段式LCD ,数码管倒是接触的不少,所以自己由好奇心的趋势,自己就做了一块开发板,想试试LCD的感觉。首先开发板打样回来之后,元器件焊好,随便写了个定时器的程序进去,发现程序在10秒钟之内是运行正常的(此时还没有安装LCD,只是个指示灯在跑),不过也有偶尔程序不运行的情况,后来自己就找原因;1、mcu焊接不好?2、复位电路焊接不好?3、晶振焊接不好?逐一排查,发现前两项是很正常的,虽然PQFP的封装还是焊接的不多,但是自己的焊功还是过的去的 ,于是就找晶振的问题。但是如果是晶振自身的问题的话,可能就不起振或者起振频率不对,以至于系统根本就无法定时启动。所以疑点越来越在晶振上面,后来发现晶振自身是没有问题的,主要是原因是因为晶振的管脚焊接位置 距离单片机的 XIN XOUT 管脚的距离着实有点远,大概20mm的样子,加上线走的比较细 0.26mm,所以晶振启动异常,或者有时候根本不起振。问题处在第3了。 没有办法只好用刻刀将晶振的线从单片机管脚出来大概3mm的地方划断,剥去丝印层,露出黄铜线,将晶振管脚直接焊接在黄铜线上,然后用硅胶枪将晶振和单片机封好,就是下面的样子 (很丑但是很温柔)!凑合着先用一下,等实验好了的话,如果有需要就重新打样了。将晶振如此这般之后,总算定时器稳定的工作在理想状态了,接下里就是总结经验和教训了,单片机的晶振在设计的时候一定要首先 定位,确定晶振和单片机管脚之间的有效距离,确保晶振的稳定可靠运行,这个小家伙是关键啊 !接下来就是LCD 了!段式LCD的驱动方法基本上和数码管是不太一样的,数码管只要给电和选通就亮。但是段式LCD的驱动是靠两部分组成的 一部分是 不间断的 电压脉冲, 这个电压脉冲还是被分为好几个电压等级了,如果你用的是 1/4 duty 1/3偏压的话,那么就要有四个电压等级。也就是 VCC- 2/3VCC- 1/3VCC-GND 这几个电压等级直接可以用电阻进行分压得到,然后直接和 413单片机的 R03 -GND , R13-1/3 VCC , R23-2/3VCC R33-VCC 这样直接连接就可以了。这样电压等级就有了,具体在里面生成的电压等级脉冲,413是可以自己生成的,不用我们操心了。 com0-com3就这些个电压等级的输出管脚。直接连上LCD屏的COM0-COM3就可以了。另一部分是 选通管脚 选通管脚也就是LCD上面的S0-Sn,我在做板子的时候是和单片机里面的S0-Sn,直接连的 ,有几个连几个,多余的单片机IO 口直接拉出来,做外置IO口用。 那么如何来写驱动程序呢 ? 首先要搞懂每个输出管脚何时输出和输出什么,这样才能得到我们想要的字形。 于是看了资料发现,MSP430F413中配有LCD段码寄存器,就是说你只要把这些你要显示的字形(当然如果你只想显示数字的话,只用存0-9这几个字码就可以了),段码寄存器的地址是从091H开始-到0A4H 每个地址里面可以放一个8位,每一位对应于液晶上面的一段,所以说一个地址对应于液晶上面就是一个字。(一个字的段码也是8位的) 这样的话,我们只要将要显示的一个数字的编码发到这个 单片机的断码寄存器里面,就可以直接显示了,是通过com口的脉冲波形同时将寄存器里面的段进行耦合,产生压差,LCD只有产生压差才能点亮。一直提供一个不变的高电平是要烧坏液晶的,这就是和数码管区别的地方。不过这些脉冲413单片机已经帮我们做好了。 总体的步骤就是 ,我们将LCD的段码先整理好,然后放在一边备用,等到你想显示某个数据的时候,只要将这个8位的段码直接写入单片机留给你的LCD寄存器写入端口数组就可以了。 在413里面也就是 LCDMEM ; 【】中应该写的是要显示的位,这个位是数码管上面的 位置,比如你想显示液晶上面的第2位数,先不说要显示的内容是什么,这里的位选应该是 LCDMEM1, 因为是从0开始的,所以第二位应该是 LCDMEM1. (从091H开始-到0A4H 每个地址都可以存一个8段)然后说显示的内容:显示的内容的段码很关键,这个要看 你所拥有的LCD参数手册,一般都是这样的一张表:这个表给我们的信息就是, 第9和第10列 显示一个8字,第11和第12列显示一个8字.一共可以显示4个8字。至于1234列先不要去考虑,那些都是字体周围的那些个小三角符号!因为LCD段码的等级脉冲方式是从 COM0-COM3, 所以我们将这些第9和第10列的段码也要按照这个方式编码。假如我们想显示第一个8字上面的内容:即: 第一次脉冲出来 COM0 COM1 COM2 COM3, 那么寄存器里面输出来的段选也应该按照 COM0 COM1 COM2 COM3所对应的段码输出,这样才行显示出你想要的结果,那么我们在第一轮的 COM0-COM3输出时 匹配寄存器的段选应该 DP0-C0-b0-a0,第二轮的com0-com3 输出时,匹配寄存器的段选应该是 d0-e0-g0-f0 这样第一个 8字的显示才完全了,至于这个 寄存器是怎样把这些段码读并且写 出去呢?com口在启动后总是从COM0COM3 ,COM0COM3 ,COM0COM3 ,一直不停的这样脉冲着. 排序方法应该根据 com0-c0m3 的 连续输出方式排。一个8字的段码排序从高到低排,因为我两轮com0-c0m3的输出所以得这样排第二轮 第一轮com3-com2-com1-cmo0 com3-com2-com1-cmo0f0-g0-e0-d0 a0-b0-c0-dp0(小数点位)然后可以理解为 寄存器里的一个8位段码保存的段就是这样的f0-g0-e0-d0- a0-b0-c0-dp0(小数点位)到此我们如果想显示一个数字 2,我们该如何保存段码呢按照数码管的方法 应该是 显示 a,b,d,e,g 这五段。 那么对于寄存器里面的这8个段 不是按照 ABCDEFGH 来排的,怎么整呢?不要紧,显示哪一段就把哪一段 置 “1”,不显示的就 置零。那么2出来了,有高到低就是 0111 1100这里的小数点暂时不显示。 其中的 f c dp0不显示,所以写0 就可以啦!所以2的最终段码就是 7CH以此类推,你可以把 0-9的 10个段码全部写出来,然后组成一个通用的数组char tongyong10 = 0xBE, / 0 a+b+c+d+e+f 0x06, / 1 0x7C, / 2 0x5E, / 3 0xC6, / 4 0xDA, / 5 0xFA, / 6 0x0E, / 7 0xFE, / 8 0xDE / 9;到此为止 基本上的 原理是走通了,那么具体是怎么才能显示呢?想显示还要先设置,就像定时器一样,要先设置好相关的寄存器,它才会按照你的思想来运行。这些设置在各种例程里面都有,随便找一个修改一下就可以了。重点说数据的传送,当所有东西都设置好之后,你想显示一个 0,在LCD上面的第1个位置,一般我们都是从右到左的 看法。 也就是在最右边的位置显示一个 0出来,我们要做的只有两步:1. 先清屏LCDMEM0 = 0; 这个就是在第0位 不显示任何东西,清屏! 当然清屏是在要改变显示数据前清的,并不是每时每刻的在清屏! 我用一秒钟的中断定时器,实现时钟状态下每分钟清屏一次,整机功耗只有42微安! 一节600MAH的 锂电池应该能工作1年2个月左右,还是比较划算的!2,写数据 LCDMEM0 = tongyong0; 这个就是把tongyong【0】;数组中的的第一个段码0xBE,发给显示寄存器。并且显示的地址是LC

温馨提示

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

评论

0/150

提交评论