wordpress主题 网站大全湖南正规seo公司
文章目录
- 前言
- 资料获取
- 设计介绍
- 设计程序
- 具体实现截图
- 设计获取
前言
💗博主介绍:✌全网粉丝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;}
}
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
毕业设计精品实战案例
收藏关注不迷路!!
🌟文末获取设计🌟