基于MSP430单片机的微功耗中文人机界面设计

基于msp430单片机的微功耗中文人机界面设计
在现代便携式智能仪器或手持设备中,中文人机界面成为一种事实上的行业标准。能显示汉字的图形点阵液晶和可输入数字的小键盘已成为智能设备必不可少的组成部分。同时作为便携式设备基本要求的低功耗特性也贯穿于中文人机界面的设计始终。
这种低功耗中文人机交互界面需要设计者在选取mcu和具体元器件上有特殊考虑。微功耗、小体积应作为选择相关器件的首要要求。
设计中,笔者采用msp430f149单片机作为系统的mcu,通过选择合适的液晶显示模块在3v电平构建了一个低功耗的中文人机界面。此中文人机界面构成了微功耗数据采集系统的重要组成部分。
一、msp430系列flash型单片机的微功耗特点
德州仪器公司(ti)推出的msp430f14x系列是超低功耗flash型16位risc指令集单片机。它采用冯-纽曼结构,ram、rom和全部外围模块都位于同一个地址空间内。其具有丰富的片内外围,性价比极高。
msp430f14x系列是ti的msp430f1x系列(flash存储器型)单片机中功能最强大的子系列。f14x具有更大的程序和数据存储区、更多的外围模块,其片内甚至还包括一个硬件乘法器。同时f14x系列单片机开发工具简便,固化于flash存储器内的程序易于在线升级和调试,非常适合于开发消费类便携式电子产品。
msp430f14x单片机集中体现了现代单片机先进的低功耗设计理念。其设计结构完全以系统低功耗运行为核心。
这种低功耗结构具体体现在以下四点:
(1)高集成度的完全单片化设计。
将很多外围模块集成到了mcu芯片中,增大硬件冗余。内部以低功耗、低电压的原则设计,这样系统不仅功能强、性能可靠、成本降低,而且便于进一步微型化和便携化。
(2)内部电路可选择性工作。
f14x单片机可以通过特殊功能寄存器选择使用不同的功能电路,即依靠软件选择其中不同的外围功能模块,对于不使用的模块使其停止工作,以减少无效功耗。
(3)具有高速和低速两套时钟。
系统运行频率越高,电源功耗就会相应增大。为更好地降低功耗,f14x单片机可采用三套独立的时钟源:高速的主时钟、低频时钟(如32.768khz)以及dco片内时钟。可在满足功能需要的情况下按一定比例降低mcu主时钟频率,以降低电源功耗。在不需要高速运行的情况下,可选用副时钟低速运行,进一步降低功耗。通过软件对特殊功能寄存器赋值可改变cpu的时钟频率,或进行主时钟和副时钟切换。
(4)具有多种节能工作模式。
f14x单片机具有五种节能模式:lpm0、lpm1、lpm2、lpm3、lpm4。这五种模式为其功耗管理提供了极好的性能保证。图1显示了活动状态(am)与各种节能模式下消耗的实际工作电流大小。
图1 f14x的工作模式与工作电流关系
由于msp430f14x系列是专为超低功耗的便携式应用开发的。利用先进的集成电路技术和生产工艺,其功耗已经跨越了毫安级,真正进军到了微安级。
不仅如此,f14x的软件结构也针对低功耗而设计。如从备用模式唤醒mcu仅需6μs。其中断和子程序调用无层次限制,这种丰富的中断能力减少了系统查询的需要,可以方便地设计出中断程序结构的控制程序。
利用f14x系列单片机,可以方便地构建一个低电压的工作平台。通过各功能模块的智能运行管理和mcu的节能模式相结合,可以解决运行速度、数据流量与低功耗设计的矛盾,将各功能模块的电流消耗降至最低状态,限制活动状态至最低要求。经过这样优化,可以实现单片机的极低功耗。如在1mhz工作频率下,f14x只消耗0.1~400μa电流(1.8~3.6v供电),如1.8v供电时,执行时仅消耗160ua的电流,备用时0.1ua,这时ram中的数据还能有效保持。
概括来说,msp430f14x单片机具有极低的功耗、强大的处理能力、丰富的片上外围模块,方便高效的开发方式。
本系统采用的msp430f149单片机,是f14x系列中功能最强大的一款。它具有一个硬件乘法器、6个i/o端口(每个有8个i/o口)、1个精确的模拟比较器、2个具有捕捉/比较寄存器的定时器、8路12位a/d转换器、片内看门狗定时器、2个串行通信接口和60kb的flashrom,2kb ram。
f149还具有强大的扩展功能,其具有48个i/o引脚,每个i/o口分别对应输入、输出、功能选择、中断等多个寄存器,使得功能口和通用i/o口可以复用,大大增强了端口功能和灵活性,提高了对外围设备的开发能力。
msp430f149的以上特点,使其非常适合于构成一个全功能的便携式单片机应用系统。
二、液晶显示模块与接口电路
图形点阵式液晶可显示用户自定义的任意符号和图形,并可卷动显示,它作为便携式单片机系统人机交互界面的重要组成部分被广泛应用于实时检测和显示的仪器仪表中。支持汉字显示的图形点阵液晶在现代单片机应用系统中是一种十分常用的显示设备,汉字bp机、手机上的显示屏就是图形点阵液晶。它与行列式小键盘组成了现代单片机应用系统中最常用的人机交互界面。
采用图形点阵式液晶显示较之其它显示方式主要有以下优点:
(1)工作电压低、功耗极低。工作电压3~5v,工作电流≤10ua/cm2,特别适用于便携式的仪器仪表中。
(2)液晶显示属被动显示,受外界光线干扰小。
(3)图形点阵式液晶可显示的信息量大,分辨率高。
(4)不产生电磁干扰。
(5)可靠性高。使用寿命长。
在设计中,笔者采用了信利(truly)公司的mg-12232液晶显示模块。mg-12232模块供电电压的典型值为3v,工作电流的典型值为0.3ma,很适合本系统3v电平的低功耗环境。其可显示范围为122×32点阵,即能实现所谓的双排汉显。mg-12232采用的控制器是两片sed1520,一片sed1520控制器可以驱动16行×80列。sed1520控制器可以在3v逻辑下正常工作,因而避免了与msp430单片机逻辑电平不匹配的问题。其具体结构框图见图2。
图2 sed1520的引脚定义和结构框图
sed1520控制器作为液晶显示屏与mcu的接口,它直接驱动mg-12232液晶,控制字符、汉字以及图形的显示。由于msp430f149具有48个i/o引脚,借助sed1520,可以直接利用msp430的i/o口模拟液晶的读写和控制时序。使得mcu对液晶的操作实际上变为mcu对液晶显示控制器sed1520的操作,因而接口电路的的硬件连接和软件编程都简单了很多。
图2中v5引脚提供mg-12232液晶的对比度电压,可以通过一个-12v电压发生电路(如max765)产生,经一个100k电位器分压后即可使用。
mcu可以通过sed1520的一些控制引脚和13条常用指令来访问液晶显示模块。如rst用于重启动sed1520,e1和e2分别用于使能两片sed1520。r/w控制对sed1520的读或写。a0决定此次操作是指令读写还是数据读写。
一个sed1520显示控制器能控制80×16点阵液晶的显示,其显示ram共16行,分2页,每页8行,每一页的数据寄存器分别对应液晶屏幕上的8行点。当设置了页地址和列地址后就确定了显示ram中的唯一ピ?f聊簧系拿恳涣卸杂σ桓鱿允綬am的字节内容,且每列最下面一位为msb,最上面一位为lsb,即该ram单元字节数据由低位到高位的各个数据位对应于显示屏上某一列的由高到低的8个数据位。对显示ram的一个字节单元赋值就是对当前列的8行(一页)像素点是否显示进行控制。
如图3,msp430f149单片机的p5口用作与液晶显示模块通信的数据口。
mg-12232显示模块有多个型号,不同型号都采用相同的sed1520控制器,操作及使用方法完全相同,只是尺寸不同。常用的如mg-12232-5(76×29.1×5.7mm)、mg-12232-6(45.05×22.32×6.3mm)、mg-12232-7(84×44×10mm)等,可以分别用在大小不同的便携式仪器或设备上。
对液晶显示模块还需着重考虑其背光类型,不同的背光类型消耗电流大不相同。一般可选的背光类型有led(发光二极管)、el(电致发光灯)以及ccfl型(冷阴极灯管)。el是一种面发光的冷光源,在结构上可以做得很大很薄,虽然亮度较低,但发光非常均匀而且无光斑,尤其是功耗很低。缺点是需要一个高压交流电压来驱动,故需要一个专门的电压变换电路(如imp803)。ccfl照明面积更大,适用于需要大面积液晶显示界面的仪器或设备中。
三、键盘接口
msp430f149的p1、p2口除了支持输入、输出以外,还支持硬件中断。p1、p2口的8个引脚都有各自的控制寄存器,每个引脚可以单独控制,并且每个引脚都可以作为中断源,每一引脚都可以单独选择中断触发沿,单独允许中断。p1、p2口各使用一个中断向量,p1.0~p1.7产生同一个中断,p2.0~p2.7也产生同一个中断。p1、p2口的这种结构非常适合实现基于中断的键盘输入响应程序。
本系统中使用2×2的行列式键盘。键盘程序采用行扫描法。即p1.0、p1.1接两根列线,列线定义为输出口,p1.2、p1.3接两根行线,行线定义为输入口。两根行线需接10k上拉电阻。
基于对系统低功耗要求的考虑,键盘输入响应程序应设计为中断方式运行的。即有键按下时,产生中断把mcu从休眠状态唤醒,并启动定时12ms的定时器,随后mcu又进入休眠状态。当定时器产生中断时再次将mcu从休眠状态唤醒,此时扫描键盘,若有键按下,则计算出键值,并执行该键值对应的功能程序。执行完该程序后,mcu再次进入休眠状态。
四、汉字显示的原理与部分程序实例
1、图形点阵液晶的汉字字模
与在dos中显示汉字不同的是,图形点阵液晶并不是简单地用画点的方式来描出汉字。直接从中文系统汉字字库中提取的汉字字模并不能直接在液晶上显示,通常都必须经过格式上的调整和转换。标准16点阵汉字(如希望汉字的hzk16)字模数据的排列形式如图4。
由于一个sed1520显示控制器能控制80×16点阵液晶的显示,其显示ram共16行,分2页,每页8行。连续16列相邻2页的32字节显示ram就可以控制一个汉字的显示区域(如图5)。对这些显示ram赋以相应值就可以显示出一个汉字。
图4 标准汉字字模排列形式图5 sed1520汉字字模排列形式
由图4和图5所示可见,sed1520图形点阵液晶显示控制器汉字字模的排列顺序和方式与标准汉字字模完全不同。液晶字模数据可以通过对标准字模数据进行位运算后得到。
实际编程中,具体汉字的液晶字模数据应存放在msp430f149单片机的flash存储器中。
2、液晶显示器初始化流程
在液晶显示信息之前,必须先对液晶进行初始化。
初始化的流程如下:
需注意,mg-12232模块内虽然一片sed1520控制器实际控制区域为61列,但清除显示ram时,仍应按80个ram单元清除。
3、部分程序实例
程序是在msp430单片机的开发平台iar embedded workbench下采用汇编语言编写,仿真机采用了ti公司的msp-fet430p410。
由于本系统中选用了msp430f149单片机,对源程序编译前需对iar embeded workbench平台进行以下设置:
a. 点击project菜单下的options…命令进入设置窗口,对左边category框内的xlink选项下的include页面进行设置,把xcl file name框的内容设置为c:program filesiar systemsew23430icc430msp430f149a.xcl。
b. 点击project菜单下的options…命令进入设置窗口,对左边category框内的c-spy选项下的setup页面进行设置,把chip description框的内容设置为c:program filesiar systemsew23430cw430msp430f149.ddf。
以下给出了一些常量定义和发送命令字子程序(send_com)、发送数据子程序(send_data)及液晶状态查询子程序(lcd_ste)的源代码。
#includemsp430x14x.h
;程序在液晶上显示汉字液晶。
;---------定义lcd的引脚
lcd_rst equ04h ;p4.2
lcd_e1 equ40h ;p4.6
lcd_e2 equ20h ;p4.5
lcd_rw equ 10h ;p4.4
lcd_a0 equ08h ;p4.3
;----------定义lcd使用的数据寄存器
lcd_page equ0200h;定义显示页面
lcd_order equ0201h;暂存液晶控制指令
lcd_data equ0202h;暂存液晶数据
lcd_cnt equ0203h;液晶计数存储器
lcd_row equ0204h;存放列地址数据
lcd_line equ0205h;存放行地址数据
lcd_charequ0206h;存放当前字符数据的首地址
lcd_bytecnt equ0207h ;存放要显示的字节数
lcd_status equ0208h ;存放液晶当前状态的数据
send_com ;发送命令字子程序,以lcd_order为入口参数
bis.b #lcd_e1,&p4out;set e1=1 ,使能chip1
call #lcd_ste
bic.b #lcd_a0,&p4out ;a0=0,send out instruction
bic.b #lcd_rw,&p4out ;r/w=0,writable
bis.b #0ffh,&p5dir ;set p5 pins output
mov.b lcd_order,&p5out ;send order byte to lcd
bic.b #lcd_e1,&p4out ;set e1=0
ret
;发送数据子程序,以lcd_data为入口参数
send_data bis.b #lcd_e1,&p4out;set e1=1
call #lcd_ste
bis.b #lcd_a0,&p4out ;a0=1,send out data
bic.b #lcd_rw,&p4out;r/w=0,writable
bis.b #0ffh,&p5dir ;set p5 pins output
mov.b lcd_data,&p5out ;send data byte to lcd
bic.b #lcd_e1,&p4out;set e1=0
ret
;读液晶当前状态的子程序lcd_ste
lcd_ste bic.b #lcd_a0,&p4out ;a0=0,send out instruction
bis.b #lcd_rw,&p4out ;r/w=1,readable
bic.b #0ffh,&p5dir ;set p5 pins input
ste_agnmov.b &p5in,lcd_status ;get status data from lcd
bit.b #80h,lcd_status;如状态存储器第7位为1,忙,则等待
jc ste_agn
ret
五、结束语
本系统利用msp430f149单片机、mg-12232图形点阵液晶模块和行列式键盘接口构建了基于3v电平的低电压、微功耗的中文人机界面。实际使用中,此人机界面消耗电流不足1ma,这种设计方案取得了很好的微功耗效果。

什么是激光雷达?它比摄像机有什么优势?
MIDC·2020小米的影像生态
5G技术如何助力企业应对新常态?
蔡司三坐标保证30年精度不变
LGD广州厂进入设备订单阶段,明年下半年或将量产
基于MSP430单片机的微功耗中文人机界面设计
延续经典创造革新,Nank 南卡S2震撼上市,引领游戏运动耳机新潮流!
如何让Python和Go互相调度
新能源车送上海牌照,上海买新能源车怎么上牌?
电源和电话滤波器电路
室温钠硫电池体系硫连续催化转化
IPv6 不仅仅是解决 IPv4 地址不足问题,还有更多新应用
ATI Mobility Radeon 9200显示芯片
新能源汽车高压线束设计指南
2020对于人工智能有什么机会
这9种工作不会被人工智能取代 目前非常难以实现自动化
全球首个AI宇宙三维模拟器,可在几毫秒内完成模拟
华为Mate X2再爆新消息
i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(下)
KNX总线和RS485总线的区别是什么