基于单片机的医院病床呼叫系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的医院病床呼叫系统设计
摘要: 本文主要应用单总线技术和单片机间串行通信技术,研究了基于单片机的一种可靠医院病床呼叫系统,并且运用Proteus和Keil软件仿
真效果理想,实现了病床呼叫的功能。
它不但能够有效传送呼叫信
息,而且能通过数码显示求助病床号和通过蜂鸣器声音求助医护人
员,还可以存储呼叫信息、以备查询,同时可以扩展到与计算机联
机管理。
该系统具有电路结构简单、成本低、可靠性高、布线施工
方便易于维护等特点。
特别是当病床数目较多时,更具有优越性。
关键词: 病床呼叫系统串行通信记忆存储单总线技术
中图分类号:TP36
MCU Based Call System Design for Hospital
Abstract:This article mainly introduced the application of the single-bus technology and inter-MCU serial communication technical, Studied a reliable call system for hospital based on MCU, and simulated the circuit with Proteus and Keil, the results are satisfactory. The system achieved the function of beds calling, is able to send the call information effectively and display the number of beds through its digital display, ask doctors and nurses for help through Sound buzzer. Besides the system can store call
information for query, and extended the link with computer for management. The system has a simple circuit structure and low cost, high reliability and easy wiring construction features. The more the number of hospital beds is, the more advantages it would has. Key words: Call system; Communication; Memory storage; Single-bus technology
目录
基于单片机的医院病床呼叫系统设计
陈继铭(指导教师,梅斌)
(湖北师范学院教育信息与技术学院湖北黄石 435002)1.前言
近年来,随着人们生活水平的不断提高,人们对医疗水平的要求也不断提高,特别是突发情况下病人请求值班医生或护士进行及时诊断或护理,这一环节对提高医院的管理服务质量显得尤其重要,这同时也大大提高了医院医护人员应对突发事件的能力。
在以往医院,病人遇到突发情况时,由于向医护人员得不到及时的救助,往往错过了最佳治疗的时间,最后造成小病酿成大病,大病酿成无药可医,最后导致死亡。
因此,一种新型临床呼叫仪器的研制成为近些年来的研究热点之一。
为了提高医院管理水平,需要有新型可靠病床呼叫仪的辅助。
临床求助呼叫是传送临床信息的重要手段,病房呼叫系统可将病人的请求快速传送给值班医生或护士,并在值班室的监控中心主机上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。
呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。
它要求及时、准确、可靠、简便可行、利于推广。
利用电力线载波通信技术、单片机多机通信和计算机监控管理技术设计的具有呼叫、振铃、显示排队、优先权设定、存储记录等功能的病床呼叫系统,满足了医院的病房管理和护理要求。
本文基于单片机的医院病床呼叫系统设计,是一种利用单总线技术和单片机间串行通信设计的有记忆可靠病床呼叫系统,他不但能够有效传送呼叫信息,而且能通过数码显示求助病床号和通过蜂鸣器声音求助医护人员。
因此,本课题是非常有意义的。
2.系统功能分析及设计要求
一个很好的呼叫系统,它的功能设计首先要符合用户的习惯,同时操作方便,易学,易用。
本系统应包括声音报警功能,数码显示功能,复位清零,查询功能。
当医院病人有紧急情况或者打静脉点滴时,可以很方便的按下呼叫按钮,发出呼叫信号,这时医院值班室就显示病床号并报警。
考虑到医护人员可能有特殊的情况离开值班室,设计时候要求主机可以存储呼叫记录、即有记忆方式。
考虑到以后医院病床的无限增加,设计时采用单总线技术无疑是一种最好的选择,它可以允许在单总线上挂任意多个测控对象。
整个电路要求以C51系列单片机为控制核心,以串行通信方式传输数据[1]。
要求所设计方案可以用硬件实现,具有很高应用价值,同时准确、可靠、简便可行、利于推广,可以将病人的请求快速的传递给值班医生或护士,并在值班室主机上留下完整的呼叫记录信息。
从而可以有效提高医疗服务水平,适应现代社会需求。
3.系统总体设计方案
本设计采用两个单片机系统,同时可以扩展和PC机通信,在PC机上用可视化菜单管理病房呼叫记录情况,以便于更加系统的管理医院病房和考察医院管理水平及效率。
两个单片机系统之间实行串行通信。
从机采用分布是控制方式[7],从机单片机和呼叫器的应答改变了以前通过一根三芯导线来完成(即包括电源线,信号线,地线)来完成,而是采用单总线器件构成的终端呼叫器和从机单片机构成呼叫系统,这样从机单片机和各病床呼叫器终端之间只有一根双绞线(一根信号线,一根地线)——即单总线,它将地址线、数据线、控制线合为一根信号线路,允许在这根信号线上挂上百个测控对象。
主机以89C51为控制中心,通过串口接受从机发来的呼叫信息,通过运算处理送译码电路数码显示及报警求助,同时存储呼叫信息[2],可以实行复位记录清零,删除记录,上翻和下翻查找呼叫记录信息。
因此,基于单片机的医院病床呼叫系统设计通常应该包括主机和从机、主机包括报警电路、译码显示电路、复位、查找操作电路等基本单元,而且从机包括呼叫电路,向主机和PC机发送呼叫信息电路。
1、主机系统框图:
图主机系统框图
2、从机系统框图:
图从机系统框图
4.主要应用器件及技术原理
微处理器介绍
4.1.1、MCS-51单片机的特点:
(1)小巧灵活、成本低、易于产品化。
能组装成各种智能式测控设备及智能仪器仪表。
(2)可靠性好,应用范围广。
单片机芯片本身是按工业测控环境要求设计的,抗干扰性强,能适应各种恶劣的环境,这是其他机种无法比拟的。
(3)易扩展,很容易构成各种规模的应用系统,控制功能强。
单片机的逻辑控制功能很强,指令系统有各种控制功能指令,可以对逻辑功能比较复杂的系统进行控制。
(4)具有通讯功能,可以很方便地实现多机和分布式控制,形成控制网络和远程控制。
正是由于51系列单片机具有以上优点,所以成为本次毕业设计所选用的处理器。
2、MCS-51 单片机的结构
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
从工作原理上讲,单片机就是一种微型计算机,是一种“程序存储式”计算机。
它是在一块硅片上集成了中央处理器(CPU)、随机存储器(RAM)、程序存储器(ROM或EPROM)、定时/计数器以及各种I/O接口,也就是集成在一块芯片上的计算机。
图 MCS-51单片机的结构
单片机双机串行通信原理
4.2.1单片机串行口结构
C51单片机串行接口是一个可编程的全双工串行通信接口。
它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的C51多机系统,也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
C51单片机通过管脚RXD(,串行数据接收端)和管脚TXD(,串行数据发送端)与外界通信。
SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。
它们有相同名字和地址空间,但不会出现冲突,因为它
们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
图 51单片机串行口结构
本设计串行口采用工作方式一,用定时器一工作在方式2做为波特率发生器,为可变的10位异步通信接口方式。
发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
图是异步通信的字符帧格式:
图异步通信字符帧格式
输出当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。
串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
输入在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。
只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。
所以在方式1接收时,应先用软件清零RI和SM2标志。
4.2.2 单片机双机通信连接
本系统设计采用的是单工通信制式,在这种制式下,通信线的一端接从机发送器,一端接主机接收器,数据只能按照一个固定的方向传送。
值得说明的是,尽管多数串行通信接口电路具有全双工功能,但一般情
况只工作于单工或半双工制式下,这种用法简单、实用。
图双机通信示意图
单片机与PC机通信原理
4.3.1串行通信总线标准及其接口连接
在单片机应用系统中,数据通信主要采用异步串行通信。
在设计通信接口时,必须根据需要选择标准接口,并考虑传输介质、电平转换等问题。
采用标准接口后,能够方便地把单片机和外设、测量仪器等有机地连接起来,从而构成一个测控系统。
同样当我们需要单片机和PC机通信时,通常采用RS-232接口进行电平转换。
RS-232C是使用最早、应用最多的一种异步串行通信总线标准。
它是美国电子工业协会(EIA)1962年公布、1969年最后修定而成的。
其中RS表示Recommended Standard,232是该标准的标识号,C表示最后一次修定。
RS-232C主要用来定义计算机系统的一些数据终端设备(DTE)和数据电路终接设备(DCE)之间的电气性能。
MCS-51单片机与PC机的通信也是采用该种类型的接口。
由于MCS-51系列单片机本身有一个全双工的串行接口,因此该系列单片机用RS-232C串行接口总线非常方便。
RS-232C串行接口总线适用于:设备之间的通信距离不大于15米,传输速率最大为20kB/s。
RS-232C不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意。
常用的电平转换集成电路是传输线驱动器MC1488和传输线接收器MC1489。
另一种常用的电平转换电路是MAX232。
4.3.2单片机与PC机通信与电平转换
单片机(从机)将计算好的病床号,写入SBUF寄存器,经过MAX232电平转换后,将信号串行传输给PC机的串口。
PC机接收到呼叫信号后,将呼叫记录录入VB菜单管理系统,它记录呼叫时间,次数以及是否处理、处理结果。
如此医院可以完全实现对所有病床的呼叫求助管理,同时对值班医护人员的服务进行考核测评,提高了医院服务效率和质量。
图 PC机与单片机通信电平转换电路
上图为PC机的DB9接头与AT89C51单片机通过MAX232连接起来的电路原理图。
单总线技术原理
单总线技术即从机采用分布是控制方式,从机单片机和呼叫器的应答改变了以前通过一根三芯导线(即包括电源线,信号线,地线)来完成,而是采用单总线器件构成的终端呼叫器和从机单片机构成呼叫系统,这样从机单片机和各病床呼叫器终端之间只有一根双绞线(一根信号线,
一根地线)——即单总线,它将地址线、数据线、控制线合为一根信号线路,允许在这根信号线上挂上百个测控对象。
从机终端呼叫器由单总线器件DS2401和开关封装在一起构成,DS2401芯片是一种符合单总线协议的ROM硅片,厂家在其中写入了唯一的序列号,用作寻址定位的标识。
对他的操作非常简单,只需在发完复位脉冲并检测到回复信号后,由主机发送读序列号命令,即可将序列号按单总线协议要求读回来。
利用它的这种特性可以构成简单的病床终端呼叫器,并将其挂在单总线上即可[7]。
图 DS2401单总线设计
如上图,当某一病床开关闭合时,DS2401对地线短路接通,此时单片机可以查询到该芯片的序列号,即病人的呼叫信号,然后经计算得到病床号,再有从机传送到主机报警显示。
5.系统硬件电路设计
(1)主机PCB原理图:图中主要以AT89C51为控制核心,包括显示电路,报警电路,复位晶振电路,和查询电路。
图主机PCB原理图
(2)从机PCB原理图:图中主要以AT89C51为控制核心,包括呼叫电路,复位晶振电路,和通信电平转换电路。
图从机PCB原理图
晶振及系统复位电路
1、XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
本系统采用内部方式,串行通信采用波特率9600,晶振选用。
图晶振内部方式图复位电路
2、复位:在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
常用的复位电路如图所示。
呼叫器和查询电路
如图,由于厂家在DS2401芯片中写入了唯一序列号,当某一呼叫器开关闭合时,DS2401对地线短路接通,此时单片机可以查询到该芯片的序列号,即病人的呼叫信号,然后经计算得到病床号,再有从机传送的主机报警。
同样记录复位和查询电路设计和呼叫器电路设计是一样的原
理[3]。
实际情况中要对不同病房呼叫设置不同的响应优先级,以此来处
理呼叫冲突问题。
图呼叫器电路设计
数码显示电路
如图,使用端口来选通数码管,控制数码管的供电,这里只给出了一个数码管的连接方法,如果病床数目达到了两位数、甚至是三位数,就相应需要两个或者三个数码管了,数码管采取共阳极接法,当要显示某一位数时候,单片机通过P0端口送出要显示数的对应七段代码,通过锁存器可以保持数码管处于点亮的状态;在此同时,用口来送出选通信号,即高电平。
但是因为单片机驱动电流是很小的,驱动LED发亮,在这里用PNP三极管来放大电流,以此来驱动数码管。
当然,当数码管个数超过一个时,接法和一个数码管时接法类似,但是需要动态扫描显示;为了防止重影,每送完数据要关闭数码管,再开启下个数码管显示,同时注意有一定的延时操作。
图 LED数码显示电路
报警电路
如图,LM386是低频功率放大器,我们通过单片机产生报警信号通过端口送给报警电路,实行功率放大最后产生报警声音。
图中使用电容可以有效地降低直流偏压的影响,同时还可以降低电源纹波,以此使交流报警信号无失真的进入喇叭发出警报声。
图报警电路设计
6.系统软件设计
系统主、从机软件流程图
1、主机软件流程图:
图主机软件流程图
2、从机软件流程图:
图从机软件流程图
系统程序设计
6.2.1 主程序
一、主机:(程序见附录一)
主机开机初始化,对工作模式、波特率、串行通信以及做好设定,接受数据准备。
同时开机数码管显示0,表示无呼叫信号。
无呼叫信息情况下也是显示0。
初始化完后,进入死循环,不断检测有无新呼叫信号发送过来,如果有就显示报警并存储起来,同时循环中,不断检测有无复位,查询操作的到来;若有,则调用数组元素(呼叫记录)并显示。
关于通信的波特率设置。
方式1的波特率是可变的,以定时器T1作波特率发生器使用,其值由定时器1的计数溢出率来决定,其公式为:
1623212(2)
SMOD
OSC f x =⨯⨯-波特率(其中x 表示计数初值) 二、从机:(程序见附录二)
从机主程序开机上电进入初始化,设定工作模式,通信波特率。
然后进入死循环不断扫描单总线上有无病床呼叫信号到来,一旦有,就立刻开启中断,然后进入串行中断状态,在中端服务程序中计算键值,同时将求助信号发送给主机。
6.2.2 床号数码显示程序
void led_show(uchar a)
{
P0=~a;
delay_ms(1);
}
这里以一个数码管显示为例,不考虑多个数码管显示问题,由于数码管显示代码是按共阴极编写的,而硬件电路中要求发来的显示数据是共阳极的,所以要取反操作。
向端口送入数据后可以延时1ms 。
在实际应用中在送数据同时要向选通线送入高电平才可以。
送入显示的数据可以通过锁
存器保持LED点亮的状态,直到下一次新的数码值的到来才会改变。
6.2.3 声音报警程序
void baojing( ) 6.2.43f3f3f3f3f3f3f3f3f3f4F66”4F66”单片机控制的双向呼叫系统[J] .电子技术. 2001年 10期??
[2] 赵曙关,李增烈. 具有记忆功能的病房呼叫系统[J].电子科技.
1998年 2期??
[3] 陈新岗,赵阳阳等. 基于单片机的无线病房呼叫器[J]. 重庆工学院
学报. 2008年 10期?
[4] 李长俊. 新型病床呼叫系统的研制[J]. 仪器仪表学报. 2004年 04
期增刊???
[5] 罗伏力. 8031控制的病房呼叫系统[J]. 衡阳市机电工程学校.
2002年6期
[6] 黄宇飞,秦旭. 单片机单总线技术[J].单片机与嵌入式系统应
用.2001年01期??
[7] 吴江,陈尚松. 单总线技术在测控系统中应用[J]. 电测与仪
表.1999年 09期?
[8] 李仕心. 多位病床呼叫器 [J]. 2001年第13卷 02期??
[9] 李树雄,李拓. 基于PLC的智能病床呼叫系统设计[J]. 医疗卫生装
备. 2008年第09卷03期??
[10] 张华林,林达明. 无线病房呼叫系统的研制[J]. 国外电子元器件.
2006年 08期??
附录一:
//主机主程序设计
#define uchar unsigned char
#define uint unsigned int
#include <>
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
code
table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0—9
//要显示的床号
uchar k;
uchar store_1,store_sign;
void delay_ms(unsigned int n) //延时nMS的程序
{
unsigned char j;
while(n--)
for(j=0;j<230;j++); //230是实验测试所得!
}
unsigned char uart_getc( ) //主机接收程序
{
while(!RI);
RI = 0;
return SBUF;
}
void baojing( ) //报警程序 {
uint i,j;
for(j=0;j<12;j++)
{
for(i=0;i<10;i++)
{
P22=1;
delay_ms;
P22=0;
delay_ms;
}
for(i=0;i<10;i++)
{
P22=1;
delay_ms(2);
P22=0;
delay_ms(2);
}
}
}
void led_show(uchar a) //数码显示程序 {
P0=~a;
delay_ms(1);
}
void main( ) //主机主程序
{ uchar store[10]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
SCON=0x50; //串口工作在方式1,异步模式
PCON=0x00; //波特率翻倍
TMOD=0x20; //定时器1工作在方式2
TH1 =0xfa; //波特率9600,晶振为
TL1 =0xfa; //自动重装在赋值
TR1 = 1; //启动定时器,产生波特率
RI = 0; //接收标志位清零
TI = 1; //发送标志位清零
ES = 1; //中断允许
EA = 1; //总中断允许
k=0;
led_show(0x3f); //开机显示0
store_sign=0;
while(1)
{ if(store_sign==1)
{ if(k==9) {k=0;}
store[++k]=store_1;
store_sign=0;
}
if(P23==0)
{store[k]=0x3f;led_show(store[k]);delay_ms(25);}
//复位操作
if(P24==0) { if(k==0){k=10;} led_show(store[--k]); delay_ms(25);}
//上翻操作
if(P25==0) {if(k==9){k=0;} led_show(store[++k]); delay_ms(25);}
//下翻操作
}
}
void serial_int(void) interrupt 4 //串口接收中断服务程序{ unsigned char temp;
if (RI) {
temp = SBUF;
RI = 0;
store_1=temp;
store_sign=1;
switch (temp)
{
case 0x06: led_show(temp); //收到病床一呼叫信号
baojing();
break;
case 0x5B: led_show(temp); //收到病床二呼叫信号
baojing();
break;
case 0x4F: led_show(temp); //收到病床三呼叫信号
baojing();
break;
case 0x66: led_show(temp); //收到病床四呼叫信号
baojing();
break;
default: break;
}
}
}
附录二:
//从机主程序设计
#define uchar unsigned char #define uint unsigned int #include <>
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
uchar keytest;
void keyscan();
uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0—9
//要发送的数据
void delay_ms(unsigned int n) //延时nMS的程序
{
unsigned char j;
while(n--)
for(j=0;j<230;j++); //230是实验测试所得!
}
void uart_putc(unsigned char c) //从机发送程序{
SBUF = c;
while(!TI);
TI = 0;
}
void main() // 从机主程序
{
SCON=0x50; //串口工作在方式1,异步模式PCON=0x00; //波特率翻倍
TMOD=0x20; //定时器1工作在方式2
TH1 =0xfa; //波特率9600,晶振为
TL1 =0xfa; //自动重装在赋值
TR1 = 1; //启动定时器,产生波特率
RI = 1; //接收标志位置一,激活串行中断
TI = 0; //发送标志位清零
ES = 1; //中断允许
EA = 1; //总中断允许
while(1)
{
keyscan();
}
}
void keyscan(void)
{
keytest=P2&0x0f;
if(keytest!=0x0f)
{
delay_ms(25);
if(keytest!=0x0f) //软件按键去抖动处理
{
keytest=P2&0x0f;
}
}
void com_serv(void) interrupt 4 //串口发送中断服务程序{
if(keytest==0x0E){ keytest=0;uart_putc(table[1]); } if(keytest==0x0D){ keytest=0;uart_putc(table[2]); } if(keytest==0x0B){ keytest=0;uart_putc(table[3]); } if(keytest==0x07){ keytest=0;uart_putc(table[4]); } }。