版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要………………2Aastract…………………………3一、自动售货机的系统结构……………………41.1自动售货机的总体系统结构………………41.2自动售货过程的控制子系统简述…………5二、自动售货机的功能介绍……………………62.1此次设计的自动售货机的功能简介………62.2实现自动售货机的功能的设计思路………7三、硬件接口电路………………73.1中央控制元件简介…………83.2投币及投币总数LCD显示系统…………9投币系统…………………9货币累加的实现……………10LCD显示…………………103.3货物选择系统………………14独立式键盘按键的识别……………………14键盘的编码…………………14货物选择系统的程序流程图………………143.4出货系统……………………24出货功能的描叙…………24出货程序流程图…………243.5找钱系统……………………25找钱系统的描述……………25程序流程图…………………25四、设计仿真……………………264.1Proteus简介…………………264.2仿真电路……………………26附录………………33参考文献…………………………48致谢………………49摘要本文详细介绍了自动售货机系统的方案设计、硬件选择、软件规划和编写,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原那么和技巧。该系统以单片机AT89C51芯片为核心,采用集中控制方式实现了对自动售货机全过程的自动控制。本系统选择独立式键盘按键作为货物选择端,实现了投币总数的显示功能。此外,系统程序采用keil软件进行程序的编写和编译,该软件具有编程简单、查错方便、阅读容易等特点。汇编语言是程序的根本语言,具有容易理解,便于记忆和使用等特点。关键词:自动售货机,AT89C51,LCD显示TheVendingMachineDesignBasedOnMCUAbstrctThispaperdescribesavendingmachinesystemdesign,hardwareselection,softwareplanningandpreparation,anddescribesthefocusoftheworkvendingmachinesystemtheory,systemdesign,softwareprogrammingprinciplesandtechniques.AT89C51Keywords:VendingMachines,AT89C51,LCDDisplay一、自动售货机的系统结构1.1自动售货机的总体系统结构自动售货机是集光、机、电一体化的独立机构,它只需要顾客投币和按购物键选择即可自动售货及退找零钱,其工作程序如下列图1.1售货机的工作原理是:从投币口送入货币,然后通过传感器采集数据、识别器判断货币的真伪并判别面值。〔2〕识别器把信息数据传给通信模块。〔3〕通信模块与售货机的主控系统通信,主控系统显示面值,启动售货机的面板键,显示出哪个货道有货,哪个货道已经售完,并等待顾客按键选择商品。〔4〕顾客选择商品后,售货机自动把商品送出,等待顾客取走。〔5〕显示余额,如果金额足够多,顾客可以选择找币或者继续买商品;如果款额不够,售货机经过延时予以退币。退币分为两种情况:一种是由货币识别器完成退纸币,另一种是由硬币的通信模块完成退硬币。〔6〕系统复零,完成售货。自动售货机的硬件原理构成如下列图2.2所示综合所述,售货机系统可以分为三局部组成,即自动售货机的控制子系统、通讯子系统、硬币器子系统以及纸币器子系统。其中控制子系统是本设计研究重点。1.2自动售货过程的控制子系统简述控制子系统由以下四个局部组成,分别是预设自动售货机系统、金额累计、可售指示和退币系统、售完检测系统、售出累计及自测功能系统。1、预设自动售货机系统。自动售货机售出的同类商品可分为假设干品种,其售前设定价格须预先存放在控制系统内。售货机的价格设置由按键和存储器组成。通过按键选择被设价商品的种类及价格,并将价格写入存储器中,该存储器本身具有掉电保护功能,属于软件设置方式。此外,在简易售货机中,由于出售商品的种类少,价格变化下,使用币种单一,也可以用硬件设置价格,才用拨码开关对应方式,结构简单,操作方便。2、金额累计、可售指示和退币系统。控制系统的核心CPU对识币、退币、无货检验及购货信号进行循环检查,当有识币信号后,将金额数值送入金额累计存储器中进行累计,并通过串行接口使可售指示灯亮,提示购货。此时可以按下购货按钮,由于 CPU检测到有购货信号后,如金额累计器中的数值与预设价格相等,那么通过并行扩展接口驱动电磁阀或者微电机驱动出商品,并将金额累计存储器清零,完成一次售货过程,如累计金额大于预设价格时,驱动商品后,相减差额由信号驱动退币,实现退币和找钱功能。3、售完检测系统。在自动售货机商品存储存道下方按照有接触行程开关,当存储存道有商品时,压下行程开关,自动售货机正常工作;当商品出售完毕时,行程开关被释放,向CPU发出无货信号,经过检测通过串行扩展接口向相应的售完指示灯发出信号,使机身“售完〞指示灯亮,此种商品自动停售,即使投币金额到达该道商品预设价格数值,可售按钮仍然无法启动信号,金额累计存储器也不清零。4、自动售货机售出累计及自测功能系统。该机CPU在每次售出商品后,向售出累计存储器中累计售出数据,通过自动售货机内部的按键可在金额显示窗口中读到累计结果。此外,在按下自测功能键后,出现自测功能信号,由外部按键操作,可检测各商品存储道的驱动商品功能。二、自动售货机的功能介绍2.1此次设计的自动售货机的功能简介根本原理:货币识别器对所投货币进行识别,根据金额将商品选择权提供用户,用户选择后,控制芯片发出指令将所选择商品从储藏料道中送达取物口。其功能描述:货物种类一共设有3种,这3种物品分别对应着3个不同的按键选择,其中2元,3元,4元价格不等的物品各1种;自动售货机能够投币总数LCD显示功能。如果累计投入的货币数目超过物品的预设价格,机器能够实现找钱功能;如果投入的货币没有到达所选择物品的预设价格时,投入的钱将全部退还;在投入一次累加货币后选择物品,如果投入的累加货币数目大大超过所选择物品的预设单个价格时,那么能够实现选择同一个物品购置多个,在本设计中设为可以同时购置2个或3个物品。本设计中有一共有7个按键选择,其中3个是货物选择键,有2个是多项选择键〔一次购置2个或3个货物〕,还有1个确定键和1个取消键。如果没有按照预先设计的流程顺序进行按键选择,自动售货机将会自动返回操作前的状态,等待再次正确的按键选择。自动售货机的原理框图如图1.2所示2.2实现自动售货机的功能的设计思路采用单片机89C51作为中央控制元件;用P3.4(XO)口作为识别货币输入端;P1口作为货物选择选择端〔采用独立式键盘做为选择货物端〕;采用P0口实现掉出货物功能、找零功能;三、硬件接口电路图3.0硬件接口电路如图3.0所示,本次设计的自动售货机系统包括以下几个局部:中央控制元件89C51、投币及投币总数LCD显示系统、货物选择系统、出货系统、找钱系统。3.1中央控制元件简介在本次设计中,中央控制元件采用MCS-51系列单片机中的89C51。如图3.1图3.189C51引脚图1.主要特性:与MCS-51兼容;4K字节可编程闪烁存储器;寿命:1000写/擦循环;数据保存时间:10年;全静态工作:0Hz-24Hz;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式片内振荡器和时钟电路2.管脚说明: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.0RXD〔串行输入口〕P3.1TXD〔串行输出口〕P3.2/INT0〔外部中断0〕P3.3/INT1〔外部中断1〕P3.4T0〔记时器0外部输入〕P3.5T1〔记时器1外部输入〕P3.6/WR〔外部数据存储器写选通〕P3.7/RD〔外部数据存储器读选通〕P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,那么在此期间外部程序存储器〔0000H-FFFFH〕,不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源〔VPP〕。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.2投币及投币总数LCD显示系统投币系统投币系统是自动售货设计当中比拟重要的一块,涉及到货币识别系统,对于识别货币器是如何设计、如何工作的,在这里将不做进一步的研究。本课题设计主要是要实现自动售货机的投币总数显示、货物选择、出货以及找零功能。在本次设计中用P3.4上的一个按键来代替投币系统的电平输出。在投币系统中可以通过89C51内部的定时器来控制投币时间,在规定的时间范围内完成投币动作,否那么投入的货币全部退出。由于本次设计主要是要表达从投币到操作最后到出货的过程,在设计中没有用到定时设置。货币累加的实现本次设计的货币累加是对判断P3.4上的按键上所按下的次数进行累加来实现的,并将累加的次数送到存放器B,然后系统根据投币的总数和相应的操作来实现输出。LCD显示本次设计选用TC1602液晶显示屏,可以直接跟51系列单片接口相连。液晶模块TC1602采用标准的16脚接口,其引脚功能如下第1脚:VSS为电源地,接GND。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器比照度调整端,接正电源时比照度最弱,接地电源时比照度最高,比照度过高时会产生“鬼影〞,使用时可以通过一个10K的电位器调整比照度。第4脚:RS为存放器选择,高电平时选择数据存放器、低电平时选择指令存放器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。第15脚:BLA背光电源正极(+5V)输入引脚。第16脚:BLK背光电源负极,接GND。TC1602液晶模块内带标准字库,内部的字符发生存储器〔CGROM〕已经存储了192个5×7点阵字符,32个5×10点阵字符。另外还有字符生成RAM〔CGRAM〕512字节,供用户自定义字符。如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母“A〞的代码是01000001B〔41H〕,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A〞。1602液晶模块内部的控制器共有11条控制指令指令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:读数据1602液晶的读写时序如下图:读操作时序:写操作时序:投币总数LCD显示相关程序程序如下:MONEYEQU0040H;定义投币显示存储单元RSEQUP3.0RWEQUP3.1EEQUP3.2MAIN:MOVMONEY,#01H;赋予MONEY单元初值为1START:ACALLDELAY;调用延时程序MOVP2,#01H;写指令01H,清屏LCALLENABLEMOVP2,#38H;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口LCALLENABLEMOVP2,#0FH;写指令0FH,显示ON,光标ON,闪烁ONLCALLENABLEMOVP2,#06H;写指令06H,光标输入方式增量移位LCALLENABLEMOVP2,#80H;第一行起始字符地址LCALLENABLEMOVDPTR,#TABLE;显示字符表头地址LCALLDISP;显示第一行数据RET;返回ENABLE:CLRRS;写指令子程序CLRRWCLRELCALLDELAYSETBERETDISP:MOVR4,#6;准备显示一行6个字符LOOP1:MOVA,00H;投币数送AMOVR1,MONEYL1:ADDA,#06H;设置偏移量为6DJNZR1,L1MOVCA,@A+DPTR;查表取得要显示的数据LCALLDISPF;写入一个数据INCDPTR;数据表指针加1,准备取下一个数据DJNZR4,LOOP1;一行没有显示完就继续JMPINSERTDISPF:MOVP2,A;写1字节数据到显示端口SETBRS;写数据时序(请参照1602LCD使用说明书)CLRRWCLRELCALLDELAYSETBERETTABLE:DB"0YUAN"DB"0YUAN"DB"1YUAN"DB"2YUAN"DB"3YUAN"DB"4YUAN"DB"5YUAN"DB"6YUAN"DB"7YUAN"DB"8YUAN"DB"9YUAN"DB"10YUAN"DB"11YUAN"DB"12YUAN"DB"13YUAN"DB"14YUAN"DB"15YUAN"3.3货物选择系统按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。由于本次设计只需要七个按键即可满足设计要求,所以采用独立式键盘,这样对键盘识别的编程也比拟简单。3.3.1独立式按键的识别很简单,如图3.0所示,当某个键按下时,相应的接口会出现低电平,无键按下时那么为高电平,由此就可以判断出哪个键有按下。3.3.将P1.0~P1.6上的按键编码为00H、01H、02H、03H、04H、05H、06H,按键所对应的功能见表3.1表3.1按键功能表按键号对应的功能00H选择2元钱货物A01H选择3元钱货物B02H选择4元钱货物C03H对选择的货物买2个04H对选择的货物买3个05H对选择的货物再次确定06H对选择的货物取消货物选择系统的程序流程图:3.4出货系统出货功能的描叙本设计中,设置了价格分别为2元、3元、4元不等的货物,一共3种。在通过按键选择物品后,将会把产生的信号输入给89C51的P1的引脚上,89C本次设计用P1.0~P1.2作为货物的输出端,在货物的输出端采用光电隔离技术,对于光电隔离技术这里不做介绍,在这里用一个LED指示灯代替货物的掉出情况,假设有货物掉出那么对应输出口为高电平,那么指示灯亮,反之指示灯不亮。由于这里P0口作通用的I/O口输出,所以必须接上拉电阻,如图3.0所示。出货程序流程图图3.5出货程序流程3.5找钱系统找钱系统的描述本次设计中采用P1.3~P1.6口作为找零输出口,P1.3~P1.6分别对应1元找零口、2元找零口、2元找零口、5元找零口。这样设计的目的是方便实现不同数额的找零输出。同出货系统一样,找钱系统也用LED指示灯来表示找零,对应的端口上假设指示灯亮那么表示有零钱掉出。程序流程图图3.6找钱程序流程图四、设计仿真4.1Proteus简介Proteus嵌入式系统仿真与开发平台是英国Labcenter公司开发的,是目前世界上最先进、最完整的嵌入式系统设计与仿真平台。它是一种可视化的支持多种型号单片机〔如51、PIC、AVR、Motorolahcll等〕,并且支持与当前流行的单片机开发环境〔Keil、MPLAB、IAR〕连接调试的软硬件仿真系统。Proteus除了具有和其他EDA工具一样的原理图、PCB自动或人工布线及电路仿真功能外,针对微控制系统与外设的混合电路的电路仿真、软件仿真、系统协同仿真也做到了一体化和互动效果,是目前电子设计爱好者广泛使用的电子线路设计与仿真软件Proteus和Multisim功能的联合和进一步开展。Proteus软件已有近20年的历史,在全球拥有庞大的企业用户群,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原型时就可对系统进行设计、测试与验证。由于Proteus软件包括逼真的协同仿真功能,得到了包括剑桥大学在内的众多大学用户作为电子学或嵌入式系统的课程教学、实验和水平考试平台。目前,Proteus在国内单片机开发者及单片机爱好者之中已开始普及,有很多开发者已经开始用此开发环境进行仿真。4.2仿真电路用Keil软件仿真的结果如下图:图Keil仿真假设投入5元钱货币,操作依次为按2元货物选择键、确定键,那么在proteus里的仿真结果如下列图所示:附录本次设计的完整程序MONEYEQU0040H;定义投币显示存储单元RSEQUP3.0RWEQUP3.1EEQUP3.2**************投币总数LCD显示程序*************MAIN:MOVMONEY,#01H;赋予MONEY单元初值为1START:ACALLDELAY;调用延时程序MOVP2,#01H;写指令01H,清屏LCALLENABLEMOVP2,#38H;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口LCALLENABLEMOVP2,#0FH;写指令0FH,显示ON,光标ON,闪烁ONLCALLENABLEMOVP2,#06H;写指令06H,光标输入方式增量移位LCALLENABLEMOVP2,#80H;第一行起始字符地址LCALLENABLEMOVDPTR,#TABLE;显示字符表头地址LCALLDISP;显示第一行数据RET;返回ENABLE:CLRRS;写指令子程序CLRRWCLRELCALLDELAYSETBERETDISP:MOVR4,#6;准备显示一行6个字符LOOP1:MOVA,00H;投币数送AMOVR1,MONEYL1:ADDA,#06H;设置偏移量为6DJNZR1,L1MOVCA,@A+DPTR;查表取得要显示的数据LCALLDISPF;写入一个数据INCDPTR;数据表指针加1,准备取下一个数据DJNZR4,LOOP1;一行没有显示完就继续JMPINSERTDISPF:MOVP2,A;写1字节数据到显示端口SETBRS;写数据时序(请参照1602LCD使用说明书)CLRRWCLRELCALLDELAYSETBERETTABLE:DB"0YUAN"DB"0YUAN"DB"1YUAN"DB"2YUAN"DB"3YUAN"DB"4YUAN"DB"5YUAN"DB"6YUAN"DB"7YUAN"DB"8YUAN"DB"9YUAN"DB"10YUAN"DB"11YUAN"DB"12YUAN"DB"13YUAN"DB"14YUAN"DB"15YUAN"****************投币口程序***************INSERT:MOVA,P3;投币口检测CPLAJBCACC.4,S1;P3口有键按下转S1LCALLKEYMOVA,R5CJNEA,#0FFH,CHECK;货物选择键盘有键按下转CHECK程序AJMPINSERTS1:LCALLD10MS;延时消抖MOVA,P3CPLAJBCACC.4,S2S2:MOVR1,MONEYINCR1MOVMONEY,R1WAIT1:MOVA,P3CPLAJBCACC.4,WAIT1投币开关未松开继续等待,否那么返回STARTAJMPSTART;返回****************键盘程序*****************KEY:MOVA,P1;读P1口CPLAJNZKEY2;A不等零说明有键按下转KEY2MOVR5,#0FFHRETKEY2:LCALLD10MS;延时消抖MOVA,P1CPLAJNZKEY3MOVR5,#0FFHRETKEY3:JNBACC.0,K1MOVR5,#00HLCALLWAITRETK1:JNBACC.1,K2MOVR5,#01HLCALLWAITRETK2:JNBACC.2,K3MOVR5,#02HLCALLWAITRETK3:JNBACC.3,K4MOVR5,#03HLCALLWAITRETK4:JNBACC.4,K5MOVR5,#04HLCALLWAITRETK5:JNBACC.5,K6MOVR5,#05HLCALLWAITRETK6:MOVR5,#06HLCALLWAITRETWAIT:MOVA,P1CPLAJNZWAITRET***************货物选择程序****************CHECK:MOVA,R5MOVR6,AMOVA,MONEYDECA;因为之前给MONEY的初值是1,所以计算投币总数时应该减去1MOVB,A;将投币总数送入BMOVA,R6CJNE A,#00H,NEXTB ;判断是否按下键'0'LJMP TWOYUANNEXTB: CJNE A,#01H,NEXTC ;判断是否按下键'1'LJMP THREEYUANNEXTC:CJNE A,#02H,NEXTD1 ;判断是否按下键'2'LJMP FOURYUANNEXTD1:MOVA,B;按其他键时退币LCALLOUTMONEYJMPMAINTWOYUAN:MOV A,B ;将投入的货币累加数存入存放器BCJNE A,#02H,NEXTE1 ;判断投入的货币数是否为2元钱MOV R0,#01H ;选择的货物数为1个LOOPE1:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESS2SJMPLOOPE1PRESS2:CJNE A,#05H,NEXTE2 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTE2:CJNE A,#06H,BACKE1 ;按下取消键MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKE1:JMPLOOPE1 ;选择其他键时返回,等到有键按下NEXTE1:JNC NEXTE3 ;投入的货币数小于所选择商品的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTE3:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESS3SJMPNEXTE3PRESS3:CJNE A,#03H,NEXTE4 ;选择一次性购置2个货物MOV A,BCJNE A,#04H,NEXTE5 ;判断投入的货币数是否为4元MOV R0,#02H ;将选择的货物数量值存入R0LOOPE2:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESS4SJMPLOOPE2PRESS4:CJNE A,#05H,NEXTE6 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTE6:CJNE A,#06H,BACKE2MOV A,B ;退还全部的钱LCALL OUTMONEYJMPMAIN;返回,等待下一次投币BACKE2:JMP LOOPE2 ;选择其他键时返回,等到有键按下NEXTE5:JNC NEXTE7 ;投入的货币数小于所选货物的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTE7:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESS5SJMPNEXTE7PRESS5:CJNE A,#05H,NEXTE8 ;按下确定键,所选货物掉出MOV A,BSUBB A,#04HMOV R0,#02H ;将选择的货物数量值存入R0LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTE8:CJNE A,#06H,BACKE3MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKE3:JMP NEXTE7 ;选择其他键时返回,等到有键按NEXTE4:CJNE A,#04H,NEXTE9 ;选择一次性购置3个货物MOV A,BCJNE A,#06H,NEXTE10 ;判断投入的货币数是否为6元MOV R0,#03H ;将选择的货物数量值存入R0LOOPE3:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESS6SJMPLOOPE3PRESS6:CJNE A,#05H,NEXTE11 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTE11:CJNE A,#06H,BACKE4MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKE4:JMP LOOPE3 ;选择按下其他键返回,等到有键按下NEXTE10:JNC NEXTE12 ;投入的货币数小于所选货物的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTE12:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESS7SJMPNEXTE12PRESS7:CJNE A,#05H,NEXTE13 ;按下确定键,所选货物掉出MOV A,BSUBB A,#06HMOV R0,#03H ;将选择的货物数量值存入R0LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTE13:CJNE A,#06H,BACKE5;按下取消键MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKE5:JMP NEXTE12 ;选择按其他键时返回,等到有键按NEXTE9:CJNE A,#05H,NEXTE14 ;按下确定键,所选货物掉出MOV A,BSUBB A,#02HMOV R0,#01H ;将选择的货物数量值存入R0MOV R1,A ;将找钱数存入R1LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTE14:CJNE A,#06H,BACKE6 MOV A,B ;退还全部的钱LCALLOUTMONEY JMPMAIN;返回,等待下一次投币BACKE6:JMP NEXTE9 THREEYUAN:MOV A,B ;将投入的货币累加数存入存放器BCJNE A,#03H,NEXTF1 ;判断投入的货币数是否为3元钱MOV R0,#01H ;选择的货物数为1个LOOPF1:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSB1SJMPLOOPF1PRESSB1:CJNE A,#05H,NEXTF2 ;按下确定键,所选货物掉出LCALLOUTGOODS JMPMAIN;返回,等待下一次投币NEXTF2:CJNE A,#06H,BACKF1 ;按下取消键MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKF1:JMP LOOPF1 ;选择按下其他键返回,等到有键按下NEXTF1:JNC NEXTF3 ;投入的货币数小于所选择商品的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTF3:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSB2SJMPNEXTF3PRESSB2:CJNE A,#03H,NEXTF4 ;选择一次性购置2个货物MOV A,BCJNE A,#06H,NEXTF5 ;判断投入的货币数是否为6元MOV R0,#02H ;将选择的货物数量值存入R0LOOPF2:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSB3SJMPLOOPF2PRESSB3:CJNE A,#05H,NEXTF6 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTF6:CJNE A,#06H,BACKF2;按下取消键MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKF2:JMP LOOPF2 ;选择按下其他键返回,等到有键按下NEXTF5:JNC NEXTF7 ;投入的货币数小于所选货物的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTF7:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSB4SJMPNEXTF7PRESSB4:CJNE A,#05H,NEXTF8 ;按下确定键,所选货物掉出MOV A,BSUBB A,#06HMOV R0,#02H ;将选择的货物数量值存入R0LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTF8:CJNE A,#06H,VOICEF3MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币VOICEF3:JMP NEXTF7 ;选择按下其他键返回,等到有键按NEXTF4:CJNE A,#04H,NEXTF9 ;选择一次性购置3个货物MOV A,BCJNE A,#09H,NEXTF10 ;判断投入的货币数是否为9元MOV R0,#03H ;将选择的货物数量值存入R0LOOPF3:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSB5SJMPLOOPF3PRESSB5:CJNE A,#05H,NEXTF11 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTF11:CJNE A,#06H,BACKF4MOV A,B LCALL OUTMONEY;退还全部的钱 JMPMAIN;返回,等待下一次投币BACKF4:JMP LOOPF3 ;选择按下其他键返回,等到有键按下NEXTF10:JNC NEXTF12 ;投入的货币数小于所选货物的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTF12:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSB6SJMPNEXTF12PRESSB6:CJNE A,#05H,NEXTF13 ;按下确定键,所选货物掉出MOV A,BSUBB A,#09HMOV R0,#03H ;将选择的货物数量值存入R0LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTF13:CJNE A,#06H,BACKF5MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKF5:JMP NEXTF12 ;选择按下其他键返回,等到有键按NEXTF9:CJNE A,#05H,NEXTF14 ;按下确定键,所选货物掉出MOV A,BSUBB A,#03HMOV R0,#01H ;将选择的货物数量值存入R0MOV R1,A ;将找钱数存入R1LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTF14:CJNE A,#06H,BACKF6 MOV A,B LCALL OUTMONEY;退还全部的钱 JMPMAIN;返回,等待下一次投币BACKF6:JMP NEXTF9 ;选择按下其他键返回,等到有键按下FOURYUAN:MOV A,B ;将投入的货币累加数存入存放器BCJNE A,#04H,NEXTG1 ;判断投入的货币数是否为4元钱MOV R0,#01H ;选择的货物数为1个LOOPG1:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSC1SJMPLOOPG1PRESSC1:CJNE A,#05H,NEXTG2 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTG2:CJNE A,#06H,BACKG1 ;按下取消键MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKG1:JMP LOOPG1 ;选择按下其他键返回,等到有键按下NEXTG1:JNC NEXTG3 ;投入的货币数小于所选择商品的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTG3:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSC2SJMPNEXTG3PRESSC2:CJNE A,#03H,NEXTG4 ;选择一次性购置2个货物MOV A,BCJNE A,#08H,NEXTG5 ;判断投入的货币数是否为8元MOV R0,#02H ;将选择的货物数量值存入R0LOOPG2:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSC3SJMPLOOPG2PRESSC3:CJNE A,#05H,NEXTG6 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTG6:CJNE A,#06H,BACKG2;按下取消键MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKG2:JMP LOOPG2 ;选择按下其他键返回,等到有键按下NEXTG5:JNC NEXTG7 ;投入的货币数小于所选货物的预设价格LCALL OUTMONEY ;钱全部退还 JMPMAIN;返回,等待下一次投币NEXTG7:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSC4SJMPNEXTG7PRESSC4:CJNE A,#05H,NEXTG8 ;按下确定键,所选货物掉出MOV A,BSUBB A,#08HMOV R0,#02H ;将选择的货物数量值存入R0LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出 JMPMAIN;返回,等待下一次投币NEXTG8:CJNE A,#06H,BACKG3MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAIN;返回,等待下一次投币BACKG3:JMP NEXTG7 ;选择按下其他键返回,等到有键按NEXTG4:CJNE A,#04H,NEXTG9 ;选择一次性购置3个货物MOV A,BCJNE A,#0CH,NEXTG10 ;判断投入的货币数是否为12元MOV R0,#03H ;将选择的货物数量值存入R0LOOPG3:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSC5SJMPLOOPG3PRESSC5:CJNE A,#05H,NEXTG11 ;按下确定键,所选货物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投币NEXTG11:CJNE A,#06H,BACKG4MOV A,B ;退还全部的钱LCALL OUTMONEYJMPMAIN;返回,等待下一次投币BACKG4:JMP LOOPG3 ;选择按下其他键返回,等到有键按下NEXTG10:JNC NEXTG12 ;投入的货币数小于所选货物的预设价格LCALL OUTMONEY ;钱全部退还JMPMAIN;返回,等待下一次投币NEXTG12:LCALL KEY ;等待是否有键按下MOV A,R5CJNEA,#0FFH,PRESSC6SJMPNEXTG12PRESSC6:CJNE A,#05H,NEXTG13 ;按下确定键,所选货物掉出MOV A,BSUBB A,#0CHMOV R0,#03H ;将选择的货物数量值存入R0LCALL OUTMONEY ;找钱LCALL OUTGOODS ;所选货物掉出JMPMAIN;返回,等待下一次投币NEXTG13:CJNE A,#06H,BACKG5MOV A,B ;退还全部的钱LCALL OUTMONEY JMPMAI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论