標(biāo)題:
基于AT89C52單片機的病房呼叫系統(tǒng)設(shè)計源代碼
[打印本頁]
作者:
1873006931
時間:
2022-5-28 16:33
標(biāo)題:
基于AT89C52單片機的病房呼叫系統(tǒng)設(shè)計源代碼
目前,用于病床呼叫的系統(tǒng)有很多,它們多數(shù)都是有線通信,通過聲光報警和LED屏顯示告知呼叫求援的床位號碼,一般由有線的床頭分機、走廊顯示屏和護士臺的由發(fā)光二極管組成的病床一覽表(板)組成。
1、基本任務(wù):(1)當(dāng)病人按下呼救信號按鈕,呼救燈亮,同時顯示病人編號,蜂鳴器發(fā)出 5秒呼救聲,等待人員來護理。
(2)按照病人的病情劃分出優(yōu)先級別,有多個病人同時呼救時,系統(tǒng)優(yōu)先顯示最高級別的呼救編號。
(3)當(dāng)人員處理完最高級別呼救后,按下清零鍵,系統(tǒng)按優(yōu)先等級先后顯示其他病人編號。
2、發(fā)揮部分:
采用單片機控制液晶顯示內(nèi)容,增加無線傳輸功能、語音播報等實用功能
/***************前言**************/
//設(shè)計名稱:病房緊急呼叫系統(tǒng)的設(shè)計
//設(shè)計人:楊德富
//設(shè)計日期: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;
//病房服務(wù)
unsigned char serve = 16;
////定義LED燈的當(dāng)前狀態(tài)
//unsigned char stat_led = 0xff;
//LED標(biāo)志
unsigned char led = 0;
//中斷計數(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ù)碼管顯示時長
#define TSMG 300
//按鍵延時
#define TAJ 50
//函數(shù)申明
void Display_Num();
//簡單的延時函數(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ù)
void DelaySMG(unsigned int t)
{
while(t--);
}
//病房和服務(wù)顯示
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);
//左邊第四位顯示服務(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計數(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()
{
//檢測第一行按鍵
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控制函數(shù)
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);
}
}
//主函數(shù)
void main()
{
Init_sys();
while(1)
{
Display_Num();
ScanKeys();
LED_Control();
}
}
復(fù)制代碼
作者:
muciyou
時間:
2022-8-14 22:19
親有無原理圖呀
作者:
lsh04
時間:
2022-8-17 17:51
發(fā)代碼,要同時發(fā)原理圖才有用!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1