51单片机双机串口数码管显示排队叫号仿真设计( proteus仿真+程序+报告+讲解视频)
仿真图proteus 7.8及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0034
1.主要功能:
设计要求
采用51单片机作为核心控制器
1、主机通过按键完成叫号,数码管显示被叫的号码,蜂鸣器响,提醒顾客接受服务;
2、从机通过串行通信方式完成排队叫号功能;
3、从机显示队列中排在其前面的顾客数;
任务安排
组员1:多机通信程序设计
组员2:数码管显示程序设计功能
组员3:根据组员1和组员2的子程序完成设计所需功能程序设计
从机显示队列中排在其前面的顾客数;
资料下载链接:
https://docs.qq.com/doc/DS3dBaXJRZHJlQlJC
以下为本设计资料展示图:
2.仿真
开始仿真
点击开始按键后,开始仿真后先取号,点一次取号键领取一个号码。当前是六号,前面还有5个人排队,正在办理业务的是01号。
3.程序
叫号机代码
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^4;//按钮
sbit k2=P3^5;//休息
sbit beep=P2^3;//蜂鸣器
sbit duan=P2^6;
sbit wei=P2^7;//数码管
uint beep_time=0;
uchar mode=0;//模式
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num1=0;//号码
uchar num2=0;//叫号数字
//延时
void delay(uint i)
{
while(i--);
}
//主函数
void main()
{
uchar k=0;
SCON=0X50; //设置为工作方式1
TMOD=0X21; //设置计数器工作方式2
TH1=0XFD;
TL1=0XFD;
ES=1; //打开接收中断
TR1=1; //打开计数器
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
//叫号
if(!k1 &&(k!=1))
{
k=1;
if(num2<num1)
{
mode=1;
num2++;
SBUF=num2;while(!TI);TI=0;
beep_time=1000;
}
else
mode=0;
}
//休息
if(!k2 &&(k!=2))
{
k=2;
mode=0;
}
//显示
if(mode>0)
{
P0=0;duan=1;delay(1);duan=0;//消隐
P0=0xfe;wei=1;delay(1);wei=0;//位选
P0=smgduan[num2/10];duan=1;delay(1);duan=0;//数据
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隐
P0=0xfd;wei=1;delay(1);wei=0;//位选
P0=smgduan[num2%10];duan=1;delay(1);duan=0;//数据
delay(50);
}
else
{
P0=0x40;duan=1;delay(1);duan=0;//减号
P0=0;wei=1;delay(1);wei=0;//位选
}
if(k1 && k2)
k=0;
}
}
//定时器0中断
void Timer0() interrupt 1
{
if(beep_time>0)//蜂鸣器响
{
beep_time--;
beep=!beep;
}
else
beep=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
//串口中断
void Usart() interrupt 4
{
uchar i;
i=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
num1=i;
}
取号机代码
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^4;//按钮
sbit beep=P2^3;//蜂鸣器
sbit duan=P2^6;
sbit wei=P2^7;//数码管
uint beep_time=0;
uint time=0;
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num1=0;//号码
uchar num2=0;//叫号数字
//延时
void delay(uint i)
{
while(i--);
}
//主函数
void main()
{
uchar k=0;
SCON=0X50; //设置为工作方式1
TMOD=0X21; //设置计数器工作方式2
TH1=0XFD;
TL1=0XFD;
ES=1; //打开接收中断
TR1=1; //打开计数器
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
//拿号
if(!k1 &&(k!=1))
{
k=1;
num1++;
SBUF=num1;while(!TI);TI=0;
beep_time=500;
time=5000;
}
//显示
if(time>0)
{
P0=0;duan=1;delay(1);duan=0;//消隐
P0=0xfe;wei=1;delay(1);wei=0;//位选
P0=smgduan[num1/10];duan=1;delay(1);duan=0;//数据
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隐
P0=0xfd;wei=1;delay(1);wei=0;//位选
P0=smgduan[num1%10];duan=1;delay(1);duan=0;//数据
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隐
P0=0xef;wei=1;delay(1);wei=0;//位选
P0=smgduan[(num1-num2)/10];duan=1;delay(1);duan=0;//数据
delay(50);
P0=0;duan=1;delay(1);duan=0;//消隐
P0=0xdf;wei=1;delay(1);wei=0;//位选
P0=smgduan[(num1-num2)%10];duan=1;delay(1);duan=0;//数据
delay(50);
}
else
{
P0=0x40;duan=1;delay(1);duan=0;//减号
P0=0;wei=1;delay(1);wei=0;//位选
}
if(k1)
k=0;
}
}
//串口中断
void Usart() interrupt 4
{
uchar i;
i=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
num2=i;
}
4.设计报告
报告格式规范,字数6584,含各种框图。
部分内容
1.1 设计背景与意义
排队论(又称随机服务系统)是研究系统由于随机因素的干扰而出现排队(或拥塞)现象的规律的一门学科,它适用于一切服务系统,包括公共服务系统、通信系统、计算机系统等。可以说,凡是出现拥塞现象的系统,都属于随机服务系统。一个对象通过拥塞系统接受服务必须经过三个环节,即到达、排队等候处理、接受服务和离去。例如在医院中,排队流程如下:患者在挂号的同时领取排队号码,然后到候诊区候诊;当为前一患者完成诊断后,医生通过本系统呼叫队列中下一位患者,患者就可直接到空闲诊室行排队等候服务。
另一个方面,伴随着服务行业业务量不断增长,业务种类日益增多,排队等候已成为人们经常面临的实际问题。在银行,医院,电信,税务,工商等营业大厅里,前拥后挤,杂乱无章的排队等候,已是司空见惯的现象,影响了服务质量。因此,改善服务质量,树立良好的企业形象,解决客户劳累的排队现象,创造人性化服务环境已成为急需解决的问题。设计一套排队抽号的服务系统,可以很好的解决因排队引起的种种问题。
本系统通过AT89C51单片机直接扩展独立键盘,完成排队取号流程,单片机控制数码管显示排队等待情况,控制蜂鸣器发声完成叫号功能。该系统有良好的人机交互界面,模拟排队管理,科学地处理各种排队情况,操作简便,控制灵活,显示清晰,制作成本低,性价比较高。
1.2 设计目的
(1)巩固和加深对单片机原理和接口技术知识的理解;
(2)培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;
(3)学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;
(4)掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;
(5) 能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图、仿真图和流程图。
1.3 设计要求及内容
1、主机通过按键完成叫号,数码管显示被叫的号码,蜂鸣器响,提醒顾客接受服务;
2、从机通过串行通信方式完成排队叫号功能;
3、从机显示队列中排在其前面的顾客数;
1.4 本文结构安排
本文围绕着基于51单片机的排队叫号系统展开设计,以排队叫号需求为出发点,首先明确了研究背景与意义,介绍了设计目的,并论述了设计要求及设计内容,接下来的几章将具体展开相关设计与研究:
第二章介绍系统总体方案及相关理论知识,重点阐述了系统功能需求和系统方案论证,接着简要介绍了系统硬件及软件基本知识。
第三章重点展开硬件系统设计,首先明确叫号机及取号机硬件电路设计的思路及框架。接着依次介绍了:单片机最小系统、按键电路、数码管显示电路、蜂鸣器提醒电路、电源电路等。通过对以上重点电路的介绍,强化了硬件电路设计的细节和重点。
第四章展开软件系统设计,通过对软件设计进行需求分析,明确软件设计的目的与需求,进一步通过程序流程图展示设计思路及框架。接着依次介绍了主函数流程、取号机取号流程、叫号机叫号程序流程、蜂鸣器提醒流程。
第五章介绍仿真实现步骤,特别是仿真电路实现的流程和仿真测试,完美实现了设计需求及目标。
第六章总结全文,总结本文所做的工作及贡献,并根据存在的问题展望此课题今后的研究方向。
2 总体设计方案
2.1 系统需求及方案设计
为了实现基于51单片机的排队叫号系统的设计,本文将实现以下设计需求:
(1)取号机可实时进行取号,较好的现实中的取号情况;
(2)直接、清晰明了的显示顾客排队号;
(3)叫号机通过按键完成叫号,数码管液晶显示屏显示被叫的号码及服务的柜台号;同时,蜂鸣器响,以提醒顾客接受服务;
(4)操作简单、功能完善、精确度高。
![]() |