单片机医院病房呼叫系统设计

更新时间:2023-03-08 08:17:48 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机报告

2010-05-08

一. 整体设计

临床求助呼叫(监护)是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断和护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士,并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。它要求及时、准确、可靠、简便可行。

本呼叫系统基于Ateml89C51单片机,振荡电路的晶振采用12MHz,由控制核心AT89S52单片机、电源电路、振荡电路、复位电路、数码管解码芯片、病房选择和七段数码管等部分组成,系统框图如下:

电源电路 振荡电路 AT89S51 单片机 解码 芯片 数字显示电路 复位电路 选择电路

二.硬件设计

2.1 电路原理图

工作原理为:电源电路为单片机以及其他模块提供5V电源。晶振模块为单片机提供时钟标准,使系统各部分能协调工作。复位电路模块为单片机系统提供复位功能。单片机作为主控制器,根据输入信号对系统进行相应的控制。病房一共为四个,从1号病房到4号病房病人的情况由重到轻,即1号病房的优先级最高,4号病房的优先级最低。所以,当有两个病房一起呼叫时,优先级高的病房号显

1

示;当低优先级的病房呼叫完毕后高优先级的病房呼叫,系统显示的号码改变;当优先级高的病房呼叫完毕后工作人员未复位的情况下,低优先级的病房呼叫无效。另外,当有病房呼叫时蜂鸣器响直至复位。此次设计的电路图如下:

(2.2 元器件列表

元件名称 单片机 排阻 晶振 电容 电解电容 按键 电阻 电源 数码管 解码芯片 蜂呜器 电解电容 电容 二极管 发光二极管 开关 型号 AT89C52 4.7KΩ 12MHz 22pF 10uF/10V 数量/个 1 1 1 2 1 5 5 1 2 2 1 1 1 1 1 1 用途 控制核心 晶振电路 复位电路 病房按钮 电源电路 10KΩ 5V/0.5A 1位共阳 74LS47 104 BCD解码 复位电路 复位电路 复位电路 电源显示 电源开关 2

2.3 仿真图:

1、未通电:

2、通电:

3

3、低优先级病房先呼叫:(蜂鸣器响)

高优先级病房后呼叫:(蜂鸣器响)

呼叫有效

4

4、高优先级病房先呼叫:(蜂鸣器响)

低优先级病房后呼叫:(蜂鸣器响)

呼叫无效

5

5、当有两个病房同时呼叫时

1号3号病房同时呼叫显示1 号

三.软件设计

3.1 功能介绍

启动系统后,数码管显示0。当有一个病人呼叫时,数码管显示相应病房号,同时蜂鸣器响起;当有两个病人同时呼叫时,数码管显示优先级高的,同时蜂鸣器响起;当有一个病房呼叫后另一个病房呼叫,若后呼叫的病房优先级低,则数码管显示不变,若后呼叫的病房优先级高,则数码管显示后呼叫的,两种情况下蜂鸣器都会叫,只是在有别的病房呼叫时有一点变音。

6

3.2 程序流程图

程序流程图如下:

开始 工作

有一个病房呼叫

显示病房号并响铃

有病房再次呼叫 判断优先级

显示病房号并响铃

开始 判断优先级 有多个病房呼叫

7

3.3程序源代码:

#include

#define uchar unsigned char

sbit key4=P3^0;//定义按键位置 sbit key3=P3^1; sbit key2=P3^2; sbit key1=P3^3;

sbit reset=P3^4;//复位

sbit BEEP=P1^7;//定义蜂鸣器端口 uchar flag1,i;

void choice(); void clean(); void delay(); void de(); void ring();

void main() { while(1) { P3=0xff; reset=0; BEEP=0; flag1=0; choice(); delay(); clean(); } }

void choice()//确定病人

{ while(reset!=1&&flag==0) { if(key1==0) { de(); if(key1==0) {P0=0X86;flag=1;} } else if(key2==0) {

8

de(); if(key2==0&&key1!=0) {P0=0Xdb;flag=1;} } else if(key3==0) { de(); if(key3==0&&key1!=0&&key2!=0) {P0=0Xcf; flag=1;} } else if(key4==0) { de(); if(key4==0&&key1!=0&&key2!=0&&key3!=0) {P0=0Xe6; flag=1;} } } }

void clean() //RESET 为高的时候复位 { if(reset==1) { BEEP=0; P0=0x3f; } }

void delay() //RESET为低的时候延时 { while(!reset) { ring(); } }

void ring() { for(i=0;reset==0;i++)//喇叭发声的时间循环

9

{ de();

BEEP=!BEEP; if(key1==0||key2==0||key3==0)//第二次呼叫 { if( P0==0X86) P0=0X86; else if(P0==0Xdb&&key1==0) P0=0X86; else if(P0==0Xcf&&key1==0) P0=0X86; else if(P0==0Xcf&&key1==1&&key2==0) P0=0Xdb; else if(P0==0Xe6&&key1==0) P0=0X86; else if(P0==0Xe6&&key1==1&&key2==0) P0=0Xdb; else if(P0==0Xe6&&key1==1&&key2==1&&key3==0) P0=0Xcf; } } }

void de() { for(i=300;i>0;i--); }

四、仿真及程序调试

此次课程设计程序完全为自己所写,图也是自己画出来的,在开始程序只能保证第一次呼叫,也就是当有一个病人呼叫后其他病人不能呼叫,在仿真的过程中,开始仿真失败,数码管完全不亮,后来发现是因为在病人的按钮开关上接了发光二极管,导致驱动不够。解决这个问题后,发现有时序混乱问题,所以又加上了void de()函数防抖动,这处是同学提醒。之后又出现蜂鸣器不响,又加入了ring()函数的前半部分,然而又将图中的接口与口与程序中的接口没相符,改正后蜂鸣器开始叫。最后加入了ring函数的if部分,这样在一个病房呼叫后其他优先级高的病房依旧可以呼叫,调试成功。 实物焊接

焊接后实物电路图无错,但是发生接触不良现象,通电后89C51的引脚不接通,导致数码管不亮,然而摇动芯片或排阻过程中,数码管会亮,不知原因,因为剩下器材不充分,所以放弃了焊接实物。

10

五、体会

此次设计我全部采用了C语言,是因为相对于汇编语言而言,我对C语言更加熟悉,在网上病房呼叫系统的例子不多,所以只能参考一些抢答器的例子。病房呼叫系统相比于抢答器来说,程序上简单很多,但是,如果是想自己写的话,我只能选择相对简单的,这样才好更加的了解自己设计的东西,比直接copy出来的设计会学到更多的东西。

实物焊接虽然最后以告终,但是,还是学会了耐心和细心,如果布局,如何走线会让电路板更加整洁,总之收获还是很多的!

11

本文来源:https://www.bwwdw.com/article/mox3.html

Top