目前,用于病床呼叫的系統有很多,它們多數都是有線通信,通過聲光報警和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();
- }
- }
復制代碼
|