O 引言
在单片机应用系统中,串行数据通信通常采用芯片8251,但因8251的通信波特率不高,不能应用于晶振较高的系统,这就使得要求高运行速度、高速收发数据的系统无法应用8251芯片收发数据,而且8251需要有8253提供外部时钟信号。MAXIM公司推出的新型UART芯片MAX3100
正好填补了这个空白。MAX3100支持高速通信,最高通信波特率可达230KBPS,低功耗,支持低电压,设计后系统体积小,比采用外部时钟8253设计的印制版尺寸的一半还小。而且能够使软件设计实现起来更可靠。
有机发光显示OLED是比液晶显示技术更为先进的新一代平板显示技术,是被业界公认为最具发展前景的下一代显示技术。有机发光显示OLED(Organic Light Emitting Display)与液晶显示技术相比,具有超轻薄、高亮度、广视角、自发光、响应速度快、适应温度范围宽、抗震强、功耗低、可实现柔软显示等优越性能,因此OLED屏正快速扩大其在便携式电子产品市场上的应用份额,能够应用于通讯、测绘、铁路以及兵器等野外恶劣环境。
1 主要工作原理
系统主要由AT89C52单片机、MAX3100通用异步收发器、GPS-OEM板、OLED显示屏等组成。AT89C52单片机通过MAX3100接收GPS-OEM板发出的NEMA语句,经过软件编程计算出定位信息(包括:纬度、经度、高度、速度、日期、时间、航向、卫星状况等)后,在OLED显示屏上显示出来。并且通过MAX3100将这些定位信息以RS232标准串口数据输出。系统电路原理图如图l所示。
2 单片机与GPS-OEM板之间的数据通信
单片机与GPS-OEM板之间的数据通信,是通过MAX3100通用异步收发器来实现的,其中单片机震荡频率选用11.0592MHz。首先用MAX232电平转换芯片,来实现RS232电平与TTL电平的双向转换,因为GPS OEM板的串口电平是符合RS232标准的电平,而MAX3100采用的是TTL电平。
MAX3100的DIN引脚为串行数据输入端,DOUT为串行数据输出端,串行时钟的上升沿锁存DIN数据,DOUT数据由串行时钟的下降沿同步输出。 MAX3100的DIN和DOUT引脚的串行数据序列都是16位数据,其中DIN数据序列的前两位表征串的数据类型。当前两位是“1,1”时,表示写命令,当前两位是“0,0”时,表示读数据,当前两位是“1,0”时,表示写数据。
对MAX3100进行初始化配置,是单片机通过写命令序列来完成的。该命令序列包括奇偶校验位、数据位、停止位、波特率设置、数据字长度、校验FIFO、中断使能等信息。MAX3100具有自己的波特率发生器,其振荡器可以用频率为1.843 2 MHZ或3.6864 MHZ的晶振。波特率由写命令序列的后4位B0~B3位决定的。
当单片机接收GPS OEM板的串口数据时,是通过读MAX3100数据序列来完成的,单片机从MAX3100读出数据时,需要在DIN写入一个16位的字(0000H),再从DOUT读入16位的字,其中的高八位是:接收/发送缓冲区的状态,数据错/溢出状态,接收/校验位状态和CTS的状态,低八位才是接收到的GPS OEM板的串口数据。
当单片机发送最终的定位数据时,是通过向MAX3100写入数据序列来完成的,单片机向MAX3100写入数据时,在DIN写入的是一个16位的字,其中高八位设置的内容是:写入标志、允许TX输出、RTS引脚设定以及传送校验位设定。低八位才是要传送的数据。
3 OLED显示屏显示定位信息
显示模块显示屏为128列、64行,有1片行驱动器和2片列驱动器,其中行驱动器有64行输出,每片列驱动器有64路输出。只要提供电源就能产生驱动信号和同步信号,模块的外部信号仅与列驱动器有关。列驱动器内置64×64位显示存储器,显示屏上各像素点显示状态与显示存储器各位数据一一对应,显示存储器的数据直接作为图形显示的驱动信号,为“1”的时候显示,为“O”的时候不显示。系统中OLED显示屏显示纬度、经度、高度、速度、日期、时间、航向、卫星状况等定位信息。
4 软件设计
4.1 看门狗中断的应用
MAX706的6脚与7脚分别与AT89C52的P1.7与复位脚相连,在软件程序中,每隔一段程序插入一个看门狗计数器复位指令,这样,在程序运行过程中,如果进入死循环或非法代码区,就会使系统复位,保证系统正常运行。
4.2 延时处理
将所要发送的数据送入发送缓冲器时,由于MAX3100要等T=1时,发送缓冲器为空,才可以接收另一个需发送的数据,所以此时加入合适的延时,是非常必要的,可以保证所发数据准确无误。
4.3 建立字库
在实现OLED显示时,先将需要显示的汉字组成一个汉字库,英文字符或阿拉伯数字组成一个西文字库。
如汉字“效”字,设置宋体12号,对应的点阵为宽×高=16×16,用取模软件横向取模对应的32字节为:{O×10,0×20,0×08,0×30,O×08,0×20,0×7F,O×20,0×14,0×7E,0×12,0×44,0×21,0×C4,O×22,0×44,O×62,0×28,O x 14,0×28,O×08,0×10,0×0C,0×10,O×12,0×28,0×20,0×CE,0×C3,0×04,O×00,0×00}。
阿拉伯数字“1”,设置宋体12号,对应的点阵为宽×高=8×16,用取模软件横向取模对应的16字节为:{0×00,0 x0o,0×00,0×10,0×70,0×10,0×10,O×10,0×10,0×10,0×10,O×10,0×10,0×7C,O×00,O×00}。
4.4 软件要点设计
软件设计的时候,有两部分关键设计,一是对串口接收到的GPS模块数据进行处理;二是将所需的定位信息在OLED显示屏上显示出来。软件流程图如图2所示
在MAX3100中定义一个8位移位的子程序,C语言代码如下:
这个子程序的任务就是通过对MAX3100的DIN和DOUT引脚进行8次移位操作,来完成两个任务,首先是接收部分,通过初始化配置后,经过RX接收GPS模块的NEMA语句,送入接收缓冲区。接下来是发送部分,接收SPI数据并进行发送缓冲,通过TX按异步串行发送出去。
接收NEMA语句时首先从行首标志“$”开始,在没有进一步处理之前,NEMA语句是一长串字节流,这些信息在经过分类提取之前是无法加以利用的,因此,必须通过软件程序将各个字段的信息从字节流中提取出来,将其转化成纬度、经度、高度、速度、日期、时间、航向、卫星状况等定位信息。其中接收NEMA语句的C语言代码如下:
在OLED显示屏上某一位置显示某一定位信息,是通过软件设置来完成的,其中Row代表所要显示位置的开始行,Column代表所要显示位置的开始列,a代表在已经建立的汉字库和西文字库中的序列号,C语言代码如下:
5 结束语
本系统结合MAX3100高效的异步收发通信优点,吸取了其功耗低、体积小、传输快以及OLED显示屏超轻薄、高亮度、广视角、自发光、响应速度快、适应温度范围宽、抗震强、功耗低等优点。设计开发出由电池供电的便携式GPS定位系统,已经成功应用到产品中,取得很好的效果。