排队叫号机文档绝对是你要的.docx
《排队叫号机文档绝对是你要的.docx》由会员分享,可在线阅读,更多相关《排队叫号机文档绝对是你要的.docx(19页珍藏版)》请在冰点文库上搜索。
![排队叫号机文档绝对是你要的.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/df82f4e6-a2db-45dc-87e8-defd889bd9b4/df82f4e6-a2db-45dc-87e8-defd889bd9b41.gif)
排队叫号机文档绝对是你要的
课程设计报告
课程名称:
设计题目:
系别:
专业:
班级:
学生姓名:
学号:
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
杨礼
王进
1、设计过程中出勤、学习态度等方面
0.2
2、课程设计质量与答辩
0.5
3、设计报告书写及图纸规范程度
0.3
总成绩
教研室审核意见:
教研室主任签字:
年月日
教学系审核意见:
主任签字:
年月日
摘要
排队叫号管理系统(排队机、叫号机)是针对银行、工商、税务、通讯、政府机构等部门的大厅工作流程设计的,是利用电脑的科学管理客户排队的系统,很好地解决了客户在服务机构办理业务时所遇到的各种排队、拥挤和混乱现象,为客户办理业务带来莫大的方便和愉悦。
本课题研究的目的是研制一款无人排队的排队叫号机,它主要由主控制器、键盘、数码管显示电路、蜂鸣器电路等部分构成。
系统利用单片机进行控制,通过串行通信方式传输处理数据;通过按键取号,在数码管上显示排队的号码以及当前正在等待的人数;通过按键叫号,在数码管上显示叫到的号码,由扬声器发出声音提示客户。
同时免除了令客户不舒服的站立式排队,这种现代化的高科技产品彻底解决了银行、医院等服务性企业普遍存在的站立等候,服务无序的问题,深化并完善了服务的质量。
本系统采用单片机进行控制,利用数码管显示,蜂鸣器鸣叫提示的人机交互界面,模拟排队管理系统,科学地处理各种排队情况。
操作简便,控制灵活,显示清晰,制作成本低,性价比较高。
关键词:
排队叫号机;串行通信;独立键盘;数码管动态显示;蜂鸣器
目录
设计要求1
1方案论证与对比1
1.1方案一1
1.2方案二1
1.3系统方案对比论证2
2硬件电路设计与分析2
2.1排队取号机主电路设计2
2.2排队取号机通信电路设计2
2.3动态显示电路3
2.4叫号电路3
3系统软件设计与分析4
3.1软件流程图4
3.2动态显示模块5
3.3叫号模块5
3.4串行通信模块6
4系统仿真及调试6
4.1软件调试6
4.2硬件调试6
4.2.1动态显示模块6
4.2.2叫号模块6
4.2.3串行通信模块7
4.3调试结果7
5设计总结7
6致谢7
7详细仪器清单7
参考文献9
附录一:
整体电路图10
附录二:
程序清单11
排队叫号机
设计要求
利用单片机的串行通信方式,完成一个科学管理各种复杂排队情况的排队叫号系统。
具体要求如下:
(1)主机:
通过按键来完成报号,由数码管显示叫到的号码,并发出蜂鸣声。
(2)客户端:
通过按键完成取号,由数码管显示号码和当前需要等待的人数。
(3)主机和客户端用串口通信,在20人等待的队列中进行测试。
1方案论证与对比
1.1方案一
系统采用如图1所示的电路,通过STC89C52的I/O口的扩展一块NECD8255AC-2构成的矩阵键盘,完成排队取号的流程,单片机控制数码管显示排队等待情况,控制蜂鸣器发声完成叫号功能。
图1采用矩阵键盘实现功能
1.2方案二
系统采用如图2所示的电路,通过STC89C52单片机直接扩展的独立键盘,完成排队取号流程(本系统直接利用系统的中断0按键控制),单片机控制数码管显示排队等待情况,控制蜂鸣器发声完成叫号功能。
图2采用独立键盘实现功能
1.3系统方案对比论证
因为采用矩阵键盘完成排队取号流程,但客户较多的时候要实现排队取号的功能,就要占去过多的I/O端口,操作起来也比较复杂,而方案二的独立键盘操作控制简单,占用主机资源少,所以选择方案二,采用独立键盘控制排队取号,通过串行通信的方式,模拟排队取号管理系统的流程显得更加方便、科学。
2硬件电路设计与分析
2.1排队取号机主电路设计
主电路原理图见附录一。
系统采用STC89C52单片机完成整个系统的控制流程。
从机通过单片机的中断0按键,当系统检测到按下时完成取号功能。
主机同样通过单片机的中断0按键,当系统检测到按下时完成叫号功能。
图3串行通信电路
2.2排队取号机通信电路设计
通信电路采用如图3所示的串行通信电路,通过单片机的串行通信端口进行数据传递。
2.3动态显示电路
由于需要动态显示排队等待情况,需要使用到LED动态显示功能,考虑到合理利用STC89C52单片机的I/O口资源,本系统通过一块NECD8255AC-2外扩LED电路进行动态显示。
由8255芯片的PA、PB口联合控制数码管显示排队等待情况。
采用如图4、图6所示电路实现LED动态显示功能。
图48255芯片引脚图
2.4叫号电路
此电路采用如图5所示的电路,通过单片机的P33端口输出一定频率的方波,使蜂鸣器发声,完成叫号,提醒客户。
图5
图6数码管显示电路
3系统软件设计与分析
3.1软件流程图
本程序可以实现课程设计的基本要求。
客户端通过按键完成取号,数码管显示排队、等待人数情况;主机通过按键完成叫号,数码管显示叫到的号码,并通过蜂鸣器发声提示;客户端和主机通过串行通信方式完成排队取号功能。
程序流程如图7所示:
图7总体流程图
3.2动态显示模块
此模块由于要使数码显示管不同的数值,数字各位对应的段选值不同,所以位选不能同时打开,所以需要采用动态显示实现同时显示排队号码以及等待的人数。
最后采用如图8所示的电路完成要求功能。
图8动态显示流程图
3.3叫号模块
此模块采用无源蜂鸣器发声,采用如图9所示电路,通过单片机向P33端口输出一定频率的方波,就可使蜂鸣器的发声。
图9叫号模块电路
3.4串行通信模块
设计要求客户端与主机通过串行通信方式,采用如图3所示的常用双机通信方式,通过使用定时器1采用2400bps的波特率进行通信。
4系统仿真及调试
4.1软件调试
(1)在Keil软件中建立工程,新建工程,选择AtmelAT89C52芯片,创建源代码,进行编译,在Keil中仿真调试。
(2)在Protues软件中,根据功能模块,画出相应原理图。
利用Keil中生成的*.hex文件与Keil进行程序联调。
4.2硬件调试
4.2.1动态显示模块
开始调试时,在Protues软件上可以很好模拟动态显示效果,但硬件电路数码管显示效果失真,考虑到延时在动态显示中的重要作用,通过调小延时时间,使数码管稳定、准确地显示。
4.2.2叫号模块
开始调试时,由于程序产生的方波频率比较低,导致蜂鸣器无法正常工作,通过查找资料,熟悉蜂鸣器有特定的工作频率范围,调试一合适方波频率,使蜂鸣器正常发声。
4.2.3串行通信模块
开始调试时,通过串口调试助手进行调试,但效果始终不出来,通过向同学请教,设置好软件的波特率在调试可以实现,最后把程序细节部分调试,使串行通信部分正常工作。
4.3调试结果
进过调试,系统可以实现对20人的队伍排队取号,客户端通过按键可以完成取号,并通过数码管显示排队等待情况,主机通过按键可以实现叫号,并可以通过蜂鸣器鸣叫和数码管显示的双重提示。
5设计总结
(1)通过本次课程设计,加深了对于怎样学好单片机这门课程的理解,学单片机就是要多实践,老师领我们进入单片机世界,精通它就得靠我们自己,那就是多实践,灵活运用自己所学知识到自己的作品当中。
(2)在程序设计过程中遇到的很多问题,阻碍设计的过程,通过总结,深深体会到程序设计的时候模块化处理的重要性,可以先画好程序流程图,然后各个模块各个击破。
同时遇到问题时可以同学之间相互讨论、回到书本在学习,更有助于加深对所学知识的理解。
6致谢
这次课程设计对我来说有着深远的意义,让我对未来的路又看得清楚了些。
在此我要深深的感谢那些传授我知识的老师们,是你们无私的奉献,才会有如今的我们;要感谢父母一直给我的支持,感谢他们的关怀;还要感谢同学对我的鼓励,感谢搭档对我的认可,让我能尽情的发挥我的能力,激扬去验证自己的想法。
7详细仪器清单
表1仪器清单
类型
规格
数量
备注
5V直流电源
ZH-6003
2
USB232converter
U232-P9
2
电阻
1k
28个
芯片
NECD8255AC-2
2片
扩展I/O
芯片
STC89C52
2片
晶振
12M
2个
蜂鸣器
无源
1个
数码管
3位共阳极
4个
极性电容
0.1UF
2个
非极性电容
30pf
2个
按键开关
2个
三极管
9015
12个
参考文献
[1]张鑫.单片机原理及应用[M].北京:
电子工业出版社,2005.8.
[2]邱关源、罗先觉.电路[M].北京:
高等教育出版社,2006.5.
[3]康光华.电子技术基础.数字部分[M].北京:
高等教育出版社,2006.1.
[4]康光华.电子技术基础.模拟部分[M].北京:
高等教育出版社,2006.1.
[5]祁伟,杨亭.单片机C51程序设计教程与实验[M].北京:
北京航空航天大学出版社,2006.
[6]楼然苗.李光飞.单片机课程设计指导[M].北京:
北京航空航天大学出版社,2007.4
[7]单片机学习网
附录一:
整体电路图
附录二:
程序清单
头文件:
#include
#include
#definePAXBYTE[0xD9FF]/*PA口地址*/
#definePBXBYTE[0xDAFF]/*PB口地址*/
#definePCXBYTE[0xDDFF]/*PC口地址*/
#defineCONXBYTE[0xDFFF]/*控制字地址*/
取号程序:
#include//头文件
#defineucharunsignedchar
#defineuintunsignedint
uintm,n;
uchari,j,q_head,q_tail;
sbitP32=P3^2;
ucharconsttable[16]={
0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,
0x20,0x28,0x30,0x25,0xE4,0x23,0x64,0x74,
};
ucharconsttable_queue[]={//20个排队号码
0x00,0x01,0x02,0x03,0x04,0x05,
0x06,0x07,0x08,0x09,0x0a,
0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,
};
delay(uintk)
{
while(k--);
}
display(ucharp,ucharq)
{
uintb,c,d,e;
b=(uint)p/10;
c=(uint)p%10;
d=(uint)q/10;
e=(uint)q%10;
PA=0xfe;
PB=table[b];
delay(200);
PA=0Xfd;
PB=table[c];
delay(200);
PA=0xef;
PB=table[d];
delay(200);
PA=0Xdf;
PB=table[e];
delay(200);
}
init()
{
CON=0x80;
EA=1;
EX0=1;
SCON=0x50;
TMOD=0x20;
TH1=0xf3;
TL1=0xf3;
TR1=1;
}
voidint0()interrupt0
{
if(P32==0)
{
delay(1200);
if(P32==0)
{
q_tail=table_queue[++m];
i=q_tail;
j=q_tail-q_head;
display(i,j);
}
}
while(P32!
=1)display(i,j);
}
main()
{
init();
q_head=table_queue[++n];
while
(1)
{
display(i,j);
if(m>=n){
TI=0;
SBUF=q_head;
while(!
TI);
RI=0;
while(!
RI)display(i,j);
if(n{
q_head=table_queue[++n];
j=q_tail-q_head;
}
elseif(n==m)
q_head=table_queue[++n];
}
}
}
叫号程序:
#include//头文件
#defineucharunsignedchar
#defineuintunsignedint
uintj,k;
uchart;
sbitbuzzer=P3^3;
sbitP32=P3^2;
ucharconsttable[16]={
0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,
0x20,0x28,0x30,0x25,0xE4,0x23,0x64,0x74,};
delay(uinti)
{
while(i--);
}
display(uinti,uintj)
{
PA=0xfe;
PB=table[i];
delay(200);
PA=0Xfd;
PB=table[j];
delay(200);
}
init()
{
CON=0x80;
EA=1;
EX0=1;
SCON=0x50;
TMOD=0x20;
TH1=0xf3;
TL1=0xf3;
TR1=1;
RI=1;
}
beep()
{
uints=500;
while(s--)
{
buzzer=~buzzer;
delay(50);
display(j,k);
}
}
voidint0()interrupt0
{
if(RI==1)
{
t=SBUF;
j=(uint)t/10;
k=(uint)t%10;
display(j,k);
RI=0;
TI=0;
SBUF=0xff;
while(!
TI);
beep();
}
}
main()
{
init();
RI=0;
while
(1)
{
display(j,k);
}
}