摘要
本设计是以AT89C51为核心的病人呼叫系统,对该系统的硬件和软件结构进行了相应的描述。通过对病区的数据采集,实现医院医疗人员值班室和病人房之间的通信呼叫联系,具有使用方便、操作简单等特点。伴随着医疗体制改革的不断深化和医疗事业的飞速发展,越来越多的人们需要迅捷、方便地得到医院的各种各样的医疗服务。
这使得衡量一个医院的综合水平高低,不再仅局限于软、硬件的建设上,更要比服务。临床呼叫求助装置是传送临床信息的重要手段,关系病员安危,传统的有线呼叫系统历来受到各大医院的普遍重视。如果采用无线传输,会节约布线和改造线路的资金,为医院节约成本,并且及时、准确、可靠、简便可行,比目前的同类产品更能受到医院及病人的认可,有更强的竞争力,能大量推广。 在医院的病房里每个床位边都装有一个呼叫按钮,当病人需要帮助时,按下呼叫按钮,护士办公室里呼叫显示板上相应房间号的指示灯点亮并进行语音提示,同时在走廊里安装一个电子显示牌,使值班护土能及时的知道哪个房间的病人需要帮助或需要进行抢救。
- 1 -
目录
1 概述
1.1 设计任务 ……………………………………………………………3 1.2 设计要求 ……………………………………………………………3 1.3 功能简介 ……………………………………………………………3
2 系统总体方案及硬件设计
2.1 系统总体方案 ………………………………………………………4 2.2 硬件设计 ……………………………………………………………5
3 软件设计
3.1 程序设计简要 ………………………………………………………7 3.2 系统的工作流程 ……………………………………………………8 3.3 软件设计 ……………………………………………………………9
4 Proteus软件仿真 ………………………………………………………10
5设计体会 ……………………………………………………………11
参考文献 ……………………………………………………………………11
附录:源程序代码 …………………………………………………………12
附录:系统原理图 …………………………………………………………18
- 2 -
1 概述
1.1 设计任务
本次设计主要是设计一个单片机控制的病房呼叫系统。利用AT89C51
结
合显示电路,LED数码管以及按键来设计。在设计时,我们应将软硬件有机地结合起来,使得系统能够正确的反应病人的呼叫并使服务台能够回应。
1.2 设计要求
设计一个可容64张床位的病房呼叫系统。要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮。此时护士值班室内的呼叫系统板上显示该患者的床位号,并振铃。当护士按下“响应”键时,取消当前呼叫。
1.3. 功能简介:
临床求助呼叫(监护)是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断和护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士,并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。它要求及时、准确、可靠、简便可行。为此,我们采用单片机AT89C51为系统核心,配以LED及键盘电路模块和MPX2彩屏LCD电路模块实现病人呼叫(监护)系统的设计。
- 3 -
2 系统总体方案及硬件设计
2.1系统总体方案
在本系统中,我们采用单片机AT89C51为核心的系统主要包括2个部分:数据采集和数据的输出,数据的输出用来进行呼叫,编码使用单片机完成,数据采集负责接收分机发来的信号,并进行解码、显示该患者的床位号,并振铃,主机上设有键盘取消当前呼叫 其实现结构框图如图1所示。
显示 8X8键盘 AT89C51 64个LED 喇叭
图1 病人呼叫系统框图
将由8×8键盘矩阵采集到的键值经过P0.P2输入到单片机AT89C51中,通过简单的点亮呼叫病号对应床号灯和病区内的警示灯,然后通过P1口把相关信息传送到MPX2彩屏LCD显示。同时报警警示灯闪烁、报警声响起。医疗人员可以通过控制键盘操作,完成呼叫响应和信息查询等监护工作。
- 4 -
2.2 硬件设计
2.2.1单片机AT89C51的特点
随着单片机功能集成化的发展,其应用领域也逐渐从传统的控制扩展为控制处理、数据处理以及数字信号处理等领域,AT89C51具有低电压、低功耗、性价比高、功能强、指令效率高等优点[2]。AT89C51的主要特点,1)集成度高,易于扩展;2)较强的中断处理能力,支持异常中断、事件中断和软件中断三种类型的中断;3)高效的指令系统。程序编程指令特别严密,它有多种中断系统和多种定时器系统,可以根据需要具体选择,灵活性很大。
2.2.2 MPX2彩屏LCD电路模块
本系统采用的MPX2电路模块是一款高画质的低温多晶硅TFT真彩LCD模块,具有接口简单、编程方便、易于扩展等良好性能。MPX2内置专用驱动和控制IC,以驱动IC自己集成显示缓存。无需外部显示缓存。 MPX2系列模块实际上就是将MPX2的TFT-LCD显示器连接在PCB电路板上,并加在PCB电路板上设计了总线缓冲、保护电路,以及背光限流电路,将显示器不便于与开发板连接的软PCB连接接口引出,并以DIP的双排插针引出模块以便于应用上的连接。为了方便应用上的扩展使用,MPX2系列模块将显示器主供电源和显示器背光电源分开供电。
2.2.3 报警电路的设计
主机在接受到呼叫后,首先进行报警告知值班人员。报警电路可以用单片机P2.0输出1 kHz和500 Hz的音频信号经放大后驱动其扬声器,做报警信号,要求1 kHz信号响100 ms,再500 Hz信号响200 ms,交替进行。这里使用音频放大器LM386,他的工作电压为4~ 12 V,输出功率最大可达1 W,输入阻抗为50 kHz。
- 5 -
2.2.4 键盘模块电路设计
8×8键盘矩阵和64个LED警示灯模块组成。在键盘扫描和LED驱动部分,使用了 LED 显示电路原理图如图2所示。
01234567CDABEF89 图2键盘模块电路
- 6 -
3 系统软件的设计 3.1程序设计简要
在设计程序之前,我们首先对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务功能要求和技术指标。其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。经过任务分析,算法优化后,就可以进行程序的总体构思,确定程序的结构和数据结构,并考虑资源的分配和参数的计算灯,然后根据程序运行的过程,勾画出程序执行的逻辑顺序,用图形符号将总体设计思路及程序流向绘制在平面图上,从而使程序结构关系直观明了,便于检查和修改.模块化程序设计方法具有明显有点。把一个多功能复杂的程序划分位若干个简单,功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序结构层次一目了然。
3.2系统的工作流程 如图3所示。
- 7 -
开始 初始化系统 有键按下? Y N 病房指示灯亮,服务台显示床号,并响铃 服务台回应 结束
图3
3.3软件设计
该系统软件主要完成以AT89C51为核心的数据的采集、处理和有线传输。采用
- 8 -
模块化程序设计方法,将系统软件的设计主要分为显示模块,输入模块,输出模块。单片机扫描发射键,如果扫描到有发射键按下,系统便扫描拨码开关的状态以确定地址码,通过P0口和P2口开始地址码传送当服务台接收到呼叫信号后,护士值班室内的呼叫系统板上显示该患者的床位号,并振铃。当护士按下“响应”键时,取消当前呼叫。
4 Proteus软件仿真
- 9 -
我们利用KEILV805中文版对源程序进行编译,编译成功后,把编译结果保存并生成.HEX文件,然后把.HEX加载到单片机上进行Proteus软件仿真。看其是否能实现预想的功能。 Proteus仿真图如图4下 当按下27号床位时
RP1RESPACK-810213243546576879U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39038137236335434533632721822923A24B25C26D27E28F10111213141516170118XTAL229RST3293031PSENALEEA412345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51567CDABEF89D1LED-GREENLS1取消按键SOUNDER
图4 Proteus仿真图
- 10 -
5 心得体会
单片机在当今计算机领域应用十分广泛,在自动控制领域更是非常重要。通过这次设计,我觉得自己对单片机的理解有了新的提高,也使自己综合运用所学知识,发现,提出,分析,解决实际问题的能力有很大进步。我知道单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
想起这次单片机设计,至今我仍感慨颇多,在整整一星期的日子里,可以说是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对器件的不熟悉,对应用软件操作的困难,对单片机汇编语言掌握得不好。通过这次设计之后,我对自己以前的知识有了很大提高。
设计顺利完成了,在设计中遇到了很多编程问题,在同学和老师的细心帮助下,都得以解决。在此,对给过我帮助的所有同学和各位指导老师表示忠心的感谢!
参考文献
[1] 张培仁,张志坚,高修峰.十六位单片微处理器原理及应用.北京,清华大学出版社
[M].2005: 46~49
[2] 田会方,吴兴强.基于LabVIEW与凌阳SPCE061A实现串口数据采集[J].微计算机信
息.2006:6:2.22~25
[3] 北京比高科技公司. BC7281B中文技术手册. 2002(6)
[4] 北京铭正同创科技有限公司.MT22G06B彩屏LCD模组简要介绍.2006(12)
[5] 张立才.基SPCE061A的多功能信号发生器设计实现[J].微计算机信息.2004:20:3.33~35
附录 源程序代码
- 11 -
#include #define uchar unsigned char #define uint unsigned int sbit B1=P3^6; sbit B2=P3^7; sbit buzzer=P3^5; sbit clear=P3^4; 定义字符B1,B2,BUZZER,CLEAR uchar code distab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code keytab[8][8]={{1,2,3,4,5,6,7,8}, 定义键盘值 {9,10,11,12,13,14,15,16}, {17,18,19,20,21,22,23,24}, {25,26,27,28,29,30,31,32}, {33,34,35,36,37,38,39,40}, {41,42,43,44,45,46,47,48}, {49,50,51,52,53,54,55,56}, {57,58,59,60,61,62,63,64}, }; uchar bed_NO; uchar btime; uchar itime; 定义字符bed_NO,uchar btime,uchar itime void delay(uint x) 定义延迟程序块 - 12 - { uint i,j; for(i=0;i } void display(void) { uchar a10,a1; a10=bed_NO/10; a1=bed_NO%10; P1=distab[a10]; B1=0; delay(10); B1=1; P1=distab[a1]; B2=0; delay(10); B2=1; } 定义显示管块 - 13 - void key(void) 扫描键盘值 { uchar hang,lie; P0=0x00;P2=0xff; delay(1); if(P2!=0xff) { delay(5); 延迟(5)后查询行列值 if(P2!=0xff) { switch(P2&0xff) 扫描列值 { case 0xfe:lie=0;break; case 0xfd:lie=1;break; case 0xfb:lie=2;break; case 0xf7:lie=3;break; case 0xef:lie=4;break; case 0xdf:lie=5;break; case 0xbf:lie=6;break; case 0x7f:lie=7;break; } - 14 - P2=0x00;P0=0xff; switch(P0&0xff) 扫描行值 { case 0xfe:hang=0;break; case 0xfd:hang=1;break; case 0xfb:hang=2;break; case 0xf7:hang=3;break; case 0xef:hang=4;break; case 0xdf:hang=5;break; case 0xbf:hang=6;break; case 0x7f:hang=7;break; } P2=0xff;P0=0x00; while(P2!=0xff); bed_NO=keytab[hang][lie];TR0=1; } else bed_NO=0; } } void time_init(void) 计数器的初始化 { - 15 - 行列值赋值给bed_NO TMOD=0x01; TH0=(65536-8333)/256; 装入初值 TL0=(65536-8333)%256; EA=1; ET0=1; } void time(void) interrupt 1 using 1 { TH0=(65536-8333)/256; TL0=(65536-8333)%256; itime++; if(itime>=100) { itime=0; btime++; if(btime>6){TR0=0;btime=0;} buzzer=!buzzer; } } void main(void) { time_init(); 定义中断块- 16 - } for(;;) { } key(); display(); if(TR0==0){buzzer=1;} if(clear==0) 服务台取消呼叫 { } delay(10); if(clear==0) { } bed_NO=0; - 17 - 附录 系统原理图 RP1RESPACK-810213243546576879U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39038137236335434533632721822923A24B25C26D27E28F10111213141516170118XTAL229RST3293031PSENALEEA412345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51567CDABED1LED-GREEN取消按键LS1SOUNDER - 18 - F89 因篇幅问题不能全部显示,请点此查看更多更全内容