湖南城市学院
基于单片机仿真的智能病床呼叫系统设计
专业名称 班级学号 学生姓名 指导教师 设计时间
电子信息工程 0912203-16
张象 崔宪普
2013.6.27~2013.7.8
目录
一、绪论…………………………………………………………………………....2
1.1 课题概述:………………………………………………………………..2 1.2 智能病床呼叫系统发展概况:…………………………………………..2 1.3 课题研究的目的和意义:………………………………………………..2
二、系统设计:……………………………………………………………………..3
2.1 设计任务:………………………………………………………………..3 2.2 系统设计思路:…………………………………………………………..3 2.3 系统设计框图:…………………………………………………………..3 2.4 系统硬件设计:…………………………………………………………..4 2.5 系统软件设计:…………………………………………………………..7 2.6 系统主要部分演示:……………………………………………………..8
三、课程总结:……………………………………………………………………8 参考文献:…………………………………………………………………………9 附录一、 系统仿真图:…………………………………………………………..9 附录二 、程序:…………………………………………………………………10
页脚内容0
_x0001_
基于单片机仿真的智能病床呼叫系统设计
【摘要】 病床呼叫系统以AT89C52单片机为核心,结合按键,LED灯指示,蜂鸣器,以及液晶屏显示,来实现病床呼叫端和医护响应端的功能设计。从而可以建立合理、高效、安全的服务系统,可以有效地减轻护理工作人员的劳动强度,同时又保障病人的安全。 【关键词】 AT89C52 液晶屏显示 按键 蜂鸣器 响应按钮
一、绪论
1.1课题概述:
在这个瞬息万变,竞争激烈的时代,选择一个优越的工具往往能提升企业在这个市场上的竞争力。尤其医院的竞争越来越激烈,商业医院的生存是第一位,提升档次和服务质量迫在眉睫,陪护问题一直是医患矛盾的主体,也是长期困扰卫生系统服务质量的大问题,使用病房呼叫系统,方便病人更快找到医生,以节约病人的宝贵时间。
病房呼叫系统是一种应用于医院病房、养老院等地方,用来联系沟通医护人员和病员的专用呼叫系统,是提高医院护理水平的必备设备。以前当病人需要服务时就不得不亲自到值班室去叫。安装该呼叫系统后,在病人与护士之间架起一座及时沟通的桥梁,可在减少护理人员的同时,保证病人随时能够得到服务,让每个病人及时得到最佳护理。
病房呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。它要求及时、准确可靠、简便可行、利于推广。利用单片机的通讯功能,设计出具有振铃、显示房号等功能的多功能病床呼叫系统,满足了医院的病房管理和护理的要求。
1.2智能病床呼叫系统发展概况:
呼叫系统发展到今天,从应用层面可以说已经进入到商业化运营阶段。国内许多的呼叫中心其服务模式,已经从单纯的客户服务向服务与经营的混合型模式转变。这首先是呼叫市场需求的结果,也是呼叫技术及管理发展的必然结果。信息时代的医院管理已经从传统的人管模式,向智能化,电子化,信息化,网络化得高科技管理模式的方向迅速发展,“病房呼叫系统”可实现医院病房的智能化管理,可实现呼叫,报警,信息储存,显示等功能。为医院和患者都带来方便。
在中国,约在 30,000 个医院中仅 30 %的医院拥有自己的信息管理系统;拥有前端电话接入系统的医院就更少了。
目前市场上存在着许多种型号不一功能各异的医院病房呼叫系统,主要为两大类:有线式和无线式。传统的有线式病房呼叫系统往往采用集中式结构,电源线、数据通信线、语音通信线分开传输,具有铺设线路较多、成本高、安装调试困难、实时性差、故障率较高等缺点。无线式病房呼叫系统可靠性差,而且无线电波会干扰其它医疗仪器设备,目前大多数医院不采用无线呼叫系统。
1.3课题研究的目的和意义:
智能病床呼叫是传送病床信息的重要手段,病床呼叫系统可将病人的请求快递传送给值班医生和护士。呼叫系统的优劣直接关系到病人的安危,历来受到各大医院的普遍重视。它要求及时、准确、可靠、简便可行、利于推广。单片机多机通信和计算机监控管理技术的具有呼叫、振铃、显示 等功能的病床呼叫系统,基本满足了医院的病房护理要求。
1
页脚内容_x0001_
本课题基于单片机的医院病床呼叫系统设计,系统维护简单,工作应用简单。因此,本课题是非常有意义的。
二、系统设计
2.1、设计任务:
1 、编写程序,完成病床号的显示、呼叫灯的显示。
例如:1号病床呼叫时,对应1号床头的呼叫灯亮,同时在呼叫中心的控制台处,对应医好床的呼叫灯亮。
2、完成某段时间内对应病床呼叫次数的显示;
3、当呼叫中心医护人员听到呼叫后,按呼叫响应停止按钮,呼叫等熄灭、同时病人对应病床呼叫次数显示清零。
2.2、系统设计思路
充分设计利用AT89C52的40个引脚,节省其他硬件的使用,可以满足7个病床的功能需求。所以据此设计如下:
(1)7个病床的7个呼叫按钮 ,控制响应的led灯点亮,同时响应的次数累计 ;
(2)病床按一次,对应的蜂鸣器响一次。为防止被错误按下,按钮按下一定时间后才累计次数,累计次数最多累计9次,超过9次,一直显示9次
(3)7个护士中心的呼叫对应病床号的按钮控制相应的led灯灭,同时对应病床号的呼叫次数清零。
2.3、系统设计框图:
页脚内容2
_x0001_
2.4、系统硬件设计:
系统硬件分为四个模块:
1、主单片机AT89C52部分,主控制芯片。
2、病床呼叫模块医护响应LED灯,作为病床呼叫端。 3、响应按钮模块LCD,为医护响应端。
4、液晶屏显示模块,显示呼叫床位以及呼叫次数,更方便医护管理。 (1) 主单片机AT89C52部分:单片机晶振:12MHZ, AT89C52(12T)
电源:VCC=5v, 接地 GND及复位电路。如下图:
R7(2)C21nFC31nFR710kX112MHZU1C10.1uF19XTAL1P0.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/RD39P0038P0137P0236P0335P0434P0533P0632P0721222324P2325P2426P2527P2628P27101112P3213P3314P3415P3516P3617P37P30P31R265118XTAL29RST293031PSENALEEAP10P11P12P13P14P15P16P1712345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52
页脚内容3
_x0001_
(2) 病床呼叫模块:包括病人呼叫按钮,呼叫蜂鸣器部分,呼叫LED部分。该模块
都使用P1.0~P1.6口。如下图: P10P11P12P13P14P15P16BUZ1(2)BUZ0(2)BUZ2(2)BUZ3(2)BUZ0P10BUZZERBUZ4(2)BUZ5(2)BUZ1P11BUZZERBUZ2P12BUZZERBUZ3P13BUZZERBUZ6(2)BUZ4P14BUZZERBUZ5P15BUZZERBUZ6P16P15BUZZERQ7(E)Q1(E)Q2(E)Q3(E)P30R82kQ7PNPP31R12kQ1PNPP32R22kQ2PNPP33R32kQ3PNPD0LED-REDD1LED-REDD2LED-REDD3LED-REDQ4(E)Q5(E)Q6(E)P34R42kQ4PNPP35R52kQ5PNPP36R62kQ6PNPD4LED-REDD5LED-REDD6LED-RED
(3)医护响应LED灯、响应按钮模块:
LED响应红灯接口:P30,P31,P32,P33,P34,P35,P36。 响应按钮接口:P17,P27,P37,P23,P24,P25,P26口。 如下图:
页脚内容4
_x0001_
R9Q8R10Q9R11Q10R12Q11D7D8D9D10R13Q12R14Q13R31Q14D11D12D13 (4)LCD液晶屏显示模块:数据口 P0.0~P0.7 ;
设计中用LCD1602时序RS:P2.0, RW:P2.1, E:P2.0病人呼叫次数统计:如下LCD1LM016LR15(2)VSSVDDVEELCD1(VDD)RSRWED0D1D2D3D4D5D6D7R1510kP00P01P02P03P04P05P06P077891011121314R1610k123456R1710kRV11kP20P21P22图:
2.5、系统软件设计:
根据上述硬件及框图设计,设计出软件流程图,如下:
5
58%R1810kP0410kP05R19R2010kP06R2110kP07R2210kR23(2)R2310kR2410kR2510k页脚内容_x0001_
开始LCD显示初始化床位号显示初始化否1~7床有按键按下?Led全灭,1~7床对应呼叫次数为零是1~7号床,几号床按键,几号床LED亮,蜂鸣器响,呼叫次数累加有病床按键按下呼叫次数temp>=9?是呼叫次数temp=9否呼叫中心1~7床呼叫响应?否是呼叫次数temp=temp1~7号床,几号床呼叫响应按键按下,几号床LED灭,呼叫次数清零呼叫次数清零对应床位temp=0LCD显示结束
2.6、系统主要部分工作演示:
页脚内容6
_x0001_
图二、在没有病人呼叫时 led灯全灭(左:病床led、右:呼叫中心led)
图三、1号床位呼叫2次时 1号床led灯亮(左:病床led、右:呼叫中心led)
图四、呼叫中心按下1床响应按钮时 led灯全灭(左:病床led、右:呼叫中心led)
三、课设总结:
本次课程设计,我们团队通过前期资料收集、资料整理,并结合本次课程设计的任务目标,做了比较全面的分析,最后在提出的几个方案中,结合我们目前自身的知识储备选择了用AT89C52作为主控制芯片,同时摒弃了数码管的显示而选择了功耗低的LCD液晶显示,同时又能减少外部硬件电路复杂度。
通过在对AT89C52的外部可用I/O口的分析后得出,在不增加外围的扩展电路下,最多能控制7张病床。 并以此为基础设计了本次的系统控制方案。
在本次课程设计中,按照先将程序模块化的思路,分别对系统的LCD显示部分进行了编程和程序调试、对病床呼叫按钮及病床LED显示部分进行了编程和程序调试、对呼叫中心按钮及呼叫中心LED显示部分进行编程和程序调试。最后将几个模块结合起来在一个程序中综合运用,并最终实现其功能。
在程序最后一个模块综合运用的时候出现了单个功能部分可以正常工作,但是不同功能模块相互之间却不能联系起来的情况。在经过了团队成员一起对程序逐步分析,每一条语句的检验之后,最终解决了问题,达到了本次设计任务中的功能。
通过这次课程设计,我深切的感受到,单片机在生活实际中的重要作用,同时也学习到了在对系统进行设计时,需要一步一步的对功能进行分解,将程序模块化,最后将不同模块组合起来的优势。
同时感谢指导老师的悉心指导和帮助。 参考文献:
【1】杜洋. 爱上单片机. 北京:人民邮电出版社.2010.4.1
【2】陈海宴.51单片机原理及应用——基于Keil与Proteus. 北京:北京航空航天大学出版
社.2010.7
页脚内容7
_x0001_
【3】马淑华、王凤文、张美金.单片机原理与接口技术.北京:北京邮电大学出版社.2007 【4】张淑清.单片微型计算机接口技术及其应用.北京:国防工业出版社,2001.
附录一、系统仿真图:
基于单片机仿真的智能病床呼叫系统设计00000000000附录二、程序:
/*************************************************************************
程序:病床智能呼叫系统功能:1、7个病床的7个呼叫按钮 ,控制响应的led灯点亮,同时响应的次数累计 ;病床按一次,对应的蜂鸣器响一次。为防止被错误按下,按钮按下一定时间后才累计次数,累计次数最多累计9次
2、7个病床对应的呼叫响应 按钮 控制响应的led灯灭,同时响应的次数累计清零 作者:陈韬、杨路生、张瑞姣、马姗 时间:20110701
说明: 在这个系统中,单片机的40个引脚基本全部用上了(当然有几个有特殊功能没有用上),
可以说是在不用外部扩展的情况下51单片机的极限了
1.病床呼叫按钮 :P1.0~P1.6口 共7个引脚
8
页脚内容_x0001_
2.护士呼叫响应按钮:P17,P27,P37,P23,P24,P25,P26 共7个引脚 3.呼叫按钮响应红灯:P30,P31,P32,P33,P34,P35,P36 共7个引脚
4.病人呼叫次数统计:: 数据口 P0.0~P0.7 ;时序RS:P2.0, RW:P2.1, E:P2.0(液晶
模块1602 /LM016L他们的内部控制芯片都是HD44780) 共11个引脚
5.晶振:12MHZ, AT89C52(12T) 共2个引脚 6.电源:VCC 接地 GND 共2个引 #include unsigned char temp10,temp11,temp12,temp13,temp14,temp15,temp16; unsigned char code Tab[11]= {\"0123456789\ unsigned char code string1[ ]= {\"1:\ unsigned char code string2[ ]= {\"2:\ unsigned char code string3[ ]= {\"3:\ unsigned char code string4[ ]= {\"4:\ unsigned char code string5[ ]= {\"5:\ unsigned char code string6[ ]= {\"6:\ 9 页脚内容_x0001_ unsigned char code string7[ ]= {\"7:\ void Delayus(unsigned char m) { while (m--!=0) { _nop_(); //1us } } unsigned char Hujiaoled1(void ) { // unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P10==0) { P30=0; if(temp10<=9) { temp10++; } else if(temp10>=9) { temp10=9 ; } } return (temp10); } /****************************************/ unsigned char Hujiaoled2(void ) { unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P11==0) { P31=0; if(temp11<=9) { temp11++; } else if(temp11>=9) { temp11=9 ; } } return (temp11); } unsigned char Hujiaoled3(void ) { 10 页脚内容_x0001_ unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P12==0) { P32=0; if(temp12<=9) { temp12++; } else if(temp12>=9) { temp12=9 ; } } return (temp12); } unsigned char Hujiaoled4(void ) { unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P13==0) { P33=0; if(temp13<=9) { temp13++; } else if(temp13>=9) { temp13=9 ; } } return (temp13); } unsigned char Hujiaoled5(void ) { unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P14==0) { P34=0; if(temp14<=9) { temp14++; } else if(temp14>=9) { temp14=9 ; } } 11 页脚内容_x0001_ return (temp14); } unsigned char Hujiaoled6(void ) { unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P15==0) { P35=0; if(temp15<=9) { temp15++; } else if(temp15>=9) { temp15=9 ; } } return (temp15); } unsigned char Hujiaoled7(void ) { unsigned char temp10=0,temp11=0,temp12=0,temp13=0,temp14=0,temp15=0,temp16=0; if(P16==0) { P36=0; if(temp16<=9) { temp16++; } else if(temp16>=9) { temp16=9 ; } } return (temp16); } HujiaoledAll() { Hujiaoled1(); Hujiaoled2(); Hujiaoled3(); Hujiaoled4(); Hujiaoled5(); Hujiaoled6(); Hujiaoled7(); } 12 页脚内容_x0001_ unsigned char Xiangying1() { if(P17==0) { P30=1; temp10=0; } return (temp10); } unsigned char Xiangying2() { if(P27==0) { P31=1; temp11=0; } return (temp11); } unsigned char Xiangying3() { if(P37==0) { P32=1; temp12=0; } return (temp12); } unsigned char Xiangying4() { if(P23==0) { P33=1; temp13=0; } return (temp13); } unsigned char Xiangying5() { if(P24==0) { P34=1; temp14=0; } return (temp14); 页脚内容13 _x0001_ } unsigned char Xiangying6() { if(P25==0) { P35=1; temp15=0; } return (temp15); } unsigned char Xiangying7() { if(P26==0) { P36=1; temp16=0; } return (temp16); } void XiangyingAll() { Xiangying1(); Xiangying2(); Xiangying3(); Xiangying4(); Xiangying5(); Xiangying6(); Xiangying7(); } void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ; } void delay(unsigned int n) { unsigned int i; for(i=0;i 页脚内容14 _x0001_ RS=0; RW=1; E=1; _nop_(); _nop_(); _nop_(); _nop_(); result=BF; E=0; return result; } void Write_com (unsigned char dictate) { while(BusyTest()==1); RS=0; RW=0; E=0; _nop_(); _nop_(); P0=dictate; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); E=0; } void WriteAddress(unsigned char x) { Write_com(x|0x80); } void WriteData(unsigned char y) { while(BusyTest()==1); RS=1; RW=0; E=0; P0=y; _nop_(); _nop_(); 15 页脚内容_x0001_ _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); E=0; } void LcdInt(void) { delay(15); Write_com(0x38); delay(5); Write_com(0x38); delay(5); Write_com(0x38); delay(5); Write_com(0x0F); delay(5); Write_com(0x06); delay(5); Write_com(0x01); delay(5); } void Display_1() { unsigned char i; WriteAddress(0x00); delay(5); i = 0; while(string1[i] != '\\0') { WriteData(string1[i]); i++; delay(100); } } void Display_2() { unsigned char i; WriteAddress(0x04); delay(5); i = 0; 页脚内容16 _x0001_ while(string2[i] != '\\0') { WriteData(string2[i]); i++; delay(100); } } void Display_3() { unsigned char i; WriteAddress(0x08); delay(5); i = 0; while(string3[i] != '\\0') { WriteData(string3[i]); i++; delay(100); } } void Display_4() { unsigned char i; WriteAddress(0x0c); delay(5); i = 0; while(string4[i] != '\\0') { WriteData(string4[i]); i++; delay(100); } } void Display_5() { unsigned char i; WriteAddress(0x40); delay(5); i = 0; while(string5[i] != '\\0') { WriteData(string5[i]); i++; delay(100); 页脚内容17 _x0001_ } } void Display_6() { unsigned char i; WriteAddress(0x44); delay(5); i = 0; while(string6[i] != '\\0') { WriteData(string6[i]); i++; delay(100); } } void Display_7() { unsigned char i; WriteAddress(0x48); delay(5); i = 0; while(string7[i] != '\\0') { WriteData(string7[i]); i++; delay(100); } } void Display_shu1(unsigned char x ) { WriteAddress(0x02); delay(5); WriteData(Tab[x]); delay(100); } void Display_shu2(unsigned char x ) { WriteAddress(0x06); delay(5); WriteData(Tab[x]); delay(100); } void Display_shu3(unsigned char x ) { 页脚内容18 _x0001_ WriteAddress(0x0a); delay(5); WriteData(Tab[x]); delay(100); } void Display_shu4(unsigned char x ) { WriteAddress(0x0e); delay(5); WriteData(Tab[x]); delay(100); } void Display_shu5(unsigned char x ) { WriteAddress(0x42); delay(5); WriteData(Tab[x]); delay(100); } void Display_shu6(unsigned char x ) { WriteAddress(0x46); delay(5); WriteData(Tab[x]); delay(100); } void Display_shu7(unsigned char x ) { WriteAddress(0x4a); delay(5); WriteData(Tab[x]); delay(100); } DisplayAll(void) { LcdInt(); delay(10); Write_com(0x01); delay(5); Display_1(); Display_2(); Display_3(); Display_4(); Display_5(); 页脚内容19 _x0001_ Display_6(); Display_7(); void Display_shuAll( temp10,temp11,temp12,temp13,temp14,temp15,temp16) { unsigned char temp10,temp11,temp12,temp13,temp14,temp15,temp16; Display_shu1(temp10); Display_shu2(temp11); Display_shu3(temp12); Display_shu4(temp13); Display_shu5(temp14); Display_shu6(temp15); Display_shu7(temp16); } void main() { LcdInt(); delay(10); DisplayAll( ); while(1) { HujiaoledAll() ; Delayus(1000); XiangyingAll(); Delayus(1000); Display_shuAll(temp10,temp11,temp12,temp13,temp14,temp15,temp16); } } 页脚内容20 因篇幅问题不能全部显示,请点此查看更多更全内容