|
目前,用于病床呼叫的系統(tǒng)有很多,它們多數(shù)都是有線通信,通過聲光報(bào)警和LED屏顯示告知呼叫求援的床位號(hào)碼,一般由有線的床頭分機(jī)、走廊顯示屏和護(hù)士臺(tái)的由發(fā)光二極管組成的病床一覽表(板)組成。
1、基本任務(wù):(1)當(dāng)病人按下呼救信號(hào)按鈕,呼救燈亮,同時(shí)顯示病人編號(hào),蜂鳴器發(fā)出 5秒呼救聲,等待人員來護(hù)理。
(2)按照病人的病情劃分出優(yōu)先級(jí)別,有多個(gè)病人同時(shí)呼救時(shí),系統(tǒng)優(yōu)先顯示最高級(jí)別的呼救編號(hào)。
(3)當(dāng)人員處理完最高級(jí)別呼救后,按下清零鍵,系統(tǒng)按優(yōu)先等級(jí)先后顯示其他病人編號(hào)。
2、發(fā)揮部分:
采用單片機(jī)控制液晶顯示內(nèi)容,增加無線傳輸功能、語音播報(bào)等實(shí)用功能
- /***************前言**************/
- //設(shè)計(jì)名稱:病房緊急呼叫系統(tǒng)的設(shè)計(jì)
- //設(shè)計(jì)人:楊德富
- //設(shè)計(jì)日期: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;
- //病房號(hào)
- unsigned char num = 16;
- //病房服務(wù)
- unsigned char serve = 16;
- ////定義LED燈的當(dāng)前狀態(tài)
- //unsigned char stat_led = 0xff;
- //LED標(biāo)志
- unsigned char led = 0;
- //中斷計(jì)數(shù)變量
- unsigned char count=0;
- //數(shù)碼管段碼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};
- //數(shù)碼管顯示時(shí)長
- #define TSMG 300
- //按鍵延時(shí)
- #define TAJ 50
- //函數(shù)申明
- void Display_Num();
- //簡單的延時(shí)函數(shù)
- void Delay(unsigned int t)
- {
- while(t--)
- {
- // Flag_Display();
- }
- }
- //573鎖存器選中函數(shù)
- 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,數(shù)碼管位選
- break;
- case 7:
- P2 = (P2 & 0x1f) | 0xe0;//Y7輸出0,數(shù)碼管段碼
- break;
- case 0:
- P2 = (P2 & 0x1f) | 0x00;//所有鎖存器不選擇
- break;
- }
- P2 = (P2 & 0x1f) | 0x00; //所有鎖存器都不選擇
- }
- //數(shù)碼管位選
- void DisplaySMG_Bit(unsigned char pos,unsigned char value)
- {
- P0 = 0x01 << pos;
- Init573(6);
- P0 = value;
- Init573(7);
- }
- //所有數(shù)碼管全亮
- void DisplaySMG_All(unsigned char value)
- {
- P0 = 0xff;
- Init573(6);
- P0 = value;
- Init573(7);
- }
- //數(shù)碼管延時(shí)函數(shù)
- void DelaySMG(unsigned int t)
- {
- while(t--);
- }
- //病房和服務(wù)顯示
- void Display_Num()
- {
- //左邊第一位顯示病房號(hào)
- 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);
-
- //左邊第四位顯示服務(wù)serve
- DisplaySMG_Bit(3,SMG_duanma[serve]);
- DelaySMG(TSMG);
- DisplaySMG_Bit(3,0xff);
-
- DisplaySMG_All(0xff);
- }
- //初始化系統(tǒng)
- void Init_sys()
- {
- Init573(0);//關(guān)閉所有所有鎖存器
- DisplaySMG_All(0xff);//關(guān)閉所有數(shù)碼管
- P0 = 0x00;
- Init573(5);//關(guān)閉蜂鳴器和繼電器
- P0 = 0xff;
- Init573(4);//關(guān)閉全部LED燈
- }
- //T0計(jì)數(shù)器初始化
- void InitTimer0()
- {
- TMOD=0x01;//選擇模式
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
-
- ET0=1;
- EA=1;
- TR0=1;
- }
- //T0服務(wù)函數(shù)
- void ServiceTimer0() interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- count++;
- if(count==100)//5秒
- {
- P0=0x00;
- Init573(5);//關(guān)閉蜂鳴器
- count=0;
- }
- }
- //按鍵掃描以及處理函數(shù)
- void ScanKeys()
- {
- //檢測(cè)第一行按鍵
- 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();
- }
- }
- }
- //檢測(cè)第二行按鍵
- 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();
- }
- }
- }
- //檢測(cè)第三行按鍵
- 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();
- }
- }
- }
- //檢測(cè)第四行按鍵
- 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控制函數(shù)
- void LED_Control()
- {
- if(led == 1)
- {
- //L1點(diǎn)亮
- // P0 = 0xfe;
- L1=0;
- Init573(4);
- }
- else if(led == 2)
- {
- //L2點(diǎn)亮
- // P0 = 0xfd;
- L2=0;
- Init573(4);
- }
- else if(led == 3)
- {
- //L3點(diǎn)亮
- // P0 = 0xfb;
- L3=0;
- Init573(4);
- }
- else if(led == 4)
- {
- //全滅
- P0 = 0xff;
- Init573(4);
- }
- else
- {
- P0=0xff;
- Init573(4);
- }
- }
- //主函數(shù)
- void main()
- {
- Init_sys();
- while(1)
- {
- Display_Num();
- ScanKeys();
- LED_Control();
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|