单片机控制自动售货机
科技学院2010届本科毕业论文
——自动售货机控制器设计
学科专业:
指导教师:
学生姓名:
学生学号:
2010年5月
目 录
摘 要 ................................................... I II Abstract ................................................. I V
绪论 ...................................................... 1
第一章,自动售货机的系统结构 . ............................ 3
1.1自动售货机的系统概述 .................................................. 3
1.1.1自动售货过程的控制子系统简述 ...................................... 4
1.1.2自动售货过程的通讯子系统简述 ................................... 5 1.2自动售货机的功能简介 6
1.2.16
7
7
第二章.自动售货机的系统硬件电路设计 .................... 8
2.1自动售货机中央控制元件8751的介绍 ..................................... 8
2.2货币识别系统 .......................................................... 9
2.3货物选择系统 ......................................................... 11
2.4出货及显示花钱数系统 ................................................. 11
2.5找钱及显示找钱数系统 ................................................. 13
2.6出错报警系统简述 .................................................. 14
第三章.自动售货机的系统软件程序设计 . ..................... 15
3.1自动售货机货币识别系统程序流程图 .................................. 15
3.2自动售货机货物选择系统的程序流程图 ................................ 15
3.3自动售货机出货,显示花钱数系统流程图 ........................... 19
3.4自动售货机找钱,显示找钱数系统流程图 ........................... 20
3.5出错报警系统流程图 ................................................ 21
第四章.系统软、硬件设计实现 ................................ 23
4.1驱动程序 ........................................................... 23
4.1.1实现有效投币定时30秒以及累加计数程序: ........................ 23
4.1.2货物选择系统的驱动程序 . .......................................... 24
4.1.3报警系统的驱动程序 ............................................... 30
第五章 结束语 ............................................ 31
参考文献 ................................................. 32
致 谢 . ................................................... 33
附 录 ................................................... 34
自动售货机控制器设计
摘 要
自动售货机是劳动密集型的产业构造向技术密集型社会转变的产物。本文设计了一种以INTEL 公司的8751单片机为核心的自动售货机装置的控制系统。详细介绍了自动售货机系统的方案设计、硬件选择、软件规划和编写,并重点描述了机8751本系统选择4×4矩阵式键盘按键作为货物选择端,采用了2个可编程并行接口8255A 实现并行接口的扩展,解决了单片机8751芯片输入/输出口引脚紧张的问题,实现了货物的掉出以及货币数的显示功能。此外,系统程序采用keil 软件进行程序的编写和编译,该软件具有编程简单、查错方便、阅读容易等特点。汇编语言是程序的基本语言,具有容易理解,便于记忆和使用等特点。
关键词:自动售货机;控制系统,8751单片机;系统程序
The new business tax under the Ordinance Analysis of Tax
Planning
Abstract
the sell goods and handware sellection software design and write . and describe the aut omat system worke principle system design and sofeware programing technique The master mcu 8751 is INTEL Company. The system has some prominent excellences by concentrate control. It is very steady and credible,my system use 4*4keyboard to sellecting goods useing two programing parallel interface 8255 to resolve i/o tensional problem make goods dorp and coin display function
. I program the system by software named keilc51, The whole of programmer is writed by asembeling language.keilc51 software makes my programmer easier and check work more convenient.
Key words: vending machine;MCU8751;8255A keyboard/display
绪 论
从自动售货机的发展趋势来看,它的出现是由于劳动密集型的产业构造向技术密集型社会转变的产物。大量生产、大量消费以及消费模式和销售环境的变化,要求出现新的流通渠道;而相对的超市、百货购物中心等新的流通渠道的产生,人工费用也不断上 从广义来讲投入硬币、纸币、信用卡等后便可以销售商品的机械,从狭义来讲就是自动销售商品的机械。从供给的条件看,自动售货机可以充分补充人力资源的不足,适应消费环境和消费模式的变化,24小时无人售货的系统可以更省力,运营时需要的资本少、面积小,有吸引人们购买好奇心的自身性能,可以很好地解决人工费用上升的问题等各项优点。
自动售货机是以单片机为核心的自动化控制装置,它集按键选择技术、单片机技术和显示技术于一体,具有功能强大、可靠性高、使用方便、维护简单等特点。因此,在商业、生活中得到了广泛的应用。有些自动售货机不仅能够自动识别1元、5角硬币,而且能够自动识别20元、10元、5元纸币,还会自动找零,人机对话的应用性提高使自动售货机在国内大面积普及成为可能。
随着科技的发展及人们生活水平的提高,自动售货机市场的发展越来越呈现出多元化及个性化的需求。通过自动售货机进行自助购物正逐渐成为市民的一种新的消费时尚,快捷方便的购物方式满足了人们在当今科技高速发展的现代社会追求高品质生活的需要。自动售货机在城市商业区、写字楼大厅、风景区、车站、码头、繁华街道等公共场所的布设能够美化亮化城市环境,方便群众生活,已经成为城市各角落的一道亮丽风景线。自动售货机必将在国内普及,并成为城市现代文明程度的一种象征性标志。
本文详细介绍了如何控制、要求进行自动售货机系统的方案设计、硬件选择、软件规划和编写,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧。
本文共分为五章。系统介绍了自动售货机系统从控制方案,操作逻辑到系统软件等各个环节的设计及系统调试的方法和原则。第一章简单介绍了自动售货机的
货机的系统软件程序设计及分析,第四章主要介绍了自动售货机的系统软件驱动程序实现
第一章,自动售货机的系统结构
1.1自动售货机的系统概述
自动售货机是集光、机、电一体化的独立机构,它只需要顾客投币和按购物键选择即可自动售货及退找零钱,其工作程序如下图1.1
图1.1 自动售货机工作时序图 售货机的工作原理是:
(1) 从投币口送入货币,然后通过传感器采集数据、识别器判断货币的真伪并
判别面值。
(2)识别器把信息数据传给通信模块。
(3)通信模块与售货机的主控系统通信,主控系统显示面值,启动售货机的面板键,显示出哪个货道有货,哪个货道已经售完,并等待顾客按键选择商品。
(4)顾客选择商品后,售货机自动把商品送出,等待顾客取走。
(5)显示余额,如果金额足够多,顾客可以选择找币或者继续买商品;如果款
器完成退纸币,另一种是由硬币的通信模块完成退硬币。
(6)系统复零,完成售货。
自动售货机的硬件原理构成如下图2.2所示
图1.2 自动售货机硬件结构图
综合所述,售货机系统可以分为三部分组成,即自动售货机的控制子系统、通讯子系统、硬币器子系统以及纸币器子系统。其中控制子系统是本设计研究重点。这些内容在下文中进一步介绍。
1.1.1自动售货过程的控制子系统简述
控制子系统由以下四个部分组成,分别是预设自动售货机系统、金额累计、可售指示和退币系统、售完检测系统、售出累计及自测功能系统。
1、预设自动售货机系统。自动售货机售出的同类商品可分为若干品种,其售前设定价格须预先寄存在控制系统内。售货机的价格设置由按键和存储器组成。通过按键选择被设价商品的种类及价格,并将价格写入存储器中,该存储器本身具有掉电保护功能,属于软件设置方式。此外,在简易售货机中,由于出售商品的种类少,价格变化下,使用币种单一,也可以用硬件设置价格,才用拨码开关对应方式,结构简单,操作方便。
2、金额累计、可售指示和退币系统。控制系统的核心CPU 对识币、退币、无货检验及购货信号进行循环检查,当有识币信号后,将金额数值送入金额累计存储器中进行累计,并通过串行接口使可售指示灯亮,提示购货。此时可以按下购货
等,则通过并行扩展接口驱动电磁阀或者微电机驱动出商品,并将金额累计存储器清零,完成一次售货过程,如累计金额大于预设价格时,驱动商品后,相减差额由信号驱动退币,实现退币和找钱功能。
3、售完检测系统。在自动售货机商品存储存道下方按照有接触行程开关,当存储存道有商品时,压下行程开关,自动售货机正常工作;当商品出售完毕时,行程开关被释放,向CPU 发出无货信号,经过检测通过串行扩展接口向相应的售完指示灯发出信号,使机身“售完”指示灯亮,此种商品自动停售,即使投币金额达到该道商品预设价格数值,可售按钮仍然无法启动信号,金额累计存储器也不清零。
4可检测各商品存储道的驱动商品功能。
1.1.2自动售货过程的通讯子系统简述
自动售卖系统的外围设备较为复杂,导致对主控制器的要求越来越高。为了简化设计,采用简单、稳定的内部通讯总线协议非常必要。有些公司采用欧洲售货机制造协会(EVMMA )制定的MDB/ICP总线协议。该协议简洁明了,功能强大,可扩展性强并且对外挂设备数目没有限制,是理想的自动售卖系统内部总线协议。
MDB/ICP协议是欧洲售货机制造协会制定的一套用于协调自动售货机的主控制器(MMC )与多个设外之间通讯的协议。
MDB 接口实际上是工作于波特率9600的主从型串行总线接口,所以外围设备(例如硬币器、纸币器等)均为主控制器(传统上称为售货机控制器——VMP )的从机。所有外围设备与主控制器之间的通讯方式都一致。
MDB 协议的串行位格式为:1个起始位,8个数据位,1个方式位和1个停止位,共11位。其中方式位根据传递的方式的不同置0或置1。在MDB 总线上,VMC 通过广播方式向外发送命令。第一字节为地址字节(实际上只有高5位寻址信息,低3位为对外设的指令),该字节被所有的外设读取,但只有符号地址字节所指
节的方式位被置1,数据字节的方式位被置0,外设通过检验接受到的方式位确定是地址指令还是数据。当数据从外设发送到主机时,最后送出的字节方式位被置1,标志着数据发送完毕。[10]
VMC 向外设发送的指令由一个字节、一些可选的数据字节一个校验和字节构成。发送指令后,外设应答VMC 的通信块可以由一个数据块和一个字节组成,或者一个应答字节,或者一个无应答字节。如果外设应答数据块的话,VMC 将通过一个应答字节、无应答字节或重发字节应答外设传回的数据。
1.2.1基本原理:货币识别器对所投货币进行识别,根据金额将商品选择权提供用户,用户选择后,控制芯片发出指令将所选择商品从储备料道中送达取物口。其功能描述:货物种类一共设有12种,这12种物品分别对应着12个不同的按键选择,其中1元,2元,3元价格不等的物品各4种;货币识别器能够识别1元,5元的货币,自动售货机能够实现货币累加功能。在规定的30秒中内,投了几次货币后,货币能够实现累加功能,这样机器就会把投入的货币总额数目输入中央控制元器件,进行处理;超过30秒后投币,投币无效,机器自动把钱全部退出来。如果累计投入的货币数目超过物品的预设价格,机器能够实现找钱功能;如果投入的货币没有达到所选择物品的预设价格时,投入的钱将全部退还;在投入一次累加货币后选择物品,如果投入的累加货币数目大大超过所选择物品的预设单个价格时,那么能够实现选择同一个物品购买多个,在本设计中设为可以同时购买2个或3个物品。
本设计中有一共有16个按键选择,其中12个是货物选择键,有2个是多选键(一次购买2个或3个货物),还有1个确定键和1个取消键。如果没有按照预先设计的流程顺序进行按键选择,自动售货机将启动报警系统,等待再次正确的按键选择。
在出货系统中设计了,显示购买货物的共花钱数。 在找零系统中设计了,显示找零的货币数。
采用单片机MSC-51系列中的8751作为中央控制元件; 用P3.4和P3.5作为识别货币输入端;
P1作为货物选择选择端(采用4*4行列式键盘做为选择货物端);
采用两个8255A 扩展并行I/O接口,实现掉出货物功能、显示功能、找钱功能; P2.7和P2.6分别作为8255A 的片选输入端。 1.2.3论文的内容及拟解决的问题
1、从投币口送入货币,然后经过传感器采集数据、识别器判别人民币的真伪
并判别面值。
2
3按键选择商品。
4、顾客选择商品后,售货机自动把商品送出,等待顾客取走。 5、金额足够多,售货机将自动找回钱。 6、系统复零,完成售货。
第二章.自动售货机的系统硬件电路设计
2.1自动售货机中央控制元件8751的介绍
在本次设计中,中央控制元件采用MCS-51系列单片机中的8751。 8751MCS-51单片机基本一样。
8751单片机内部结构:
8751单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。其中, 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
8751内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM 只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
图2.1 8751内部结构
MCS-51系列单片机中的8031、8051及8751均采用DIP 结构,上图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根, 8751共有4组8位I/O口(P0、 P1、P2或P3) ,用于对外部数据的传输。,4组8位共32个I/O口,中断口线与P3口线复用。[4]
2.2货币识别系统
货币识别分别有对硬币和纸币的识别,由此在下文中分别介绍说明:
1, 我国目前发行的1元、5角和1角硬币的金属原材料是为造币而专门使用的特殊合金,因此在它通过投币入口进入由电感和电容组成的特定高频振荡线路所产生的磁场时,金属材质和体积的体积的差别对电感量的影响大小也出现微弱差异,电感量的变化引起振荡频率的变化,与设定值进行比较,确定某种硬币后,经窄带选频电路将频率信号变为电压信号输出,完成对金属硬币的识别。金属硬币识别器种类繁多,但存币退币机构基本上分为两类:一类是平面是存币,电磁阀退币;另一类是圆筒式存币,步进机退币。当硬币投入后经过识别识别出电信号后,伪币和异物被排出真币按面值由几组分配电磁阀分配到不同存币腔体内备用。当收到退币找零电信号后,通过退币电磁阀或者退币电机拉杆,将存币腔内下部依电信号程序退出,完成自动售货机的退币找零功能。
波段,但不是单光谱,其中红外光成分达到90%以上,因此,光源辐射光中起主要作用的实际上是红外辐射。实验中对各种纸币的特征的识别也主要是根据纸币的表面特征对红外辐射的敏感。红外辐射是光辐射中的一种类型,它具有普通光辐射的共性。这主要是因为不同的纸币表面特征不同,所以在相同的光辐射下会呈现不同的反映,从而可以用来识别不同的纸币,具体地说,首先,钞票的纸张明图案有较大区别,所以,根据所述的光的辐射理论,也可以根据它们对相同光辐射的不同反映来判断起面值归属;再次,钞票流通过程中所造成的不同程度的污损,就会造成钞票表面特征的变化,接受光辐射的特性就是有所变化。因此,光辐射可以反映钞票的新旧程度;另外,相对于伪币的鉴别,因为伪币的纸张一般都无法满足真钞的纸张特性,而且,伪币中某些图案达不到钞票的实际标准,如水印是在造纸过程中通过特征工艺抄制上去的无色图案,而伪钞的水印则是通过一定方式轧印或描绘上去的等等,这都能在钞票对光辐射的接受信息中反映出来。但是光辐射在传输过程中,会受外界环境的影响而产生能量损失。比如经过大气传输时,就会受到大气成分的吸收,而在不同的环境条件下,大气的成分含量有某些程度的变化,因而导致能量损失的程度不同。所以光辐射到钞票介质的传输距离越短,所造成的能量损失的影响就越微小,如果硬件的性能较好,外界的这种影响可以不予考虑。本系统中光源采用发光二极管,所发出的光的波长峰值在红外波段,并且90%以上是红外线,但不是单光谱,还有其它光谱范围的光线。接受管使用NPN 型的光电三极管,工作在红外波长范围内,发射管和接受管分别有6个,采用光的透射方式,采集数据时,完全对应位于钞票的两侧。
作为整个货币识别系统的核心部分,纸币控制器必须由一颗功能相对较强的嵌入式微处理器以及一系列外围器件构成。
通过对各种微处理器的研究,考虑到开发成本,我们最终选用8751作为控制器的中央处理单元。该处理器在上一章中已经做了简单介绍。
8751拥有4个I/O口即P0、P1、P2、P3,它有两个可编程的定时器/计数器,分别称为定时器/计数器0和定时器/计数器1。它们都是16位加法计数结构,分
其主要功能是:处理器通过控制发光二极管发光,当纸币进入时,入口处发光二极光投射过纸币的光强变化,被相应入口处的光电三极管接受到后转换为电信号,传给8751处理器,经过判断,处理器直接控制。
由于时间的关系,识别货币器是如何设计、如何工作的,在这里将不做进一步的研究。本课题设计主要是研究自动售货机的选择货物、出货以及显示功能。
2.3货物选择系统
货物选择系统主要通过键盘操作来完成。键盘是人机交互中重要的输入装及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。[2]
对于一组键或一个键盘,总有一个接口电路与CPU 相连。CPU 可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC ,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。 键盘按键无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。
一个完善的键盘控制程序应具备以下功能:
(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。
(2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。
(3) 准确输出按键值(或键号),以满足跳转指令要求。
2.4出货及显示花钱数系统
身资源有限,并不能很好的满足系统的要求,明显需要实现并行接口的扩展,在本设计中采用了8255A 实现扩展并行I/O接口功能。
8255A是一个具有两个8位(A 口和B 口)和两个4位(C 口高/低4位)并行输出输入端口的接口芯片。
8255A、能。
8255A 能适应CPU 与I/O接口之间的多种数据传送控制方式要求,如无条件传送,应答方式传送和中断方式传送。
8255A 使用方式字控制字和置位/复位控制字因而执行功能很强。[1] 其内部结构如下:
图2.3 8255A 内部结构
图中A1、A0和RD 、WR 及CS 组合所实现的端口寻址及各种结构功能
第 13 页
表2.1 引脚功能
8255A 的工作方式有3种,在本设计中只是采用了方式0 方式0——基本的输入/输出方式
8255A 的PA 、PB 、PC7~4、P3~0可分别被定义为方式0输入或方式0输入。方式0输出具有锁存功能,输入没有锁存。方式0适用于无条件传输数据的设备,双方不需要握手信息,就可以使数据简单地写入或读出。如读一组开关的状态、控制一组指示灯的显示等。
本设计的显示用的是LED 显示器, 常用的LED 显示器有LED 状态显示器(俗称发光二极管)、LED 七段显示器(俗称数码管)和LED 十六段显示器。发光二极管可显示两种状态,用于系统状态显示;数码管用于数字显示;LED 十六段显示器用于字符显示。其中所说的静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。每个数码管的8个字段分别与一个8位I/O口地址相连,I/O口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O口输出新的段码。采用静态显示方式,较小的电流即可获得较高的亮度,且占用CPU 时间少,编程简单,显示便于监测和控制,但其占用的口线多,硬件电路复杂,成本高,只适合于显示位数较少的场合。[6]本设计的显示就是用的这种静态显示
2.5找钱及显示找钱数系统
在通过投币后,将会把产生的信号输入给8751的P3.4和P3.5的引脚上,其中P3.4控制货币的累加,P3.5控制投币的有效时间30秒。再经过8751处理后,将会在找钱输出端产生与其相对应的信号输出,控制所选钱币的掉出,实现找钱功能。
接口紧张,而8751自身资源有限,将采用了8255A 实现扩展并行I/O接口功能。
在上一节中已经详细介绍了8255A 及其控制的LED 显示,在本节中要实现的找钱、显示找钱数与出货系统的设计原理基本一致,在这里就不加以介绍了。
2.6出错报警系统简述
在本设计中,只有在按键选错的情况下,导致系统无法正常处理,才会出现报警现象。当出现错误的时候,8751将会控制8255A 的PC 端输出信号,再通过光电耦合,这样来驱动一个扬声器工作,实现报警功能。
第三章.自动售货机的系统软件程序设计
3.1自动售货机货币识别系统程序流程图
图3.1 识别货币系统驱动程序流程图
3.2自动售货机货物选择系统的程序流程图
货物处理子程序的流程图如下:
图3.2 按键选择程序流程图
图3.3 1元钱货物处理子程序流程图
3.3自动售货机出货,显示花钱数系统流程图
本设计设置了价格分别为1元、2元、3元不等的货物,一共12种。在通过按键选择物品后,将会把产生的信号输入给8255A 的P1的引脚上,8255接收信号后,经过处理后,将会在货物输出端产生与其相对应的信号输出,控制所选货物的掉出。
图3.4出货及显示的功能驱动程序流程图
3.4自动售货机找钱,显示找钱数系统流程图
本设计用8255A 的PA 控制找钱,用PB 控制LED 显示找钱数, 其中能够找钱货币的面值为1元、2元、5元。PA0控制1元,PA1控制2元,PA2控制2元,PA3控制5元。
图3.5找钱及显示功能驱动程序流程图
由找钱系统1图(图见附录)我们可以看到该芯片8255A 的CS 与8751的P2.6相连,A0、A1分别与74LS373的3Q 、4Q 相连。
当的3Q 、4Q 输出不同组合时,则控制选择了8255A 的PA 、PB 、PC 口,当取00时对应PA 口输入输出,当取01时对应PB 口输入输出,当取10时对应PC 口输入输出;由于也受到P2.6的控制,只有当P2.6输出为0时,才能片选到该芯片8255A 。
最后我们可以计算得出PA 、PB 、PC 及控制口对应的地址分别为BFF3H 、BFF7H 、BFFBH 、和BFFFH 。
3.5出错报警系统流程图
图3.6报警功能驱动程序流程图
由找钱系统1图(图见附录)我们可以看到该芯片8255A 的CS 与8751的P2.6相连,A0、A1分别与74LS373的3Q 、4Q 相连。这个已经在上一章中已经说过了,在这里就不再画了。
当的3Q 、4Q 输出不同组合时,则控制选择了8255A 的PA 、PB 、PC 口,当取10时对应PC 口输入输出;由于也受到P2.6的控制,只有当P2.6输出为0时,才能片选到该芯片8255A 。
最后我们可以计算得出PA 、PB 、PC 及控制口对应的地址分别为BFF3H 、BFF7H 、BFFBH 、和BFFFH 。
第四章.系统软、硬件设计实现
4.1驱动程序
由于时间关系,本次毕业设计的仿真结果就不再这里做详细的介绍了,现列出各软件的驱动程序如下:
4.1.1实现有效投币定时30秒以及累加计数程序:
MONEY MOV IE, #8AH MOV TMOD,#04H 作方式0
MOV TH0,#00H MOV TL0,#00H MOV TH1,#9EH MOV TL1,#58H SETB TR0 SETB TR1
; 启动计数器 ; 启动定时器
; 置计数初值
; 置计数初值
; 设置T1为定时工作方式0,T0为计数工
MOV R0,#601
LOOP1:
DJNZ R0,T1_END MOV A,P3 JBC
LP1:
ACC.5,LP1
TF1,NEXT
; 查询计数溢出
; 循环600次,实现30秒计时
JBC
SJMP LP1
NEXT:
MOV TH1,#9EH MOV TL1,#58H JMP
T1_END:
LOOP1
; 重新设置计数初值
MOV R1,TL0
; 将投入的货币累加数存入MONEY
MOV MONEY ,R1
MOV TL0,A MOV TH0,A RET
4.1.2货物选择系统的驱动程序 VULE EQU
40H
MOV A,MONEY MOV B,A SJMP KEY
KEY:
MOV R2,#0FEH
; 设置键码寄存器 ;
ANL
MOV CPL A ; 取反
ANL
JZ
A,#0F0H
; 屏蔽回扫值低4位
; 无键闭合,返回
KEY3
LCALL D10MS ; 延时10ms 去抖动 MOV R3,#04H ; 设置扫描行数 ORL P1,#0FH4 ; 位描行线全置高 KEY1: MOV P1,R2 ; 逐行扫描键盘
MOV A,P1 ; 读入状态值 CPL A ; 取反 ANL
A,#0F0H ; 屏蔽状态低4位
; 有键闭合,转键处理
JNZ KEY2
MOV A,R1 ; 无键闭合,继续扫描下一个按键 RL A MOV R2,A
DJNZ R 3,KEY1 ; 逐行扫描未完成,继续 LJMP K EY3 ; 本轮扫描无键闭合,返回
; 键处理
; 左移扫描码,指向下一行扫描线
KEY2: MOV A,P1
ANL CPL
A,R2
A
; 取反,特征字节变换成键位码 ; 保存键位码
MOV VULE,A
LCALL KEYPCS ; 用查表法查找键码
WAIT: ANL P1,#0F0H ; 判断键释放否? MOV A,P1 ANL A,#0F0H CPL JNZ RET
KET3: MOV VULE,#0FFH RET 查找键码子程序如下: KEYPCS: MOV R4,#10H MOV
; 查找键码程序,社子按键码(16个按键)
; 清除键码计数器
; 无键闭合,置无效码
A WAIT
R4,#00H
MOV DPTR,#KEYTAB ; 设置键码表首址 KEYP1: CLR A
MOVC A,@A+DPTR CJNE
MOV
; 查表
A,VULE ,KEYP2; 未找到,转到下一个 VULE,R5
; 找到键位码,键码装入键码寄存器VULE
MOV
RET KEYP2: INC R5
; 键码计数器加1
; 键码表地址加1 ; 未查完16个按键,继续 ; 无键闭合,置无效码
INC DPTR
DJNZ R4,KEYP1
MOV VULE,#0FFH RET KEYTAB
: DB 11H ; 键码 = 00H 对应键‘0’
DB 41H ; 键码 = 00H 对应键‘2’ DB 81H ; 键码 = 00H 对应键‘3’ DB 12H ; 键码 = 00H 对应键‘4’ DB 22H ; 键码 = 00H 对应键‘5’ DB 42H ; 键码 = 00H 对应键‘6’ DB 82H ; 键码 = 00H 对应键‘7’ DB 14H ; 键码 = 00H 对应键‘8’ DB 24H ; 键码 = 00H 对应键‘9’ DB 44H ; 键码 = 00H 对应键‘A ’ DB 84H ; 键码 = 00H 对应键‘B ’ DB 18H ; 键码 = 00H 对应键‘C ’ DB ; D ’ DB E ’ DB 88H ; 键码 = 00H 对应键‘F ’
MOV A,R5 MOV
R6,A
; 将选物按键码存入R6中
ANL R0,#00H ;R0清零 ANL R1,#00H
;R1清零
***********************************选
择1元钱A***********************************
CJNE A,#00H,NEXTB ; 判断是否按下键‘0’
JMP
1YUAN
***********************************选择1元钱B*********************************** NEXTB:
CJNE A,#01H,NEXTC
; 判断是否按下键‘1’
JMP
1YUAN
***********************************选择1元钱C***********************************
货货货物
物
物
的的的
1YUAN
JMP
***********************************D*********************************** NEXTD: 1YUAN:
CJNE A,#03H,NEXTE MOV A,B
选择1元钱的货物
; 判断是否按下键‘3’
; 将投入的货币累加数存入寄存器B ; 1元钱 CJNE A,#01H,NEXTA1 MOV R0,#01H
LOOPA1:LCALL
KEY
MOV A,R5
CJNE A,#0FH,NEXTA2 LJMP OUTGOODS
NEXTA2:CJNE A,#0EH,VOICEA1
MOV A,B JMP
; 按下取消键
; 按下确定键, 所选货物掉出
; 退还全部的钱
OUTMONEY
; 选择按下其他键,报警
; 返回,等到有键按下
; 投入的货币数小于所选择商品的预设价格 ; 钱全部退还
VOICEA1:LCALL VOICE
JMP
LOOPA1 NEXTA3
NEXTA1:JNC
JMP
OUTMONEY KEY
NEXTA3:LCALL ; 等待是否有键按下
MOV A,R5
CJNE A,#0CH,NEXTA4 MOV A,B
CJNZ A,#02H,NEXTA5 MOV R0,#02H
LOOPA2:LCALL
KEY
; 判断投入的货币数是否为2元 ; 将选择的货物数量值存入R0 ; 等待是否有键按下
; 选择一次性购买2个货物
MOV A,R5
CJNE A,#0FH,NEXTA6 LJMP OUTGOODS
; 按下确定键, 所选货物掉出
MOV A,B JMP
; 退还全部的钱
OUTMONEY
; 选择按下其他键,报警
; 返回, 等到有键按下
; 投入的货币数小于所选货物的预设价格 ; 钱全部退还
VOICEA2:LCALL VOICE
JMP
LOOPA2 NEXTA7
NEXTA5:JNC
JMP
OUTMONEY KEY
NEXTA7:LCALL ; 等待是否有键按下
MOV A,R5
CJNE A,#0FH,NEXTA8 MOV A,B SUBB A,#02H MOV MOV
; 按下确定键, 所选货物掉出
; 找钱
; 所选货物掉出
LCALL OUTMONEY JMP
OUTGOODS
NEXTA8:CJNE A,#0EH,VOICEA3
MOV A,B JMP
; 退还全部的钱
OUTMONEY
; 选择按下其他键,报警
; 返回,等到有键按
VOICEA3:LCALL VOICE
JMP
NEXTA7
NEXTA4:CJNE A,#0DH,NEXTA9
MOV A,B
; 选择一次性购买3个货物
CJNE A,#03H,NEXTA10 MOV R0,#03H
LOOPA3:LCALL
KEY
; 判断投入的货币数是否为3元 ; 将选择的货物数量值存入R0 ; 等待是否有键按下
MOV A,R5
CJNE A,#0FH,NEXTA11 LJMP OUTGOODS
; 按下确定键, 所选货物掉出
MOV A,B JMP
; 退还全部的钱
OUTMONEY
; 选择按下其他键,报警
; 返回,等到有键按下
VOICEA4:LCALL VOICE
JMP
LOOPA3
NEXTA10:JNC NEXTA12
JMP
; 投入的货币数小于所选货物的预设价格
NEXTA12:LCALL MOV A,R5
;
CJNE A,#0FH,NEXTA13 MOV A,B SUBB A,#03H MOV R0,#03H MOV R1,A
; 按下确定键, 所选货物掉出
; 将选择的货物数量值存入R0
; 将找钱数存入R1
; 找钱
; 所选货物掉出
LCALL OUTMONEY JMP
OUTGOODS
NEXTA13:CJNE A ,#0EH,VOICEA5
MOV A,B JMP
; 退还全部的钱
OUTMONEY
; 选择按下其他键,报警 ; 返回,等到有键按 ; 等待是否有键按下
VOICEA5:LCALL VOICE
JMP
NEXTA12 KEY
NEXTA9:LCALL
MOV A,R5
CJNE A,#0FH,NEXTA14 MOV A,B SUBB A,#01H MOV R0,#01H MOV R1,A
; 将选择的货物数量值存入R0 ; 按下确定键, 所选货物掉出
; 将找钱数存入R1
; 找钱
LCALL OUTMONEY
NEXTA14:CJNE A ,#0EH,VOICEA6
MOV A,B JMP
; 退还全部的钱
OUTMONEY
; 选择按下其他键,报警
; 返回,等到有键按下
VOICEA6:LCALL VOICE
JMP
NEXTA9
***************************************出错报警
***************************************
NEXYM:LCALL
JMP
VOICE KEY
; 报警
4.1.3报警系统的驱动程序 VOICE:
MOV MOV
; ; 将方式控制字写入8255A 控制口,PC 输
MOVX @DPTR,A 出
MOVX @DPTR,#BFFBH MOV A,#01H MOVX @DPTR,A 警功能
LCALL D10MS ANL
A,#00H
;PC 口地址送数据指针
;PC0引脚输出一个高电平‘1’,实现报
; 延时10ms
; 报警取消
MOVX @DPTR,A RET
D10MS: DL: DL6:
MOV R7,#0AH MOV R6,#0FFH DJNZ R6,DL6 DJNZ R7,DL RET
; 延时10ms 的驱动程序
第五章 结束语
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础
经过这几个月的学习、研究以及*老师的细心指导. 终于按时完成了毕业设计. 本文采用MSC-51件来设计自动售货机的控制器,实现了能根据计量投入货币的累加大小、选择12种不同的货物、可以同时购买2个或3个、显示花钱数以及找钱数的功能;显示数值直接通过8255A 的PB 输出。本文系统设计简便、实用性强、操作简单、程序设计简便。由于时间等多方面的原因,本次毕业设计的仿真结果没有在论文中做详细具体的介绍,此后我将会继续研究力求更加圆满地完成此次设计。
这次的毕业设计是我学生生涯最后一次也是非常难得的一次理论与实际相结合的机会,我摆脱了单纯的理论知识学习状态,理论知识和实际设计的结合锻炼了我的综合运用所学专业基础知识的能力,同时也提高我查阅文献资料、设计规范以及电脑制图等其他专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,丰富了实践经验,并且意志力,抗压能力及耐力也都得到了不同程度的提升。这将会是我踏入社会进入工作岗位后的一笔宝贵的财富!
参考文献
[1]胡汉才 .单片机原理及其接口技术 [M]. 北京:清华大学出版,1996. [2]付家才 .单片机控制工程实践技术[M]. 北京:化学工业出版社,2004.5. [3]潘新民 .微型计算机控制技术 [M].北京:人民邮电出版社,1999.9.
[4]余锡存 曹国华. 单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7. [5]雷丽文 等. 微机原理与接口技术[M].北京:电子工业出版社,1997.2.
[6]谢自美 . 电子线路设计、实验、测试 [M].北京:人民邮电出版社,1999.9. [7]阎石. 数子电子技术第四版[M]. 北京:化学工业出版社,2004.5. [8]丁嘉种. 可编程逻辑器件[M].北京:电子工业出版社,1997.2. [9]黄正瑾. 在线编程技术[M]. 1996.
[10]. 年S1期.
致 谢
经过几个月的奋战,今天终于顺利地完成了毕业设计。论文得以完成,首先要感谢**老师,因为毕业设计与论文都是在*老师的悉心指导下完成的。*老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。本论文从选题到完成,每一步都是倾注了他大量的心血。虽然在此次毕业设计中我遇到了很多困难,但是这些困难都在*老师的耐心讲解和共同探讨下迎刃而解。他那种不言放弃的精神一直在鼓励着我。
同时,论文的顺利完成,离不开其它各位同学和朋友的关心和帮助。在整个的毕业篇论文。
我衷心的感谢**老师及诸位老师的审查,指导以及支持。在未来的工作和学习中,我将以更好的成绩来回报各位领导和老师。
附 录
货币识别系统电路图
货物选择系统按键设计电路图
出货系统电路图1
出货系统电路图 2
找钱系统1
找钱系统电路图2
报警系统电路图
修改意见:
(2) 第三、四、五、六、七、八章的内容应归结到“系统硬件电路设计”和“系统软
件程序设计”两章中。第三章的内容在“系统硬件电路设计”一章的开头用一节加以介绍。“系统硬件电路设计”一章首先分别介绍各子系统的设计,最后给出系统总体电路图。“系统软件程序设计”一章中,对应前面叙述的各硬件子系统给出其实现程序流程图,并对程序的实现加以介绍,具体程序可放到附录部分; (3) 在系统硬件电路设计”一章中“设计方案论证”部分应列表给出系统主要性能参
数的预期指标;
(4) 应加写“系统软、硬件仿真”一章,仿真完后列表给出系统各项性能参数的仿真
结果;
(5) “结束语”部分应说明你已完成的工作、完成的情况,未完成的后续工作等;附
录里应加上自动售货机的整体电路图;
(6) 参考文献数量太少,至少应在10篇以上,并且在文中要注明对所有参考文献的
引用。