龚虹瑞,黄小莉
(西华大学电气信息学院,四川 成都 610039)
随着科技的不断发展,人们的生活节奏越来越快。在忙碌的现代生活中,人们经常会忘记做一些重要的事情。记忆力和身体状况不佳的老年病人,常常会忘记服药或者错过正确的服药时间;年轻的上班族也可能会因为繁忙的工作忘记服用保健药品。
针对以上问题,本文利用STC89C52单片机设计了一套智能药盒系统。该系统是将电子时钟和普通药盒结合,是一种具备定时提醒服药功能的电子家居用品,面向需要每天服药、服用保健品的人士使用。当预先设定的服药时间到时,提醒声音就会响起,以便服药者准时服药。
系统以STC89C52单片机为核心,采用+5V电源供电,通过DS1302时钟芯片计时,由LED显示,通过GSM模块发送短信,外围辅以按键调整电路、复位晶振电路等。其原理框图如图1所示。
图 1 智能药盒系统框图
为满足系统时钟数据的高精度和高性价比的要求,时钟电路部分采用Dallas公司研发的DS1302时钟芯片。该芯片是一种低功耗、高性能、并带有RAM的时钟芯片。它可对秒、分、时、周、日、月、年等进行计时,有闰年补偿的功能,采用三线接口,可一次性传送多字节的RAM数据或者时钟信号,也能与CPU进行同步通信[1],工作电压为2.5~5.5 V。
DS1302为DS1202的一款升级产品,并能与DS1202相互兼容, 增加了双电源的引脚,同时还具备对后背电源进行涓流充电的能力。DS1302的2个电源分别是主电源Vcc2和后备电源Vcc1。这样可保证当主电源处于关闭状态时,时钟也能正常连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电[2-3]。当Vcc2大于(Vcc1+0.2)V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。DS1302有2个振荡源X1和X2,外接32.768 kHz晶振。
DS1302采用三线接口与单片机进行同步通信。其中,RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送,I/O为数据输入输出脚,SCLK为时钟信号输出脚。该模块的电路图如图2所示。
图 2 DS1302时钟芯片电路
GSM(global system for mobile communications)是当前应用最广泛的数字移动通信标准。本系统采用西门子公司开发的一款双频900/1 800 MHz高度集成的芯片TC35来实现该标准下的通信[4]。
如图3所示,GSM模块采用TC35作为短信发送芯片,MAX232作为串口电路,由此实现单片机与TC35的通信。
图 3 GSM模块与串口通信电路
如图4所示,主程序流程可分为以下几部分。1)初始化。声明子函数、全局变量,打开、设定相关中断,设置波特率,以及DS1302的相关初始化。2)建立DS1302与单片机的通信协议,调入DS1302的函数,获取一个当前的时间值,并保存到相应数组中。3)进行按键扫描。若没有按键按下,直接显示时间[5-7];若按下闹钟模式键,显示闹钟值,并且可继续通过按键进行闹钟的设定以及对应的显示(某位闪烁代表被选中)。4)进入报警系统的扫描判断。若当前时间值等于闹钟的设定值,便报警1 min,若1 min内没有取消报警,则通过GSM模块发送短信。5)程序返回到时间获取的子程序。如此循环执行。
图 4 主程序流程图
将单片机的P1口对应位置1,P3口对应位置0。当系统第1次监测到有按键被按下时,为防止硬件电路的抖动引起的误断,需要在一定的延时之后进行第2次按键判断。若结果仍然是被按下,则判断为人为按键,将按键标志位Z置1,并判断出是哪个按键被按下,然后跳出子程序,进入主程序循环,如图5所示。当下一次进入按键子程序时,若未抬手,继续将Z置1,跳出子程序;若已抬手,则判断标志位Z。Z为1,表示有键按下,然后先将Z置0,再执行对应的按键功能。传统按键程序通常会采用一个while死循环等待按键抬起[8-9],这就导致在按键时系统停留在按键子程序,无法进入其他子程序。虽然按键的时间看上去很短,但对于单片机来说已经停留太久,从而导致显示中断,这就是通常按键时会出现显示屏闪烁的原因。本设计的按键程序,利用一个标志位Z解决了这个问题。虽然这种设计也使读键时间变长;但由于整个程序较短,这种影响不明显。两者相比较,本设计采用的方法比传统方法对于该系统的稳定性更高。
图 5 按键程序流程图
首先初始化串口:REN=1,允许接收;SMOD=0,波特率不加倍;T1为方式2;波特率设置为9 600。然后判断是否按下取消闹钟声音提醒键,如果没有按下,表示服药者没有按时服药,系统则会自动调用GSM模块发送1条提示短信到服药者监护人手机上。具体程序流程是首先设置发送数据格式(通常为TEXT格式),然后设置目的手机号码,最后发送要求的字符串,如图6所示。另外,还有2点值得说明:TC35采用AT指令,要使用C语言编写程序,必须先转化;TC35和单片机通过串口通信,因此必须先建立通信协议,采用ASCII码发送数据到TC35芯片上。
图 6 GSM模块程序流程图
根据上述思想原理,并结合实际需要,采用仿真软件PROTUES对整个系统进行了仿真,效果图如图7所示。
图 7 智能药盒系统仿真图
在仿真的过程中,分别对时间的显示和闹钟的设置进行了测试。
1)时间测试。8位数码管从左到右分别显示月、日、时、分,测试结果如图7中所示,时钟各位显示正确,并且能够正常运行。
2)闹钟测试。8位数码管从左到右分别显示:闹钟编号(第1位),预设4个闹钟,编号范围为1~4;闹钟的开关状态显示(第2、3、4位),用于显示该编号闹钟的开关状态(ON或OFF);闹钟时位(第5、6位);闹钟分位(第7、8位)。测试结果如图8所示。
图 8 闹钟设置仿真图
在仿真成功的基础上,设计出实物,如图9所示。经过一系列的软硬件调试,整个智能药盒系统的功能已经基本实现。
图 9 智能药盒系统实物图
1)实现了设置闹钟状态下的闪烁显示。在设置闹钟的状态下,某位闪烁表示被选中,这时可以通过按键对被选中位进行加减,也可以移动被选位,
从而实现闹钟的设置。这个功能是本设计的一个难点,它的实现,使系统的显示更加直观。
2)实现了多闹钟功能。在软件程序的设计上采用4个5位数组使系统最多可设置4个闹钟。每个数组都包括月、日、时、分4位数据,另有一位控制每个闹钟的开关状态,使每个闹钟都有独立的开关。
3)实现了短信提醒功能。在闹钟报警没有得到响应的情况下,系统会调用GSM短信子程序,单片机将AT指令以ASCII码的形式通过串口发送到TC35芯片上,TC35便会发送1条提示短信到服药者监护人的手机上。这是本次设计的另一难点,也是一个创新点。
本文利用经济实用的单片机及简单的时钟芯片等设计了一套智能药盒系统。该系统能够设置4个闹钟,可正确显示日期和时间,并能够在服药者未响应闹钟的情况下,自动发送1条提示短信到服药者的监护人手机上,从而让使用者不再延误服药,进一步提高了药盒的实用性、方便了服药者的生活。
[1]张晓东.多功能钟控语音提醒器[J].电子制作,2005,13(5):13-14.
[2]易志明,林凌,郝丽宏.基于IIC1.0的时钟芯片应用程序设计[J].单片机与嵌入式系统应用,2002,2(9):25-28.
[3]张韵诗,蔡佩璇,周庭硕.智慧型药盒与RFID药罐提醒准时服药[J].中国防伪报道,2009,8(8):16-18.
[4]亓浩名,王利,武毅,等.基于单片机的GSM短信收发模块设计[J].电子测试,2012,19(3):63-68.
[5]崔瑞林.电子药盒提醒器[J].现代营销:创富信息版,2004,2(3):15.
[6]兰景轩.保健药盒的自述[J].金秋,2003,12(6):52-53.
[7]宣彩平,王皓,邹国良.利用GSM无线模块发送短消息[J].计算机应用,2004,24(5):148-150.
[8]谢自美.电子线路设计、实验、测试[M].武汉:华中科技大学出版社,2009:15-20.
[9]谭浩强.C程序设计[M].北京:清华大学出版社,2009:37-42.