医院病人呼叫系统.doc_第1页
医院病人呼叫系统.doc_第2页
医院病人呼叫系统.doc_第3页
医院病人呼叫系统.doc_第4页
医院病人呼叫系统.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

医院病人呼叫系统设计总结报告XX学院第五届大学生电子设计竞赛决赛设计总结报告题 目: 医院病人呼叫系统 组 员:X X 0605076043X X 0605076042X X 06050710012009年4月27日1医院病人呼叫系统 (D题)摘要:本系统利用单片机(AT89S52)为控制核心,由输入模块、显示模块(包括病床号显示、病人呼叫持续时间显示和设定时间倒计时显示)、病人端处理提示模块、声光提示模块、定时模块以及电源模块等功能模块构成。其中,按键模块采用了813的矩阵键盘模式,显示模块利用动态LED显示。系统主要通过软件控制实现了所有硬件功能,不仅实现了题目的基本要求,发挥部分要求也全部实现,成功完成了医院病人呼叫系统的设计。关键词:AT89S52 动态LED 优先级1引言医院病人呼叫系统是基于AT89S52单片机实现对病人呼叫请求控制的装置。本设计能实现103个病人的呼叫请求,并能按其病情严重设置相应的优先级。比较方便地完成医护人员同病人之间的联系。本设计要求制作的系统当病人紧急呼叫时,病人端按键变为红色并保持,同时医护人员端会产生声、光提示,并显示病人编号(共103个床位,采用动态LED显示)。能根据病人病情设置优先级,当有多人呼叫时,病情严重者优先。当医护人员开始处理,则病人处按键恢复,系统按优先级分别显示其它呼叫病人的床号,不遗漏任何病人的呼叫。本设计根据扩展功能的要求给系统增加了任意时间设定功能和病人呼叫持续时间的显示功能,方便医护人员的使用。2系统设计与论证2.1系统总体设计思路充分理解题意后,将系统分为以下几个部分进行设计:中央控制器、输入模块、定时部分、病人端处理提示模块、声光提示模块、动态LED显示部分和电源模块。根据分析系统设计框图如图2-1所示:中央处理器输入模块动态LED显示定时部分声光提示模块电源模块病人端处理提示模块图2-1 系统设计框图输入模块包括病人呼叫使用按键、医护人员处理后的复位按键和调节定时时间的按键,病人呼叫通过按键输入信号经过中央处理器处理后从动态LED输出显示,同时有声光提示。动态LED能够显示病人病床号、呼叫持续时间和定时时间。病人端处理提示模块用发光二极管实现,声光提示包括定时结束声光提示和病人呼叫时的声光提示。 2.2方案论证2.2.1输入模块1.按键部分键盘及接口电路的设计有以下两种方案:方案一:直接使用IO口的键盘连接电路。由于AT89S52的IO口具有输出锁存和输入缓冲的功能,因而他们组成键盘电路时,可省去输出锁存器和输入缓冲器,键位的列线,行线直接分别与单片机中接口相连。方案二:利用IO口和译码器的接口连接按键电路。将键盘的七根列线与译码器相连后由译码器74HC138三根口输入单片机,节省了IO口。由于本设计所需要的按键总数很大,按键电路我们采用813矩阵式键盘电路,同时为了扩展IO端口我们采用方案二。2.键盘扫描方式的方案选择:方案一:采用定时扫描方式。此扫描方式每隔一段时间对键盘扫描一次,通常利用单片机内部定时器,产生10ms的定时中断,CPU响应定时器溢出中断请求,对键盘进行扫描,以响应键盘输入请求。方案二:采用中断扫描方式。此扫描方式是在键盘上有键盘阖上时才产生中断请求,CPU响应中断,执行中断服务程序,判断键盘上闭合键的键号,并作出相应的处理。经综合考虑,本设计选择方案二即中断扫描方式。可以节省系统资源,避免没有键按下时,系统仍然进行扫描。2.2.2定时部分 定时部分是本设计的发挥部分,它的实现有以下两种方案:方案一:本方案采用555定时器实现定时功能,但此方案调节定时时间和显示时间时非常困难且精度不高。方案二:本方案完全用软件实现定时功能。原理为:在单片机内部存储器设二个字节分别存放时间的分、秒信息,利用定时器与软件结合实现倒计时定时和显示功能。由于用硬件实现定时困难且用软件实现定时和倒计时显示简单方便又节省硬件资源,因此本设计采用方案二完成倒计时部分的功能。2.2.3显示模块本设计题目中要求病床号必须使用动态LED显示(病人端按键加发光二极管指示),对于动态LED显示的数据输入有如下方案:方案一:直接将单片机端口与动态数码管的数据输入及控制端口相接。此种方法电路简单、连线方便,但占用单片机端口资源较多。方案二:将单片机输出端口通过移位寄存器74LS164将数据串行移入动态数码管。此方案需要增加元器件,但其占用单片机端口资源较少,节省了端口资源。经综合考虑,由于本设计所用单片机端口较多,因此方案应首先考虑到怎样节约端口资源,所以我们采用方案二。2.2.4病人端处理提示模块此模块是为实现当医护人员按下键后准备前来处理时给病人一个提示(用发光二极管指示)而设置的。本设计给每个病人按键设置一个相应的发光二极管构成此提示模块。其实现方式是利用移位寄存器将程序中所赋予的高电平逐级移送给目标指示灯。这样做可节省大量端口资源。2.2.5声光提示模块声光提示模块包括病人呼叫时的声光提示和定时器定时到达时的声光提示。该模块采用直接将蜂鸣器、发光二极管串联接入单片机的信号输出端构成。从软件中写入方波信号以驱动蜂鸣器发声和发光二极管闪烁。3.2 软件设计通过单片机软件设计,实现软件结构如下图。系统首先初始化,通过按键扫描,确定返回的按键值,确定是输入信号还是复位信号,当是输入按键信号时判断其优先级再执行相应的床号和时间显示功能;若返回的是复位信号的键值则将当前的键值置零并显示低一优先级的床号和持续时间。否是1Key103开 始系统初始化扫描按键持续时间设置判断扫描返回值确定输出参数床号及持续时间显示当前键值和时间清零优先级最高?Key=104转入下一最高优先级转入最高优先级图 3-2 系统软件流程图4系统测试4.1基本功能测试1.键盘编号测试结果:LED发光二极管蜂鸣器无键按下000熄灭不响001-103顺序按下001-103对应显示闪烁响测试结果表明显示键盘编号正确,该功能实现。2. 键盘优先级测试结果:按下按键号LED发光二极管蜂鸣器008008闪烁响018018闪烁响026026闪烁响087087闪烁响065087闪烁响030087闪烁响测试结果表明当按下的键号大于前一键号时,显示当前按下的键号;当按下的键号小于前一键号时,显示保持原先的键号不变。这与事先设定的优先级相同,按键优先级功能实现。3. 复位按键测试结果:在上一测试基础上依次按下医护人员处理(复位)按键测试结果如下:医务人员按键LED发光二极管蜂鸣器未处理87亮响处理65亮响30亮响26亮响18亮响08亮响00不亮不响结果表明复位按键功能正确。当按键按下时,动态LED会接着显示下一最高优先级别的病床号及其呼叫持续时间,并进行声光报警。复位按键功能实现。4.2发挥部分功能测试1. 定时器功能测试结果:按下定时器按键调节设定时间,再按下启动开关,则看到时间从设定值开始递减,当时间变为零时,蜂鸣器发声,发光二极管闪烁,结果正确,定时器功能实现。2. 病人呼叫持续时间显示测试结果:基于以上测试过程,发现当有按键按下时,数码管显示该键所对应的床号,同时计时部分开始从零计时。依次按下复位键后,计时部分显示了每个键按下持续的时间。结果正确,功能实现。5设计总结经过四天三夜的分析、设计和制作,我们终于成功完成了医院病人呼叫系统。本设计完成了题目基本要求部分和发挥部分的全部功能指标,系统经测试运行效果良好,实现了预期的所有功能。这次比赛的经历使我们受益匪浅,终生难忘。通过比赛,我们不仅成功完成了一件作品,更提高了我们的动手能力,团队协作精神和竞争意识;培养了我们分析问题、解决问题的能力。相信这些收获将会是使我们终身受益的宝贵财富。比赛中,我们充分发挥团队合作精神。大家既分工分工明确又相互配合相互帮助,大大提高了我们的工作效率。三天四夜的比赛极大地锻炼了我们的毅力和耐心,为了调试一段程序或是焊接一块电路板,我们都会熬夜工作,用最大的细致和激情投入工作。真诚地感谢本次电子设计竞赛组委会和协办单位给我们这样一次珍贵的锻炼机会,让我们将理论运用于实践,在电子设计的世界中奋斗、徜徉,享受它给予我们的无限快乐和激情。参考文献1徐新民.单片机原理与应用.杭州:浙江大学出版社,2006。2余锡存 曹国华著 单片机原理与接口技术西安:西安电子科技大学出版社,2003年。3高吉祥.全国大学生电子设计竞赛培训教程.北京:电子工业出版社,2007。4赵亮 侯国锐著 单片机C语言编程与实例 北京:人民邮电出版社,2004年。5黄智伟 王彦著 全国大学生电子设计竞赛训练教程北京:电子工业出版社,2005年。6催瑞雪,张增良.电子技术动手实践.北京:北京航空航天大学出版社,2007。附录附录一:主要元器件清单键盘按键104个单片机最小系统板1个LED数码管2个74LS164芯片15个红色发光二极管若干74LS138芯片1个导线、电容、电阻若干附录二:系统硬件整体电路图附录三:程序清单:/=/ 医院病人呼叫系统 /作者:刘XX ,感谢XX、XX的支持。/=#include /-unsigned char code table= 0xfc,0x60,0xda,0xf2,0x66, /04 0xb6,0xbe,0xe0,0xfe,0xf6;/59 共阴极 unsigned char key,i=1,j=0,prio=0,led=0,a,b,t=0; unsigned char temp;unsigned char idata button56; /存储病位号 idata unsigned char idata time56; /-char KeyScan();/char keycode56; void delay10ms(unsigned char time);unsigned char priority(void);void call1(void);void call2(unsigned char key1);void deal(void);/=/主程序 /-void main() TMOD=0x02; TH0=0x06; TL0=0x06; TR0=1; ET0=1; EA=0; P1_7=0; while(1) KeyScan(); if(key=1&keyled)?key:led; call1(); /紧急呼叫 else switch(key) case 56 : deal() ; key=0;break; /医护人员确定处理 /中断计时函数void t0(void) interrupt 1 using 0t+; if(t=4000) t=0; for(i=1;i=1;i-) if(buttoni) maxprio=i;break; return maxprio;/=/医护人员处理前紧急呼叫函数 /-void call1(void)b=tabletimekey%10; for(i=0;i 1; b=tabletimekey/10; for(i=0;i 1; b=tablekey%10; for(i=0;i 1; b=tablekey/10; for(i=0;i 1; /for(j=0;j10;j+); /P3=tablekey1/10; /P2=tablekey1%10; /P3=tablekey/10; /P2=tablekey%10; P1_7=1; buttonled=1; buttonkey=0; led=key; /led存储当前显示的病位号 key=0; /=/医护人员处理后紧急呼叫函数 /-void call2(unsigned char key1) delay10ms(100); b=tabletimekey1%10; for(i=0;i 1; /for(j=0;j10;j+); /P3=tablekey1/10; /P2=tablekey1%10; b=tabletimekey1/10; for(i=0;i 1; /for(j=0;j10;j+); /P3=tablekey1/10; /P2=tablekey1%10; b=tablekey1%10;for(i=0;i 1; b=tablekey1/10; for(i=0;i 1; /for(j=0;j10;j+); /P3=tablekey1/10; /P2=tablekey1%10; if(key1) P1_7=1; else P1_7=0; led=key1; buttonled=0; timeled=0; key=0;/EA=1; /=/医护人员确认处理紧急函数 /-void deal(void) prio=priority(); call2(prio);/=/功能函数 /-/=/功能函数 /-/=/功能函数 /-/=/延时函数 /-void delay10ms(unsigned char time) unsigned char i; while(time-) for(i=0;i120;i+) ;/=/扫描键盘函数 /-char KeyScan() /EA=0;/unsigned char temp;/P0_0口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_0=0; temp=P1; temp&=0xFF; if(temp!=0xFF&temp!=0x7F) delay10ms(1); temp=P1; temp&=0xFF; if(temp !=0xFF) temp=P1; temp&=0xFF; switch(temp) case 0xFE: key=1;break; case 0xFD: key=2;break; case 0xFB: key=3;break; case 0xF7: key=4;break; case 0xEF: key=5;break; case 0xDF: key=6;break; case 0xBF: key=7;break;/由于P1.7口用于蜂鸣器和发光二极管,会产生低电平的变化 case 0x7E: key=1;break; case 0x7D: key=2;break; case 0x7B: key=3;break; case 0x77: key=4;break; case 0x6F: key=5;break; case 0x5F: key=6;break; case 0x3F: key=7;break; while(temp!=0xFF&temp!=0x7F) temp=P1; temp&=0xFF; /P0_0口检测完成/-/P0_1口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_1=0; temp=P1; temp&=0xFF; if(temp!=0xFF&temp!=0x7F) delay10ms(1); temp=P1; temp&=0xFF; if(temp !=0xFF) temp=P1; temp&=0xFF; switch(temp) case 0xFE: key=8;break; case 0xFD: key=9;break; case 0xFB: key=10;break; case 0xF7: key=11;break; case 0xEF: key=12;break; case 0xDF: key=13;break; case 0xBF: key=14;break;/由于P1.7口用于蜂鸣器和发光二极管,会产生低电平的变化 case 0x7E: key=8;break; case 0x7D: key=9;break; case 0x7B: key=10;break; case 0x77: key=11;break; case 0x6F: key=12;break; case 0x5F: key=13;break; case 0x3F: key=14;break; while(temp!=0xFF&temp!=0x7F) temp=P1; temp&=0xFF; /P0_1口检测完成/-/P0_2口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_2=0; temp=P1; temp&=0xFF; if(temp!=0xFF&temp!=0x7F) delay10ms(1); temp=P1; temp&=0xFF; if(temp !=0xFF) temp=P1; temp&=0xFF; switch(temp) case 0xFE: key=15;break; case 0xFD: key=16;break; case 0xFB: key=17;break; case 0xF7: key=18;break; case 0xEF: key=19;break; case 0xDF: key=20;break; case 0xBF: key=21;break;/由于P1.7口用于蜂鸣器和发光二极管,会产生低电平的变化 case 0x7E: key=15;break; case 0x7D: key=16;break; case 0x7B: key=17;break; case 0x77: key=18;break; case 0x6F: key=19;break; case 0x5F: key=20;break; case 0x3F: key=21;break; while(temp!=0xFF&temp!=0x7F) temp=P1; temp&=0xFF; /P0_2口检测完成/-/P0_3口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_3=0; temp=P1; temp&=0xFF; if(temp!=0xFF&temp!=0x7F) delay10ms(1); temp=P1; temp&=0xFF; if(temp !=0xFF) temp=P1; temp&=0xFF; switch(temp) case 0xFE: key=22;break; case 0xFD: key=23;break; case 0xFB: key=24;break; case 0xF7: key=25;break; case 0xEF: key=26;break; case 0xDF: key=27;break; case 0xBF: key=28;break;/由于P1.7口用于蜂鸣器和发光二极管,会产生低电平的变化 case 0x7E: key=22;break; case 0x7D: key=23;break; case 0x7B: key=24;break; case 0x77: key=25;break; case 0x6F: key=26;break; case 0x5F: key=27;break; case 0x3F: key=28;break; while(temp!=0xFF&temp!=0x7F) temp=P1; temp&=0xFF; /P0_3口检测完成/-/P0_4口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_4=0; temp=P1; temp&=0xFF; if(temp!=0xFF&temp!=0x7F) delay10ms(1); temp=P1; temp&=0xFF; if(temp !=0xFF) temp=P1; temp&=0xFF; switch(temp) case 0xFE: key=29;break; case 0xFD: key=30;break; case 0xFB: key=31;break; case 0xF7: key=32;break; case 0xEF: key=33;break; case 0xDF: key=34;break; case 0xBF: key=35;break;/由于P1.7口用于蜂鸣器和发光二极管,会产生低电平的变化 case 0x7E: key=29;break; case 0x7D: key=30;break; case 0x7B: key=31;break; case 0x77: key=32;break; case 0x6F: key=33;break; case 0x5F: key=34;break; case 0x3F: key=35;break; while(temp!=0xFF&temp!=0x7F) temp=P1; temp&=0xFF; /P0_4口检测完成/-/P0_5口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_5=0; temp=P1; temp&=0xFF; if(temp!=0xFF&temp!=0x7F) delay10ms(1); temp=P1; temp&=0xFF; if(temp !=0xFF) temp=P1; temp&=0xFF; switch(temp) case 0xFE: key=36;break; case 0xFD: key=37;break; case 0xFB: key=38;break; case 0xF7: key=39;break; case 0xEF: key=40;break; case 0xDF: key=41;break; case 0xBF: key=42;break;/由于P1.7口用于蜂鸣器和发光二极管,会产生低电平的变化 case 0x7E: key=36;break; case 0x7D: key=37;break; case 0x7B: key=38;break; case 0x77: key=39;break; case 0x6F: key=40;break; case 0x5F: key=41;break; case 0x3F: key=42;break; while(temp!=0xFF&temp!=0x7F) temp=P1; temp&=0xFF; /P0_5口检测完成/-/P0_6口检测 P1_0=1; P1_1=1; P1_2=1; P1_3=1; P1_4=1; P1_5=1; P1_6=1; P0=0xFF; P0_6=0; temp=P1; temp&=0xFF; if(te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论