当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 设计程序
  • 具体实现截图
  • 设计获取


前言

💗博主介绍:✌全网粉丝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;				 //请求编号置1flag1=1; 				 //餐桌号置1while(R1_01) display();	 //按键释放}				if(R1_02==1) 				 //一号餐桌有请求2时{tab[1]=2; 				 //请求编号置2flag1=1;				 //餐桌号置1while(R1_02) display();	 //按键释放}				if(R1_00==1)				 //一号餐桌无请求时{tab[1]=0;				 //请求编号置0flag1=0;				 //餐桌编号置0while(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);					  //延时1msDUAN=tab_duan[10];			  //清屏WEI=tab_wei[2];				  //打开第二位DUAN=tab_duan[0];			  //送入第二位数据delay(1);					  //延时1msDUAN=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];	}elsesec=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;}
}

具体实现截图

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

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

设计获取

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

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

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

http://www.lryc.cn/news/449676.html

相关文章:

  • 详细分析Mysql中的定时任务(Event事件)
  • SpinalHDL之语义(Semantic)(三)
  • SpringBoot 请求和响应
  • LQR算法核心思想
  • AI大模型之旅-最强开源文生图工具Stable Diffusion WebUI 教程
  • WinForm程序嵌入Web网页
  • Redis string类型hash类型
  • Solidity智能合约中的异常处理(error、require 和 assert)
  • True NAS禁用ipv6
  • 笔记整理—linux进程部分(2)使用fork创建进程
  • 在Python中实现多目标优化问题(6)
  • Java EE中的编码问题及解决方案
  • 9月27日,每日信息差
  • 什么是 Angular 开发中的 Dumb components
  • Docker 进入容器运行命令的详细指南
  • 如何禁止非真实用户的ip访问网站服务器
  • 探索SpringBoot:学科竞赛管理项目开发
  • ultralytics yolo v8 示例:加载官方模型进行推理
  • 【中间件学习】Nginx快速入门(为了配置一个项目)
  • 鸿蒙harmonyos next flutter通信之MethodChannel获取设备信息
  • 【笔记】原子结构的近代理论
  • 【python】循环中断:break 和 continue
  • WIFI密码默认显示
  • Emiya 家今天的饭C++
  • Mybatis缓存机制(图文并茂!)
  • Git 工作区、暂存区和版本库
  • SSH 远程连接到 Linux 服务器上的 SQLite
  • 使用ElasticSearch-dump工具进行ES数据迁移、备份
  • SpringMVC源码-SpringMVC源码请求执行流程及重点方法doDispatch讲解
  • 《深度学习》OpenCV 指纹验证、识别