基于51单片机排队叫号系统设计.doc

上传人:聆听****声音 文档编号:1936943 上传时间:2023-05-02 格式:DOC 页数:25 大小:1.77MB
下载 相关 举报
基于51单片机排队叫号系统设计.doc_第1页
第1页 / 共25页
基于51单片机排队叫号系统设计.doc_第2页
第2页 / 共25页
基于51单片机排队叫号系统设计.doc_第3页
第3页 / 共25页
基于51单片机排队叫号系统设计.doc_第4页
第4页 / 共25页
基于51单片机排队叫号系统设计.doc_第5页
第5页 / 共25页
基于51单片机排队叫号系统设计.doc_第6页
第6页 / 共25页
基于51单片机排队叫号系统设计.doc_第7页
第7页 / 共25页
基于51单片机排队叫号系统设计.doc_第8页
第8页 / 共25页
基于51单片机排队叫号系统设计.doc_第9页
第9页 / 共25页
基于51单片机排队叫号系统设计.doc_第10页
第10页 / 共25页
基于51单片机排队叫号系统设计.doc_第11页
第11页 / 共25页
基于51单片机排队叫号系统设计.doc_第12页
第12页 / 共25页
基于51单片机排队叫号系统设计.doc_第13页
第13页 / 共25页
基于51单片机排队叫号系统设计.doc_第14页
第14页 / 共25页
基于51单片机排队叫号系统设计.doc_第15页
第15页 / 共25页
基于51单片机排队叫号系统设计.doc_第16页
第16页 / 共25页
基于51单片机排队叫号系统设计.doc_第17页
第17页 / 共25页
基于51单片机排队叫号系统设计.doc_第18页
第18页 / 共25页
基于51单片机排队叫号系统设计.doc_第19页
第19页 / 共25页
基于51单片机排队叫号系统设计.doc_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机排队叫号系统设计.doc

《基于51单片机排队叫号系统设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机排队叫号系统设计.doc(25页珍藏版)》请在冰点文库上搜索。

基于51单片机排队叫号系统设计.doc

课程设计

单片机系统

课程设计

成绩评定表

设计课题排队叫号系统设计

学院名称:

专业班级:

学生姓名:

学号:

指导教师:

设计地点:

31-505

设计时间:

2012-12-17~2012-12-28

指导教师意见:

成绩:

签名:

年月日

目录

1引言 4

2总体方案设计 4

2.1硬件组成 4

2.2方案论证 5

2.3总体方案 5

3硬件电路设计 6

3.1单片机及外围电路 6

3.2显示电路 7

3.3按键电路 8

3.4蜂鸣器电路 9

4系统软件设计 10

4.1主程序设计 10

4.2子程序液晶LCD1602显示处理程序 12

4.3子程序按键检测程序 14

5系统调试与总结 15

5.1调试 15

5.2总结 17

参考文献 17

附录A:

18

附录B 19

1引言

近年来,随着科学技术的迅猛发展和人们生活水平的日益提高,各行各业特别是服务行业的竞争也逐渐激烈。

服务质量作为体现企业的公众形象、服务理念、管理水平的标准已越来越受到服务和被服务双方所关注,而营业窗口正是代表银行、医院、电信、税务、工商等企业服务质量的重要场所。

随着服务行业业务量的增长及业务种类的增加,排队等候已成为人们面临的实际问题。

长期以来,人们在银行、医院、电信、税务、工商等营业大厅里前拥后挤、杂乱无章地排队等候,有时一站就是一个多小时,这已是司空见惯的现象,极大地影响了服务质量。

员工坐着服务、客户站着等待的服务方式与“用户就是上帝”的服务宗旨完全背道而驰!

改善服务质量、树立良好形象,解决劳累的排队现象、创造人性化服务环境已成为急需解决的问题。

设计一套排队抽号的服务系统,可以很好的解决因排队引起的种种问题,排队系统应运而生。

此系统完全模拟人群排队过程,通过取票进队、排队等待、叫号服务等功能,诠释了人性化的服务理念,舒缓顾客等待的急噪情绪,使人们在等候服务的过程中拥有一个相对自由的空间,是科技以人为本的真正体现。

本文基于单片机的排队叫号系统,由客户端和主机终端组成,有LCD大屏幕显示信息,让客户知道自己的队号,并有叫号提示音提醒客户,方便快捷,可以满足日常的服务行业排队叫号,所以非常有意义。

2总体方案设计

2.1硬件组成

本系统由按键输入系统、单片机系统、屏幕显示系统及叫号提示音系统组成,系统分为两个部分:

抽号部分和叫号部分,其控制核心为AT89C51单片机,选用此单片机编程简单,开发工具便于使用,能很好地满足排队叫号的控制数据处理。

抽号部分和叫号部分采用一块LCD液晶显示器,这样显示数据直观,便于顾客理解,抽号部分输入只需使用一个抽号键即可,便于客户操作,叫号部分包括两个叫号键,系统采用自动清零,无需人工操作。

2.2方案论证

1.控制器

控制器的选择是确定整个系统硬件方案的关键,它关系到其它几个部分方案的确定,对于排队叫号系统,控制器的可选方案有以下两种:

(1)采用单片机。

单片机采用半导体工艺,使其具有很多显著的优点和特点,因而能在各个领域都得到迅猛的发展,它主要有如下特点:

1有优异的性能价格比。

2集成度甚高,体积小,有很高的可靠性,可以在恶劣环境下工作。

3控制能力强。

4低功耗,低电压,便与生产便携式产品。

5扩展容易。

(2)采用PLC。

PLC是一种专门为在工业环境下的应用而设计的专用计算机。

其特点是抗干扰能力强,具有很高的可靠性高;各种接口配套齐全,功能完善,适用性强。

采用PLC构成的控制系统的工作量小,维护方便,适合于野外使用,但价格昂贵[21]。

排队叫号系统作为一种生活中常用的小型系统,本身价值不高,更要求控制系统具有较好的性价比,经上述分析比较,确定采用单片机作为控制器。

2.输入通道

输入通道为按键。

按键有独立式按键和行列式按键两种,因为所需按键数少,故确定使用独立式按键。

3.控制输出通道

排队叫号系统的执行机构是1602显示器和蜂鸣器使得系统输出简单明了。

2.3总体方案

系统的组成如图2.3。

设备上电后,显示器屏亮,无信息显示。

当客户按键后,没按一下,队伍加一,显示器显示客户队伍号:

排满20位后,再按取号键,屏幕显示“队伍满”。

当客服叫号时,队伍减1,程序进行信息处理,在屏幕上显示“几号客户到几号窗口”,同时进行声音提示;当队伍空时,显示“队伍空”,显示器屏幕清空,储存队伍号码归零处理。

图2.3总体方案框图

3硬件电路设计

3.1单片机及外围电路

微控制器采用AT89C51。

AT89C51是美国ATMEL公司生产的与MCS-51系列单片机完全兼容的高性能CMOS8位单片机,MCS-51系列单片机以其推出时间早、配套资源丰富、开发手段完善、性价比高等特点而得到了广泛的应用,是单片机的主流品种。

AT89C51的内部资源主要包括:

·与MCS--51系列完全兼容的高性能8位CPU;

·8K字节可重复编程的Flash存储器;

·256字节的SRAM;

·4个8位的并行口,共32条I/O口线;

·3个16位的定时器/计数器;

·6个中断源,2个中断优先级的中断系统;

·一个全双工的串行口;

·内部振荡器。

AT89C51的外围电路主要包括时钟电路、复位电路、存储器扩展电路等,为了提高系统的可靠性,应设计看门狗(Watch-dogTimer)电路。

如图3.1所示。

图3.1单片机外围电路

3.2显示电路

多数的应用系统,都要配输出外设,LED显示器和LCD显示器,为了达到显示目的,我们选用了LCD1602显示器。

在显示方面,我们选用LCD显示。

背光亮度可调,可显示两行,每行16字符,不能显示汉字,内置含128个字符的ASCII字符集字库,并行接口编程容易,但是占用的I/O口线比较多,

引脚功能介绍如下:

VSS(引脚1):

电源地。

VDD(引脚2):

电源正。

VO(引脚3):

对比度调节端

RS(引脚4):

数据/命令选择端(H/L)

R/W(引脚5):

读写选择端(H/L)

E(引脚6):

使能信号

D0~D7(引脚7~14)数据口

BLA(引脚15)背光电源正

BLK(引脚16)背光电源负

1602显示屏连接单片机的P0口,电路连接图如下

图3.3

3.3按键电路

按键控制电路中,单片机的P1口分别连接3个按键式开关,P3.0顾客排号按键;P3.1窗口一叫号按键;P3.2窗口二叫号按键。

按键电路图如下图3.3

图3.3

3.4蜂鸣器电路

蜂鸣器的正极的一段连接到5V电源上面,另一端连接到三级管的集电极,三极管的基极有单片机的P1.5管脚来控制,当P1.5管脚为低时,输出高电平,三极管导通,这样蜂鸣器的电流形成回路,放出声音。

用户可以通过程序控制P1.5管脚的置低和置高来使蜂鸣器发出声音和关闭。

电路如下图

4系统软件设计

4.1主程序设计

主程序见附录B

图4.1主程序流程图

4.2子程序液晶LCD1602显示处理程序

液晶LCD1602显示处理程序

/***************************************

LCD1602*显示屏命令写入函数*

****************************************/

voidLCD_write_com(ucharcom)

{

e=0;rs=0;rw=0;

P0=com;

delay(1000);

e=1;

delay(1000);

e=0;

}

/*****************************************

LCD1602*显示屏数据写入函数*

*****************************************/

voidLCD_write_data(uchardat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay(1000);

e=1;

delay(1000);

e=0;

}

/*****************************************

LCD1602*显示屏数据写入数据*

*****************************************/

voidLCD_clear(void)

{

LCD_write_com(0x01);

delay(1000);

}

/*****************************************

LCD1602显示屏初始化函数

*****************************************/

voidLCD_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后,只需通知写指令和写数据的程序处理,能够把需要显示的内容显示出来,是比较简单的显示设备。

4.3子程序按键检测程序

/*获取键值函数*/

uintsweep_key()

{

uintjianzhi;

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);

}

本设计只有两个叫号窗口,相对来说比较简单,通过按键检测程序来分辨是哪个按键按下了。

窗口依据实际需要可以增加,程序有很大的扩展性。

5系统调试与总结

5.1调试

屏幕出将程序下载到单片机中调试成功。

按下客户端取号按键现号码如上图。

按下服务叫号键出现提示如下图

5.2总结

此系统采用LCD1602显示,做起来比较简单,其中只设立了两个处理窗口,虽然较少,不过可以根据需要自行增加,具有较好扩展功能。

设计采用声音提示,由于能力有限,不会编写音乐程序,就用了最简单的蜂鸣器声音。

从此次设计中,我学到很多,对没用掌握的知识有了一定的理解。

参考文献

[1]单片机微型计算机原理、应用、及接口技术(第二版)。

张迎新等编著。

国防科技大学出版社出版。

[2]单片机在服务叫号管理系统中的应用。

唐海波于宏图李继平。

《微型机与应用》。

[3]MCS-51单片机应用设计。

张毅刚。

哈尔滨工业大学出版社。

[4]MCS—51单片机原理与应用(C语言版)。

机械工业出版社。

[5]一种基于单片机的排队叫号系统设计。

欧志刚。

计算机光盘软件与应用。

附录A:

系统原理图

附录B

程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P2^6;

sbitrw=P2^5;

sbite=P2^7;

sbitkey1=P1^0;

sbitkey2=P1^1;

sbitkey3=P1^2;

sbitsounder=P1^5;

ucharprompt1[]="YourNo.is00!

";

ucharprompt2[]="No.00GoToWin.0";

ucharprompt3[]="Queueisfull";

ucharprompt4[]="Queueisempty!

";

uintnum_count=0;//排队叫的号码

uintrank_number[20]={0};//排队叫号存储的数组

uintnum=0;//窗口消的号码

intRankFlag=0;//叫号的标志

intClearNumFlag=0;//消号的标志

uintLengthFlag=0;//队列长度叫一次号时+1,消一次号时-1

/*延时函数*/

voiddelay(uintn)

{

while(n--);

}

/*****************************************

LCD1602*显示屏命令写入函数*

*****************************************/

voidLCD_write_com(ucharcom)

{

e=0;

rs=0;

rw=0;

P0=com;

delay(1000);

e=1;

delay(1000);

e=0;

}

/*****************************************

LCD1602*显示屏数据写入函数*

*****************************************/

voidLCD_write_data(uchardat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay(1000);

e=1;

delay(1000);

e=0;

}

/*****************************************

LCD1602*显示屏清空显示*

*****************************************/

voidLCD_clear(void)

{

LCD_write_com(0x01);

delay(1000);

}

/*****************************************

LCD1602显示屏初始化函数

*****************************************/

voidLCD_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);/*显示开及光标设置*/

}

/*简单的蜂鸣器提示音*/

voidsound()

{uinta;

for(a=0;a<500;a++)

{

sounder=0;

delay(61);

sounder=1;

}

}

/*获取键值函数*/

uintsweep_key()

{

uintjianzhi;

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

*****************************************/

voidQueueNumProcess()

{

if(RankFlag==1)//判断叫号标志是否有效

{

if(LengthFlag<20)

{

num_count++;

rank_number[LengthFlag]=num_count;

}

LengthFlag++;

}

}

/*****************************************

窗口消号处理函数

*****************************************/

voidClearNumProcess()

{

uinti;

if(ClearNumFlag==1)//判断消号标志是否有效

{

num=rank_number[0];//把消的号赋给全局变量num

for(i=0;i<19;i++)//让数组整体左移一个存储单元,即把消得号删除

{

rank_number[i]=rank_number[i+1];

}

LengthFlag--;

}

}

/*****************************************

检测到按键后,检测函数处理及LCD显示处理

*****************************************/

voidCheckButtonProcess(uintm)

{

uintjz,i;

jz=m;

if((jz==1)&&(RankFlag==1))

{

//当队列人数达到20时,提示

//Queueisfull

if(LengthFlag>=20)

{

LCD_clear();

LCD_write_com(0x80+0x02);

delay(100);

for(i=0;i<16;i++)

{

LCD_write_data(prompt3[i]);

delay(100);

}

}

else

{

QueueNumProcess();

prompt1[11]=(num_count)/10+'0';

prompt1[12]=(num_count)%10+'0';

LCD_clear();

LCD_write_com(0x80+02);

delay(100);

for(i=0;i<15;i++)

{

LCD_write_data(prompt1[i]);//"YourNo.is00!

";

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(prompt4[i]);//"Queueisempty";

delay(100);

}

delay(65535);//无人排队时屏幕自动清屏,计数归零

LCD_clear();

num_count=0;

}

else

{

ClearNumProcess();//消号处理,营

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2