基于MC9S12XS128多功能串口显示屏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MC9S12XS128多功能串口显示屏
【摘要】设计了一种基于MC9S12XS128多功能串口显示屏,除了完成基本的静态显示、左移、右移、上滚动、下滚动,另外添加百叶窗,打字机等特效,同时能调整移动的速率,此外独立开发基于VB的上位机。
【关键词】MC9S12XS128;串口;上位机;特效
引言
随着经济的发展与科技水平的提高,各行业逐步实现自动化,其中led电子显示屏因其亮度高,工作稳定,功耗低,寿命长等优点在信息显示领域得到了广泛的应用。
通过参阅相关的设计文档和多次仿真及实物调试,最终设计出了多功能串口显示屏。
1.系统硬件设计
本系统的硬件设计由显示控制模块、存储模块、无线通信模块和显示模块四部分组成。
其总体硬件设计框图如图1所示。
图1 系统总体硬件结构图
1.1 显示控制模块
显示控制模块包含主控模块、显示屏行驱动和列驱动。
主控模块采用MC9S12XS128核心板。
其内部总线频率最高为40M,拥有128K的FLASH,8K的RAM,同时它具有I/O、SPI、SCI、ECT、A/D、CAN 和PWM等常见的接口模块,在汽车电子领域得到广泛的应用。
显示屏行驱动由74HC154译码器构成。
要想实现逐行控制,需要译码电路。
实际上不存在5-32线译码器。
通过两片74HC154级联实现所需的效果,再将单片机的PTP0-PTP3分别接到译码器74HC154的输入端,通过给不同的值就能依次选通不同的输出端,从而得到相应的行码。
列驱动由74HC595移位寄存器组成。
考虑到S12单片机IO口数量有限,要选通64列,显然不够,故通过8个8位74HC595级联,对应的输出端接到点阵的64列。
本设计利用其串入并出的功能。
SH_CP(11脚)用于输入移位时钟脉冲,在上升沿时,移位寄存器数据移位。
DS(QS)(14脚)用于串行数据输入引脚,串行时钟由SH_CP引脚提供。
for循环通过8次移位即可完成1字节数据传送。
ST_CP(12脚)提供锁存时钟,在上升沿时移位寄存器的数据被传入存储寄存器。
1.2 存储模块
要想实现上位机控制显示,必须能将上位机输入的数据转换成相应的显示点阵代码,这就需要相应的字库软件,可将合成的字库文件存储到EEPROM中,当接受到上位机数据时,通过EEPROM中文件转化成点阵代码,再给点阵显示。
考虑到S12只有128K flash,而所需的字库bin文件就有266K,须外扩存储空间,综合考虑选用2GB的SD卡。
1.3 其他模块
无线通信模块采用主从一体的蓝牙,设定好配对方式,配对密码即同普通串口一样方便使用。
显示模块由32块8*8的单色点阵拼接成64*32的点阵。
2.系统的软件设计
系统的软件由上位机和下位机两部分组成。
上位机主要实现对下位机的控制,下位机设定好相应的处理方案。
2.1 上位机软件
上位机软件采用简单、易用的Visual Basic(VB)开发。
因为它具有可视化、面向对象、事件驱动,效率高等一系列特性,广泛地应用于帮助用户快速创建前端服务程序界面。
上位机软件的关键在于设定好Mscomm控件的相关属性如Mscomm.portopen及时关闭和打开,Rthreshold设为1才能接受到数据等,最终的界面如图2所示。
图2 上位机界面
2.2 下位机软件
下位机软件主要实现对待显示数据的转换,得到显示缓存,处理串口中断的有关信息,并将得到的信息送给相应的显示控制模块。
2.2.1 得到显示缓存
串口接收的数据不能直接显示,需要对信息处理后得到待显示的字符串,然后转换成待显示的代码后分别送给行列驱动后,才能正常显示。
本系统须得到16*16汉字点阵信息.首先应得到汉字的区位码。
在HZK16中汉字区位码与机内码的关系:Offset=(区码*94+位码)*20H.由于本系统包含汉字和字符。
需要将HZK16与ASC文件合成新的文件放入E2PROM中。
由于系统包含汉字和字符,需要将HZK16与ASC文件合成新的文件放入E2PROM中。
2.2.2 显示控制原理
点阵显示实际利用人的视觉暂留,只要刷新频率大于25HZ,人眼就无法区分。
以静态显示为例对行进行32次扫描。
在每次扫描的过程中分8次送入64位数据。
其工作原理和数码管类似。
可选用”段位段”的规则,即显示前先关闭段选,然后打开位选,最后打开段选,送出数据显示。
要想显示稳定,须控制好每次行切换的延时。
延时过短,屏幕刷新的太快,基本不显示;延时过长,每次行扫描的间隔太大,显示不理想。
点阵的动态显示实际上和静态显示没有太大区别。
只需要在静态显示的基础上,通过定时器获得偏移量,然后做相应的处理后即可。
在仿真中发现静态显示,上滚屏,下滚屏,左移,特效显示均稳定,而唯独右移过程中闪烁明显,无论怎么调延时,都会闪烁。
经对比其他效果,查阅资料和认真思考发现,应该是右移过程中计算显示数组的时间过长导致。
于是采用DEV c++计算固定部分的值放入数组中,便于右移子函数查表调用。
经验证显示稳定。
下面详细介绍静态显示、滚屏、移动、特效等显示原理。
2.2.2.1 静态显示
行扫描前先关闭段选,根据行号使能其中1片154,然后打开位选。
分4次循环送完64bit数据.送完数据后并行输出。
使能段选。
延时后继续行扫描。
实际调试过程中不是立刻就达到稳定的状态。
调试的过程中延时由短到长,逐渐增加,只有延时略大于临界值一般就会处于稳定的状态。
2.2.2.2 滚屏
在静态显示的基础上,通过定时器控制显示的偏移量,同时保证显示无拖尾,拖尾后就会乱码,须控制定时器的时间,确定待控制的偏移长度。
这个偏移长度决定着显示的内容,单位偏移长度下定时的时间决定移动的快慢。
对比静态显示发现单位时间多了128的偏移量。
向上和向下滚屏的区别仅在于选通154的顺序不同。
2.2.2.3 移动
左移是在静态显示的基础上,多了单位时间16的n倍的偏移量,n的值决定偏移n个字节。
不过右移的情况有所不同。
考虑到这里设定的右移须保证整个字符串反转后再偏移.一开始直接偏移,没有考虑到字符和汉字混排时,显示会乱码。
于是想到查找字符串中字母的位置,然后分别处理,实际操作中,出了很多错误,浪费了一些时间,后来突然想到不如整个字符串反转再平移来的简单。
这个算法的核心是先做反转函数,然后再偏移。
2.2.2.4 特效
特效显示,就是在静态显示的基础上,通过定时器控制扫描的偏移量。
一开始做特效也想像上面一样找到规律的公式。
结果发现不可行。
于是想到将特效部
分可看成不同时间进程中静态效果的叠加。
这个时间长度是确定的,不过单位长度的时间的大小决定着显示的快慢。
于是想到计算待实现的特效在不同时间进程下在64*32点阵下的显示情况,作为权重乘上静态数据。
到达特定时间长度后,值不变,转向静态显示。
以向下渐变特效为例,可以把他分解成32个不同的时间进程的画面。
第一幅画面选通的是第1行,第二幅画面选通的是第1、2两行,以后每次画面较上一次增加一次,直到第32幅画面选通全部的32行,第33幅及以后计数值保持不变,默认全部选通,当然你也可以选择其他特定值,取决于你要的效果。
2.2.3 串口处理函数
实际串口通信的过程中需要对数据打包成帧后才发送,为了简化处理。
这里的帧头“###0”,“##”用来清除缓存,“#0”,表示数据的开始,“#1”表示数据的结束。
紧接“#0”后的连续两位数字,第一个表示的显示模式,第二个表示速度。
若在中断函数中接受的数据不符合上述格式,则不做处理,保留上次显示。
图3 静态显示结果
3.系统的实现
系统开始后,一段精心设计的系统功能的演示程序,以一字符串为例,依次演示静态显示、上滚屏、下滚屏、左移、右移、盒装、打字机等特效。
功能演示程序结束后进入随机画面,等待蓝牙输入信息。
当接受到中断信息后,处理后便可执行显示要求。
其静态显示结果如图3所示。
4.总结
本文通过基于MC9S12XS128多功能串口显示屏的设计,对系统的软硬件结构体系、显示控制原理介绍。
经实际验证完成静态显示、移动、滚屏、特效等全部的预设功能,特别是将特效显示分解成不同时间进程静态效果的叠加是本文最大创新点。
参考文献
[1]彭伟.单片机C语言设计实训100例——基于8051+ Proteus仿真[D].北京:电子工业出版社,2012(10).
[2]何健.学校班级led显示屏控制系统的设计[D].南昌大学,2012(12):9.
[3]Freescale Semiconductor,Inc.MC9S12XS256 Reference Manual.
[4]王宜怀.嵌入式系统设计实战??——基于飞思卡尔S12X微控制器[D].北京:北京航空航天大学出版社,2011.
[5]邵贝贝编.单片机嵌入式应用的在线开发方法[D].北京:清华大学出版社,2004.。