硬件设计
链接:https://pan.baidu.com/s/1nTCDdH67uMQRDR771aX7ig
提取码:9qlg
仿真图:
程序设计
#include<reg52.h>
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
#define ulong unsigned long
sbit k0=P3^5; //取号用的按键
sbit k1=P2^4; //呼叫患者的按键1
sbit k2=P2^5; //呼叫患者的按键2
sbit k3=P2^6; //呼叫患者的按键3
sbit k4=P2^7; //呼叫患者的按键4
sbit buzzer=P2^2; //蜂鸣器接口
sbit rs1=P2^0;
sbit en1=P2^1;
sbit rs2=P3^0;
sbit en2=P3^1;
sbit p1=P3^2;
sbit p2=P3^3;
sbit p3=P3^6;
sbit p4=P3^7;//重新呼叫按键
uint num;//患者所领取的号码
uint num1;//医生所呼叫的号码
uint num2_1,num2_2,num2_3,num2_4;//为重新呼叫保留号码
uchar windown;//诊室号
uchar i,t0;
uchar code table2[]="0123456789";
uchar code table1_1[]="NO.0000 come to";
uchar code table1_2[]="0.window,please!";//用于液晶1初始化显示
uchar code table2_1[]="Now waiting:";
uchar code table2_2[]="Your number:";//用于液晶2初始化显示
void keyscan();//按键检测
void write_order1(uchar order);//写指令函数 液晶1
void write_dat1(uchar dat);//写数据函数 液晶1
void init_lcd1();//液晶1初始化
void write_add1(uchar address,uchar dat);//指定地址写入数据
void display_lcd1(uint num,uchar );//液晶1显示
void write_order2(uchar order);//写指令函数 液晶2
void write_dat2(uchar dat);//写数据函数 液晶2
void init_lcd2();//液晶2初始化
void write_add2(uchar address,uchar dat);//指定地址写入数据
void display_lcd2(uint num);//液晶2显示
void delay(uchar z) //延时函数
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
bi(ulong t)
{
ulong c;
uint n;
for(c=0;c<t;c++)
{
for(n=0;n<50;n++); //延时
buzzer=~buzzer; //取反输出到喇叭的信号
}
}
void init()//初始化
{
t0=0;
windown=0;
num=0;
buzzer=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;//定时器0
init_lcd2();
init_lcd1();
}
void main()
{
init();
while(1)
{
keyscan();
display_lcd2(num);
}
}
void keyscan()//按键检测
{
if(k0==0)//患者叫号按键检测
{
delay(10);//延时消抖
if(k0==0)
num++;//号码数加1
while(!k0);
delay(10);//延时消抖
while(!k0);//按键松手检测
}
if(k1==0)//一号诊室呼叫
{
delay(10);
if(k1==0)
{
if(num1<num)
{
windown=1;
num1++;
TR0=1;
num2_1=num1;
display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
}
}
while(!k1);
delay(10);//延时消抖
while(!k1);//按键松手检测
}
if(k2==0)//二号诊室呼叫
{
delay(10);
if(k2==0)
{
if(num1<num)
{
windown=2;
num1++;
TR0=1;
num2_2=num1;
display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
}
}
while(!k2);
delay(10);//延时消抖
while(!k2);//按键松手检测
}
if(k3==0)//三号诊室呼叫
{
delay(10);
if(k3==0)
{
if(num1<num)
{
windown=3;
num1++;
TR0=1;
num2_3=num1;
display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
}
}
while(!k3);
delay(10);//延时消抖
while(!k3);//按键松手检测
}
if(k4==0)//四号诊室呼叫
{
delay(10);
if(k4==0)
{
if(num1<num)
{
windown=4;
num1++;
TR0=1;
num2_4=num1;
display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
}
}
while(!k4);
delay(10);//延时消抖
while(!k4);//按键松手检测
}
if(p1==0)//一号诊室重新呼叫
{
delay(10);
if(p1==0)
{
TR0=1;
display_lcd1(num2_1,1);
}
while(!p1);
delay(10);//延时消抖
while(!p1);//按键松手检测
}
if(p2==0)//二号诊室重新呼叫
{
delay(10);
if(p2==0)
{
TR0=1;
display_lcd1(num2_2,2);
}
while(!p2);
delay(10);//延时消抖
while(!p2);//按键松手检测
}
if(p3==0)//三号诊室重新呼叫
{
delay(10);
if(p3==0)
{
TR0=1;
display_lcd1(num2_3,3);
}
while(!p3);
delay(10);//延时消抖
while(!p3);//按键松手检测
}
if(p4==0)//四号诊室重新呼叫
{
delay(10);
if(p4==0)
{
TR0=1;
display_lcd1(num2_4,4);
}
while(!p4);
delay(10);//延时消抖
while(!p4);//按键松手检测
}
}
.
文件仅供参考:
.