论文方式解析-基于单片机的智能药盒定时报警系统设计-CNKI知网查重网站

论文方式解析-基于单片机的智能药盒定时报警系统设计

2021-06-15 09:30:37
作者:杭州千明

  随着社会的发展和人们生活水平的提高,人们对生活的健康质量也追求越来

  越高,为了方便老年人吃药,结合当前智能药盒蓬勃的发展状况,本文介绍了一

  种基于单片机的家庭用智能药盒的设计。首先,本文介绍了此系统所涉及的硬件

  的结构和工作原理,主要包括STC90C51单片机、LCD1602液晶和单片机的定

  时/计数器。其次,介绍了系统硬件的模块化设计思想。在第一部分着重介绍了

  单片机的各项参数、内部结构、引脚功能,LCD1602的硬件电路、显示原理和

  各项命令,定时/计数器和蜂鸣器原理的简单介绍。在第二二部分则系统地介绍了各模块之间的运作模式和工作流程。当系统检测到有时间设置功能键或用药设置功能键有输入时,进入关中断调时及设置状态,之后开中断并按下定时键记录当前设置的时间及用药量的值。在调节好系统时间之后,系统时间向前运行的过程中不断将系统实时时间与记录时间作比较,两者相等时发出警报并显示所设置的用药量,一分钟后系统实时时间与记录时间不在相等则自动退出提醒,如此实现每天四次用药及每次四种用药服用量的提醒,非常适合大多数家庭使用。

  更好不得病,有病得吃药。忙人事多忘吃,年迈记性变差,错过服药的最佳时间,浪费了快乐的健康时光,宝宝不开心!人力难为,不如借助机器,让大人小孩老寿星都享受人性化的吃药提醒服务——智能药盒的出现并不意外。小东西用处大,即可提醒自己,也可远程提醒老人,因此显得非常实用。随着当代社会的老龄化会有许多老年人有这个容易忘记事情的毛病,比如说吃药。所以对于老人们来说在生病的时候或者是平时生活中按时按点吃药是一个很大的问题,对于有些老人的病需要每天不同的时间段用不同的药,这对于老人们来说是很难做到的,尤其是他们都在独自生活身边没有人长时间照顾的时候。这次的毕业设计题目中的智能药盒就是专门为这些老人们所设计的,是一种为了提醒老年人按时按点吃药而设计的药物存储的容器,它可以有效地解决高龄人群吃药麻烦的问题,根据对老年人每天吃药的时间进行定时,来实现一天内对老年人每天三次或更多次的定时提醒,提醒使用者服用多种药物中的一种或多种,一帮助老年人完成每天的药物服用,从而保证老年人的身体健康。

  1.2研究目的及意义

  现在智能药盒是刚刚起步,关键针对老年人,但随着这种刚性的市场需要认识的加深,市场一定会迎来一个发展热潮。一开始出现的便携小药盒,造型简单,容量小,不能满足人们的需要,于是,随即有发展出现了大容量且功能齐全的药盒。逐渐更新完善,发展出现了造型多样的全新设计的人性化智能药盒,易操作,能定时,更简单。为更多人带来了方便。这样也拓展了电子药盒的消费对象,扩大了消费群体,提升电子药盒的使用价值。以前大多电子药盒的电路经常由分立的数字电器件组成,功能单一,重量和体积都比较大,特别是功耗大,提升了使用成本,具有很大的局限性。所以智能药盒成为新的需要。

  许多老年人随着年龄的增长,都有健忘易忘的毛病,对于这些老年群体而言在其卧病在床之时或者是平日的生活之中按时按点吃药都是一个比较困难的问题,如果需要在不同时间吃不同的药,几乎很难独立完成,智能药盒就是针对这些老年人所设计的。它可以更好地管理高龄人群吃药麻烦的问题,根据老年人每天吃药的时间进行定时,来实现一天内对老年人每天三次或更多次的定时提醒,提醒使用者服用多种药物中的一种或多种,以帮助人们改掉不按时吃药的坏习惯。目前智能药盒是刚刚起步,主要针对老年人,但随着这种刚性的市场需求认识的加深,市场一定会迎来一个发展的新潮。一开始出现的便携小药盒,造型简单,容量小,不能满足人们的需求,于是,随即有发展出现了容量大并且方便携带的药盒。慢慢完善其功能,发展出现了多种多样的全新设计的人性化智能药盒,方便老年人操作,能定时,更简单。为更多人带来了便利。这样也拓宽了电子药盒的市场,扩大了消费群体,提升了药盒的实际使用价值。以前大多数电子药盒的电路通常由单独的数字电器件组成,功能比较单一,重量和体积相对都比较大,特别是功耗大,提高了消费者的使用成本,具有极大的局限性。所以智能药盒更适合当代人群的需求。近些年,随着单片机技术的迅速发展以单片机为核心的大规模集成电路在各种产品中得到了相当广泛的应用。然而以单片机为核心的数字电路正是拥有功能丰富,体积小,功能低等优势,相对符合电子药盒产品的特点,具有极大的市场潜力和开发价值。如今电子药盒在选择机型的过程中综合考虑单片机性能体积和产品耐用性等因素,正向微型化,智能化方向发展。一切可以都是为了服务人们更好的生活。鉴于目前不少老年人苦与用药的合理管理和定时服用,智能的药品管理系统正是大众所需。针对目前的现状,设计一种家用智能药盒,应用价值和现实意义都是相当的高的。

  1.3本文的结构

  本系统基于单片机定时/计数器时钟程序进行计时,同时通过1602LCD液晶显示屏显示时间,时间采用24时制。当需要进行设定时,可根据外部键盘输入时间点。当时间达到预定时间时单片机通过写入的程序在输出端输出低电平,以致控制蜂鸣器实现声音提醒的目的。

  本系统采用单片机技术,电路简洁,成本低,控制精度和效率也较高,稳定性好,易操作,显示直观,解决了老年人用药的日常问题,适合普通家庭使用,对于提高老年人健康生活很有意义。本文的结构如下:

  第一章为绪论部分,简要介绍了选题的背景及意义,研究的现状和发展趋势以及本文的主要内容和结构。

  第二章总体方案设计,简要介绍整个系统的结构及工作原理,论证系统总体方案的设计。

  第三章为系统硬件设计部分,介绍各个模块的资料、原理并对电路功能进行分析,对硬件进行器件布局和线路设计,得出系统硬件电路图。

  第四章为系统软件设计部分,主要介绍系统各部分软件的设计思想和工作流程。

  第五章为系统的调试。

  第六章为总结与展望,主要是对本设计的总结。

  2系统整体设计方案

  2.1设计要求

  使用STC90C516单片机、LCD1602液晶显示屏、8个按键、LED发光二极管、蜂鸣器等元件来设计一个家庭使用的智能药盒。本系统的硬件模块选取单片机最小系统、液晶显示电路、声光报警电路、按键电路四种电路来构成,从而来完成系统的时间显示、每日最多四次定时计时、每次用药的提醒以及用药量的提醒的工作能力。

  2.1.1系统的基础工作能力:

  (1)显示

  采用LCD1602显示实时时间、用药剂量、调节显示的信息等。

  (2)设定时间和用药剂量的设置

  该系统必须实现每一天都可以最多四次的时间设定,而且在使用者服药的时候显示用药量提示,该功能是由1个功能键,1个调节键,完成4次设定时间的4定时按键,来达成的。

  (3)实时时间调节

  实时时间调节的功能由2个按键来负责,一个是功能键,另外一个是调节键。

  (4)蜂鸣报警功能

  当时钟走到设定的时间,达成蜂鸣器报警的条件,此时本次用药的剂量会显示在LCD1602上,并且蜂鸣器发出警报,LED不断闪光,提醒使用者服药。

  2.2总体设计思路

  此次设计采取模块优化的设计思路,选取STC90C516RD+单片机为核心来设计一类家用智能药盒。系统运用单片机为主控芯片,联合其最小的系统所必须的上电复位电路,内部晶振电路,采取电源部分为整个系统提供稳定直流电源,采取单片机提供定时器设定系统时钟,LCD显示部分提供时间及其他参数的显示,语音部分接收单片机输送来的信号从而达成声音信号的提醒,LED发光二极管配合语音部分的蜂鸣器发挥辅助的报警作用。在软件程序的设计方面,以单片机的内部资源为核心程序,调配程序存储区的不同模块的驱动程序,通过单片机的引脚对系统中的各个模块资源进行驱动和调配,通过主程序使用按键扫描子程序和LCD602数据刷新程序,将按键部分和LCD1602联合起来,使其按键输入信息可以实时显示LCD1602液晶屏上,程序调配LCD1602读数据的子程序,同时运算判断能否进入报警时间,若是进入报警时间,将之前设置好的用药用量的信息刷新到LCD602上,并通过作用在单片机管脚,驱动蜂鸣器发声和LED发光二极管发出光亮,达成报警的功能。系统的基本原理如图3.1所示:

  图3.1系统原理图

  此系统采取STC90C516RD+作为单片机最小的控制系统的核心,该控制系统是STC90C51系列单片机中的一种;采用LCD1602液晶屏当显示的元器件;系统时钟选取单片机内部定时器中断。

  系统通过单片机实现对每个分系统部分的协调控制,用单片机检验测试2+2+4一共8个按键的信息输入,并将输入信息实时显示在LCD1602之上。

  使用1个功能键、一个调节键、4个定时对应的4个定时按键这6个按键来完成定时设置,按下功能键之后,就可以通过调节键来调节,随着按下功能键的次数不同,达成对时间和用药剂量的六个定值的设置,最后按下功能键,同时按下4个定时按键其中的一个,LED发光二极管闪烁,来确定定时按键是否被按下,从而记录此时此时各个参数的值,表示该次定时操作结束,然后时钟继续运行。

  完成了定时设置之后,应该对系统终始时间做出调整。该功能是由功能键、调节键两个按键来负责,只要按下功能键,就可以调整时间,随着多次按下功能键,可以对分钟数和小时数作出调节,完成调节之后,最后一次按下功能键,随即开始运行时钟。

  在系统中使用单片机的定时器来运行实时时钟,每个时刻的实时时间由单片机来检测是不是和4和定时时间之一相同的。当实时时钟达到定时时间之时,用来显示用药剂量的LCD1602就会显示,与此同时蜂鸣器发出蜂鸣,LED也随之闪光,这些声光效果共同作用来提醒该用药了,当用药时间过去一分钟之后,实时时钟就会越过设定好的时间,此时的实时时间和设定好的时间就不再相同,然后系统就会自动退出声光报警的程序。

  3.2系统结构设计

  本系统的结构是采用STC90C516单片机、电源、复位电路、蜂鸣器电路、2+2+4键盘、晶振电路、LCD显示以及发光二极管等多部分组成。本系统的结构如图3.2所示:

  图3.2系统结构图

  3硬件电路的设计

  3.1单片机最小系统

  51单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。51单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。本次单片机的最小系统主要是由STC90C516单片机、晶振电路、复位电路、等构成,单片机部分硬件电路图如所示:

  图3.3最小系统硬件电路图

  3.1.1 STC90C51RC/RD+系列单片机介绍

  STC90C51RC/RD+系列单片机为宏晶科技推出的全新的一代具有超强抗干扰、高速、低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟机器周期与6时中机器周期可以随意选择。内部集成MAX810专用复位电路,时钟频率在12MHz之下的时候,复位脚可以直接接地。STC90C51RC/RD单片机之中包含中央处理器(CPU)、程序存储器(FLASH)、数据存储器(SPAM)、定时/计数器、UART串口、I/O接口、EEPROM、看门狗等模块。STC90C51RC/RD+系列单片机几乎包含了所有的数据采集和控制所需要的所有单元模块,是一个实实在在的片上的系统。

  1、加强型6时钟/机器周期,12时钟/机器周期8051 CPU。

  2、工作电压:5.5V-3.8V(5V单片机)/3.6V-2.0V(3V单片机)。

  3、工作频率的范围:0-40MHz,相当于普通8051的0~80MHz,在实际的工作中该频率可以达到48MHz。

  4、用户应用程序空4K/6K/7K/8K/10K/12K/13K/16K/32K/40K/48K/56K/61K/字节。

  5、片上集成1280字节/512/256字节RAM。

  6、通用I/O口(35/39个),复位之后为:P1/P2/P3/P4是标准双向口/弱上拉(普通8051传统I/O口)。P0口是开漏输出,作为总线扩展用时,不需要加上拉电阻,作为I/O口用时,需加上拉电阻。

  7、ISP(在系统可编程)/IAP(在应用可编程),不需要专用的编程器/仿真器,就可以通过串口(P3.0/P3.1)接着就能直接开始下载用户程序,只需要3-5秒就能完成一片8K程序。

  8、EEPROM功能。

  9、看门狗。

  10、内部集成电路为MAX810专用复位电路,当外部晶体为12M以下时,就可跳过外部复位电路,复位脚就能直接接地。

  11、本系统中的16位定时器/计数器共有3个,2个8位定时器可以用定时器0来代替它的作用。

  12、从外部中间切断4路,慢慢下降顺着中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断的方法来唤醒。

  13、通用异步串行口(UART),还能用定时器软件来实现多个通用异步串行口(UART)。

  14、实际工作时的温度范围为:0-75℃/-40-+85℃。

  15、封装:LQFP-44,PDIP-40,PLCC-44。

  图3.4 STC90C51RC/RD+系列单片机引脚图

  a.电源

  Vcc(引脚号40),芯片电源,接+5V;Gnd(引脚号20),电源接地端。

  b.时钟

  XTAL1(引脚号19)内部振荡电路反相放大器的输入端,是外接晶振的一个引脚。当采取外部振荡器工作时,此引脚接地。

  XTAL2(引脚号18)内部振荡器的反相放大器输出端,是外接晶振的另一端。当采用外部振荡器时,此引脚接外部振荡源。

  c.控制总线

  (1)ALE/(引脚号30):正常操作时为ALE功能(允许地址锁存),用来把地址的低字节锁存到外部锁存器。ALE引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟信号或用于定时。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LSTTL电路。

  (2)(引脚号29):外部程序存储器读选通信号。在从外部程序存储器取指令(或数据)期间,在每个机器周期内两次有效。可以驱动8个LSTTL电路。

  (3)RST/VPD(引脚号9):复位信号输入端。振荡器工作时,该引脚上持续2个机器周期的高电平可实现复位操作。此引脚还可接上备用电源。在Vcc掉电期间,由VPD向内部RAM提供电源,以保持内部RAM中的数据。

  (4)/Vpp(引脚号31):为内部程序存储器和外部程序存储器的选择端。当为高电平时,访问内部程序存储器;当为低电平时,访问外部程序存储器。

  d.I/O线

  (1)P0口(引脚号32~39):单片机的双向数据总线和低8位地址总线。在访问外部存储器时实现分时操作,先用作地址总线,在ALE信号的下降沿,地址被锁存;然后用作为数据总线。它也可以用作双向输入/输出口。P0口能驱动8个LSTTL负载。

  (2)P1口(引脚号1~8):准双向输入/输出口,它能驱动4个LSTTL负载。

  (3)P2口(引脚号21~28):准双向输入/输出口。在访问外部存储器时,用作高8位地址总线。P2口能驱动4个LSTTL负载。

  (4)P3口(引脚号10~17):准双向输入/输出口,它能驱动4个LSTTL负载。P3口的每一引脚还有另外一种功能:

  P3.0——RXD:串行口输入端。

  P3.1——TXD:串行口输出端。

  P3.2——:外部中断0中断请求输入端。

  P3.3——:外部中断1中断请求输入端。

  P3.4——T0:定时器/计数器0外部输入端。

  P3.5——T1:定时器/计数器1外部输入端。

  P3.6——:外部数据存储器写选通信号。

  P3.7——:外部数据存储器读选通信号。

  3.1.2晶振电路

  晶体振荡器,简称晶振。在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。

  单片机工作时,从取指令到译码再进行微操作,必须在时钟信号控制下才能有序地进行,时钟电路就是为单片机工作提供基本时钟的。单片机的时钟信号通常有两种产生方式:内部时钟方式和外部时钟方式。

  内部时钟方式是在单片机XTAL1和XTAL2引脚上跨接上一个晶振和两个稳频电容,可以与单片机片内的电路构成一个稳定的自激振荡器。晶振的取值范围一般为0~24MHz,常用的晶振频率有6MHz、12 MHz、11.0592 MHz、24 MHz等。一些新型的单片机还可以选择更高的频率。外接电容的作用是对振荡器进行频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率的作用,一般选用20~30pF的瓷片电容。

  外部时钟方式则是在单片机XTAL1引脚上外接一个稳定的时钟信号源,它一般适用于多片单片机同时工作的情况,使用同一时钟信号可以保证单片机的工作同步。

  时序是单片机在执行指令时CPU发出的控制信号在时间上的先后顺序。单片机的时序概念有4个,可用定时单位来说明,包括振荡周期、时钟周期、机器周期和指令周期。

  振荡周期:是片内振荡电路或片外为单片机提供的脉冲信号的周期。时序中1个振荡周期定义为1个节拍,用P表示。

  时钟周期:振荡脉冲送入内部时钟电路,由时钟电路对其二分频后输出的时钟脉冲周期称为时钟周期。时钟周期为振荡周期的2倍。时序中1个时钟周期定义为1个状态,用S表示。每个状态包括2个节拍,用P1、P2表示。

  机器周期:机器周期是单片机完成一个基本操作所需要的时间。一条指令的执行需要一个或几个机器周期。一个机器周期固定的由6个状态S1~S6组成。

  指令周期:执行一条指令所需要的时间称为指令周期。一般用指令执行所需机器周期数表示。单片机多数指令的执行需要1个或2个机器周期,只有乘除两条指令的执行需要4个机器周期。

  了解了以上几个时序的概念后,我们就可以很快的计算出执行一条指令所需要的时间。例如:若单片机使用12MHz的晶振频率,则振荡周期=1/(12MHz)=1/12us,时钟周期=1/6us,机器周期=1us,执行一条单周期指令只需要1us,执行一条双周期指令则需要2us。晶振电路如图3.5所示:

  图3.5系统晶振电路图

  3.1.3复位电路

  复位电路是由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。

  无论是在单片机刚开始接上电源时,还是运行过程中发生故障都需要复位。复位电路用于将单片机内部各电路的状态恢复到一个确定的初始值,并从这个状态开始工作。

  单片机的复位条件:必须使其RST引脚上持续出现两个(或以上)机器周期的高电平。

  单片机的复位形式:上电复位、按键复位,此处采用上电复位。

  按键复位电路中,当按键没有按下时,电路同上电复位电路。如在单片机运行过程中,按下RESET键,已经充好电的电容会快速通过电阻的回路放电,从而使得RST引脚上的电位快速变为高电平,此高电平会维持到按键释放,从而满足单片机复位的条件实现按键复位。

  单片机要复位只需要在第9引脚接个高电平持续2μs就可以实现,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K×10UF=0.1S。单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,单片机最小系统容值越大需要的复位时间越短。单片机复位电路如图3.6所示:

  图3.6系统复位电路

  3.2显示电路

  显示电路中的显示器件为LCD1902,其数据端口与单片机的P0口相接,电路连接如图3.7所示:

  图3.7 LCD1602连接图

  1602采用标准的16脚接口,其中:

  第1脚:VSS为地电源。

  第2脚:VCC接5V正电源。

  第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生重影,使用时可以通过一个1K的电位器调整对比度。

  第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。

  第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

  第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

  第7~14脚:D0~D7为8位双向数据线。

  数据位

  命令RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

  清屏0 0 0 0 0 0 0 0 0 1

  归位0 0 0 0 0 0 0 0 0*

  输入方式0 0 0 0 0 0 0 1 I/D S

  显示开关0 0 0 0 0 0 1 D C B

  光标、画面0 0 0 0 0 1 S/C R/L**

  功能设置0 0 0 0 1 DL N F**

  CGRAM地址0 0 0 1 A5 A4 A3 A2 A1 A0

  DDRAM地址0 0 1 A6 A5 A4 A3 A2 A1 A0

  读BF及AC 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0

  写数据1 0数据

  读数据1 1数据

  第15~16脚:背光灯电源。

  LCD1602指令与时序说明如下:

  表3.1 LCD1602指令表

  LCD1602在工作的过程中,在数据线上传送数据时,需将传送数据在数据线上持续一小段时间,保证单片机的P0口数据传送或接收成功,其基本操作时序如表3-2所示:

  表3.2 LCD1602基本操作时序

  操作输入输出

  读状态RS=L,R/W=H,E=H D0~D7=状态字

  写指令RS=L,R/W=L,D0~D7=指令码,E=高脉冲无

  读数据RS=H,R/W=H,E=H D0~D7=数据

  写数据RS=H,R/W=L,D0~D7=数据,E=高脉冲无

  3.3键盘电路

  在单片机应用系统中,除了复位按键外,还需要其他按键,即键盘按键,以便控制系统的运行状态或向系统输入运行参数。键盘电路一般由键盘接口电路、按键(由控制系统运行状态的功能键和向系统输入数据的数字调节键组合)以及键盘扫描程序等部分组成。本系统键盘电路共有8个按键组成,按4×2的格式布置。键盘的电路连接如图3.8所示:

  图3.8系统按键电路连接图

  键盘的工作原理是:按下键帽时,按键内的复位弹簧被压缩,动片触点与静片触点相连,按键接通,相应键向单片机端口发送一个低电平,松开键帽,按键断开。

  3.4蜂鸣器报警电路

  常用的蜂鸣器有两种,一种压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。另一种电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

  系统中单片机的P2.3脚与蜂鸣器相连,开启蜂鸣器功能。当单片机的管脚输出固定频率电平时蜂鸣器响起。声音是由振动所产生的,一定频率的震动就产生了一定频率的声音,其电路连接图如图3.9所示:

  图3.9蜂鸣器电路连接图

  由于自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音,很简单,这里就不对自激蜂鸣器进行说明了。这里只对必须用1/2duty的方波信号进行驱动的他激蜂鸣器进行说明。单片机驱动他激蜂鸣器的方式有两种:一种是PWM输出口直接驱动,另一种是利用I/O定时翻转电平产生驱动波形对蜂鸣器进行驱动。PWM输出口直接驱动是利用PWM输出口本身可以输出一定的方波来直接驱动蜂鸣器。在单片机的软件设置中有几个系统寄存器是用来设置PWM口的输出的,可以设置占空比、周期等等,通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后,只要打开PWM输出,PWM输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。比如频率为2000Hz的蜂鸣器的驱动,可以知道周期为500μs,这样只需要把PWM的周期设置为500μs,占空比电平设置为250μs,就能产生一个频率为2000Hz的方波,通过这个方波再利用三极管就可以去驱动这个蜂鸣器了。而利用I/O定时翻转电平来产生驱动波形的方式会比较麻烦一点,必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。比如为2500Hz的蜂鸣器的驱动,可以知道周期为400μs,这样只需要驱动蜂鸣器的I/O口每200μs翻转一次电平就可以产生一个频率为2500Hz,占空比为1/2duty的方波,再通过三极管放大就可以驱动这个蜂鸣器了。一般情况下,P2.3脚处于高电平,本系统中的蜂鸣器驱动方式较为简单只要系统进入报警时间时,单片机控制P2.3脚输出一定频率方波,蜂鸣器振动发声,实现声音报警功能。

  3.5发光二极管电路

  发光二极管在系统中结合蜂鸣器报警同步作用,其电路连接如图3-8所示:

  图3-8发光二极管电路连接图

  发光二极管一端接电源供电,通过电阻与单片机P2.4脚连接,一般情况下,P2.4为高电平,发光二极管处于熄灭状态,当进入报警时间时,P2.4脚降为低电平,发光二极管导通亮起,其中的电阻起到对通过二极管的电流的调节作用,使得二极管正常发光。

  3.6定时模式装入初值的计算

  对于定时模式,是对机器周期计数,而机器周期与选定的主频密切相关。因此,需根据应用系统所选定的主频计算出机器周期值。现在以主频12MHz为例,则机器周期为

  实际定时时间Tc=x×Tp。

  式中Tp为机器周期,Tc为所需定时时间,x为所需计数次数。Tp和Tc一般为已知值,在求出Tp后即可求得所需计数值x,再将x求补码,即求得定时计数初值。即

  例如设定时时间为Tc=5ms,机器周期Tp=1μs,可求得定时计数次数

  设选用工作方式1,则n=16,则应设置的定时时间计算出值为

  还需将它分解成两个8位十六进制数,分别求得低8位为B0H装入TLx,高8位为3CH装入THx中。

  工作方式0、1、2的最大计数次数分别为8192、65536和256。

  4系统软件设计

  本软件所实现的功能是:单片机检测按键的输入信息,并实时地显示在LCD1602上,在系统记录下四次用药时间和每次的用药量之后,调节好系统时钟后系统开始运行,在运行的过程中,单片机将定时的四个时间与系统的实时时间相比较,相等时即报警,并显示此次用药的服用量。主程序调用子程序,子程序之间又嵌套调用,总之,各元件所对应的子程序在主程序的调用驱动作用下,协调运行工作,共同实现实现药盒的系统功能。

  各个程序模块的结构如图4-1所示:

  图4-1各程序模块结构图

  4.1系统主程序

  主程序模块主要完成控制系统各部件的初始化和实现各功能子程序的调用,也可经两重或多重嵌套调用子程序,主程序下辖多个子程序模块,系统通过运行主程序将各个子程序模块的功能协调实现。整个的系统运行在主程序的无尽循环中,不断地进行运算操作,实现各阶段的相应功能。

  在本系统的主程序中,随主程序运行到不同的阶段,主程序要在时钟的驱动下,首先完成对系统各个模块的初始化,之后进入到循环当中;在进入到循环后对键盘扫描子程序进行调用,扫描键盘输入信息,经运算后调用数据刷新子程序将输入信息实时地显示在LCD1602上,实现四次时间定时和和每次用药服用量的设定,然后完成对实时时间的调节;当实时时钟向前运行时,将定时时间与系统实时时间作比较,两者相等时则进入报警程序。主程序流程如图4-2所示:

  图4-2主程序流程图

  4.2系统软件子程序

  系统软件子程序较多,主要有延时子函数、数据刷新子函数、LCD测忙子函数、LCD写命令子函数、LCD写数据子函数、LCD读状态子函数、LCD读数据子函数、初始化子函数、按键扫描子函数、中断子函数等。其中较为重要的为按键扫描子函数和中断子函数。现仅介绍按键扫描子函数和中断子函数。

  4.2.1按键扫描子函数

  按键扫描子函数检测2+2共4个键的输入信息。2个为时间调节按键,其中一个为功能按键,一个为调节键,当功能按键按下时,开启调节功能,随功能键按下次数不同,调节键分别对时间的时和分进行调节;另外2个为定时时间和药物用量的调节键,配合4个定时按键使用。程序流程如图4-3所示:

  图4-3按键扫描子函数程序流程图

  4.2.2中断子函数

  当定时器寄存器TH0/TL0溢出时,溢出标志位TF0被置位,定时器中断发生,当单片机转去执行定时器中断时,定时器溢出标志位TF0被硬件清零。在中断子函数中对变量做计数控制实现计数定时。

  定时器中断子程序流程如图4-4所示:

  图4-4中断子程序流程图

  5系统的调试

  此系统的大部分的软硬件的调试都是在普中科技单片机开发板之上完成的。在完成之前的一系列工作之后开始在开发板上进行实验,若是成功了之后,就可以开始着手焊接了,焊接过程中需要严格注意安全,谨慎使用实验仪器。最后进过一些简单的连线就可以成功实现本次设计的各种功能。系统调试运行及问题分析

  整个系统设计完成后,要进行运行调试,排除软件和硬件的故障,同时验证系统的可靠性及稳定性,使系统符合设计要求。本系统的调试主要分两个步骤:单片机系统调试(硬件调试和软件调试)及整个控制系统试运行调试。

  5.1单片机系统调试方法及步骤

  单片机系统的调试应包括硬件及软件两部分,主要是通过调试发现硬件及软件中存在的问题,查看其运行结果是否符合设计要求。

  系统硬件和软件的研制可以相互独立的平行进行,软件调试可以在硬件完成之前,硬件也可以在无完整应用软件的情况下进行调试,但它们需要借助另外的工具提供调试环境。硬件和软件分调完成之后,还要再进行软件和硬件的联调,在调试中找出问题,判断故障源,修改软硬件。

  在对系统进行实际调试时,首先应对硬件进行静态调试,同时对系统软件进行初步调试,此后再对软件和硬件进行动态调试,最后才能使系统进入正常工作。

  静态调试主要是排除明显的硬件故障。在电路搭建好后,对其进行仔细检查,查看端口是否正确连接,连接是否可靠。同时还应当用万用表检查电路,看应当开路的地方是否开路,应当短路的地方是否短路,电源地线连接是否可靠。在焊接后,查看焊接是否牢固,有无虚焊或短路等。在将芯片、传感器等元件插到电路板上时,要保证各处电源极性、电压正确,以防止因电源极性接反或电压过高损坏芯片或传感器。此外,插入芯片必须在断电的情况下进行,特别注意芯片的方向不要插反。软件调试主要是系统软件程序在编制好以后,可通过汇编软件对源程序进行汇编,变为可执行的目标代码,在汇编过程中出现的错误,要及时纠正。在软件调试时采用软件模拟开发系统对程序进行调试,这种模拟开发系统是在计算机上利用模拟软件实现对单片机的硬件模拟、指令模拟及运行状态模拟,从而完成应用软件开发的全过程。调试过程中的运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,通过这些显示结果随时跟踪程序运行状态,以确定程序运行无错误。动态调试主要是控制系统的软件和硬件是密切相关的,软件模拟开发系统不能对硬件部分进行诊断,同时也不能实时在线仿真,所以用户程序还需跟硬件连接起来进行联调,同时对软件和硬件进行检查和诊断。整个单片机系统进行在线调试时,需借助仿真开发工具来对用户软件及硬件电路进行诊断、调试。在应用系统各电路板调试成功后,将用户程序加载到在线仿真器上,这时就能单步、多步或连续地执行目标程序,同时也可以根据需要分段设置断点执行用户程序。系统中的硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真来排除的。对于与硬件无联系的用户程序,例如定时标志等,虽然已经没有语法错误,但可能存在逻辑错误,这时,就借助于动态在线调试手段发现逻辑错误,直至逻辑错误纠正为止。而对于一些与硬件相关的用户程序,如接口驱动程序等,则需要配合硬件,进行在线调试,如果有逻辑错误,也要及时纠正修改。程序调试完毕后,利用在线编程器将程序固化到单片机中,使整个系统运行起来。

  5.2软件调试

  软件调试过程中采用逐步添加模块功能程序的方法,一步步添加各功能模块的应用程序,逐步修改完善。

  初步软件程序仅显示时间,完成时钟的功能,后逐步添加位定义,完成所有与按键输入有关的程序,实现系统各参的可调节,再之后添加LCD1602读取数据的子程序,完成对LCD1602显示的各参的记录,完成时间定时的功能,最后添加报警提醒程序,实现报警功能。

  在系统软件编程的过程中,可分为以下几个阶段:

  1、编写简单的时钟程序,实现时钟的运行。

  2、在时钟的基础上,增加2个键,并添加驱动程序实现其输入功能,一个为功能键,一个为调节键;当功能键按下,启用调节键的调节功能;功能键按下1次,调节键对分钟进行调节;功能键按下2次,调节键对小时进行调节;功能键按下3次,退出时钟调节,时钟在调节后的基础上开始运行。

  3、再增加2个键,对所需设定的时间和用药量进行调节,一个为功能键,一个为调节键,分别对小时、分钟、四种用药量共6个量进行调节。

  4、再增加4个键并增加报警程序。在将设定时间和用量调节好后,按下4个键中的一个,如此4次,系统即可记录4次服药过程的各参。

  软件调试所使用的软件为KEIL,是电子是电子方向技术人员使用较多的软件,使用版本为KeilμVision4英文版,是高效的开发应用程序。这一版本还可支持很多最新的ARM芯片。

  KEIL的优点如下:

  1、KeilμVision4生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

  2、与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。尤其是对用过汇编语言后再使用C来开发的人而言,其与汇编相比所体现出来的好处更加深刻。

  KEIL软件的编译界面如图5-1所示:

  图5-1 KEIL软件编译界面图

  KEIL软件调试界面如图5-2所示:

  图5-2 KEIL软件调试界面图

  5.3硬件调试

  硬件在调试过程中,大部分的硬件工作原理都是在单片机开发板上完成的。由于开发板上集成了大部分的单片机常用的模块,启用时只需通过连线或者插拔相应的短路帽即可将该模块接入单片机系统加以调用。

  初步软件程序仅实现单片机系统对定时模块的控制,实现LCD1602时钟的显示,随程序功能的逐步完善,逐步添加按键输入功能及用药量的调设功能,在完成之后加入对时间定时与用药量记录功能,然后加入定时显示提醒功能,最后完成蜂鸣器的声音报警提醒功能。

  系统硬件的验证过程随系统软件的完善过程可分为以下几个阶段:

  1、连接LCD1602模块到最小单片机系统,烧录程序,验证LCD1602的显示功能,并随软件的修改完善,LCD1602最终正常显示。

  2、连接4×2键盘到系统中,随软件的不断完善。逐步启用8个按键。

  3、连接LED发光二极管到系统中,并代替蜂鸣器验证定时和报警功能。

  4、连接蜂鸣器到系统中,并在系统中添加相应的驱动程序,验证系统的声音报警功能。