强力推荐 基于单片机的简易病房呼叫系统 C程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{P0=~0x6d;flag6=1;}
else if(P0==~0x7d&&key1==1&&key2==1&&key3==1&&key4==0)
{P0=~0x66;flag6=1;}
else if(P0==~0x7d&&key1==1&&key2==1&&key3==0)
{P0=~0x4f;flag6=1;}
void main() //主函数
{
led1=1; //数据初始化
flag=0;
P2=0xff;
P0=~0x3F;
flag1=0;
flag2=0;
flag3=0;
flag4=0;
flag5=0;
flag6=0;
while(1)
{
while(reset==1&&flag==0)
{if(key1==0)
{
beep=1;
P0=~0x3f;
led1=1;
flag=0;
}
}
void clean() //复位清零子函数
{Baidu Nhomakorabea
if(reset==0)
{
delay(5);
if(reset==0)
{
while(!reset);
display();
}
}
}
void advg() //优先权选择子函数
{
if(P0==~0x06) //显示为1时
else if(P0==~0x7d&&key1==1&&key2==0)
{P0=~0x5b;flag6=1;}
else if(P0==~0x7d&&key1==0 )
{P0=~0x06;flag6=1;}
else if(P0==~0x5B&&key1==1)//显示为2时
{save();flag2=0;}
else if(P0==~0x4f&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x4f&&flag6==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x66&&flag1==1) //显示为4时
{P0=~0x06;flag1=0;}
else if(P0==~0x66&&flag2==1)
/*接线要求:P0口控制1位数码管;P2.0~P2.5口对应6个独立按键;P2.7口接复位清零按键;P3.0口接报警指示灯*/
/*改善:当多个按键同时按下时,显示优先级最高的同时保存优先级低的,每按一次复位键,显示的是次优先级的按键,
直到按下的按键全部依次显示完,数码管显示零*/
#include <reg52.h>
{save();flag4=0;}
else if(P0==~0x66&&key1==1)
{save();flag4=0;}
else if(P0==~0x6d&&key4==1) //显示为5时
{save();flag5=0;}
else if(P0==~0x6d&&key3==1)
{save();flag5=0;}
{P0=~0x06;flag4=1;}
else if(P0==~0x6d&&key1==1&&key2==1&&key3==1&&key4==0) //显示为5时
{P0=~0x66;flag5=1;}
else if(P0==~0x6d&&key1==1&&key2==1&&key3==0)
{P0=~0x4f;flag5=1;}
{
P0=~0x6d;
flag=1;
led1=0;
}
}
if(key6==0)
{
delay(5);
if(key6==0&&key5==1&&key4==1&&key3==1&&key2==1&&key1==1)
{
P0=~0x7D;
flag=1;
led1=0;
}
}
}
while(reset==1&&flag==1)
sbit key4=P2^3;
sbit key5=P2^4;
sbit key6=P2^5;
uchar flag,flag1,flag2,flag3,flag4,flag5,flag6;
//数码管断码(共阳极取反)
//{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
{P0=~0x5b;flag2=0;}
else if(P0==~0x66&&flag3==1)
{P0=~0x66;flag3=0;}
else if(P0==~0x66&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x66&&flag6==1)
{P0=~0x7d;flag6=0;}
void delay(unsigned int i) //延时子函数
{
char j;
for(i; i > 0; i--)
for(j = 110; j > 0; j--);
}
void didi()
{
while(reset!=0&&flag==1)
{ beep=0;
delay(500);
beep=1;
delay(300);
beep=0;
delay(50);
beep=1;
break; //这句很关键跳出循环
}
}
void save()
{
if(key1==0)
{delay(5);
if(key1==0)
{flag1=1;}
}
if(key2==0)
{delay(5);
if(key2==0)
{flag2=1;}
}
if(key3==0)
else if(P0==~0x5b&&flag3==1)
{P0=~0x4f;flag3=0;}
else if(P0==~0x5b&&flag4==1)
{P0=~0x66;flag4=0;}
else if(P0==~0x5b&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x5b&&flag6==1)
#define uchar unsigned char;
#define uint unsigned int;
sbit reset=P2^7; //位定义按键
sbit led1=P3^0;
sbit beep=P1^5;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
{P0=~0x06;flag3=1;}
else if(P0==~0x66&&key1==1&&key2==1&&key3==0) //显示为4时
{P0=~0x4f;flag4=1;}
else if(P0==~0x66&&key1==1&&key2==0)
{P0=~0x5b;flag4=1;}
else if(P0==~0x66&&key1==0)
else if(P0==~0x6d&&key2==1)
{save();flag5=0;}
else if(P0==~0x6d&&key1==1)
{save();flag5=0;}
else if(P0==~0x7d&&key5==1) //显示为6时
{save();flag6=0;}
else if(P0==~0x7d&&key4==1)
else if(P0==~0x7d&&flag3==1)
{P0=~0x66;flag3=0;}
else if(P0==~0x7d&&flag4==1)
{P0=~0x6d;flag4=0;}
else if(P0==~0x7d&&flag5==1)
{P0=~0x7d;flag5=0;}
else if(flag1==0&&flag2==0&&flag3==0&&flag4==0&&flag5==0&&flag6==0)
{save();flag6=0;}
else if(P0==~0x7d&&key3==1)
{save();flag6=0;}
else if(P0==~0x7d&&key2==1)
{save();flag6=0;}
else if(P0==~0x7d&&key1==1)
{save();flag6=0;}
}
{flag6=1;}
}
}
void display() //复位锁存显示函数
{
if(P0==~0x06&&flag2==1) //显示为1时
{P0=~0x5b;flag2=0;}
else if(P0==~0x06&&flag3==1)
{P0=~0x4f;flag3=0;}
else if(P0==~0x06&&flag4==1)
{P0=~0x66;flag4=0;}
else if(P0==~0x06&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x06&&flag6==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x5b&&flag1==1) //显示为2时
{P0=~0x06;flag1=0;}
{P0=~0x6d;flag4=0;}
else if(P0==~0x6d&&flag6==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x7d&&flag1==1) //显示为6时
{P0=~0x06;flag1=0;}
else if(P0==~0x7d&&flag2==1)
{P0=~0x5b;flag2=0;}
else if(P0==~0x6d&&flag1==1) //显示为5时
{P0=~0x06;flag1=0;}
else if(P0==~0x6d&&flag2==1)
{P0=~0x5b;flag2=0;}
else if(P0==~0x6d&&flag3==1)
{P0=~0x66;flag3=0;}
else if(P0==~0x6d&&flag4==1)
else if(P0==~0x6d&&key1==1&&key2==0)
{P0=~0x5b;flag5=1;}
else if(P0==~0x6d&&key1==0 )
{P0=~0x06;flag5=1;}
else if(P0==~0x7d&&key1==1&&key2==1&&key3==1&&key4==1&&key5==0) //显示为6时
else if(P0==~0x4f&&key2==1) //显示为3时
{save();flag3=0;}
else if(P0==~0x4f&&key1==1)
{save();flag3=0;}
else if(P0==~0x66&&key3==1) //显示为4时
{save();flag4=0;}
else if(P0==~0x66&&key2==1)
{ advg();didi();}
{
delay(5);
if(key1==0)
{
P0=~0x06;
flag=1;
led1=0;
}
}
if(key2==0)
{
delay(5);
if(key2==0&&key1==1)
{
P0=~0x5B;
flag=1;
led1=0;
beep=0;
}
}
if(key3==0)
{
delay(5);
if(key3==0&&key2==1&&key1==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x4f&&flag1==1) //显示为3时
{P0=~0x06;flag1=0;}
else if(P0==~0x4f&&flag2==1)
{P0=~0x5b;flag2=0;}
else if(P0==~0x4f&&flag4==1)
{P0=~0x66;flag4=0;}
{
delay(5);
if(key3==0)
{flag3=1;}
}
if(key4==0)
{
delay(5);
if(key4==0)
{flag4=1;}
}
if(key5==0)
{
delay(5);
if(key5==0)
{flag5=1;}
}
if(key6==0)
{
delay(5);
if(key6==0)
{
P0=~0x06;
save();
flag1=0;
}
else if(P0==~0x5B&&key1==0) //显示为2时
{ P0=~0x06;flag2=1;}
else if(P0==~0x4f&&key1==1&&key2==0) //显示为3时
{P0=~0x5b;flag3=1;}
else if (P0==~0x4f&&key1==0)
{
P0=~0x4F;
flag=1;
led1=0;
}
}
if(key4==0)
{
delay(5);
if(key4==0&&key3==1&&key2==1&&key1==1)
{
P0=~0x66;
flag=1;
led1=0;
}
}
if(key5==0)
{
delay(5);
if(key5==0&&key4==1&&key3==1&&key2==1&&key1==1)
else if(P0==~0x7d&&key1==1&&key2==1&&key3==1&&key4==0)
{P0=~0x66;flag6=1;}
else if(P0==~0x7d&&key1==1&&key2==1&&key3==0)
{P0=~0x4f;flag6=1;}
void main() //主函数
{
led1=1; //数据初始化
flag=0;
P2=0xff;
P0=~0x3F;
flag1=0;
flag2=0;
flag3=0;
flag4=0;
flag5=0;
flag6=0;
while(1)
{
while(reset==1&&flag==0)
{if(key1==0)
{
beep=1;
P0=~0x3f;
led1=1;
flag=0;
}
}
void clean() //复位清零子函数
{Baidu Nhomakorabea
if(reset==0)
{
delay(5);
if(reset==0)
{
while(!reset);
display();
}
}
}
void advg() //优先权选择子函数
{
if(P0==~0x06) //显示为1时
else if(P0==~0x7d&&key1==1&&key2==0)
{P0=~0x5b;flag6=1;}
else if(P0==~0x7d&&key1==0 )
{P0=~0x06;flag6=1;}
else if(P0==~0x5B&&key1==1)//显示为2时
{save();flag2=0;}
else if(P0==~0x4f&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x4f&&flag6==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x66&&flag1==1) //显示为4时
{P0=~0x06;flag1=0;}
else if(P0==~0x66&&flag2==1)
/*接线要求:P0口控制1位数码管;P2.0~P2.5口对应6个独立按键;P2.7口接复位清零按键;P3.0口接报警指示灯*/
/*改善:当多个按键同时按下时,显示优先级最高的同时保存优先级低的,每按一次复位键,显示的是次优先级的按键,
直到按下的按键全部依次显示完,数码管显示零*/
#include <reg52.h>
{save();flag4=0;}
else if(P0==~0x66&&key1==1)
{save();flag4=0;}
else if(P0==~0x6d&&key4==1) //显示为5时
{save();flag5=0;}
else if(P0==~0x6d&&key3==1)
{save();flag5=0;}
{P0=~0x06;flag4=1;}
else if(P0==~0x6d&&key1==1&&key2==1&&key3==1&&key4==0) //显示为5时
{P0=~0x66;flag5=1;}
else if(P0==~0x6d&&key1==1&&key2==1&&key3==0)
{P0=~0x4f;flag5=1;}
{
P0=~0x6d;
flag=1;
led1=0;
}
}
if(key6==0)
{
delay(5);
if(key6==0&&key5==1&&key4==1&&key3==1&&key2==1&&key1==1)
{
P0=~0x7D;
flag=1;
led1=0;
}
}
}
while(reset==1&&flag==1)
sbit key4=P2^3;
sbit key5=P2^4;
sbit key6=P2^5;
uchar flag,flag1,flag2,flag3,flag4,flag5,flag6;
//数码管断码(共阳极取反)
//{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
{P0=~0x5b;flag2=0;}
else if(P0==~0x66&&flag3==1)
{P0=~0x66;flag3=0;}
else if(P0==~0x66&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x66&&flag6==1)
{P0=~0x7d;flag6=0;}
void delay(unsigned int i) //延时子函数
{
char j;
for(i; i > 0; i--)
for(j = 110; j > 0; j--);
}
void didi()
{
while(reset!=0&&flag==1)
{ beep=0;
delay(500);
beep=1;
delay(300);
beep=0;
delay(50);
beep=1;
break; //这句很关键跳出循环
}
}
void save()
{
if(key1==0)
{delay(5);
if(key1==0)
{flag1=1;}
}
if(key2==0)
{delay(5);
if(key2==0)
{flag2=1;}
}
if(key3==0)
else if(P0==~0x5b&&flag3==1)
{P0=~0x4f;flag3=0;}
else if(P0==~0x5b&&flag4==1)
{P0=~0x66;flag4=0;}
else if(P0==~0x5b&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x5b&&flag6==1)
#define uchar unsigned char;
#define uint unsigned int;
sbit reset=P2^7; //位定义按键
sbit led1=P3^0;
sbit beep=P1^5;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
{P0=~0x06;flag3=1;}
else if(P0==~0x66&&key1==1&&key2==1&&key3==0) //显示为4时
{P0=~0x4f;flag4=1;}
else if(P0==~0x66&&key1==1&&key2==0)
{P0=~0x5b;flag4=1;}
else if(P0==~0x66&&key1==0)
else if(P0==~0x6d&&key2==1)
{save();flag5=0;}
else if(P0==~0x6d&&key1==1)
{save();flag5=0;}
else if(P0==~0x7d&&key5==1) //显示为6时
{save();flag6=0;}
else if(P0==~0x7d&&key4==1)
else if(P0==~0x7d&&flag3==1)
{P0=~0x66;flag3=0;}
else if(P0==~0x7d&&flag4==1)
{P0=~0x6d;flag4=0;}
else if(P0==~0x7d&&flag5==1)
{P0=~0x7d;flag5=0;}
else if(flag1==0&&flag2==0&&flag3==0&&flag4==0&&flag5==0&&flag6==0)
{save();flag6=0;}
else if(P0==~0x7d&&key3==1)
{save();flag6=0;}
else if(P0==~0x7d&&key2==1)
{save();flag6=0;}
else if(P0==~0x7d&&key1==1)
{save();flag6=0;}
}
{flag6=1;}
}
}
void display() //复位锁存显示函数
{
if(P0==~0x06&&flag2==1) //显示为1时
{P0=~0x5b;flag2=0;}
else if(P0==~0x06&&flag3==1)
{P0=~0x4f;flag3=0;}
else if(P0==~0x06&&flag4==1)
{P0=~0x66;flag4=0;}
else if(P0==~0x06&&flag5==1)
{P0=~0x6d;flag5=0;}
else if(P0==~0x06&&flag6==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x5b&&flag1==1) //显示为2时
{P0=~0x06;flag1=0;}
{P0=~0x6d;flag4=0;}
else if(P0==~0x6d&&flag6==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x7d&&flag1==1) //显示为6时
{P0=~0x06;flag1=0;}
else if(P0==~0x7d&&flag2==1)
{P0=~0x5b;flag2=0;}
else if(P0==~0x6d&&flag1==1) //显示为5时
{P0=~0x06;flag1=0;}
else if(P0==~0x6d&&flag2==1)
{P0=~0x5b;flag2=0;}
else if(P0==~0x6d&&flag3==1)
{P0=~0x66;flag3=0;}
else if(P0==~0x6d&&flag4==1)
else if(P0==~0x6d&&key1==1&&key2==0)
{P0=~0x5b;flag5=1;}
else if(P0==~0x6d&&key1==0 )
{P0=~0x06;flag5=1;}
else if(P0==~0x7d&&key1==1&&key2==1&&key3==1&&key4==1&&key5==0) //显示为6时
else if(P0==~0x4f&&key2==1) //显示为3时
{save();flag3=0;}
else if(P0==~0x4f&&key1==1)
{save();flag3=0;}
else if(P0==~0x66&&key3==1) //显示为4时
{save();flag4=0;}
else if(P0==~0x66&&key2==1)
{ advg();didi();}
{
delay(5);
if(key1==0)
{
P0=~0x06;
flag=1;
led1=0;
}
}
if(key2==0)
{
delay(5);
if(key2==0&&key1==1)
{
P0=~0x5B;
flag=1;
led1=0;
beep=0;
}
}
if(key3==0)
{
delay(5);
if(key3==0&&key2==1&&key1==1)
{P0=~0x7d;flag6=0;}
else if(P0==~0x4f&&flag1==1) //显示为3时
{P0=~0x06;flag1=0;}
else if(P0==~0x4f&&flag2==1)
{P0=~0x5b;flag2=0;}
else if(P0==~0x4f&&flag4==1)
{P0=~0x66;flag4=0;}
{
delay(5);
if(key3==0)
{flag3=1;}
}
if(key4==0)
{
delay(5);
if(key4==0)
{flag4=1;}
}
if(key5==0)
{
delay(5);
if(key5==0)
{flag5=1;}
}
if(key6==0)
{
delay(5);
if(key6==0)
{
P0=~0x06;
save();
flag1=0;
}
else if(P0==~0x5B&&key1==0) //显示为2时
{ P0=~0x06;flag2=1;}
else if(P0==~0x4f&&key1==1&&key2==0) //显示为3时
{P0=~0x5b;flag3=1;}
else if (P0==~0x4f&&key1==0)
{
P0=~0x4F;
flag=1;
led1=0;
}
}
if(key4==0)
{
delay(5);
if(key4==0&&key3==1&&key2==1&&key1==1)
{
P0=~0x66;
flag=1;
led1=0;
}
}
if(key5==0)
{
delay(5);
if(key5==0&&key4==1&&key3==1&&key2==1&&key1==1)