病房呼叫系统设计
摘要:病房呼叫系统是病人请求值班医生或护士进行诊断、护理的紧急呼叫工具,它主要用于协助医院冰原在病床上方便的呼叫医务人员,可将病人的请求快速的传送给值班医生护士,是提高医院和病房护理水平的必备设备之一。病房呼叫系统主要是指当呼叫源有呼叫信号时,在系统上有相应的声、光呼叫信号指示,并能显示出呼叫号码。此系统主要是有51单片机,一个4*4按键模块,三个数码管,一个蜂鸣器组成。病人有需要时可以按下相应的键,同时值班室的蜂鸣器响,数码管分别显示有几个病人呼叫和相应的床位号。
关键词:单片机;LCD;4*4键盘
引言
伴随着医疗体制改革的不断深化和医疗事业的飞速发展,越来越多的人们需要迅捷、方便地得到医院的各种各样的医疗服务,这必是使医院之间的竞争日趋激烈,这使得衡量一个医院的综合水平的高低,不在再仅仅局限于软硬件的建设上,更要比服务。原有的服务体系已不足以适应现代社会需求,谋求适合现在社会需求的客户服务系统,是所有企事业单位计划或正在做的工作。这些工作有力于改善服务质量,提高效率并增加企业效益,从而赢得良好的声誉。如何利用先进的信息技术为医院服务,更大程度的提高医院的服务质量及利润,是医院信息化建设中的一个重要着眼点。
病房呼叫系统就是提高医院服务质量的必备设备之一。
1 设计目标
本次课题设计的主要目标是:
利用51系列单片机进行病房呼叫系统的设计;
利用4*4键盘做为呼叫按钮;
利用三个八段数码管来分别显示共有多少个病人呼叫及病床号;
2 设计方案要求
设计一个可容16张床位的病房呼叫系统。要求每个床位都有一个按钮,当病人需要呼叫护士时按下按钮。此时护士在值班室内的呼叫系统系统板上蜂鸣器响,数码管上显示该患者的床位号。当护士按下“响应”键时,取消当前呼叫。当有多个病人在同一个时间段呼叫时,数码管1显示共有多少个病人呼叫,数码管2,3显示病床号,当护士响应呼叫后,数码管1数字减1,数码管2,3显示下一个病人病床号。
3系统的总体设计
3.1 总体结构框图
本设计是基于AT89C51单片机设计的病房呼叫系统设计。
该系统就是以Atmel公司的AT89C5单片机作为主控制器,包括键盘输入电路,显示电路,以及晶振复位等来实现病房呼叫系统。
图1 总体设计结构框图
3.2 框架模块功能描述
(1)输入部分包括按键按输入,按按键输入相当于一个外界得干扰信号,用于向单片机传输命令或数据。
(2)调节电路部分包括晶振和复位。需要时对控制器嘎查中断信号,以及对系统进行调节。
(3)微处理器采用常见AT89C51单片机为控制核心,通过软件编程,对实时采集额的温度进行处理,同时也对调节进行驱动和控制。
(4)输出部分包括LED显示电路,将从键盘上的输入信号显示出来,给人以直观的印象。
(5)系统过程的综诉:
键盘(按钮)输入信号,AT89C51单片机收到信号进行处理,通过输出信号进行处理,通过输出系统将信号显示在点阵上,此时还可以通过按键进行中断调节,显示会发生相应变化,实际情况出发,人们易于操作。
4 系统硬件设计
4.1 硬件结构设计框图
图2硬件结构设计框图
4.2 系统总体硬件结构图
系统利用单片机AT89C51作为呼叫系统的核心,外围电路有:单片机最小系统模块,按键模块,显示模块,响铃模块,复位模块以及其它各应用电路。
图3系统总体硬件结构图
在该系统中,我们用四乘四按键模拟十六个床位,且1602LCD可以显示被呼叫的床位的编号。同时我们还设定了一个初始值,在没有按键被按下时,1602LCD显示“LCDNUMBER 00”。当四乘四按键中任一一个被按下时,显示床位号。
设定了响铃模块,以提醒我们有按键按下。由于,我们器材的限制,我们用发光二极管来提示有按键被按下。
设定了复位模块,当复位按键按下时,该系统就被还原为初始状态。
4.3 系统主要元器件介绍
4.3.1 AT89C51
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。
8位CPU·4kbytes 程序存储器(ROM)(52为8K)
256bytes的数据存储器(RAM) (52有384bytes的RAM)
32条I/O口线·111条指令,大部分为单字节指令
21个专用寄存器
2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
一个全双工串行通信口
外部数据存储器寻址空间为64kB
外部程序存储器寻址空间为64kB
逻辑操作位寻址功能·双列直插40PinDIP封装
单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。[1]
图4AT89C51的个引脚功能
4.3.2 1602LCD
1602LCD 液晶显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点, 在袖珍式仪表和低功耗应用系统中得到广泛的应用。目前字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件。LCD1602 液晶显示模块可以显示两行,每行 16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
1602LCD采用标准14脚(无背光)或16脚(带背光)接口,LCD1602各引脚功能如表1所示。VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。若对比度过高会产生“鬼影”,使用时可以通过一只 10KΩ电阻来调整对比度。RS为寄存器选择端,RS为高电平时选择数据寄存器,为低电平时选择指令寄存器。RW为读写信号线,为高电平时进行读操作,为低电平时为写操作。当RS和RW同为低电平时可以写入指令或者显示地址。当 RS 为低电平、RW 为高电平时可以读忙信号,当 RS 为高电平、RW 为低电平时可以写入数据。E 为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。D0~D8为位双向数据线。
表11602LCD引脚功能
1602LCD的写操作时序图如图5下。
分析时序图可知操作1602液晶的流程。关于时序图中的各个延时,不同厂家的液晶其延时不同,我们无法提供准确数据,大多数基本都为纳秒级,单片机操作最小单位为微妙级,因此我们在写程序时可不做延时,不过为了使液晶运行稳定,最好做简短延时,我们自行测试后选择50ms的延时。
图51602LCD的写操作时序图
实验板上1602液晶与单片机接口如图6所示。
图6实验板上1602液晶与单片机接口
4.3.24*4键盘
我们采用4*4键盘模拟病房的呼叫按钮,其图如下。在使用过程中,我们将AT89C51的P1口分为两部分,这两部分分别接入4*4键盘的行线和列线。编制程序的时候我们使用线反转法来实现四乘四按键的扫描。第一步,将列线作为输出线,行线作为输入线。置输出线全部为0,此时行线中呈低电平0的为按键所在行,如果全部都不是0,则没有按键按下。第二步,将第一步反过来,即将行线作为输出线,列线作为输入线。置输出线全部为0,此时列线呈低电平的为按键所在的列。这样,就可以确定了按键的位置(X,Y)。[2]
图7矩阵键盘接线图
5 系统的软件设计
我们总体程序的编写的框图如下。以实现16张床位的病房呼叫系统。其中每个床位都有一个按钮,当病人需要呼叫护士时按下按钮,这用我们的四乘四按键来模拟。此时护士在值班室内的呼叫系统系统板上蜂鸣器响,数码管上显示该患者的床位号。当护士按下“响应”键时,取消当前呼叫,即通过复位装置来实现。
图8主程序流程图
子程序图表述了线反转法的实现过程。当有键按下时,用延时去键抖动,然后用线反转法扫描,分辨出被按键的行和列,然后中断返回。
图9子程序流程图
其中,部分程序如下列出。
LCD上对应显示键按下的时候的床位号:
voiddisplayfun1(void)
{
WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示,不闪烁,检测忙信号
//DisplayOneChar(6,0,minite/10+0x30);
DisplayOneChar(7,1,bed_NO/10+0x30);
DisplayOneChar(8,1,bed_NO+0x30);
}
void delay(intk)//延时函数子程序,通过设置k,可以确定延时大小:k=1时,延时为1ms
{
uint i,j;
for(i=k;i>0;i--)
{
for(j=114;j>0;j--);//语言执行所用时间为1ms
}
}
}
用线反转法扫描键盘,确定被按下的键的行列坐标,确定被按下的键是哪个:
voidkey(void)
{
uchar hang,lie;
P1=0x0f;
delay(1);
if(P1!=0x0f)
{
delay(5);
if(P1!=0x0f)
{
switch(P1&0x0f)
{
case 0x0e:hang=0;break;
case 0x0d:hang=1;break;
case 0x0b:hang=2;break;
case 0x07:hang=3;break;
}
P1=0xf0;
switch(P1&0xf0)
{
case 0xe0:lie=0;break;
case 0xd0:lie=1;break;
case 0xb0:lie=2;break;
case 0x70:lie=3;break;
}
此程序部分定时器0实现蜂鸣器响时100ms的功能,同时实现复位键的复位功能:
voidtime_init(void)
{
TMOD=0x01;
TH0=(65536-8333)/256;
TL0=(65536-8333)%6;
EA=1;
ET0=1;
}
void time(void)interrupt 1 using 1
{
TH0=(65536-8333)/256;
TL0=(65536-8333)%6;
itime++;
if(itime>=100)
{
itime=0;
btime++;
if(btime>6){TR0=0;btime=0;}
buzzer=!buzzer;
}
}
voidmain(void)
{
uinti;
delay_LCM(500);
initLCM( );//LCD初始化
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
while(1)
{
//hang=0;
//lie=0;
key();
delay_LCM(10);
displayfun1( );
delay_LCM(10);
//lcd_dis();
if(TR0==1){buzzer=1;}
delay(10);
if(clear==0)
{if(clear==0)
bed_NO=0;
}
}
}
6 系统测试
我们按照我们设计的电路图焊接好电路后,我们将系统板接上电源,测试系统板得性能,结果发现系统不能正常工作。我们用多功能万用表测试系统板中的线路有无虚焊和短接。经测试后,我们发现,高低线短接导致其不能正常工作,我们对其进行修改后,排除了故障。
然后,我们将我们编写的程序烧写入系统板,系统还是不能正常工作,1602LCD不能正常显示。经检查后,发现程序编写有一些小错误,我们对其进行了修改,并进行了仿真,仿真无误后,再检测系统板的性能。
经多次检测和修正后,系统板终于能够正常工作了。
7总结
本次课程设计我深刻体会了设计出一个工程的艰辛。我们从决定做出一个病房呼叫系统后,然后就去买器材。然而因为许多器材买不到,限制了我们的设计过程。
然后,我们就设计我们的电路。但是我们受到了许多阻碍。我们翻阅了许多的资料,了解了我们所需的硬件,然而仍然不能顺利的实现这个实验目标。我们询问了老师和同学,在他们的帮助下,终于完成了该课程设计。
这次课程设计虽然艰辛,但是我获益匪浅,将影响今后的学习和工作。
参考文献
[1] 谢维成,杨加国.单片机原理与应用及C51程序设计.北京:清华大学出版社,2006.25-27
[2] 张毅刚.单片机原理与应用及.北京:高等教育出版社,2003.231-235.