基于51单片机的医院银行排队叫号系统proteus仿真程序原理图设计

硬件设计

链接: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);//按键松手检测
	}					
}

.

文件仅供参考:

.

  • 11
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值