基于单片机NRF24L01银行智能排队系统设计(毕设资料)

本文探讨了一种创新的智能排队解决方案,通过自动化流程减少银行、电信等场所的人群拥堵,提高服务质量,同时确保顾客隐私和操作有序。系统利用单片机控制主机,配合无线通信技术,实现了自动取号、叫号和一对一服务,有效解决了传统排队的问题。
部署运行你感兴趣的模型镜像

在银行、电信、航空、医院等繁忙的公共服务场所,营业窗口前大量涌挤的人群与无序的排队,一方面严重影响窗口的服务质量与效率以及企业公共形象和业务量,另一方面,传统柜台服务存在不安全隐患,偷盗密码已经不再是个别案例。顾客站立排队,即辛苦、枯燥又浪费时间,还存在插队等现象,而且多窗口的服务往往让人无所适从,经常因排错队而浪费了宝贵的时间,顾客盼望只排一个队,只接受“一对一”的服务。 针对上述问题,提出了智能排队管理系统这一课题,其具体要求和功能,完全模拟人群排队过程,通过取号、进队、排队等待、叫号服务等功能代替人们站队,实现机器自动代替人排队的过程。在大厅明显处放置一台主机,顾客来到后按“取号”键,主机自动打印一张号码单,顾客根据号码单上的序号与等待人数,可选择在大厅休息处休息或办别的事,当大厅显示屏出现序号和相应窗口号,同时音响提示“叮咚请XXX号顾客到XX号窗口办理”时,该顾客便可前往相应窗口接受“一对一”的服务。每位窗口工作人员使用呼叫器接受主机命令,可按“下一位”键受理序号,每服务完一位顾客后再按“下一位”键,呼叫器上的号码自动跳到下一个序号受理序号,同时此号码还会显示在大厅主显示屏及窗口显示屏上显示并用语音播放,以提示顾客前来接受服务,在办理业务前先核对顾客的号码是否与所呼叫的号码一致,这样就不会混乱秩序,如果该顾客在第一次呼叫时没到来,可按“重呼”键重呼,直到按“下一位”键丢掉该顾客。主机采用单片机智能控制,能对多个窗口和随机出现的客户流进行自动管理,顺序呼叫顾客到对应的窗口前办理业务,各设备相互独立,主机通过RS-485总线与各窗口设备相连。

主要资料为器件资料、程序、原理图、制作详解、常见问题、设计报告、开题报告、程序框图、论文精选、使用前必看

【资源下载】下载地址如下(793):https://docs.qq.com/doc/DTlRSd01BZXNpRUxl


#include "common.h"
#include "lcd.h"
#include "key.h"
#include "nRF24L01P.h"


#define NORMAL_MODE  2
#define RIGHT_MODE 1
#define LEFT_MODE 5
#define BACK_MODE 4
#define STOP_MODE 3

sbit initted_alarm_led=P1^5;
sbit nrf_status_led=P1^4;
sbit alarm=P1^6;
bit queue_full_flag = 0;

unsigned char code *display_str1 = "No.    come to";
unsigned char code *display_str2 = "No.   window Pls!";
unsigned char code *display_str3 = "Sorry, the queue";
unsigned char code *display_str4 = " is empty!";
unsigned char code *display_str5 = "queuing!";

unsigned char xdata NRF_TX_BUF[TX_PLOAD_WIDTH];
unsigned char xdata NRF_RX_BUF[TX_PLOAD_WIDTH];
unsigned char xdata SLAVE_RF_CH = NRF_DEFAULT_CH;

unsigned char xdata line_head,line_tail;
unsigned char xdata window_num;

extern char  PlaySoundCheckBusy(void);
extern void  PlaySoundTick(int a);

void dispaly_idle(void)
{
    LCD1602_DisplayString_Center(0,"Welcome");
    LCD1602_DisplayString_Center(1,"Bank Line Number");
}

 

您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

1.问题的定义即分析 银行叫号系统中大概能分成两个对象:一个为来的顾客,一个为银行本身 顾客(Customer)里面需要包含有数据: 【1】每个顾客都应该有一个标签以用来区分,因此需要一个ID(cID) 【2】问题中有求等待的时间,而有关等待时间的两个变量即为进入银行的时间以及接受服务的时间(enterTime和startTime) 【3】由于题目中说明顾客的服务时间不是固定的,因此每个顾客的服务时间又有区别,所以需要有一个变量来进行表示(serTime) 【4】顾客接受服务完后离开的时间(endTime) 综上:Customer中所需要的私有成员有(cID,enterTime,startTime,serTime,endTime) 而Customer的成员函数其实只是对以上数据进行输入输出,所以有成员函数有: 一系列的Set函数,一系列的Get函数,以及构造函数,复制函数,=的重载函数以及Reset函数 银行(bank)里面需要包含的数据: 银行中的人有两种状态,一是等待,二是接受服务,而这等待状态遵循先到先得的原则,因此,采用队列这种结构来表示这些状态比较合适,已经接受过服务的要反复输入输出,用容易遍历的数据类型vector 【1】处于等待状态的人(waiting) 【2】处于服务状态或已经接受过服务的人(serving) 由于经常要对waiting以及serving进行操作,所以不考虑将其作为私有成员(省去了Set以及Get函数) 考虑一下所含有的成员函数:Reset函数(保证银行是空的),Display函数(对已经接受过服务的以及正在服务的顾客进行展示),Assign()(断某个窗口是否是空的利用每次都改变的endTime - startTime == 随机生成的serTime判断 添加功能函数:查看最大等待时间以及其对应的人数的函数Maxwaiting 2.类与算法设计 类设计: class Customer { private: int enterTime; //进入银行的时间 int startTime; //开始服务的时间 int cID; //顾客的编号 int endTime; //顾客停止服务的时间 int serTime; //顾客服务从开始到结束服务所需要的时间(随机的) public: Customer(); //默认构造函数 Customer(const Customer &new;_customer); //复制函数 Customer &operator;=(const Customer&old;_customer); //=重载函数 void Reset(); //重置,将所有数据归零 int GetServDurance(); //返回等待时间 int GetEndTime(); //返回离开银行的时间 int GetSerTime(); //返回接受服务的时间 int GetStartTime();//返回开始接受服务的时间 int GetID(); //返回ID void SetEnterTime(int new_enter); void SetStartTime(int new_start); void SetEndTime(int new_end); void SetID(int new_ID); void SetSerTime(int new_sertime); }; class Bank { public: vector<Customer> serving; //在服务窗口接受过服务的人 queue<Customer> waiting; //在银行内等待的人 bool Assign(Customer customer); //判断第i个窗口的顾客是否服务完成 void Display(); //将在等待的人或者是已经接受了服务的人展示到屏幕上 void MaxWaiting(); void Reset(); }; 算法设计 随机数的产生: 【1】由于需要对过程进行模拟,所以需要一整套的模拟系统,包括产生随机人数,随机服务时间等等 【2】事实上,银行对服务窗口的更新是按照一定的时间(即每隔几秒刷新一次),同样的人也是类似,因此需要几个单位时间已确定进行这些随机事件发生的间隔 几个变量如下: const int UnitTime = 10;//单位时间为10 const int ServTime = 5;//服务时间为5-10 const int UnitTimePeo = 5;//单位时间进来的人数为5-10; const int StopEnterTime = TimeSlot - 2 * UnitTime;//为了保证所有顾客能完成服务,顾客进入的时间为0-80 const int PerTime = 5;//每隔5秒显示一次窗口信息 int TimeOfServing = 0;//随机生成的服务时间(5-10) int Number = 0; //随机生成的人数(5-10) 通过这些变量以及srand((unsigned)time(0)),rand()即可产生一系列的随机数以便进行模拟 过程的模拟 每当产生一系列随机的人,就将他们放进waiting的队列中去,接着遍历各个窗口,若窗口为空,则先来的人可以去那个窗口(即push到serving,pop掉waiting),若不为空,则改变结束时间,之后Present + 1 显示内容:剩余的时间,各窗口的情况,以及已经接受了服务的人的等待时间 注意:该程序为每五刷新一次,每十随机进入一些人
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值