基于嵌入式的银行叫号调度系统设计—通信工程应用技术综合训练与实习 武汉理工

更新时间:2024-01-21 12:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

武汉理工大学《通信工程应用技术课程设计》报告

目 录

摘 要 ....................................................................... 1 Abstract ...................................................................... 2 1 设计目的与任务要求 ......................................................... 3

1.1 设计目的 ............................................................. 3 1.2 设计任务 ............................................................. 3 1.3 设计要求 ............................................................. 3 2 方案设计................................................................... 4 3基本原理 ................................................................... 4

3.1键盘电路基本原理 ..................................................... 4 3.2 ATC89C52基本原理 ................................................... 5 3.3 LCD液晶显示基本原理 ................................................ 7

3.3.1 LM061L液晶模块 ............................................... 7 3.3.2 LM016L的指令说明及时序 ....................................... 9

4 系统设计.................................................................. 11

4.1业务调度控制规则设计 ................................................ 11 4.2 前端排队子系统设计 .................................................. 11 4.3 银行业务调度系统设计 ................................................ 13 4.4 业务提示子系统设计 .................................................. 14

4.4.1 液晶显示电路 .................................................. 14 4.4.2 声音提示电路 .................................................. 15 4.5 系统总设计 .......................................................... 16 5 仿真结果及分析 ............................................................ 17 6 心得体会.................................................................. 21 参考文献:.................................................................. 22 附录:源程序 ................................................................ 23 本科生课程设计成绩评定表 .................................................... 33

武汉理工大学《通信工程应用技术课程设计》报告

摘 要

随着现代技术的不断发展特别是计算机技术的应用,使排队技术的发展也突飞猛进。智能排队机或称智能排队系统是一种综合运用计算机技术、网络技术、多媒体技术、通讯控制技术的高新技术产品。它完全模拟了人群排队过程,通过取号、进队、排队等待、叫号服务等功能,取代各类服务性窗口传统的由顾客站立排队的方式,实现了计算机系统代替客户进行排队的过程。适用于各类窗口服务行业,目前在国外已经广泛应用于金融、医院、电信、以及各级政府对外服务窗口等行业。银行自动叫号系统就是电子排队管理统的一种 ,是针对银行服务窗口的特点而设计的.这里以ATMEL 公司的AT89C52单片机为核心, 设计了一个简单的把客户与服务机构相结合的排队叫号系统。模拟排队叫号管理,科学地处理各种排队情况,操作简便,控制灵活,显示清晰,制作成本低,性价比较高。

关键词:排队技术 智能排队系统 银行排队叫号系统 AT89C52

1

武汉理工大学《通信工程应用技术课程设计》报告

Abstract

With the development of modern technology, especially the application of computer technology, the queuing technology also develops by leaps and bounds. Intelligent Automatic Call Distributor or intelligent queuing system is a kind of high and new technology products of the comprehensive use of computer technology, network technology, multimedia technology and communication control technology. It completely simulates the crowd queue process.Through the functions of taking number, into the team, waiting for the queue, calling the number and so on ,it replaces all kinds of service window of the traditional way by the customer to stand in line, and realizing the computer system instead of the process of the customers line up . it is suitable for all kinds of window service industry, and at present it has been widely used in foreign financial, hospital, telecommunications, and government's foreign service windowat all levels , etc. Bank automatic station system is electronic queuing management system which is designed according to the characteristics of the bank service window. Here taking ATMEL company's AT89C52 single-chip microcomputer as the core, i design a simple calling the number system which combine the customers with the facilitating agency .It simulates the queue station management and scientificly processes all kinds of queuing situation. It is simple to operate ,smart to control , and the display is clear, and the production is of low cost, high cost performance.

Keywords:

queuing technology Intelligent Automatic Call Distributor

Bank queuing station system AT89C52

2

武汉理工大学《通信工程应用技术课程设计》报告

1 设计目的与任务要求

1.1 设计目的

通过课程设计,使学生加强对电子电路的理解,学会对电路分析计算以及设计。进一步提高分析解决实际问题的能力,通过完成综合设计型和创新性实验及训练,创造一个动脑动手﹑独立开展电路实验的机会,锻炼分析﹑解决电子电路问题的实际本领,实现由课本知识向实际能力的转化。

1.2 设计任务

银行叫号调度系统:

1.银行门口有一个叫号机,在客户操作下可打印出一个顺序号;客户按照顺序号依次到银行窗口办理业务;

2.叫号机支持两类业务:现金业务和非现金业务。办理现金业务的窗口有3个,办理非现金业务的窗口有2个,称为综合窗口;现金业务窗口只能办理现金业务,而综合业务窗口可以办理现金业务和非现金业务;

3.非现金业务优先级高,综合业务窗口只有在没有非现金业务情况下,才能办理现金业务;

4.银行工作人员在办理了一个客户业务后,按一个呼叫按钮,由系统安排其下一个办理业务的顺序号;顺序号在窗口前的LED屏上显示的同时进行语音播音,提示客户前来办理业务; 设计一个叫号调度系统,实现对办理银行业务的排队和调度。

1.3 设计要求

1.制定出业务调度控制规则;

2.进行系统总体设计,画出系统构成框架图; 3.进行银行业务前端排队子系统的详细设计; 4.进行银行业务调度系统的详细设计;

5.进行业务提示子系统(LED屏显示、语音提示)的详细设计; 5.设计调度系统与排队子系统、提示子系统的通信方式和通信协议; 6.总结整个系统的设计,形成文档,作为课程设计的结果提交。 7.鼓励进行完整的理论设计-编程-仿真过程。

3

武汉理工大学《通信工程应用技术课程设计》报告

2 方案设计

由于在上课过程中接触到了单片机的有关知识,对单片机的使用及编程都比较熟悉,而嵌入式ARM板没有接触过,因此不太熟悉它的原理及使用,因此本次课程设计采用单片机来实现,即用AT89C52单片机作为整个系统的控制核心,分别设计叫号电路、取号电路、显示电路及声音提示等外围电路与单片机的对应引脚相连接,然后编写程序下载到单片机中通过单片机来控制外围电路的功能,从而实现整个系统的功能仿真

本次课程设计以单片机AT89C52为主体的模拟仿真系统。叫号部分和业务处理部分选择键盘电路模式,显示部分选择LM016L液晶显示模块。

3基本原理

3.1键盘电路基本原理

键盘分编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生按键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘。非编码键盘又分为矩阵键盘和独立键盘,分别如图3.1(a)(b)所示。

图3.1(a)矩阵键盘 图3.2(b)独立键盘 键盘扫描原理:在这种非编码键盘的单片机系统中,键盘处理程序首先执行

4

武汉理工大学《通信工程应用技术课程设计》报告

有无按键按下的程序段,当确认有按键按下后,下一步就要识别哪一个按键被按下,对键的识别常采用逐行(逐列)扫描的方法。

首先判断有无按键按下。方法是:向行线输出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入到累加器A中,如果有按键按下,会使列线电平被拉至低电平,是列输入不全为1。

判断键盘哪一个键被按下。方法是:一次给行线送低电平,然后查所有列线状态,称为行扫描,如果全为1,则所按下键不在此行,如果不全为1,则所按下键必在此行,而且是在与零电平列线相交的交点上的那个键。

在此,按键的位置码并不等于按键的实际定义键值,因此还必须进行转换,即键值译码。

在本次课程设计中,由于只需采用两个取号键盘和五个服务窗口键盘,所以我采用了独立键盘来实现,在程序中直接对连接键盘的单片机引脚进行扫描,若引脚为0且延时去抖动之后仍为低电平则说明该键盘按下了。

3.2 ATC89C52基本原理

单片机ATC89C52 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。晶振采用12MHZ。其芯片管脚图如图3.2所示。

图3.2 ATC89C52单片机

5

武汉理工大学《通信工程应用技术课程设计》报告

VCC:电源。GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程 序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储

6

武汉理工大学《通信工程应用技术课程设计》报告

器 时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源。

3.3 LCD液晶显示基本原理

3.3.1 LM061L液晶模块

LM016L液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码。CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM,LM016L 液晶模块如图3.3.1-1所示,其引脚功能如表3.3.1-1所示:

7

武汉理工大学《通信工程应用技术课程设计》报告

图3.3.1-1 LM016L液晶

表3.3.1-1 LM016L液晶引脚功能

引脚 1 2 3 符号 VSS VDD V0 功能说明 一般接地 接电源(+5V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4 5 6 7 8 9 10 11 12 13 14 RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 E(或EN)端为使能(enable)端,下降沿使能。 底4位三态、 双向数据总线 0位(最低位) 底4位三态、 双向数据总线 1位 底4位三态、 双向数据总线 2位 底4位三态、 双向数据总线 3位 高4位三态、 双向数据总线 4位 高4位三态、 双向数据总线 5位 高4位三态、 双向数据总线 6位 高4位三态、 双向数据总线 7位(最高位)(也是busy flang) 8

武汉理工大学《通信工程应用技术课程设计》报告

3.3.2 LM016L的指令说明及时序

LM016L液晶模块内部的控制器共有11条控制指令,如表3.3.2-1所示:

表3.3.2-1 控制命令表

序号 1 指令 RS R/W D7 D6 D5 D4 D3 D2 0 0 0 0 0 0 0 D1 D0 功能 0 1 清屏,光标归位 设置地址计数器清零,DDRAM数据不变,光标移到左上角 设置字符进入时的屏幕移位方式 设置显示开关,光标开关,闪烁开关 设置字符与光标移动 设置DL,显示行数,字体 设置6位的CGRAM地址以读/写数据 设置7位的复位显示器 0 2 光标返回 0 0 0 0 0 0 0 0 1 * 3 4 5 6 字符进入模式 显示开/关控制 光标或字符移位 功能设置 设置字符发0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 L 0 1 1 D I/D S C B * * S/C R/L * N F * 7 生存贮器地0 址 0 0 1 字符发生存贮器地址 8 设置数据存贮器地址 读忙标志或地址 写数据到CGRAM或0 0 1 显示数据存贮器地址 DDRAM地址以读/写数据 读忙标志及地址计数器 向CGRAM/DDRAM9 10 0 1 1 0 BF 计数器地址 写入一字节数据,需要先设置RAM地址 9

武汉理工大学《通信工程应用技术课程设计》报告

DDRAM) 从CGRAM11 或DDRAM读数据 I/D =1 递增,I/D=0 递减。 1 1 读取入一字节数据,需要先设置RAM地址 写入一字节的数据 从CGRAM/DDRAM读取一字节的数据 S=0 时显示屏不移动,S=1时,如果I/D =1且有字符写入时显示屏左移,否则右移。 D=1 显示屏开,D=0 显示屏关。 C=1 时光标出现在地址计数器所指的位置,C=0时光标不出现。 B=1 时光标出现闪烁,B=0时光标不闪烁。 S/C=0 时,RL=0则光标左移,否则右移。 S/C=1 时,RL=0则字符和光标左移,否则右移。 DL=1 时数据长度为8位,DL=0 时为使用D7-D4共4位,分两次送一字节。 N=0为单行显示,N=1时为双行显示。 F=1 时为510点阵字体,F=0 时为57点阵字体。 BF=1 时LCD忙,BF=0 时LCD就绪。 LM016L液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)

指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。

指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。

指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。 指令11:读数据。

10

武汉理工大学《通信工程应用技术课程设计》报告

与HD44780相兼容的芯片时序表如表3.3.2-2: 表3.3.2-2 基本操作时序表 读状态 输入 RS=L,R/W=H,E=H 读数据 输入 RS=H,R/W=H,E=H 写数据 输入 RS=H,R/W=L,D0—D7=数据,E=高脉冲 输出 D0—D7=状态字 输出 D0—D7=数据 输出 无 写指令 输入 RS=L,R/W=L,D0—D7=指令码,E=高脉冲 输出 无 4 系统设计

4.1业务调度控制规则设计

由于本次课设要求是叫号机支持两类业务:现金业务和非现金业务。办理现金业务的窗口有3个,办理非现金业务的窗口有2个,称为综合窗口;现金业务窗口只能办理现金业务,而综合业务窗口可以办理现金业务和非现金业务;非现金业务优先级高,综合业务窗口只有在没有非现金业务情况下,才能办理现金业务;银行工作人员在办理了一个客户业务后,按一个呼叫按钮,由系统安排其下一个办理业务的顺序号;顺序号在窗口前的LED屏上显示的同时进行语音播音,提示客户前来办理业务。

因此,本次我设计的银行叫号系统其业务调度规则如下:银行设置两个取号机,分别是现金业务取号机和非现金业务取号机,顾客根据自身办理业务来选择对应叫取号机打印自己的号码;银行共设置五个叫号机,其中2个非现金业务叫号机和3个现金业务叫号机来分别对应5个服务窗口;现金业务窗口只能处理现金业务;非现金业务窗口能处理两种业务,但若有非现金业务,非现金业务窗口优先处理非现金业务,完成后才处理现金业务。非现金业务和现金业务待处理的堆积量分别均为20人,以免引起取号过多等待服务的人数过多导致超负荷服务。

4.2 前端排队子系统设计

前端排队子系统我主要是靠2个按键来模拟两个取号机,以LM016L液晶显示来模拟打印机显示客户的号码,然后通过程序来控制顾客取号排队的过程。其电路图如图4.2-1所示,取号排队流程图如图4.2-2所示。

11

武汉理工大学《通信工程应用技术课程设计》报告

图4.2-1 取号排队电路图

开始

非现金业务取号键按下? 是 延时去抖 现金业务取号键按下? 是 延时去抖 非现金业务取号键按下? 是 非现金业务排队人数超20? 否 1.排队总人数(排队号码)加1 2.非现金业务排队人数加1 3.排队号码赋给非现金业务队 是 显示队列已满 是 现金业务取号键按下? 是 非现金业务排队人数超20? 否 1.排队总人数(排队号码)加1 2.现金业务排队人数加1 3.排队号码赋给现金业务队 排队号码送显示 结束

图4.2-2 排队取号流程图

12

武汉理工大学《通信工程应用技术课程设计》报告

4.3 银行业务调度系统设计

银行业务调度系统主要实现的就是对顾客业务的处理,5个处理窗口共分为2个非现金业务和3个现金业务的处理窗口,在仿真中我采用了5个按键来模拟着5个处理窗口,然后通过程序来控制单片机实现整个业务的分类处理和优先级处理的问题。其流程图如下图所示,电路图如图4.3-1所示

开 始 非现金业务现金业务窗 窗口按下? 口按下? 是 是 延时去抖 延时去抖

非现金业务处 现金业务处理

理窗口按下? 窗口按下?

是 是

显示队列已空

金 非 现 业 务 是 是 现 金 业 务 排

人人 排 队 数 为 队 数 为 0 ? 0 ? 否 否 蜂鸣器语音 蜂鸣器语音 提示 提示 被排队号码送及对应处理窗口显示

结束 13 武汉理工大学《通信工程应用技术课程设计》报告

图4.3-1 业务调度电路图

4.4 业务提示子系统设计

4.4.1 液晶显示电路

本次课设我采用了LM016L液晶来模拟显示,主要对排队取号的号码进行显示(模拟实际系统中的打印机)以及对服务窗口叫号的显示,其电路如图4.4.1-1所示,单片机P1口接LM016L的8个双向数据线接口,P3.4接LM016L的数据/命令选择端,P3.5接LM016L的使能信号。通过对RS以及E的高低电平进行写指令和写数据操作来控制LM016L的显示。

图4.4.1-1 显示系统

14

武汉理工大学《通信工程应用技术课程设计》报告

4.4.2 声音提示电路

实际银行排队叫号系统中,当服务窗口可以服务时,会有广播播报对应的“请某某号顾客到某某号窗口”的提示音,但是由于PROTUES里面没有语音芯片,没办法进行录音仿真,于是本课设里面我采用了简单的蜂鸣器发声电路来模拟实际的语音电路,以简单的蜂鸣器发声来达到声音提示的效果,其电路图如图4.4.2-1所示。

图4.4.2-1 蜂鸣器声音提示电路

15

武汉理工大学《通信工程应用技术课程设计》报告

4.5 系统总设计

整个银行排队叫号系统的原理电路图如图4.5-1所示,其程序流程图如图4.5-2所示。

图4.5-1 系统总原理图

开始 客户分类取号 初始化 分类队伍号码累加 排队总数累加 1602显示信息 队伍空显示器初始化、清零 窗口分类消号 分类队伍号码信息处理 声音提示 结束

图4.5-2 系统总流程图

16

武汉理工大学《通信工程应用技术课程设计》报告

5 仿真结果及分析

首先,我将非现金业务取号键按两次,结果如图5-1显示,说明非现金业务取号正常。

图5-1 非现金业务取号

然后分别按下现金业务的叫号窗口1、2、3的对应键,结果均如图5-2所示,说明现金业务窗口不能处理非现金业务,且无现金业务排队时其窗口显示队列空。

图5-3 现金业务窗口的限制

然后依次按下非现金业务处理窗口1、2对应键,结果如图5-3所示,同时蜂鸣器发声,说明非现金业务能正常处理非现金业务。

17

武汉理工大学《通信工程应用技术课程设计》报告

图5-4 非现金业务处理

然后,我按下四次现金业务取号键,其结果如图5-4显示,说明现金业务取号正常。

18

武汉理工大学《通信工程应用技术课程设计》报告

图5-4 现金业务取号

然后,我一次按下了现金业务处理窗口3、4、5,结果如5-5所示,同时蜂鸣器发声,说明现金业务处理正常.

图5-5 现金业务处理

然后,我又按下一次非现金业务取号键,结果如5-6显示,说明现金和非现金业务共同取号正常。

图5-6 综合取号

19

武汉理工大学《通信工程应用技术课程设计》报告

然后,我按下非现金业务处理窗口1,结果显示如图5-7,同时蜂鸣器发声,说明非现金业务的优先级在现金业务之前。

图5-6 非现金业务的优先权

然后,我再次按下非现金业务处理窗口1,结果显示如图5-7,同时蜂鸣器发声,说明非现金业务处理窗口在处理完非现金业务之后也能处理现金业务。

图5-7 非现金业务窗口处理现金业务

然后,我将现金业务和非现金业务取号窗口各按21次,其显示均如图5-8所示,说明非现金业务和现金业务都能限制待处理人数在20人以内。

图5-8 排队队列已满

综上所述,所设计的银行排队叫号系统能够正确实现所需的功能,性能优良。

20

武汉理工大学《通信工程应用技术课程设计》报告

6 心得体会

通过这几天的单片机的课设设计,我在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实训锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,同时也暴露出一些平时学习上的问题,让我深刻反思。这些问题的发现将为我以后的学习和工作找明道路,查漏补缺为进一步学习作好准备。

通过实训,让我更熟悉掌握了Keil uVision3, proteus ISIS, Protel 99 SE这些应用程序的运用,让我懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序,这几天我经过同学的耐心的讲解和指导通过自己认真的动手操作,终于将一个完整的能完成实习要求的单片机原理图制作出来了。但在实训中间暴露出很多问题:对平时上课讲的理论知识没有完全掌握消化,到了实际操作中还得请教老师和同学,在编程和画图的时候不能持之以恒,怕麻烦和容易否定自己。

这些问题的发现,有助于提高我在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。严谨求实、踏实务实,是我这次实训的深刻总结。

21

武汉理工大学《通信工程应用技术课程设计》报告

参考文献:

[1] 谢自美.电子线路设计·实验·测试(第三版).武汉:华中科技大学出版社 [2] 李群芳. 单片微型计算机与接口技术(第3版).电子工业出版社,2008 [3] 刘教瑜. 单片机原理及应用.武汉理工大学出版社,2011 [4] 张东亮. 单片机原理与应用.人民邮电出版社,2009

[5] 郭天祥. 51单片机C语言教程——入门、提高、开发、拓展全攻略.电子工 业出版社,2009

[6] 章工荣.计算机高级应用.高等教育出版社, 2004 [7] 李文成.计算机程序设计基础.科学出版社,2007

[8] 张锦程.C语言高级程序设计及其讲解.机械工业出版社,2000

22

武汉理工大学《通信工程应用技术课程设计》报告

附录:源程序

#include

#define uchar unsigned char #define uint unsigned int sbit rs=P3^4; sbit e=P3^5; sbit rs2=P3^2; sbit e2=P3^3;

sbit key1=P1^0;//非现金业务取号 sbit key2=P1^1; sbit key3=P1^2; sbit sounder=P3^7; sbit key4=P1^3; sbit key5=P1^4; sbit key6=P1^5;

sbit key7=P1^6;//现金业务取号

uchar prompt1[]=\ uchar prompt2[]=%uchar prompt3[]=\ uchar prompt4[]=\ uchar prompt5[]=\

static uint num_count=0; static uint idata rank_number[20]={0}; static uint num=0; static int RankFlag=0; static int ClearNumFlag=0; static uint LengthFlag=0; -1

static uint idata rank_number1[20]={0}; static uint num1=0; static int RankFlag1=0; static int ClearNumFlag1=0; static uint LengthFlag1=0; 号时-1

uint idata* data q1=rank_number1; uint idata* data q2=rank_number ;

//现金业务排队取的号码 //排队叫号存储的数组 //窗口消的现金号码 //现金取号的标志 //消号的标志

//现金业务队列长度 取一次号时+1,消一次号时 //非现金业务排队叫号存储的数组 //窗口消的非现金号码 //非现金取号的标志 //消号的标志

//非现金业务队列长度 取一次号时+1,消一次23

武汉理工大学《通信工程应用技术课程设计》报告

/*延时函数*/

void delay(uint n) {

while (n--); }

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

*****************************************/ void LCD_write_com(uchar com) { e=0; rs=0; P0= com; delay(1000); e=1;

delay(1000); e=0; }

void LCD_write_com2(uchar com) { e2=0; rs2=0; P2=com; delay(1000); e2=1;

delay(1000); e2=0; }

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

*****************************************/ void LCD_write_data(uchar dat) {

e=0; rs=1; P0 = dat; delay(1000); e=1;

delay(1000); e=0; }

24

武汉理工大学《通信工程应用技术课程设计》报告

void LCD_write_data2(uchar dat) {

e2=0; rs2=1; P2=dat; delay(1000); e2=1;

delay(1000); e2=0; }

/***************************************** LCD1602 *显示屏清空显示*

*****************************************/ void LCD_clear(void) {

LCD_write_com(0x01); delay(1000); }

void LCD_clear2(void) {

LCD_write_com2(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); //设置16x2显示,5X7点阵,8位数据接口 LCD_write_com(0x08); /*显示关闭*/

LCD_write_com(0x01); /*显示清屏,指针清零*/

LCD_write_com(0x06); /*写一个字符后地址指针自动加1*/ delay(100);

LCD_write_com(0x0C); /*显示开及不显示光标*/ }

void LCD_init2() {

LCD_write_com2(0x38); //设置16x2显示,5X7点阵,8位数据接口

25

武汉理工大学《通信工程应用技术课程设计》报告

LCD_write_com2(0x08); /*显示关闭*/

LCD_write_com2(0x01); /*显示清屏,指针清零*/

LCD_write_com2(0x06); /*写一个字符后地址指针自动加1*/ delay(100);

LCD_write_com2(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; RankFlag1=1; } if(key7==0) { delay(1000); if(key7==0) jianzhi=7; RankFlag=1; } if(key2==0||key3==0) { delay(1000); if(key2==0) jianzhi=2; if(key3==0) jianzhi=3; ClearNumFlag1=1; }

//非现金取号 // 1 //现金取号 //7 //非现金业务销号按键 // 2 // 3 26

武汉理工大学《通信工程应用技术课程设计》报告

if(key4==0||key5==0||key6==0) //现金业务销号按键 { delay(1000); if(key4==0) jianzhi=4; // 4 if(key5==0) jianzhi=5; // 5 if(key6==0) jianzhi=6; // 6 ClearNumFlag=1; } return (jianzhi); }

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

取号机 按一次键变量+1,最大为20 *****************************************/ void QueueNumProcess() {

if(RankFlag1==1) //判断非现金取号标志是否有效 {

if ( LengthFlag1<20) { num_count++; //总排队人数 *(q1+LengthFlag1)= num_count; }

LengthFlag1++; }

if(RankFlag==1) //判断现金取号标志是否有效 {

if ( LengthFlag<20) { num_count++;

*(q2+LengthFlag) = num_count; }

LengthFlag++; } }

/***************************************** 窗口消号处理函数

*****************************************/ void ClearNumProcess() {

27

武汉理工大学《通信工程应用技术课程设计》报告

uint i; if (ClearNumFlag1==1) //判断消号标志是否有效 {

num1=*q1; //把消的非现金号赋给全局变量num1

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

LengthFlag1--; }

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

num=*q2; //把消的号赋给全局变量num

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

LengthFlag--; } }

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

void CheckButtonProcess(uint m) //m代表检测到的键值 {

uint jz,i; jz=m;

if((jz==1) && (RankFlag1==1)) //非现金业务取号 {

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

if( LengthFlag1>=20 ) { LCD_clear2(); LCD_write_com2(0x80+0x02); delay(100); for(i=0;i<16;i++) { LCD_write_data2(prompt3[i]); delay(100); } } else

28

武汉理工大学《通信工程应用技术课程设计》报告

{ QueueNumProcess(); prompt1[11]=(num_count)/10+'0'; prompt1[12]=(num_count)+'0'; LCD_clear2(); LCD_write_com2(0x80+02); delay(100); for(i=0;i<15;i++) { LCD_write_data2(prompt1[i]); //\ delay(100); } delay(65535);delay(65535);delay(65535); LCD_write_com2(0x80+02); for(i=0;i<15;i++) { LCD_write_data2(prompt5[i]); //\ delay(100); } RankFlag1=0; } }

if((jz==7) && (RankFlag==1)) //现金业务取号 {

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

if( LengthFlag>=20 ) {

LCD_clear2();

LCD_write_com2(0x80+0x02); delay(100);

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

LCD_write_data2(prompt3[i]); delay(100); } } else {

QueueNumProcess();

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

29

武汉理工大学《通信工程应用技术课程设计》报告

LCD_write_com2(0x80+02); delay(100);

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

LCD_write_data2(prompt1[i]); //\ delay(100); } delay(65535);delay(65535);delay(65535); LCD_write_com2(0x80+02); for(i=0;i<15;i++) { LCD_write_data2(prompt5[i]); //\ delay(100); }

RankFlag=0; } }

if((jz==2||jz==3) && ClearNumFlag1==1) 销号窗口 { if(LengthFlag1==0) //没有非现金业务客户 { if(LengthFlag==0) //没有客户 { LCD_clear(); LCD_write_com(0x80+0); delay(1000); for(i=0;i<16;i++) { LCD_write_data(prompt4[i]);//\ delay(100); } delay(65535); //无人排队时屏幕自动清屏,计数归零 //LCD_clear(); num_count=0; } else //但是有现金业务客户 { ClearNumFlag=1; ClearNumFlag1=0 ; ClearNumProcess(); //消号处理,营业员操作 sound(); prompt2[3]=num/10+'0'; prompt2[4]=num+'0'; prompt2[15]=(jz-1)+'0';

30

//非现金业务 武汉理工大学《通信工程应用技术课程设计》报告

LCD_clear(); LCD_write_com(0x80+0); delay(100); for(i=0;i<16;i++) { LCD_write_data(prompt2[i]); //\ delay(100); } ClearNumFlag=0; } } else //有非现金客户 { ClearNumProcess(); //消号处理,营业员操作 sound(); prompt2[3]=(num1)/10+'0'; prompt2[4]=(num1)+'0'; prompt2[15]=(jz-1)+'0'; LCD_clear(); LCD_write_com(0x80+0); delay(100); for(i=0;i<16;i++) { LCD_write_data(prompt2[i]); //\ delay(100); } ClearNumFlag1=0; } } if((jz==4||jz==5||jz==6) && 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]);//\ delay(100); } delay(65535); //无人排队时屏幕自动清屏,计数归零

31

//现金

武汉理工大学《通信工程应用技术课程设计》报告

// LCD_clear(); num_count=0; } else //有现金客户 {

ClearNumProcess(); //消号处理,营业员操作 sound();

prompt2[3]=num/10+'0'; prompt2[4]=num+'0'; prompt2[15]=(jz-1)+'0'; LCD_clear();

LCD_write_com(0x80+0); delay(100);

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

LCD_write_data(prompt2[i]); //\ delay(100); }

ClearNumFlag=0; } } }

/***************************************** main 函数

*****************************************/ void main() {

uint Kvalue; LCD_init(); LCD_init2(); while(1) {

Kvalue=sweep_key(); //获取键值 if (RankFlag==1 || ClearNumFlag==1||RankFlag1==1 || ClearNumFlag1==1)//判断叫号标志和消号标志是否有效

CheckButtonProcess(Kvalue); delay(200); RankFlag=0; //使叫号标志无效 ClearNumFlag=0; //使消号标志无效 RankFlag1=0; //使叫号标志无效 ClearNumFlag1=0; Kvalue=0; //键值清0 } }

32

武汉理工大学《通信工程应用技术课程设计》报告

本科生课程设计成绩评定表

姓 名 专业、班级 性 别 男 题 目:银行叫号调度系统 答辩或质疑记录: 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日

33

本文来源:https://www.bwwdw.com/article/j38o.html

Top