51单片机双机串口数码管显示排队叫号仿真设计( proteus仿真+程序+报告+讲解视频)

仿真图proteus 7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0034

1.主要功能:

设计要求

采用51单片机作为核心控制器

1、主机通过按键完成叫号,数码管显示被叫的号码,蜂鸣器响,提醒顾客接受服务;

2、从机通过串行通信方式完成排队叫号功能;

3、从机显示队列中排在其前面的顾客数;

任务安排

组员1:多机通信程序设计

组员2:数码管显示程序设计功能

组员3:根据组员1和组员2的子程序完成设计所需功能程序设计

从机显示队列中排在其前面的顾客数;

资料下载链接(可点击):

【腾讯文档】S0034 网盘链接

https://docs.qq.com/doc/DS3dBaXJRZHJlQlJC

以下为本设计资料展示图:

2.仿真

开始仿真

点击开始按键后,开始仿真后先取号,点一次取号键领取一个号码。当前是六号,前面还有5个人排队,正在办理业务的是01号。

img

3.程序

img

叫号机代码

#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,含各种框图。

img

部分内容

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)操作简单、功能完善、精确度高。

img

5.设计资料内容清单

下载方式见文章开头视频

img

资料下载链接(可点击):

https://docs.qq.com/doc/DS3dBaXJRZHJlQlJC

更多资源 点击下方链接:

https://docs.qq.com/sheet/DS0xIa0llTmtNakRW

微信公众号:嘉盛单片机

img