目前,用于病床呼叫的系统有很多,它们多数都是有线通信,通过声光报警和LED屏显示告知呼叫求援的床位号码,一般由有线的床头分机、走廊显示屏和护士台的由发光二极管组成的病床一览表(板)组成。
1、基本任务:(1)当病人按下呼救信号按钮,呼救灯亮,同时显示病人编号,蜂鸣器发出 5秒呼救声,等待人员来护理。
(2)按照病人的病情划分出优先级别,有多个病人同时呼救时,系统优先显示最高级别的呼救编号。
(3)当人员处理完最高级别呼救后,按下清零键,系统按优先等级先后显示其他病人编号。
2、发挥部分:
采用单片机控制液晶显示内容,增加无线传输功能、语音播报等实用功能
代码:
- /***************前言**************/
- //设计名称:病房紧急呼叫系统的设计
- //设计人:杨德富
- //设计日期:2022年5月26日
- /**************END****************/
- #include "reg52.h"
- sfr P4 = 0xC0;
- //定义led端口
- sbit L1 = P0^0;
- sbit L2 = P0^1;
- sbit L3 = P0^2;
- //定义按键
- sbit R1 = P3^0;
- sbit R2 = P3^1;
- sbit R3 = P3^2;
- sbit R4 = P3^3;
- sbit C1 = P4^4;
- sbit C2 = P4^2;
- sbit C3 = P3^5;
- sbit C4 = P3^4;
- //病房号
- unsigned char num = 16;
- //病房服务
- unsigned char serve = 16;
- ////定义LED灯的当前状态
- //unsigned char stat_led = 0xff;
- //LED标志
- unsigned char led = 0;
- //中断计数变量
- unsigned char count=0;
- //数码管段码0~f - 全灭
- unsigned char code SMG_duanma[18]={
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0x88,0x80,
- 0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
- //数码管显示时长
- #define TSMG 300
- //按键延时
- #define TAJ 50
- //函数申明
- void Display_Num();
- //简单的延时函数
- void Delay(unsigned int t)
- {
- while(t--)
- {
- // Flag_Display();
- }
- }
- //573锁存器选中函数
- void Init573(unsigned char n)
- {
- switch(n)
- {
- case 4:
- P2 = (P2 & 0x1f) | 0x80;//Y4输出0,LED控制
- break;
- case 5:
- P2 = (P2 & 0x1f) | 0xa0;//Y5输出0,蜂鸣器和继电器控制
- break;
- case 6:
- P2 = (P2 & 0x1f) | 0xc0;//Y6输出0,数码管位选
- break;
- case 7:
- P2 = (P2 & 0x1f) | 0xe0;//Y7输出0,数码管段码
- break;
- case 0:
- P2 = (P2 & 0x1f) | 0x00;//所有锁存器不选择
- break;
- }
- P2 = (P2 & 0x1f) | 0x00; //所有锁存器都不选择
- }
- //数码管位选
- void DisplaySMG_Bit(unsigned char pos,unsigned char value)
- {
- P0 = 0x01 << pos;
- Init573(6);
- P0 = value;
- Init573(7);
- }
- //所有数码管全亮
- void DisplaySMG_All(unsigned char value)
- {
- P0 = 0xff;
- Init573(6);
- P0 = value;
- Init573(7);
- }
- //数码管延时函数
- void DelaySMG(unsigned int t)
- {
- while(t--);
- }
- //病房和服务显示
- void Display_Num()
- {
- //左边第一位显示病房号
- DisplaySMG_Bit(0,SMG_duanma[num]);
- DelaySMG(TSMG);
- DisplaySMG_Bit(0,0xff);
- //左边第二位"-"
- DisplaySMG_Bit(1,SMG_duanma[16]);
- DelaySMG(TSMG);
- DisplaySMG_Bit(1,0xff);
-
- //左边第三位"-"
- DisplaySMG_Bit(2,SMG_duanma[16]);
- DelaySMG(TSMG);
- DisplaySMG_Bit(2,0xff);
-
- //左边第四位显示服务serve
- DisplaySMG_Bit(3,SMG_duanma[serve]);
- DelaySMG(TSMG);
- DisplaySMG_Bit(3,0xff);
-
- DisplaySMG_All(0xff);
- }
- //初始化系统
- void Init_sys()
- {
- Init573(0);//关闭所有所有锁存器
- DisplaySMG_All(0xff);//关闭所有数码管
- P0 = 0x00;
- Init573(5);//关闭蜂鸣器和继电器
- P0 = 0xff;
- Init573(4);//关闭全部LED灯
- }
- //T0计数器初始化
- void InitTimer0()
- {
- TMOD=0x01;//选择模式
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
-
- ET0=1;
- EA=1;
- TR0=1;
- }
- //T0服务函数
- void ServiceTimer0() interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- count++;
- if(count==100)//5秒
- {
- P0=0x00;
- Init573(5);//关闭蜂鸣器
- count=0;
- }
- }
- //按键扫描以及处理函数
- void ScanKeys()
- {
- //检测第一行按键
- R1=0;
- R2=R3=R4=1;
- C1=C2=C3=C4=1;
- if (C1==0)//S7按键:A1
- {
- Delay(TAJ);
- if(C1==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=1;
- serve=10;
- while(C1==0);
- {
- Display_Num();
- }
- }
- }
- else if(C2==0)//S11按键:B1
- {
- Delay(TAJ);
- if(C2==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=1;
- serve=11;
- while(C2==0);
- {
- Display_Num();
- }
- }
- }
- else if(C3==0)//S15按键:C1
- {
- Delay(TAJ);
- if(C3==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=1;
- serve=12;
- while(C3==0);
- {
- Display_Num();
- }
- }
- }
- else if(C4==0)//S19按键:D1
- {
- Delay(TAJ);
- if(C4==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=1;
- serve=13;
- while(C4==0);
- {
- Display_Num();
- }
- }
- }
- //检测第二行按键
- R2=0;
- R1=R3=R4=1;
- C1=C2=C3=C4=1;
- if (C1==0)//S6按键:A2
- {
- Delay(TAJ);
- if(C1==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=2;
- serve=10;
- while(C1==0);
- {
- Display_Num();
- }
- }
- }
- else if(C2==0)//S10按键:B2
- {
- Delay(TAJ);
- if(C2==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=2;
- serve=11;
- while(C2==0);
- {
- Display_Num();
- }
- }
- }
- else if(C3==0)//S14按键:C2
- {
- Delay(TAJ);
- if(C3==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=2;
- serve=12;
- while(C3==0);
- {
- Display_Num();
- }
- }
- }
- else if(C4==0)//S18按键:D2
- {
- Delay(TAJ);
- if(C4==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=2;
- serve=13;
- while(C4==0);
- {
- Display_Num();
- }
- }
- }
- //检测第三行按键
- R3=0;
- R1=R2=R4=1;
- C1=C2=C3=C4=1;
- if (C1==0)//S5按键:A3
- {
- Delay(TAJ);
- if(C1==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=3;
- serve=10;
- while(C1==0);
- {
- Display_Num();
- }
- }
- }
- else if(C2==0)//S9按键:B3
- {
- Delay(TAJ);
- if(C2==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=3;
- serve=11;
- while(C2==0);
- {
- Display_Num();
- }
- }
- }
- else if(C3==0)//S13按键:C3
- {
- Delay(TAJ);
- if(C3==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=3;
- serve=12;
- while(C3==0);
- {
- Display_Num();
- }
- }
- }
- else if(C4==0)//S17按键:D3
- {
- Delay(TAJ);
- if(C4==0)
- {
- P0=0x40;
- Init573(5);
- InitTimer0();
- num=led=3;
- serve=13;
- while(C4==0);
- {
- Display_Num();
- }
- }
- }
- //检测第四行按键
- R4=0;
- R1=R2=R3=1;
- C1=C2=C3=C4=1;
- if (C1==0)//S4按键
- {
- Delay(TAJ);
- if(C1==0)
- {
- num=16;
- serve=16;
- led=4;
- P0=0x00;
- Init573(5);
- while(C1==0);
- {
- Display_Num();
- }
- }
- }
- // else if(C2==0)//S8按键
- // {
- // Delay(TAJ);
- // if(C2==0)
- // {
- // while(C2==0);
- // number=1;
- // DisplayNumber(SMG_duanma[number]);
- // }
- // }
- // else if(C3==0)//S12按键
- // {
- // Delay(TAJ);
- // if(C3==0)
- // {
- // while(C3==0);
- // number=2;
- // DisplayNumber(SMG_duanma[number]);
- // }
- // }
- // else if(C4==0)//S16按键
- // {
- // Delay(TAJ);
- // if(C4==0)
- // {
- // while(C4==0);
- // number=3;
- // DisplayNumber(SMG_duanma[number]);
- // }
- // }
- }
- //LED控制函数
- void LED_Control()
- {
- if(led == 1)
- {
- //L1点亮
- // P0 = 0xfe;
- L1=0;
- Init573(4);
- }
- else if(led == 2)
- {
- //L2点亮
- // P0 = 0xfd;
- L2=0;
- Init573(4);
- }
- else if(led == 3)
- {
- //L3点亮
- // P0 = 0xfb;
- L3=0;
- Init573(4);
- }
- else if(led == 4)
- {
- //全灭
- P0 = 0xff;
- Init573(4);
- }
- else
- {
- P0=0xff;
- Init573(4);
- }
- }
- //主函数
- void main()
- {
- Init_sys();
- while(1)
- {
- Display_Num();
- ScanKeys();
- LED_Control();
- }
- }