这次的DIY经过了4个阶段:
1.1602液晶显示驱动测试;
2.GPS模块与单片机的通讯测试;
3.GPS数据处理显示程序设计;
4.硬件安装调试.
1602液晶显示器的驱动调试经历一点点的波折,好在网上共享的程序不少,费了点时间也就找到适用的程序了.
而GPS模块与单片机的串行通讯则要自己来写了,好在N年前就写过类似的程序,还有串口调试助手之类的软件可以用,所以这一关也就过去了.接下来是数据处理,GPS送出的数据是ASCII字符串,每个数据字段用","隔开,若干个字段组成一个协议字符串,每个协议字符串又有一个$打头的6个字符组成一个协议标志,通过判读这个标志来区分不同的协议,这个过程看似很简单,确实如果用PC来实现的话是再容易不过的事情了,但是单片机不行,它没有什么字符串处理函数可以随意调用,而且单片机的运算速度远不如PC,如何把发过来的字符串拆分成一个一个的字段是个很要紧的事情,好在在一本书上看到了一种思路,就是对","进行计数,通过判读这个计数值来区分不同的字段,试验证明这种方法很有效,接下来的实际编程碰到了不少的问题,最后发现都是程序流程的问题,用软件仿真或者仿真器仿真一下也就可以解决了.
前天开始做安装机壳,焊接线路板,机壳是上次从江苏买的,线路板还是3毛5分一块的实验板,另外买回若干中XH2.54系列的接插件及铜柱,电源插座等等,开液晶显示的空花了不少时间,还废掉了一个小切割砂轮片;等板子插座都焊接好了,才发现机壳内部乱的不行,而且也就显示器和主板的距离挨得太近,安装比较困难,只好用砂轮打磨了一下铜柱,让两块板子距离尽量的远些,好歹把所有的东西都装进去了,放电池盒的地方也所剩无几了,索性不用电池供电了.通电测试,主板运行不起来,花了一天的时间思考这个问题,老是怀疑是晶振电路不起振,把个晶振拆了装,装了拆,好好的线路板焊片也给烫坏了,翻书找89C51的最小系统电路图,对比自己的电路似乎没有问题,但是同样的程序在开发板上是能正常运行的,问题还是出在电路上,后来看一个BLOG找到一张最小系统的电路,这才看到89C51出PSEN/VPP引脚要接VCC的,赶紧焊接好,程序马上运行正常,原来这个引脚接正电源的时候,程序要从能不ROM开始运行的,否则从外部ROM运行,我的程序全在内部,而这只引脚又是悬空的,当然运行不正常了;这里要批判一下那些所谓的单片机入门书工具书,电路图是N年前8031时代的书上抄的,程序又是运行89c51系统上的,整个书上没一点说明,真是害人不浅.
昨天下午坐上老婆的车出去测试了一下,基本正常,今天早上又换成了24M的晶体,显示器背光加了限流电阻,整机的耗电量因此下降了2/3,运行速度明显加快,至于换了晶振以后的问题就暂且不去理会了,毕竟不是很大的问题,再说这个DIY说到底还是拿来练练手的,离实用还有不少距离,那些问题就留在以后有心情的时候再解决吧.
以下是实物照片,纪念一下:
杂乱的工作台
外面
内部
|