基于AT89C51单片机的排队叫号系统设计.doc
-
资源ID:28107679
资源大小:926.54KB
全文页数:35页
- 资源格式: DOC
下载积分:9金币
快捷下载
![游客一键下载](/images/hot.gif)
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于AT89C51单片机的排队叫号系统设计.doc
Bbianhao5单位代码 学号 分 类 号 密 级 单片机课程设计 院系名称工学院机械系 专业名称机械设计制造及其自动化 学生 学号11指导老师 朱煜钰 2014 年 11 月 9 日摘要 本文设计了一套排队叫号系统。该系统是以排队抽号顺序为核心,客户利用客户端抽号,工作人员利用叫号端叫号;通过显示器及时显示当前所叫号数,客户及时了解排队信息,通过合理的程序结构来执行排队抽号。以提高排队等待效率,解决排队秩序混乱,前拥后挤等现象,实现排队自动化,标准化。通过该系统的使用,客户不必为排队浪费大量精力,便于管理排队秩序,同时适应信息时代管理数字化的要求,提高服务水平与质量。关键词:单片机 排队叫号 系统开发目 录1.引言.- 1 -2.系统功能分析及设计要求.- 2 -3.系统框图- 2 -4.主要应用器件及技术原理- 2 - 4.1 微处理器介绍- 2 - 4.1.1、MCS-51单片机的特点- 2 - 4.1 2、MCS-51 单片机的结构- 3 - 4.2液晶LCD1602的介绍- 3- 4.2.1 字符型液晶显示器的显示原理- 3- 4.2.2 液晶LCD1602的简介- 4 -5.系统硬件电路设计- 8 - 5.1晶振电路- 8- 5.2液晶显示电路- 9 - 5.3声音提示电路- 10 -6系统测试- 11 -7系统软件设计- 13 - 7.1系统软件流程图- 13 - 7.2系统程序设计- 13 - 7.2.1 主程序- 13 - 7.2.2 液晶LCD1602显示处理程序- 20 - 7.2.3 按键检测程序.- 21 -8结束语- 23 -9致谢辞- 24-10参考文献- 25 -学习文档 仅供参考排队叫号系统设计1.引言近年来,随着科学技术的迅猛发展和人们生活水平的日益提高,各行各业特别是服务行业的竞争也逐渐激烈。服务质量作为表达企业的公众形象、服务理念、管理水平的标准已越来越受到服务和被服务双方所关注,而营业窗口正是代表银行、医院、电信、税务、工商等企业服务质量的重要场所。随着服务行业业务量的增长及业务种类的增加,排队等候已成为人们面临的实际问题。长期以来,人们在银行、医院、电信、税务、工商等营业大厅里前拥后挤、杂乱无章地排队等候, 有时一站就是一个多小时,这已是司空见惯的现象,极大地影响了服务质量。职工坐着服务、客户站着等待的服务方式与“用户就是上帝” 的服务宗旨完全背道而驰!改善服务质量、树立良好形象,解决劳累的排队现象、创造人性化服务环境已成为急需解决的问题。设计一套排队抽号的服务系统,可以很好的解决因排队引起的种种问题,排队系统应运而生。此系统完全模拟人群排队过程,通过取票进队、排队等待、叫号服务等功能,诠释了人性化的服务理念,舒缓顾客等待的急噪情绪,使人们在等候服务的过程中拥有一个相对自由的空间,是科技以人为本的真正表达。本文基于单片机的排队叫号系统,由客户端和主机终端组成,有LCD大屏幕显示信息,让客户知道自己的队号,并有叫号提示音提醒客户,方便快捷,可以满足日常的服务行业排队叫号,所以非常有意义。2.系统功能分析及设计要求一个很好的叫号系统,它的功能设计首先要符合用户的习惯,同时操作方便,易学,易用。本系统由键盘输入系统、单片机系统、屏幕显示系统及叫号提示音系统组成,系统分为两个部分:抽号部分和叫号部分,其控制核心为AT89C51单片机,选用此单片机编程简单,开发工具便于使用,能满足很好的满足排队抽号的控制数据处理。抽号部分和叫号部分采用一块 LCD液晶显示器,这样显示数据直观,便于客户理解,抽号部分输入只需使用一个抽号按键即可,便于客户操作,叫号部分包括叫两个号键,系统采用自动清零,无需人工操作3.系统框图设备上电后,显示器屏幕亮,无信息显示。当客户按键后,每按一下,队伍加1,显示器显示客户队伍号;排满20位后,再按取号键,屏幕显示“队伍满”。当客服叫号时,队伍减1,程序进行信息处理,在显示器上显示“几号客户到几号窗口”,同时进行声音提示;当队伍空时,显示“队伍空”,显示器屏幕清空,储存的队伍号码归零处理叫号提示音1602液晶显示 AT89C51单片机终端窗口叫号客户端取号4.主要应用器件及技术原理4.1 微处理器介绍4.1.1、MCS-51单片机的特点:1小巧灵活、成本低、易于产品化。能组装成各种智慧式测控设备及智能仪器仪表。2可靠性好,应用范围广。单片机芯片本身是按工业测控环境要求设计的,抗干扰性强,能适应各种恶劣的环境,这是其它机种无法比拟的。3易扩展,很容易构成各种规模的应用系统,控制功能强。单片机的逻辑控制功能很强,指令系统有各种控制功能指令,可以对逻辑功能比较复杂的系统进行控制。4具有通讯功能,可以很方便地实现多机和分布式控制,形成控制网络和远程控制。正是由于51系列单片机具有以上优点,所以成为本次毕业设计所选用的处理器。4.1 2、MCS-51 单片机的结构AT89C51是一种带4K字节闪烁可编程可擦除只读存储器FPEROMFalsh Programmable and Erasable Read Only Memory的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。从工作原理上讲,单片机就是一种微型电脑,是一种“程序存储式”电脑。它是在一块硅片上集成了中央处理器CPU、随机内存RAM、程序内存ROM或EPROM、定时/计数器以及各种I/O接口,也就是集成在一块芯片上的电脑。图4.1 MCS-51单片机的结构4.2液晶LCD1602的介绍4.2.1 字符型液晶显示器的显示原理用LCD显示一个字符时比较复杂,因为一个字符由6x8或8x8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8个字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立游标,在此送上该字符对应的代码即可。4.2.2 液晶LCD1602的简介5.系统硬件电路设计系统Proteus仿真图:图中主要以AT89C51为控制核心,包括显示电路,音乐提示电路,晶振电路。 图5.1 电路仿真5.1晶振电路AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为回馈组件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。外接石英晶体或陶瓷谐振器及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但是电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如果使用陶瓷谐振器建议选用40pF±10pF。使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。本系统采用内部方式,晶振选用12MHz。图5.2晶体内部方式5.2液晶显示电路如下列图5.3,P1口接LCD1602的8个双向数据线接口,P3.4接1602的数据/命令选择端,P3.5接1602的读/写选择端,P3.6接1602的使能信号。BLA、BLK分别是1602的背光源的正负极,VL是1602比照度调整端。本文是通过对RS、RW以及E的高低电平进行写指令和写数据操作来控制1602的显示的。 图5.3液晶显示电路5.3声音提示电路 使用最简单的蜂鸣器来作为提示音部分,通过改变端口高低电平来进行发声,并对延时进行修改来调试发声频率,从而修改发出的声音的好坏 图5.4声音提示电路图6系统仿真仿真是在软件Proteus 7.4上进行的,用C语言编写的程序,通过keil生成了hex文件,经过调试,仿真实现了排队叫号系统的功能客户取号图按下客户端取号按键,屏幕显示“Your No.is 03!” 图6.1 客户端显示窗口叫号图按下窗口服务叫号按键一,屏幕显示“No.03 Come to No.1 window, please”图6.2 窗口服务叫号显示7系统软件设计7.1系统软件流程图开始初始化客户取号队伍号码累加1602显示信息窗口消号队伍号码递减信息处理队伍空显示器初始化、清零结束 声音提示7.2系统程序设计7.2.1 主程序设备上电后,显示器屏幕亮,无信息显示。当客户按键后,每按一下,队伍加1,显示器显示客户队伍号;排满20位后,再按取号键,屏幕显示“队伍满”。当客服叫号时,队伍减1,程序进行信息处理,在显示器上显示“几号客户到几号窗口”,同时进行声音提示;当队伍空时,显示“队伍空”,显示器屏幕清空,储存的队伍号码归零处理。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit rs=P20;sbit rw=P21;sbit e=P22;sbit key1=P10;sbit key2=P11;sbit key3=P12;sbit sounder=P37;uchar prompt1="Your No.is 00!" uchar prompt2="No.00 Go To Win.0" uchar prompt3="Queue is full " uchar prompt4="Queue is empty !" uint num_count=0; /排队叫的号码uint rank_number20=0; /排队叫号存储的数组uint num=0; /窗口消的号码int RankFlag=0; /叫号的标志int ClearNumFlag=0; /消号的标志uint LengthFlag=0; /队列长度 叫一次号时+1,消一次号时-1/*延时函数*/void delay(uint n) while (n-);/*LCD1602 *显示屏命令写入函数*/void LCD_write_com(uchar com) e=0; rs=0; rw=0; P0= com; delay(1000); e=1; delay(1000); e=0; /*LCD1602 *显示屏数据写入函数*/void LCD_write_data(uchar dat) e=0; rs=1; rw=0; P0 = dat; delay(1000); e=1; delay(1000); e=0;/*LCD1602 *显示屏清空显示*/void LCD_clear(void) LCD_write_com(0x01); delay(1000);/*LCD1602 显示屏初始化函数*/void LCD_init(void) LCD_write_com(0x38); /*显示模式设置*/ delay(100); LCD_write_com(0x38); delay(100); LCD_write_com(0x38); delay(100); LCD_write_com(0x38); LCD_write_com(0x08); /*显示关闭*/ LCD_write_com(0x01); /*显示清屏*/ LCD_write_com(0x06); /*显示光标移动设置*/ delay(100); LCD_write_com(0x0C); /*显示开及光标设置*/*简单的蜂鸣器提示音*/void sound() uint a;for(a=0;a<500;a+)sounder=0;delay(61);sounder=1;/*获取键值函数*/uint sweep_key() uint jianzhi; if(key1=0)delay(1000);if(key1=0)jianzhi=1;RankFlag=1;if(key2=0|key3=0) delay(1000);if(key2=0)jianzhi=2;if(key3=0)jianzhi=3;ClearNumFlag=1;return (jianzhi);/*叫号机 按一次一号键变量+1,最大为20 */ void QueueNumProcess()if(RankFlag=1) /判断叫号标志是否有效 if ( LengthFlag<20) num_count+; rank_numberLengthFlag = num_count; LengthFlag+; /*窗口消号处理函数*/void ClearNumProcess() uint i; if (ClearNumFlag=1) /判断消号标志是否有效 num=rank_number0; /把消的号赋给全局变量num for(i=0;i<19;i+) /让数组整体左移一个存储单元,即把消得号删除 rank_numberi=rank_numberi+1; LengthFlag-; /*检测到按键后,检测函数处理及LCD显示处理*/void CheckButtonProcess(uint m) /m代表检测到的键值 uint jz,i; jz=m; if(jz=1) && (RankFlag=1) / 当队列人数到达20时,提示 / Queue is full if( LengthFlag>=20 ) LCD_clear(); LCD_write_com(0x80+0x02); delay(100); for(i=0;i<16;i+) LCD_write_data(prompt3i); delay(100); else QueueNumProcess(); prompt111=(num_count)/10+'0' prompt112=(num_count)%10+'0' LCD_clear(); LCD_write_com(0x80+02); delay(100); for(i=0;i<15;i+) LCD_write_data(prompt1i); /"Your No.is 00!" delay(100); RankFlag=0; if(jz=2|jz=3) && ClearNumFlag=1) if(LengthFlag=0) LCD_clear(); LCD_write_com(0x80+0); delay(1000); for(i=0;i<16;i+) LCD_write_data(prompt4i);/"Queue is empty " delay(100); delay(65535);/无人排队时屏幕自动清屏,计数归零LCD_clear();num_count=0; else ClearNumProcess(); /消号处理,营业员操作 sound(); prompt23=num/10+'0' prompt24=num%10+'0' prompt215=(jz-1)+'0'LCD_clear(); LCD_write_com(0x80+0); delay(100); for(i=0;i<16;i+) LCD_write_data(prompt2i); /"No.00 come to No.0" delay(100); ClearNumFlag=0; /*main 函数*/void main() uint Kvalue; LCD_init(); while(1) Kvalue=sweep_key(); /获取键值 if (RankFlag=1 | ClearNumFlag=1)/判断叫号标志和消号标志是否有效 CheckButtonProcess(Kvalue); delay(200); RankFlag=0; /使叫号标志无效 ClearNumFlag=0; /使消号标志无效 Kvalue=0; /键值清0 7.2.2 液晶LCD1602显示处理程序/*LCD1602 *显示屏命令写入函数*/void LCD_write_com(uchar com) e=0; rs=0; rw=0; P0= com; delay(1000); e=1; delay(1000); e=0; /*LCD1602 *显示屏数据写入函数*/void LCD_write_data(uchar dat) e=0; rs=1; rw=0; P0 = dat; delay(1000); e=1; delay(1000); e=0;/*LCD1602 *显示屏清空显示*/void LCD_clear(void) LCD_write_com(0x01); delay(1000);/*LCD1602 显示屏初始化函数*/void LCD_init(void) LCD_write_com(0x38); /*显示模式设置*/ delay(100); LCD_write_com(0x38); delay(100); LCD_write_com(0x38); delay(100); LCD_write_com(0x38); LCD_write_com(0x08); /*显示关闭*/ LCD_write_com(0x01); /*显示清屏*/ LCD_write_com(0x06); /*显示光标移动设置*/ delay(100); LCD_write_com(0x0C); /*显示开及光标设置*/这几个是1602显示的必备程序,设置好1602后,只需通过写指令和写数据的程序处理,能够把需要显示的内容显示出来,是比较简单的显示设备7.2.3 按键检测程序/*获取键值函数*/uint sweep_key() uint jianzhi; if(key1=0)delay(1000);if(key1=0)jianzhi=1;RankFlag=1;if(key2=0|key3=0) delay(1000);if(key2=0)jianzhi=2;if(key3=0)jianzhi=3;ClearNumFlag=1;return (jianzhi);本设计只设立了两个处理窗口,相对来说简单,通过按键检测程序,来分辨是哪个按键按下了。窗口依据实际需要可以增加,程序有很大的扩展性。 8结束语通过查阅相关书籍、网上资料和一些仿真实例,做成了现在的排队叫号系统。此系统采用LCD1602显示,做起来比较简单,其中只设立了两个处理窗口,虽然很少,不过根据需要可以经行增加,具有较好的扩展功能。设计采用声音提示,由于能力有限,不会编写音乐程序,就用了最简单的蜂蜜器声音,通过改变延时程序,对蜂蜜器的频率来进行调节,最后声音勉强可以。本设计虽不及现今比较成熟的产品,不过对需求不是很高的人还是可以的。从此次设计中,我学到了很多,对没有掌握的知识都有了一定的了解。虽然本科毕业设计已经即将结束,但是我对排队叫号系统的研究并没有告一段落我会接着研究。以后目标是,用更高级的芯片把叫号系统进行完善,争取到达银行的那样四年来的的本科生活伴随着论文的完成,也要结束了。时间终是短暂,但是这四年大学的时间里却经历了重要的人生蜕变。做学问总是枯燥和寂寞的,而生活本身又是那么丰富多彩。在这个忙碌而炽热的行业中,我总算找到了一个合理时间能够静静的思考我的发展方向,以及我未来的事业。 9 致谢辞 首先,感谢我的指导老师朱煜钰老师对我的鼓励和帮助,使我能能够顺利地完成论文,从他的身上无论做事还是学习使我学到了好多珍贵的经验,让我在人生的道路上更加自信,这些将使我受益终生。感谢各位师的辛勤培育,将信息工程这个全新的领域引入我的大学生活,在人生最重和发展的最初阶段,为我指明了方向。感谢学院的其他老师,您们从生活和教学中流露出的言行,您们的学识和修养,使我不禁对自己的要求也更高了一分。还要感谢电工实验室的老师,四年来在学习上的帮助和动手能力的培养,更加启发了我的学习爱好和兴趣。机电专业的同学,谢谢你们的帮助。在无数个难熬的日日夜夜,我们给了彼此很多鼓励,也要在这里感谢你们陪伴我度过了这些时光。感谢学院给我们专业提供的实验室,在这里我利用实验室的资源对本专业学习有了一定的提高。在论文的撰写和资料搜集期间,前人的资料对我提供了莫大的帮助,这里再次感谢。最后,感谢我的家人,你们的支持才使我能够安枕无忧地顺利完成学业。 祝愿所有帮助过我的人幸福平安!10 参考文献1马骏.车站售票大厅智能排队叫号系统的设计和开发. 科技情报开发与经济. 2010年第20卷第19期2 杨彦、王霖、张凤荔、刘丽萍. 基于RS485 和单片机的排队机控制系统设计. 中文核心期刊微电脑信息(测控自动化)2008 年第24 卷第1-1 期3 张忠安 齐俊传. 门诊排队叫号系统设计. 医疗卫生装备·2006年第27卷第104 欧志旋. 一种基于单片机开发的排队叫号系统设计. 电脑光盘软件与应用2010 年第6 期5唐海波 于宏图 李继平. 单片机在服务叫号管理系统中的应用. 微型机与应用2002年第5期6 黄璟. 基于89C51单片机的排队系统主显示屏的设计.科技风2009.19期7 杨连国 史小军 堵国梁 朱为.LED显示屏在医院排队叫号系统中的应用。现代显示2006。68 张毅刚。MCS-51单片机应用设计。哈尔滨:哈尔滨工业大学出版社9 闫玉德 俞虹。MCS-51单片机原理与应用C语言版。机械工业出版社。2003学习文档 仅供参考