预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

MSP430F413单片机段式LCD设计中遇到的晶振、LCD驱动等问题 2011-08-1117:40 这次设计所用到的微控制器为德州仪器(TI)的16位单片机MSP430F413。 单从价格上面来说,这个是单片机也算是TI里面的最便宜的可以直接驱动段式96段LCD的单片机了,当时设计之初也是奔着价位而来的, 由于在工作中用到过MSP430单片机做过低功耗类的产品,所以对单片机的外围以及硬件结构还是略知一二的。 相对于stc单片机的开发工具来说430的开发工具也只是个JTAG接口,但是这个接口的价格嘛也得60元左右,由于以前做过MSP430的项目,所以开发工具是现成的! 好了,言归正传,这次所用的LCD是淘宝上买的,详细资料如图所示: 是个四位的lcd,以前确实没有接触过段式LCD,数码管倒是接触的不少,所以自己由好奇心的趋势,自己就做了一块开发板,想试试LCD的感觉。 首先开发板打样回来之后,元器件焊好,随便写了个定时器的程序进去,发现程序在10秒钟之内是运行正常的(此时还没有安装LCD,只是个指示灯在跑),不过也有偶尔程序不运行的情况,后来自己就找原因; 1、mcu焊接不好? 2、复位电路焊接不好? 3、晶振焊接不好? 逐一排查,发现前两项是很正常的,虽然PQFP的封装还是焊接的不多,但是自己的焊功还是过的去的,于是就找晶振的问题。 但是如果是晶振自身的问题的话,可能就不起振或者起振频率不对,以至于系统根本就无法定时启动。 所以疑点越来越在晶振上面,后来发现晶振自身是没有问题的,主要是原因是因为晶振的管脚焊接位置距离单片机的XINXOUT管脚的距离着实有点远,大概20mm的样子,加上线走的比较细0.26mm,所以晶振启动异常,或者有时候根本不起振。 问题处在第3了。 没有办法只好用刻刀将晶振的线从单片机管脚出来大概3mm的地方划断,剥去丝印层,露出黄铜线,将晶振管脚直接焊接在黄铜线上,然后用硅胶枪将晶振和单片机封好,就是下面的样子(很丑但是很温柔)! 凑合着先用一下,等实验好了的话,如果有需要就重新打样了。 将晶振如此这般之后,总算定时器稳定的工作在理想状态了,接下里就是总结经验和教训了,单片机的晶振在设计的时候一定要首先定位,确定晶振和单片机管脚之间的有效距离,确保晶振的稳定可靠运行,这个小家伙是关键啊! 接下来就是LCD了! 段式LCD的驱动方法基本上和数码管是不太一样的,数码管只要给电和选通就亮。 但是段式LCD的驱动是靠两部分组成的 一部分是不间断的电压脉冲, 这个电压脉冲还是被分为好几个电压等级了,如果你用的是1/4duty1/3偏压的话,那么就要有四个电压等级。也就是VCC---2/3VCC----1/3VCC-----GND这几个电压等级直接可以用电阻进行分压得到,然后直接和413单片机的R03---GND,R13----1/3VCC,,R23---2/3VCCR33---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位数,先不说要显示的内容是什么,这里的位选应该是LCDMEM[1],因为是从0开始的,所以第二位应该是LCDMEM[1].(从091H