基于单片机餐厅呼叫控制系统仿真设计


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

基于单片机的餐厅呼叫控制系统仿真设计是一个综合性的工程,旨在通过融合单片机技术、呼叫控制原理以及系统仿真等多个领域的专业知识,提升餐厅的运营效率和顾客体验。以下是对该设计的一个详细介绍:

一、系统概述
基于单片机的餐厅呼叫控制系统主要由单片机作为控制核心,配合按键模块、显示模块、提示模块等硬件组件,实现呼叫请求的发起、接收、处理与反馈。顾客通过按键模块发起呼叫请求,单片机接收到请求后,通过显示模块展示呼叫信息,并利用提示模块通知服务员。服务员根据提示及时处理呼叫请求,从而完成整个呼叫服务流程。

设计程序


/****************************************************************************
******餐厅呼叫系统,数码管显示,无线遥控呼叫:1号房间0101、0102、0000********
****************************************************************************/
//头文件
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define WEI P2				 //定义P2口和P0口
#define DUAN P0
//各无线模块输出定义引脚
sbit R1_01=P1^0;
sbit R1_02=P1^1;
sbit R1_00=P1^2;
sbit R2_01=P1^3;
sbit R2_02=P1^4;
sbit R2_00=P1^5;
sbit R3_01=P1^6;
sbit R3_02=P1^7;
sbit R3_00=P3^1;
//应答按键
sbit yingda=P3^7;
//蜂鸣器
sbit buzz =P3^6;
//数码管显示数组
uchar code tab_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};	//0-9共阳显示码
uchar code tab_wei[]={0x7f,0xdf,0xf7,0xfd};//数码管位选
uchar bdata tab[4];
uchar h,sec;//定义全局变量
uchar flag1,flag2,flag3,flag4;

void display();	  //声明显示函数
/****************************************************************************
******函数名称:delay(uint x)**********************************************
******作用:延时x ms函数*****************************************************
****************************************************************************/
void delay(uint x)
{
	uint i,j;
	for(i=0;i<x;i++)
	for(j=0;j<110;j++);
}
/****************************************************************************
******函数名称:KEY()******************************************************
******作用:扫描按键*********************************************************
****************************************************************************/
void KEY()
{
	if(R1_01==1)				 //当1餐桌1号请求1时
	{
		tab[1]=1;				 //请求编号置1
		flag1=1; 				 //餐桌号置1
		while(R1_01) display();	 //按键释放
	}				
	if(R1_02==1) 				 //一号餐桌有请求2时
	{
		tab[1]=2; 				 //请求编号置2
		flag1=1;				 //餐桌号置1
		while(R1_02) display();	 //按键释放
	}				
	if(R1_00==1)				 //一号餐桌无请求时
	{
		tab[1]=0;				 //请求编号置0
		flag1=0;				 //餐桌编号置0
		while(R1_00) display();	 //按键释放
	}	
	if(R2_01==1)				 //当二号餐桌... ... 同上
	{
		tab[2]=1;
		flag2=1;
		while(R2_01) display();
	}					
	if(R2_02==1)
	{
		tab[2]=2;
		flag2=1;
		while(R2_02) display();	
	}
	if(R2_00==1)
	{
		tab[2]=0;
		flag2=0;
		while(R2_00) display();
	}		
	if(R3_01==1)
	{
		tab[3]=1;
		flag3=1;
		while(R3_01) display();	
	}
	if(R3_02==1)
	{
		tab[3]=2;
		flag3=1;
		while(R3_02) display();	
	}
	if(R3_00==1)
	{
		tab[3]=0;
		flag3=0;
		while(R3_00) display();
	}		

	if(yingda==0)				   //应答按键按下时,清零各餐桌呼叫
	{
		tab[1]=0;				   //餐桌请求清零
		flag1=0;				   //餐桌号清零
		tab[2]=0;
		flag2=0;
		tab[3]=0;
		flag3=0;
		while(!yingda) display();  //按键释放
	} 
}
/****************************************************************************
******函数名称:display()**************************************************
******作用:根据呼叫状态显示不同状态*****************************************
****************************************************************************/
void display()
{
	WEI=tab_wei[0];				  //打开第一位
	DUAN=tab_duan[0];			  //送入第一位显示数据
	delay(1);					  //延时1ms
	DUAN=tab_duan[10];			  //清屏
	WEI=tab_wei[2];				  //打开第二位
	DUAN=tab_duan[0];			  //送入第二位数据
	delay(1);					  //延时1ms
	DUAN=tab_duan[10];			  //清屏	  以下同理
	if(sec==1)					  //循环显示变量为1时
	{
		if(flag1==1)			  //如果一号餐桌有请求
		{						  //显示一号餐桌的请求编号
			WEI=tab_wei[1];
			DUAN=tab_duan[flag1];
			delay(1);
			DUAN=tab_duan[10];
			
			WEI=tab_wei[3];
			DUAN=tab_duan[tab[1]];
			delay(1);
			DUAN=tab_duan[10];	
		}						  
		else 					  //如果一号餐桌没有请求
		sec=2;					  //循环显示变量直接赋值为2,用于显示下个餐桌的请求
	}
	if(sec==2)					  //循环显示变量为2
	{
		if(flag2==1)			  //2号餐桌是否有请求
		{						  //显示2号餐桌的请求
			WEI=tab_wei[1];
			DUAN=tab_duan[flag2+1];
			delay(1);
			DUAN=tab_duan[10];
	
			WEI=tab_wei[3];
			DUAN=tab_duan[tab[2]];
			delay(1);
			DUAN=tab_duan[10];	
		}
		else 					  //没有请求
		sec=3;					  //循环显示变量直接赋值3,用于显示下个餐桌的请求
	}
	if(sec==3)
	{
		if(flag3==1)
		{
			WEI=tab_wei[1];
			DUAN=tab_duan[flag3+2];
			delay(1);
			DUAN=tab_duan[10];
	
			WEI=tab_wei[3];
			DUAN=tab_duan[tab[3]];
			delay(1);
			DUAN=tab_duan[10];	
		}
		else
		sec=1;
	}
	if(flag1==0&&flag2==0&&flag3==0)	   //没有呼叫时,数码管显示0000
	{
		WEI=tab_wei[1];
		DUAN=tab_duan[0];
		delay(1);
		DUAN=tab_duan[10];
		
		WEI=tab_wei[3];
		DUAN=tab_duan[0];
		delay(1);
		DUAN=tab_duan[10];
	}	
}
/****************************************************************************
******函数名称:init()*****************************************************
******作用:定时的初始化函数*************************************************
****************************************************************************/
void init()
{
	TMOD=0x01;		  //工作方式
	TH0=0x3c;		  //赋初值
	TL0=0xb0;
	EA=1;			  //打开中断总开关
	ET0=1;			  //打开中断允许开关
	TR0=1;			  //打开定时器开关
}
/****************************************************************************
******函数名称:main()*****************************************************
******作用:程序的入口,每个工程文件中都要有一个main函数*********************
****************************************************************************/
void main()
{
	init();			   //调用初始化函数
	R1_01=0;
	R1_02=0;
	R1_00=0;
	R2_01=0;
	R2_02=0;
	R2_00=0;
	R3_01=0;
	R3_02=0;
	R3_00=0;		   //将各无线模块输入引脚置低电平,用来采集高电平信号
	while(1)		   //进入循环
	{
		KEY();		   //调用按键函数
		display();	   //调用显示函数
	}
}
/****************************************************************************
******函数名称:time0()******************************************************
******作用:定时器T0的服务函数,定时器中断进入时需要完成的任务***************
****************************************************************************/
void time0() interrupt 1
{
	uchar m;
	TH0=0x3c;
	TL0=0xb0;		   //重新赋初值
	m++;
	if(m%5==0&&(tab[1]!=0||tab[2]!=0||tab[3]!=0))
	buzz=!buzz;		   //有呼叫时蜂鸣器闪烁
	else if(tab[1]==0&&tab[2]==0&&tab[3]==0)
	buzz=1;			   //无呼叫时关闭蜂鸣器
	if(m==40)		   
	{
		m=0;
		sec++;
		if(sec==4)
		sec=1;
	}
}

具体实现截图

在这里插入图片描述
在这里插入图片描述

请添加图片描述
请添加图片描述

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值