吕倩 葛文潇 李金虎
摘 要:单片机是采用超大规模集成电路技术的微型计算机系统,现已广泛应用于各种领域。本文利用MSP430单片机、IAR和Proteus软件对多模式的花样流水灯进行设计。通过Proteus软件的仿真,系统的稳定性和正确性得到验证,且具有较强的应用价值。
关键词:MSP430;Proteus;单片机;花样流水灯
单片机作为计算机发展的一个重要分支领域,凭借其强大的控制功能和灵活的编程实现特性,得到了广泛的应用。本文设计的电路除了能实现基本功能:花样灯左右循环流水点亮和交替点亮,还能实现两个附加功能:实现变量控制花样流水灯频率可变,实现跑马灯的多模式控制。
1 相关原理介绍
1.1 基本功能原理
从编程角度来考虑,本文用到的两个基本功能:循环移位,延迟环节。首先,将循环移位和延时环节制作成两个封装好的库函数,以方便后面调用。其次,在主程序中进行使用端口的属性设置,端口设置寄存器功能及指令说明如下表所示。
设置好端口类型后,在主循环中使 8个LED灯呈现正反向循环流水点亮,并调用延时函数控制闪烁频率。当按下开关,使外部中断请求引脚呈低电平,然后在中断处理程序中将P端口输出赋值 0xaa或0x55,再通过环移指令和延时环节,使LED灯交替点亮,松开开关后,跳出外部中断处理,进程恢复至主程序段继续执行。
1.2 实现变量控制频率可变的跑马灯
这部分系统设计的想法建立在延时函数的调用次数参数从定值设为变量n,通过外部控制按键的中断,触发对n的函数运算,从而改变流水灯闪烁周期,影响闪烁频率,关键在于对实际基频和1s周期的计算与控制。
由于实际误差的存在,可以使用实测法,按照理论调用参数为1000的Delayms函数,理论上是1s,将该函数调用60次,测量程序执行时间与一分钟的误差,并根据误差进行调整,直到误差可接受为止。
1.3 实现跑马灯的多模式控制
由于使用外部按键控制的方式调节跑马灯模式的方法太过浪费资源,所以本文采用基础功能中使用的一个按键,将按键按下的次序作为变量“FLAG”存储起来,每次按下操作都会使FLAG值改变,进而通过FLAG值的不同控制不同的流水灯操作方式,这样可以减少对于外部串口资源的占用。
系统的设计中扩展的流水灯模式为“流水灯从上向下依次点亮,再反向依次熄灭;再由下向上依次点亮,再反向依次熄灭”。
2 总体设计方案与实现
2.1 软件设计总方案
从系统设计的整个过程来看,包括:“功能需求分析,功能模块化,器件选择,电路设计,程序设计,仿真调试”。其中,仿真调试需要多次进行,以确保系统的稳定性和正确性。
以MSP430为核心芯片,用P1和P2口分别作为中断端口与I/O口。首先仅对基础功能进行讨论,将功能分为两个子模块:模块一由P2口主要完成,用于点亮正常的依次循环的流水灯;模块二需要加上P1口,用于控制中断信号,转向第二种流水灯模式。同时也负责检测按键的松开,并返回模块一的功能。
2.2 花样流水灯电路设计
对于MSP4430的电路设计,实际电路中需要用到对晶振电路,Vcc以及GND的设置。但由于Proteus中MSP430默认内部时钟以及供电和地段是设置好的,所以在仿真界面不予显示。
如下图1所示,P1口仅P1.3属于基本功能控制按钮,用于为中断提供触发信号。
P2口并行输出到八个LED上,控制流水灯闪烁。“R”均为保护电阻,在此将其设置为一般值:330欧姆。此处提供+5V直流电源。LED选用前向电压为2.2V,工作电流在10Ma左右的普通黄色灯,击穿电压为4V,可以算出,供电5V,使用串联330欧姆电阻的方案是可取的。
整体上P1引线外端共地,P2引线外端供电。MSP430内部时钟共有3个输出模式:ACLK(一般用于低速模块)、MCLK(主要用于CPU和系统)、SMCLK(主要用于高速模块)。本文将MSP430选择频率方式定为MCLK,设为8MHz。
2.3 花样流水灯程序设计
首先,在主程序前进行必要的声明和约定。
其次,在主程序阶段对P1和P2口进行设置。
接着,端口设置好后编写延时子程序以及中断函数。延时程序主要利用i++或i--语句反复调用一个机器周期的语句进行计时。中断函数则依靠(P1IN & 0x08)==0x08的语句检测P1.3是否按下,并转入while循环中执行流水灯交替点亮命令即可。
最后,子程序编写好后进入主程序编写。利用环移指令(P2OUT=~(1<
本文用示波器显示LED电量的P2口输出,显示情况为LED的交替电量,可以发现,交替时间为1s,但低电平存在不平坦现象。
2.4 查询方式程序设计
任何查询方式程序都满足如图3的流程图,包含状态标记,状态规则,目标操作三个主要部分。目標操作与使用中断的内容一致,就是安排流水灯以一定的规律闪烁。检查状态标志设为“(P1IN & 0x08)==0x00”,而状态规则是:当该条件不满足的时候,对应中断触发的情况;当该条件满足时,对应原本主程序点亮状态。
2.5 频率控制功能设计
首先,前面的测量提供了真实的工作频率。根据理论计算和实际测量,本文将delayms函数中的i++最大值设为167。此时调用一次delayms函数的时间正好为1ms,在程序中定义整数型变量n,表示delayms的输入参数,即调用次数。显然,n=1000时,表示运行的LED闪烁间隔时间为1s,考虑到人体眼球对频率变化的敏感程度,将n=1000设为频率初始值。
为了尽量使用较少的键位控制较多的频率变化取值,本文外设了P1.4~P1.7为四种频率變化模式:“加速”,“减速”,“速度加倍”,“速度减半”。其中加减速度是通过n加减100得到,由于0.1s的频率变化接近人体能够直观察觉的频率变化临界值,所以n的变化量取100为间隔是合理的;但仅通过100的变化量对频率进行控制可能会导致变化较慢,或者说操作不便捷,为了弥补大步长改变频率的空缺,本文中通过对n进行乘以和除以2的运算进行大幅的概率调整。
此外,为了防止频率调整后不方便返回默认的1s周期,本文中另加了频率复位按键,通过“n=1000”将频率之间复位。
3 调试过程及问题解决
3.1 问题一:如何在按键松开后跳出中断,并返回主程序
对按键按下的操作,系统设计时拟用中断方式触发,所以对于按键松开后的操作,有两种方式:(1)查询按键松开;(2)下降沿触发中断。一开始尝试使用中断嵌套,进行下降沿中断触发,但由于优先级设置不当以及单一按键的资源占用冲突,导致失败。于是改用查询方式,当检测到低电平时,说明按键已经松开,且具有抗抖动的能力,结束当前循环,返回主程序。
3.2 问题二:按键松开后引脚高阻态
在按键与引脚之间的连线上再连接一个电阻(一般设为通常值330R),延伸至地端。这样保证在按键提供的高电平结束后,由地端提供低电平,以供引脚状态监测使用。
4 总结
本文设计的花样流水灯不仅能实现基本的循环点亮、交替点亮功能,还能另外实现“加速”“减速”“速度加倍”“速度减半”四种模式。本文中的多模式的花样流水灯控制系统具有良好的正确性和稳定性,可应用于生活的中的多种领域,很容易根据实际需求生成不同的智能化产品。因此,该系统具有较强的应用价值。
参考文献:
[1]顾亚军,周悦,郭威,王彪.基于MSP430的输入输出模块设计与实现[J].测控技术,2018,37(03):145-149.
[2]谢鹏辉,岳全胜,余世贤,王链珲,王洋.基于MSP430单片机的超声波测距系统设计[J/OL].电子技术与软件工程,2018(08):252-253[2018-05-10].http://kns.cnki.net/kcms/detail/10.1108.TP.20180425.1721.386.html.
[3]姜涵.基于MSP430的无线压力变送器设计[J].无线互联科技,2018,15(08):20-21.
[4]冀庆恩,葛立明,李宗刚,高溥.基于MSP430的无线水质监测系统[J].工业仪表与自动化装置,2018(02):23-28.
[5]许话.基于MSP430单片机的环境噪声监测系统的设计[J].电子技术与软件工程,2018(07):255.