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