搜档网
当前位置:搜档网 › 基于FPGA自动售货机

基于FPGA自动售货机

基于FPGA自动售货机
基于FPGA自动售货机

摘要

本课题是基于Verilog HDL语言的小型自动售货机。采用Verilog HDL在ModelsimSE6.2B软件平台进行编译和仿真。在此次设计中,主要采用有限状态机(FSM)的设计,在投币选货状态和找零状态在这两个状态间进行转移。从而实现货物的选择、货币运算、出货控制、余额显示以及找零等功能。该售货机系统能够识别两种硬币,两种纸币。有五种不同价格的商品可供选择,并且通过显示译码电路,可在LED显示器显示余额,同时具备找零、机器存有硬币不足LED 亮起报警、缺货LED亮起报警等功能。现代的自动售货机有使用方便快捷,可以全天候24小时工作,占地少,成本低,维护简单等优点,有着广阔的前景。采用FPGA方式用Verilog HDL硬件描述语言,设计简易的自动售货机,其编程简单,开发周期短,硬件运行速度快,开发成本低,稳定性高等优点。

关键词:自动售货机; Verilog HDL;有限状态机;Modelsim;

ABSTRACT

This topic design a simple vending machine is based on the FPGA chip. EP2C35 chip, and DE2 development board for the hardware platform, the use of Verilog HDL to compile and simulation in the Quartus Ⅱ software platform, and through the DE2 development achieve the basic functions of a Si mple vending machine.board by to download code to the chip. In this design,it used of finite state machine (FSM) design, choice of goods state, shipment status and give change coin state in the three inter-state transfer, in order to achieve the choice of goods, monetary operations, the cargo control, features such as display and give change. The vending machine system to identify three kinds of coins, there are five kinds of goods at different prices to choose from, and by showing decoding circuit, in DE2 onboard LED display shows the balance, both functions give change. Modern vending machines are convenient, it can work 24 hours a day, covers an area of small, low cost, simple maintenance, there are broad prospects. Manner with the use of FPGA hardware description language Verilog HDL, design simple vending machine, the programming is simple, short development cycles, fast hardware, the development of low cost, high stability.

Key words: vending machines; Verilog HDL; Finite state machine; FPGA; DE2 development board;

目录

绪论..............................................................1 第一章系统方案设计...............................................3

1.1 人机交换界面设计..........................................3

1.2 系统方案设计..............................................4

1.2.1 系统方案确定..........................................5 第二章系统各模块硬件设计.........................................7

2.1 DE2开发板介绍.............................................7

2.2 自动售货机各模块设计.....................................8

2.2.1 自动售货机主体设计...................................8

2.2.2 LED显示设计方案.....................................9

2.2.3 货币输入信号设计方案................................10

2.2.4 出货显示设计方案....................................11 第三章系统的软件设计............................................12

3.1 EDA工具软件介绍.........................................13

3.2 软件设计总方案...........................................14

3.3 售货机主芯片程序设计方案................................15

3.4 BCD-LED七段数码显示译码器...............................17

3.5 硬币输入信号程序设计方案................................18

3.6 出货显示程序设计方案....................................19

3.7 自动售货机各部分组合连接设计............................20 第四章调试及仿真...............................................21

4.1 用Quartus Ⅱ完成PFGA设计步骤...........................21

4.2 自动售货机波形仿真结果..................................21

4.2.1 自动售货机波形仿真..................................21

4.2.2 输入信号处理程序波形仿真............................23

4.2.3 BCD-LED七段数码显示译码器波形仿真..................23

4.2.4 出货显示译码器波形仿真..............................24

4.2.5 自动售货机主芯片程序仿真波形.......................25

4.3 下载、仿真及测试..........................................25 结论..............................................................26 致谢.............................................................27 参考文献..........................................................28 附录1(程序源代码)...............................................29 附录2(整体设计原理图)...........................................35

绪论

自动售货机最早出现在二十世纪五、六十年代的西欧,英国是较早实行自动售货机售货的国家之一。1942年,在食品销售中首先推广了自动售货的销售方式。1950年,英国食品杂货行有500家采用自动售货机售货。1969年,采用自动售货机售货的商家增加到23000家,销售的商品扩展到文化用品、唱片、香烟、食品等多个方面。进入70年代后,约有40多万家香烟、饮料店采用自动售货机。1980年英国有50余万台自动售货机,年销售额达8.81亿英镑。70年代后,日本、美欧等发达国家和地区自动售货机迅猛的发展,短短30年,发达国家自动售货机产业已发展到相当大规模。自动售货机被广泛地布放于车站、油站、码头、机场、宾馆、写字楼、娱乐场所及大街小巷和公路旁,人们通过自动售货机可以买到食品、香烟、饮料、报纸、票、卡甚至鲜花和小宠物等物品。自动售货机实现了商品需求化、性能多样化的发展,又原来只能有限商品品种,转变为继百货公司、超级市场、便民店之后,以消费者与售货机“一对一”自动售货的无店铺销售业态。

目前自动售货机是集声、光、机电一体化的高新智能化产品,在我国也开始得到应用。在中国人们可以看到现代化的自动售货机摆放在一些大商场门口、繁华街道两旁、公园入口处以及其它热闹的场所。自动售货机的新奇、文明、高档、昼夜服务、占地小、灵活方便深受许多地区市民的青睐,甚至出现许多排队购买的现象。专辑测算,中国的自动售货机在市场容量最保守算应该有四十七万台,一年的销售额可达三百五十亿元若按人均台数计算全年可达五百亿,自动售货机在日本达到平均每二三十人一台,在美国达到每四十人一台,在欧洲每六十人一台,由于中国经济与上述国家还有一定差距,按每五百人一台计算。因此,自动售货机在中国有着广阔的发展前景。

现在,自动售货机产业正在走向信息化并进一步实现合理化。例如实行联机方式,通过电话线路将自动售货机内的库存信息及时地传送各营业点的电脑中,从而确保了商品的发送、补充以及商品选定的顺利进行。并且,为防止地球暖化,自动售货机的开发致力于能源的节省,节能型清凉饮料自动售货机成为该行业的主流。在夏季电力消费高峰时,这种机型的自动售货机即使在关掉冷却器的状况下也能保持低温,与以往的自动售货机相比,它能够节约15%的电力。进入21世纪时,自动售货机也将进一步向节省资源和能源以及高功能化的方向发展。

自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。一般的自动售货机由钱币装置、指示装置、贮藏售货装置等组成。钱币装置是售货机的核心,其主要功能是确认投入钱币的真伪,分选钱币的种类,计算金额。如果投入的金额达到购买物品的数值即发出售货信号,并找出余钱。指示装置用以指示顾客所选商品的品种。贮藏售货装置保存商品,接收出售指示

信号,把顾客选择的商品送至付货口。一般售货机的钱币装置由投币口、选别装置、确认钱币真伪的检查装置、计算金额的计算装置和找钱装置组成。70年代以来,出现了采用微型计算机控制的各种新型自动售货机和利用信用卡代替钱币并与计算机连接的更大规模的无人售货系统,如无人自选商场、车站的自动售票和检票系统、银行的现金自动支付机等。

近年来,随着电子系统设计自动化(EDA)和超大规模可编程逻辑器件和快速发展,硬件描述语言(HDL)这一新型电子系统开发工具正在迅速普及,是计算机设计和编程人员和电子器件厂商都寻找的一种工具,是芯片设计人员和生产伙伴之间建立沟通和交换数据的桥梁。已经是从事EDA电子工程师必须掌握的工具。

HDL使得电路的编程和设计者能够自由表述电路的特征,它可以描述和仿真电子元件的特性,这些电子元件的规模可以从单个门电路直到一块完整的多层印刷的电路板。HDL的主要操纵对象是高速集成电路和现场可编程门阵列(FPGA)。HDL的仿真功能使设计者在产品投入大规模生产前可以分别测试各个元件及其之间的连接,用仿真的方式完成以前必须设计和建造好的样机才能进行的电子电路特性的说明和调试,并可以仿真器上测试所设计的电路功能是否正确。从而在芯片和器件的复杂性不断以惊人的速度增长的同时降低系统开发的成本和时间。

本课题中需要实现至少3种不同价格货物的买卖操作。要用3个拨动开关表示3种硬币,用5个键表示5种不同价格的商品。投入货币后用数码管显示钱数。买东西时,先按物品键,再投入硬币,若成交,用数码管显示物品输出。若输入余额大于所选物品的价格,退回多余的钱,若少于物品的价格,则退钱。在这次设计中,已实现上述功能,并且能够下载到DE2开发板上进行仿真。

下面的论述中,第一章介绍系统的方案设计,包括人机交换界面的设计,系统方案设计和系统的方案的确定,还有系统方案的总体设计原理图。第二章介绍系统各模块硬件设计,包括DE2开发板的介绍和各个硬件部分设计的介绍。包括自动售货机的主芯片、余额显示译码器、输入处理芯片和出货显示译码器,以及他们的设计原理图。第三章介绍软件系统设计,各个部分软件设计原理及过程。包括主程序,显示译码器程序,输入处理程序和显示译码程序以及他们的原理图。第四章介绍了编译调试过程以及各部分的调试波形,并对波形进行了分析。最后是结论、致谢、参考文献和附录。

第一章系统方案设计

1.1 人机交换界面设计

人机交换界面图,对人机交换的按键一目了然。这次设计中,用到DE2开发板作为设计平台,它的界面比较大众化,所有的按键显示都是放在一起,但有了这个界面图结合下面的介绍,很容易就可以了解这个自动售货机的操作步骤以及使用方法。

图1.1 自动售货机人机交换界面简图

首先,确定可以对5种不同种类的货物进行自动售货,价格分别为A=1.00,B=1.50,C=1.80,D=3.10,E=5.00。当A、B、C、D、E五种货物输出时,为了在DE2开发板上能够显示出来,识别方便,加一个译码器,如果货物A出货时,通过译码器,在LED显示器上显示数字1。同理B、C、D、E分别显示2、3、4、5。其次,自动售货机选择可以接受一元、五角、一角三种硬币(即有三种输入信号IY代表投入一元,WJ代表投入五角,YJ 代表投入一角)。这三种货币的输入在DE2开发板上分别用三个开关来表示,当每次来回拨动一次开关,就代表投一次硬币,及相应的面额的硬币加1。用2个4位7段LED(高位代表元、低位代表角)显示投入的总钱数,

最大输入金额是9.90元。如果大于该金额输出信号为overflow,代表最后投入的硬币会退出。选择货物的输入信号IA,IB,IC,ID,IE和一个放弃信号IN,放弃信号是将余额找出来。输出信号元找零和角找零。同时还有一个R复位信号。如图1.1所示,人机交换界面图简图。

在操作时候,先按复位键,是将里面的各个输入输出口以及寄存器全部清零。其次选择货物,再投币,当投的金额等于货物的价格的时候,出货,同时LED显示器上上面的金额清零。当大于货物的价格时候,出货同时,显示剩余的金额。如果按找零开关,找零,LED显示清零。当金额大于9.9元时,把最后一次投币退出来。

1.2 系统方案设计

要实现自动售货机的功能,如果只靠一个芯片一个程序是很难完成系统的设计,所以自动售货机系统有4个部分组成。

自动售货机的主芯片。主要实现自动售货机的基本功能。它可以选择5种不同的货物,当选择货物后,进入投币状态,投入硬币后,系统会自动记录下所所投入硬币的金额,并且将投入的硬币的余额以BCD码的形式输出,当金额大于9.9元的时候,系统会自动将最后一次投入的货币输出;输出信号为overflow。当上面的金额等于货物的价格的时候,系统会自动出货,五种货物与之相对应的有五个输出管脚,当出货时,高电平有效;当金额大于货物的价格时候,系统出货,并且进行找零,当金额小于货物的价格的时候,系统会等待着再次投币。如果有IN找零信号输入,直接进入找零状态。

输入信号处理芯片。输入信号的时候,每次输入信号高电平的周期不能正好是一个clk脉冲信号的周期,所以要设计一个信号处理程序。在输入货币和找零信号的时候,无论产生高电平的时间的多长,都会产生一个和clk周期相同的高电平。

BCD-LED七段数码显示译码器。自动售货机主芯片产生的是BCD码,BCD 码不方便的识别,所以要用这个芯片,来处理BCD码的信号,使之变成能够识别的数字信号。

出货显示译码器。在出货的时候,由于采用DE2开发板,主频过高,达到50MHz,人的肉眼根本无法识别信号的变化,我们需要设计一个出货显示译码器,当出货物A,B,C,D,E的时候,在LED显示器上就相应的产生1、2、3、4、5的数字,这样就可以轻松的看到是那种货物出来了。

将这四个部分有机的组合起来,就可以实现自动售货机的功能,如图1.2所示。

图1.2 系统方案原理图

1.2.1 系统方案确定

自动售货机的主芯片程序主要采用有限状态机(FSM),在选择货物状态,投币出货状态和找零状态这个3个状态间进行跳转,来实现自动售货机的基本功能。选择货物状态主要是货物的选择的处理等功能,如果在选择货物之前投硬币,系统进入货币找零状态,就将货币退出来,否则就停留在这个状态。如果先选择货物,系统会自动进入投币出货的状态,否则停留在这个状态。投币出货状态主要是对投入货币运算和出货控制处理等功能。如果余额大于9.9元的时候,系统会把最后一次投入的硬币找出来。如果余额大于所选货物的价格,系统会自动出货并且进入找零状态,把剩余的零钱找出来。如果余额等于所选货物的价格,系统会自动出货,并且把余额清零。当余额小于所选货物的价格,系统会停留在这个状态。如果发现有找零信号输入的时候,系统进入找零状态。找零状态主要是对零钱进行找零功能。当每次clk脉冲来临时候,如果上面的余额不为零,系统会自动减一。这样反复进行,直到上面的余额为零。

输入的信号的处理,使它不能误判货币的投入次数,采用判断是否有上升沿,以确定投币的次数,当出现几次上升沿,就代表几次投币,这样来防止货币投入次数误判。

静态LED七段数码显示译码器,把BCD码识别成人可以识别的数字,显示数字0-9,用于表示元和角单位上的余额。

出货显示译码器,显示1-5五个数字,分别代表货物的名称。这样组成一个完整的简易自动售货机。能够实现识别3种的硬币,有5种商品可以选择,找零和余额显示功能。同时在DE2开发板板上进行仿真。以更为直观的方式展现自动售货机的操作过程。

第二章系统各模块硬件设计

2.1 DE2开发板介绍

本课题采用EP2C35芯片及DE2开发板。数字电子领域中三种基本的器件类型为存储器,微处理器和逻辑器件。存储器是用来存储数据表,数据库,程序代码等随机信息。微处理器通过执行软件指令来完成如文字处理,视频处理及工业控制等各种任务;逻辑器件提供器件间的接口,数据通信,信号处理,数据显示,时序和控制操作以及系统运行等各种特定功能。而逻辑器件又可以分为两大类。即固定逻辑器件和可编程逻辑器件。

目前,电子产品的生命周期越来越短,许多消费类电子产品的生命周期只有一年左右的时间,因此必须缩短产品的开发周期。可编程逻辑器件和固定逻辑器件相比,可大大缩短产品的开发周期,而随着集成电路制造工艺的进步,可编程逻辑器件的设计水平不断提高,其成本已经降低到可以在消费类电子产品中大量使用的程度。从当前技术发展的趋势来看,可编程逻辑器件将逐渐取代大部分的秃顶逻辑器件。

软核处理器的出现以及可编程逻辑器件的片上存储器容量的增大,使得可编程逻辑器件已经可以覆盖数字电子领域的中的所有应用。Altera公司推出的可编程芯片系统(system on a programmable chip,SOPC)以及Nios II软核处理器进一步明确了这种概念。Altera公司与2000年发布了Nios软核处理器该处理器是一款RISC处理器,是世界第一款专为可编程逻辑优化的可配置处理器。NiosⅡ处理器的最新版本NiosⅡ处理器是没欠使用得最为管饭的软核处理器。

DE2开发平台是Altera公司针对大学及研究机构推出的一款多媒体开发平台。美国最大的wright-patterson空军研发基地公开评论Altera DE2(包括硬件,软件,教学文件)为有史以来最好的一款多媒体FPGA开发板卡。目前,全球众多名校(如密西根大学安埃布尔分校,麻省理工学院,乔治亚理工学院,滑铁卢大学及多伦多大学等)都将Altera DE2平台大批用于数字逻辑,微处理器及多媒体嵌入式系统教学众多大厂也都以DE2为平台来从事IC设计,国内已有150多所大学在使用de2平台。

DE2平台作为一个非常优秀的FPGA设计平台,具有强大的多媒体特性,能够应用在多门课程的教学中,这些课程设计包括“数字逻辑设计”、“数字电路”、“数字信号处理”、“微机原理”、“计算机组成原理”、“数字图像处理”、“SOPC 技术”等。

这此次设计采用的Cyclone Ⅱ系列的FPGA中的EP2C35,Cyclone Ⅱ系列是继Cyclone系列低成本的FPGA在市场上去的成功之后,Altera公司推出的更低成本的FPGA,它将成本FPGA的密度扩展到了68416个逻辑单元,从而可以在

低成本FPGA上实现复杂的数字系统。Cyclone Ⅱ系列FPGA采用90nm工艺,与竞争对手采用的90nm工艺的FPGA相比,其性能高出60%而功耗减低一半,而其价格则几乎可以与ASIC产品竞争。优异的性价比使Cyclone Ⅱ系类的FPGA可以广泛的应用与汽车电子、消费电子、音/视频处理、通信以及测试测量等终端产品市场。

2.2 自动售货机各模块设计

2.2.1 自动售货机主体设计

自动售货机主要利用有限状态机(Finite State Machine,FSM),自

动售货机工作的时候,在不同的状态跳转,从而实现其功能。

方案一:以余额数目为状态,当每次投币的时候,根据余额数目跳到相应的状态,这个状态下,进行相应的进行找零,出货物等操作。用case 语句语句来描述各个状态之间转移关系。parameter 参数定义相应的一些状态,D代表不同时刻不同状态,在系统复位后机器后开始运行,每一次出售货物的过程中由D记录其状态,表示已经投入钱币的变化。有限的状态机从本质上讲是有寄存器和组合逻辑构成时序电路,各个状态之间的转移总是在时钟的触发下进行的,也可以在设计时将时序逻辑部分和组合逻辑部分分在两个“always”过程块中进行描述,这样以减少一些不必要的寄存器。这种设计方案思路简单,容易看懂。但是,由于设计时候,投入的钱币数量多,所以相应的状态就多,从而增加了源代码所占用的空间,使得源代码不够简练精干。

方案二:这个方案是采用很少的状态完成自动售货机的工作,可以将它分成选择货物的状态,投币出货的状态和找零的状态这三种状态。这三种状态的情况下,可以完成系统的基本工作,如图2.1所示。

这个方案,用case语句来选择控制各个状态的改变,选择货物状态是开始状态,等待买家选择货物,如果买家没有选择货物也没有投币时,则在这个状态自跳转,如果买家选择了货物,即(Ia || Ib || Ic || Id || Ie)=1时,状态会跳入投币出货的状态,要是买家先投币,即(IY || IWJ || IYJ)=1时,投出来的钱币会进入找零的状态,把投入的钱币退出来。

投币出货状态。买家先要进行投币,每次投得相应的面额。硬币的金额都会自动记录下来,相当于一个计数器,同时将已经投的货币的总金额在LED显示器上显示出来。当金额等于货物的价格,即count = price时,会自动出货。系统自动跳到选择货物状态。LED上显示为零,如果金额大于货物的价格的时候,即count>price时,出货,并且自动跳到找零的状态,把多余的零钱找出来。当再投币金额大于9.9元的时候,系统会自动把最后一次投的钱币找出来,当买家按找零开关的时,即IN=1时,系统

也会自动跳到找零的状态,把多余的零钱找出来,当金额小于货物的价格的时候,系统会自跳,保持在这个状态,等待货币再次投入,直到投入的金额大于或等于货物的金额。

找零状态。这个部分相当于一个减法计数器,当元的单位上不等于0的时候,在每个clk上升沿来临的时候,元单位上就自动减一,直至为0,每减少一次就在元找零输出上输出一次高电平,同样也适用于在角单位上。当他们都为0,即count=0时,代表找零结束,回到货物选择状态。

图2.1 方案2有限状态机状态图

这种方法状态简单,但思路要清晰明确,设计简单,编程的源代码不需要占用大量的空间,程序精干简约。易于看懂。故本课题选择第二种设计方案。

2.2.2 LED显示设计方案

LED显示就是把BCD码变成LED显示出来能够被人能识别的数字,LED显示在通常情况下分为动态显示和静态显示,它们各自有各自的优点。

方案一:动态显示。如图2.3所示,动态显示是应用非常常见的显示模式,主要在单片机上应用,动态显示主要利用人眼的视觉暂留,只要延时时间足够短,就能够使得数码的显示看起来非常的稳定清楚。这种方法应用在很多地方,大部分的电子器件的现实设备都是采用动态显示,由于刷新频率高,人眼几乎不能分辨出它在闪烁,由于频率在变,不是一直供电,

所以功耗会降低很多,但与静态的LED现实比起来,亮度不够。当Verilog HDL设计显示器时,采用动态显示的源代码设计就比较繁琐,需要设计状态机。给设计带来一定的工作量。

方案二:静态显示。静态显示和动态显示正好相反,它一直亮着,所以亮度高、功耗相对高。同时在用Verilog HDL设计的时候,非常简单,所以采用静态显示来做LED的现实方案。

图2.2 动态显示原理图

图2.3 静态显示原理图

如图2.2是动态显示原理图,下面的两条线是控制LED数码管工作与否的显示,当要求左面那个数码管显示的时候,连接左面数码管的控制线设置为有效,右面的数码管连接线设置为无效,左面的LED数码管就会显示相应的数字,同理要求右边的数码管显示,右边的控制线设置有效。输入的数据和控制线同时变化。

如图2.3所示,是静态显示原理图,代码直接传送给LED数码管,直接在上面显示相应的数据。这样编程设计简单,容易实现,易于理解。2.2.3 货币输入信号设计方案

在设计自动售货机的过程中,投币是采用电平触发的方式,为了防止系统错误是认为多次投币,造成误差。需要设计一个货币投入输入信号的处理,使之无论投币产生电平的时间多长,只产生一个和clk信号周期一样的高电平。

clk

in

out

图2.4 投币输入信号处理理想波形图

如图2.4,采用clk 上升沿触发的方式,在clk 是上升沿时,在判断是in 高电平时,是则

out 就产生一个和clk 一个周期的高电平。 2.2.4 出货显示设计方案

由于使用DE2的开发板,当出货时,用LED 数码显示器显示何种货物输出,就需要一个译码器,产生可以识别的数字。如出货物A 、B 、C 、D 、E ,就在LED 数码显示器上,对应显示1、2、3、4、5,如图2.5所示。

货物 货物

货物 货物

货物

图2.5 出货显示译码器原理图

第三章系统的软件设计

3.1 EDA工具软件介绍

EDA(Electronic Design Automation)是电子设计自动化缩写,是90年代初从CAD(计算机辅助设计).CAM(计算机辅助制造).CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL.原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。

基于EDA工具的FPGA开发流程:

1.文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将

设计者的设计意图用文本或图形方式表达出来。

2.编译。完成设计描述后即可通过编译器进行排错编译,变成特定的文

本格式,为下一步的综合做准备。

3.综合。这是将软件设计与硬件的可实现性挂钩,是将软件转化为硬件

电路的关键步骤。综合后HDL综合器可生成ENIF.XNF或VHDL等格式的网表文件,从门级开始描述了最基本的门电路结构。

4.适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一

具体的目标器件进行逻辑映射操作,其中包括底层器件配置。逻辑分割。逻辑优化。布局布线。该操作完成后,EDA软件将产生针对此项设计的适配报告和JED下载文件等多项结果。适配报告指明了芯片内资源的分配与利用。引脚锁定。设计的布尔方程描述情况。

5.功能仿真和时序仿真。该不仿真实接近真实器件运行的方针,仿真过

程已将器件的硬件特性考虑进去了,因此仿真精度要高的多。

6.下载。如果以上的所有过程都没有发现问题,就可以将适配器产生的

下载文件通过FPGA/CPLD下载电缆载入目标芯片FPGA或CPLD中。

7.硬件仿真与测试。

Quartus II软件可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,

可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。

3.2 软件设计总方案

自动售货机主要利用有限状态机(FSM)的状态改变来进行工作,所以需要编写一个实现自动售货机的基本功能的一个主程序,并且封装成一个芯片的符号,但是要想在DE2板子上能够实现,还需要一些其他的程序,并且封装成芯片的符号,用原理图方式连接后,来辅助完成自动售货机的功能。

主程序输出的是BCD码,当需要LED数码管显示出能够识别的数字的时候,需要BCD码—LED七段数码显示译码器。

在判断拨动开关的时候,电平输入的时间很长,但是由于clk脉冲信号很快,这样就会在一个电平输入的时候,系统会误判投入很多次货币,避免这样的问题,我们还需要加上key一个这样的程序,无论拨动开关拨动后,停留的时间有多长,只产生和clk脉冲周期一样的高电平。

由于clk脉冲信号很快,输出货物的时候,产生一个脉冲,但是clk 的脉冲高达50MHz,人眼根本无法识别。所以加上一个译码器,让它显示数字,代表出了何种货物

如图3.1 系统设计总原理图设计方案

3.3 售货机主芯片程序设计方案

图3.2 自动售货机主芯片程序流程图

如图3.2自动售货机主芯片流程图,程序开始后,先将各个寄存器清零数据初始化。进入货物选择状态,判断是否选择了货物,如果没有选择货物,返回货物选择状态。如果选择了货物,进入投币出货状态。如果先投入了货币,直接进入找零状态,否则返回货物选择状态;在进入投币出货状态时,余额大于或等于商品的价格时出货。判断是否要找钱,如果是则进入找钱状态,否则返回投币出货状态;进入找零状态,判断零钱是否都找完,如果找完进入选择货物状态,否则返回找零状态。

在程序设计的时候,在程序的开始把各个寄存器都清零,数据初始化。

采用always过程语句,always @( posedge clk ) 在clk上升沿触发,

在每次上升沿来临时,就执行一次begin到end之间的程序,这样适合用来状态机在各个状态的循环。同时,需要设计一个复位键,使在复位后,各个寄存器都清零,这样在程序启动后,在取完一次货物后,按复位键,又能使各个状态都恢复到初始状态。

在开始的状态(即start)选择货物的状态下,当先投币的时候,应该把投入的钱退出来。所以就需要有设置两个条件语句,当选择货物时,进入process(即投币找零状态)状态。当如果投币的时候,则进入change (即找零状态)。当选择货物的时候用if( Ia || Ib || Ic || Id || Ie )和如果投币则用else if( IY || IWJ || IYJ )这样就可以把他们选择货物和投入钱币分开,||是逻辑或的意思,再选择货物后,就进入将相应货物的价格放到一个寄存器price上,同时出货物的状态也给product这个寄存器上。如果选择了货物,就再下个process状态。如果输入了货币,寄存器count就相应加上货币的面额,直接跳到找零change状态上,进行找零。

case( state )

start: begin

count = 0; next = start; product = 0;

if( Ia || Ib || Ic || Id || Ie )

begin if( Ia ) begin price = a; product = 5'b00001; end

else if( Ib ) begin price = b; product = 5'b00010; end

else if( Ic ) begin price = c; product = 5'b00100; end

else if( Id ) begin price = d; product = 5'b01000; end

else( Ie ) begin price = e; product = 5'b10000; end

next = process;

end

else i f( IY || IWJ || IYJ )

begin if( IY ) count[7:4] = 1;

else if( IWJ ) count[3:0] = 5;

else ( IYJ ) count[3:0] = 1;

next = change;

end

end

当进入process状态时,首先要判断是否有货币投入,如果有货币投入,则记录下投币的金额。如投入一元,再count[7:4]加1,count[7:4]代表以元为单位进行计数,如果投入五角count[4:0]加1,count[4:0]如果超过9,count[4:0]就加6,count[7:4]加1,当投入1角时,count[4:0]如果等

于9时,count[4:0]就等于0,而count[7:4]加1。这样就完成了进位。当选择找零In时,就自动跳入change找零状态。如果当count[7:0]上面的钱超过了9.9元的时候。系统会自动把最后一次投入的钱币退出来即overflow=1;同时在跳到找零change状态。如果投入的金额等于选中货物的价格的时候,出货同时把count[7:0]清零。当count大于选中商品的价格时,出货同时减去货物的价钱即count = count - price;再跳到change状态。如果当金额小于货物的价格的时候,就会在process状态自跳,等待在投币,直至满足以上的状态。

begin

next = process;

if( In ) next = change;

if( IY ) count[7:4] = count[7:4] + 1;

if( IWJ ) begin

count[3:0] = count[3:0] + 5;

if( count[3:0] > 9 )

begin count[3:0] = count[3:0] + 6;

count[7:4] = count[7:4] + 1; end

end

if( IYJ ) begin

if( count[3:0] == 9 )

begin count[3:0] = 0;

count[7:4] = count[7:4] + 1; end

else count[3:0] = count[3:0] + 1;

end

if (count>8'h99)

begin overflow=1; next=change; { Se, Sd, Sc,

Sb, Sa }=5'b00000; price=0; yuan=0; jiao=0; end else if( count == price )

begin { Se, Sd, Sc, Sb, Sa } = product; next=start; end else if (count>price)

begin { Se, Sd, Sc, Sb, Sa } = product; if ( count[3:0] <

price[3:0] )

begin count = count - price; count[3:0] = count[3:0] - 6; end

else count = count - price;

next=change;

end

end

当进入change找零状态时,count[7:4]如果大于0,再每个clk上升沿来临时,就自动减一,直至减为0,同时yuan输出一个和clk一样周期的高电平,程序在这个状态自跳。同样count[3:0]也要直至减为0为止。当都减为0的时候,相应的yuan和jiao都输出了脉冲信号。他们的电平持续的时间和他们count上的数值有关系,上面有n元m角,就相应yuan 出现n个clk高电平和jiao出现m个clk的高电平。

begin

next = change;

if( count[7:4] > 0 )

begin yuan = 1; count[7:4] = count[7:4] - 1; end

if( count[3:0] > 0 )

begin jiao = 1; count[3:0] = count[3:0] - 1; end

end

3.4 BCD-LED七段数码显示译码器

BCD-LED七段数码显示译码器主要是把余额通过LED数码显示器显示出来,这个程序主要把BCD码在LED显示器变成我们可以识别的数字。显示0-9的十个数字。采用低电平有效,在低电平时相应的LED上的灯亮。

图3.3 BCD-LED七段数码显示译码器软件流程图

module decode47( in, out );

input[3:0] in;

output[6:0] out;

reg[6:0] out;

always @( in )

基于plc的自动售货机程序设计

题目:基于plc的自动售货机程序设计 1 PLC的硬件组成 PLC的硬件主要由中央处理器(CPU)、存储器、输入单元、输出单元、通信接口、扩展接口、电源等几部分组成。其中,CPU是PLC的核心;输入单元/输出单元是CPU 与现场输入/输出设备之间的接口电路;通信接口用于连接编程器、上位计算机等外部设备,其硬件构成图如图1-1。 图1-1 PLC硬件结构图 2 PLC控制自动售货机的主要硬件及选型 2.2.2自动售货机I/O点的分配 输入/输出单元通常也称I/O单元或I/O模块,是PLC与工业生产现场之间的连接部件。PLC通过输入接口可以检测被控对象的各种数据,以这些数据作为PLC对被控对象进行控制的依据;同时PLC又通过输出接口将处理的结果送给被控对象,以实现控制目的。本次自动售货机I/O点的分配表如表3-1所示。 输入信号PLC地址输出信号PLC地址 找零按钮x0 找零y0 一元饮料按钮x1 咖啡出口y1 五元饮料按钮x2 汽水出口y2 十元元饮料按钮x3 汽水指示灯y3 咖啡饮料按钮x4 咖啡指示灯y4

2.2.3自动售货机的I/O接口图 此次自动售货机的I/O接口如图3-1所示,SB2-SB7是物品选择按钮,当投入货币物品绿灯亮(Q1.0-Q1.5)。按下SB2-SB7其中一个,对应的KM线圈得电,电机转动出相应的物品(Q0.1-Q0.6);当有物品售完,其行程开关断开,物品绿灯不亮并同时向总部发送物品销售完的信息;当购买物品总值低于投入总值时,可按找零按钮SB1后KM1得电,电机转动找零(Q0.0)。 图3-1自动售货机PLC控制I/O接口图 4.1.2 数学运算指令 在梯形图中,整数、双整数与浮点数的加、减、乘、除指令(见表4-2)分别执行下列运算:IN1+IN2=OUT,IN1-IN2=OUT,IN1*IN2=OUT,IN1/IN2=OUT。 在语句表中,整数、双整数与浮点数的加、减、乘、除指令分别执行下列运算:IN1+OUT=OUT,OUT-IN1=OUT,IN1*OUT=OUT,OUT/IN2=OUT。 表4-2 加减乘除指令

自动售货机管理程序

1引言 21世纪,我们已经进入了信息时代,计算机的使用大大方便了我们的日常生活,超市和网上购物已经不能满足我们对便利生活的要求,不能随时随地购物的缺点不能克服的。在此情况下,就需要一个程序化的自动售货机来满足人们日常生活的需求。在C语言的平台下实现,用户可以方便的进行各项购物操作。 C语言是一种程序设计语言,早在20世纪90年代,C语言表现出了强劲的生命力,C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体,既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此可以广泛地移植到了各类型计算机上,从而形成了多种版本的C语言。 采用输入函数和输出函数方式,可以完成对待售物品的名称、数量、价格的输出、顾客所选物品的输入、以及其它购物信息显示。

在对自动售货机管理程序进行需求分析的过程中,需要确定系统的主要功能,对程序开发的主要目的、程序的使用领域和有关该程序开发的软硬件环境进行详细的分析。下面从系统概述、功能模块描述两个方面进行需求分析。 2.1程序概述 自动售货机管理程序是运行于Windows系统下的应用软件,主要用于对待售商品的品名、价钱、数量、生产日期、保质期、编号进行输出等操作。 2.2功能需求 自动售货机管理程序为路边的行人提供了一个随时随地进行购物的平台,给消费者提供了一个简单友好的购物窗口,功能需求如下: (1)输出模块 程序在消费者购物前将所售商品的品牌输出以供消费者选择品牌,然后将消费者选择的品牌下的商品信息输出让消费者选择所需的商品,最后输出“请你付款班级”提示消费者完成购物。 (2)输入模块 让将消费者选定的商品的编码输入程序中然后进行价格的输出,以上述的方式让消费者把购物数量输入进程序中,最后将消费者付款金额输入,进而完成找钱。 (3)返回模块 如果消费者所输入的商品编码自动售货机上没有,则程序自动跳转到商品品牌的选择,提示消费者输入正确的商品编码。并且如果消费者输入的购买数量大于库存数量,程序将自动返回到商品的数量选择界面下,还有如果消费者的付款金额小于消费金额时,程序将自动返回到付款界面。 (4)找钱模块 将消费者付款金额进行判断后,进行一定运算后按50元、20元、10元、1元的分类分别找对。 程序由上述几个模块组成,能帮助消费者以自助的方式完成所需商品的购买并且有效地减少购物时间。另外还能节省售货者的管理时间,大大的提高管理的效率。

简单自动售货机VerilogHDL程序

自动售货机VerilogHDL程序 一个简单的自动售卖饮料机的程序。该机器具有投币,显示余额,购买六种饮料,退钱等功能,为了更具实用性,增添了饮料选择允许提示和投币允许提示的功能。具体形容,可投入一元、五元、十元和二十元面值的钱币,显示出当前的余额,并根据当前的余额提示能购买哪些饮料,选择某种饮料,则输出选定的饮料,同时余额减去相应的金钱。若选择退钱,机器就退出所有的钱,余额清零。 下图为功能示意图: 程序的状态表:

程序中包含了一个状态机,定义了一个任务(task)和函数(function),用该任务调用了该函数,使用若干分支语句,详见附后源程序和测试程序。 附上程序编译仿真图:

源程序如下: `define one 3'b001 `define five 3'b010 `define ten 3'b011 `define twenty 3'b100 module automart(money,state,moneyout,coinable,adrkable,bdrkable, cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5, drkout6,coin,clk,reset,moneyback,choice1,choice2, choice3,choice4,choice5,choice6); input[2:0] coin;//投币输入,分为1、5、10、20元四种输入 input clk,reset,moneyback,choice1,choice2,choice3,choice4, choice5,choice6;//moneyback为退钱输入,choice1~6是饮料选择output moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1, drkout2,drkout3,drkout4,drkout5,drkout6; //依次为退钱输出,投币许可提示,饮料选择许可,6种饮料输出output[2:0] state;//状态记录 output[7:0] money;//余额显示 reg[7:0] money; reg[2:0] state; reg moneyout,coinable,backable,adrkable,bdrkable,cdrkable; parameter A=3'b000, B=3'b001, C=3'b010,D=3'b011, E=4'b100; assign drkout1=choice1&adrkable;

自动售货机控制系统的设计最终版

精品文档 课程设计任务书 PLC控制系统设计设计题目:饮料自动售货机 学院:机械工程学院 机械测控专业: 班级: 姓名: 组员: 指导老师:

精品文档 摘要】【本文介绍了自动售货机的基本原理以及工作流程,然后以一 次交易过程为例,把交易过程分为几个程序块,然后分别对程序块进行编程。具体说明了可编程序控制器在自动售货机中的作用。程序涉及到了自动售货机工作的绝大部分过程。利用PLC控制的自动售货机提高了系统的稳定性,保证自动售货机能够长期稳定运行。 关键词:自动售货机;可编程序控制器;梯形图 Abstract:This paper introduces the basic principles of vending machines, as well as workflow, and then to a transaction process as an example, the transaction process is divided into several block, and then the block were programmed. Specify the PLC in the role of vending machines. Procedures related to the work of the vast majority of vending machine process. PLC control of the use of vending machines enhance the stability of the system to ensure that vending machines capable of long-term stable operation.

自动售货机系统源代码

#include #include #include #include "goods.h" bool GetCharge(int Sum,int Money); void Getsmalcharge(int Money,int *ChargeNum); int KouLing(); char ChooseJieMian(); char SaleCenter(); void loadGoodsFromFile(Goods* gs); char ManageCenter(); void KunCun(); void Sale(); void ShangJia(); void TongJiFun(); Goods goods[3]; TongJi tj[3]; void init(){ for(int i = 0; i < 3; ++i){ tj[i].jrxl = 0; tj[i].jrzje = 0; } } void main() { //初始化 init(); int op = 0; //读取商品信息 loadGoodsFromFile(goods); char c = ChooseJieMian(); while(true) { system("cls"); if( c == '1'){ c = SaleCenter(); }else if(c == '2'){ op = KouLing(); if(op == 1){ //进入管理界面 c = ManageCenter();

//system("pause"); } else if(op == 0){ //进去销售界面 c = SaleCenter(); } } } } //---------------------------------------------------- /** * @return 1销售界面2管理界面 */ char SaleCenter() { char state='N'; int Sum=0; char Pro = 'd'; // printf("\n********************************\n"); while(true) { state='N'; Sum=0; while(!(Pro == 'c' || Pro == 'a' || Pro == 'b' || Pro == 'q')) { system("cls"); printf("\n\t*******************************************"); printf("\n\t*********顾客您好,请选择商品**************\n"); printf("\n\t·a·商品%s ·b·商品%s ·c·商品%s ·q·管理\n",goods[0].name,goods[1].name,goods[2].name); printf("\n\t -%d- -%d- -%d- (单位:件)",goods[0].totalCount,goods[1].totalCount,goods[2].totalCount); printf("\n\t*******************************************\n\t\t"); Pro = getchar(); } if(Pro == 'q') break; switch(Pro) {

自动售货机C++程序设计

#include using namespace std; class Shop{ public : void shop(); float money(); float choose(); void out(); void con(); int a,b,c,d,v; }; void Shop::out(){ cout<<"该商品已售完\n\t\t1、购买其他商品\n\t\t2、退出"<>money; //输入 if (money!=0.5&&money!=1&&money!=2&&money!=5&&money!=10) {cout<<"请投入可接受面额!"<

cout<<"已投入金额: "<>a; switch(a){ case 1:{ if(f<=0){ out(); cin>>v; if(v==1){ shop(); continue; } if (v==2)exit(-1);} if(sum>=2) {f--;}change=sum-2; }break; case 2:{ if(g<0){ out(); cin>>v; if(v==1){ shop(); continue; } if (v==2)exit(-1); } if(sum>=2) {g--;}change=sum-2; }break; case 3:{ if(h<0){ out(); cin>>v; if(v==1){ shop(); continue;}

自动售货机代码

自动售货机控制电路设计 程序功能 本系统简单的完成了对街头自动售货机的一个模拟,算是一个小型售货机,可以完成简单的商品选择与投币处理,及输出找零等一系列流程。 调试和解决方案 调试步骤 具体的调试步骤如下: ①运行Quartus II,建立新的工程。 ②建立文本文件V erilog HDL File。在文件中写入程序。保存,编译。 ③分配管脚。保存,编译。 ④将生成的.sof文件写入FPGA试验箱中。 ⑤根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结果。调试现象 ⑴选择买1.5元的商品,投5元的金额,调试现象如下: ①选择1.5元商品 ②按下5元投币键 ③LED显示找零情况和商品。 ⑵选择1.5元的商品,投1元的金额,调试现象如下: ①选择1.5元的商品, ②按下1元的投币键, ③找零显示1元,退回所投的钱,蜂鸣器响。 测试成功

使用仪器 1.电脑一台,安装了ModelSim软件和QuartusII软件。 2.FPGA试验箱一个,内有2组4位共阳极数码管,6个LED灯。 程序代码 //先选择物品并投币 module seller(clock,reset,s1,s2,s3,s4,s5,s6,s7,LED,buzzer,prc1,cs1,prc2,cs2); //clock时钟信号,reset确认信号和复位信号 //LED代表售出标志,buzzer蜂鸣器报警标志金额不够 //prc1数码管显示商品价格,prc2数码管显示找零 //cs表示数码管片选,cs1 选择控制商品价格显示,cs2 选择控制找零显示 //s1:投币5角 s2:投币一元s3:投币五元 //s4:购买五角商品s5:购买一元商品s6:购买一元五角商品s7:购买二元商品input clock,reset,s1,s2,s3,s4,s5,s6,s7; output LED,buzzer,prc1,cs1,prc2,cs2; reg buzzer; reg [3:0] LED,cs1,cs2; reg [7:0] prc1,prc2;//a.b.c.d.e.f.g.dp reg [7:0] divtime=8'b0; reg [28:0] deltime=29'b0; always @( posedge clock)//控制片选信号的选择 begin divtime=divtime+1; end always @( posedge clock) begin deltime=deltime+1; if(deltime[28]==1'b1) begin deltime=29'b0; end if(reset) begin deltime=29'b0; end end always @( posedge clock) begin LED=4'b1111;//all LED ON buzzer=1'b0;//蜂鸣器不响

完整版PLC课程设计(自动售货机)

目录 摘要 (1) 1 绪论 (2) 1.1 设计任务 (2) 1.2 设计要求 (2) 1.3 PLC可编程控制器简介 (3) 1.3.1 PLC的基本概念 (3) 1.3.2 PLC的基本结构 (3) 2 总体设计和系统框图 (4) 2.1 控制程序流程图设计 (4) 2.2 控制程序时序图设计 (4) 2.3 控制程序设计思路 (5) 3 设计方案 (6) 3.1 PLC与上位监控软件通讯 (6) 3.2 上位监控系统组态设计 (7) 3.2.1 仿真系统组成 (7) 3.2.2 仿真实验的售货分析 (7) 3.3 系统变量定义及分配表 (8) 4 系统仿真和调试 (9) 4.1 硬件和软件调试 (9) 4.2 梯形图 (10) 总结 (14) 致谢 (15) 参考文献 (16)

摘要 本文简要介绍了PLC可编程控制器的基本概念和基本结构,又简要分析了自动售货机的基本功能及工作方式。设计了一个基于PLC的自动售货机控制系统。 本设计使用三菱公司开发的可编程控制器实现对自动售货机的控制,设计了1元、5元和10元三种投币方式。自动售货机内有12元、15元和20元三种商品,当投入币值大于或等于商品价格时,则可以购买该商品。当自动售货机内还有剩余钱额时,则可以实现退币功能。设计实现了货币的自动加、减和比较功能。 关键词:自动售货机;PLC;可编程控制器

1 绪论 1.1 设计任务 设计一台完整的销售汽水和咖啡的自动售货机,具有硬币识别、币值累加,自动售货、自动找钱功能,此售货机可接受的硬币为1元、5元和10元。有三个钱币输入按钮,X0代表1元,X1代表5元,X2代表10元,当投入的硬币总值超过12元时,汽水指示灯Y3亮。当投入的硬币超过15元时,汽水指示灯Y3和花茶指示灯Y4亮。当投币超过20元时,汽水和花茶及咖啡指示灯Y5都亮。如果要汽水则按汽水按钮X3,这时汽水输出指示灯Y3亮,输出汽水,然后汽水指示灯闪烁,5 s后停止。如果要花茶则按花茶按钮X4,这时花茶输出指示Y4亮,输出花茶,然后花茶指示灯闪烁,5s后停止。如果要咖啡,则按咖啡按钮X5,这时咖啡输出指示灯Y5亮,输出咖啡,然后咖啡指示灯闪烁,5s 后也自动停止。当要完汽水、花茶或咖啡时,如有多余的钱,则找钱指示灯Y10亮,如果多余钱超过10元则找钱口Y7自动退出余额,2s 后停止,如果少于十元则找钱口Y8自动退出余额。X6为手动复位按钮。 1.2 设计要求 随着科技的发展和社会的进步, 自动化商业机械有了越来越广泛的应用, 自动售货机作为自动化商业机械的代表被广泛用于公共场所。人们通过自动售货机可以买到食品、香烟、饮料、报纸、票、卡甚至鲜花和小宠物等物品。自动售货机实现了商品需求化、性能多样化的发展, 又由原来只能出售有限商品品种, 转变为继百货公司、超级市场、便民店之后,以消费者与售货机“一对一”自动售货的无店铺销售业态。自动售货, 给人们的生活带来了极大的方便。自动售货机的新奇、文明、高档、灵活方便等深受广大市民青睐。 售货机的最基本功能就是对投入的货币进行运算,并根据货币数值判断是否能购买某种商品,并做出相应的反映。因此,售货机应能够辨识机内包含的商品:售货机应该能够显示已投入的币值,以及再投入货币累计显示;同时提示可以购买的商品(或商品的编号)。当按下选择商品的按钮时,售货机进行减法运算,从投入的货币总值中减去该商品的价格,同时起动相应的电机,提取该商品到出货口,此时售货机继续等待外部命令,如继续交易,则同上,如果此时不再购买,则按下退币按钮,售货机进行退币操作,退回相应的货币,并在程序中清零,完成此次交易。

(完整word版)自动售货机合作协议

自动售货机合作协议 甲方: 地址: 乙方: 地址: 经双方协商,本着诚信、平等、互利、双赢的合作原则,双方就自动售货机合作事宜达成如下协议: 一、合作内容: 1、甲方向乙方提供设备摆放场地,指定在(地 址)。 2、乙方在甲方指定地点的办公区域及职工生活区 放置台自动售货机,自动售货机型号为:。 二、合作期限 1、协议期限为自2018 年月日起至20 年 月日止,共年。 2、协议期满后若乙方有意续约,应于合同期满前30日书面通知甲方,甲方同意续约的,双方重新签订合作协议。 三、合作费用及付款方式 1、乙方每台自动售货机支付甲方管理服务费 元/年/台,合计费用为元/年,该费用在签订合同后15日内按年度支付给甲方,此后每年度开始15日内乙方应将本年度费用支付给甲方,甲方收到该费用后15个工作日内开具发票给乙方。

2、在自动售货机运行期间产生的电耗,用电度表计量方式进行结算,电度表由乙方自行安装,计费标准为 1 元/度电,每月查表一次,乙方按照实际度数按约定收费标准支付电费给甲方,甲方收到电费后开具收据给乙方(电表数以双方确认数据为准)。 四、双方权责 (一)甲方权责: 1、甲方管理人员如发现自动售货机损坏及故障,应及时通知乙方,并为乙方的维修工作提供便利,甲方不承担赔偿责任。 2、如因甲方生产经营需调整自动售货机摆放位置的,甲方有权要求乙方在收到甲方通知后日内将自动售货机按要求搬迁至指定位置。 3、如因法律、政策、不可抗力以及甲方上级主管机关要求、产业结构调整等原因致使本协议不能继续履行,甲方有权解除协议且不视为违约,甲方无需对乙方进行赔偿或补偿。 4、免费为乙方配货车辆提供进出场地服务。 (二)乙方权责: 1、乙方负责自动售货机的购买、运作,自动售货机所有权属乙方所有,乙方拥有本协议的自动售货机型号的独家经营权。 2、乙方需按甲方指定位置摆放自动售货机,并提供相关联络人员和服务电话,以及时处理甲方或相关用户的投诉,对自动售货机及时进行日常维护、清洁。 3、乙方人员在进行安装、补货、维修等工作时应严格遵守甲方的各项规章制度,服从甲方管理。

自动售货机——单片机——程序,PROTUES仿真

兰州理工大学 信号检测与处理课程设计 设计题目自动售货机控制器的设计 学院电气工程与信息工程学院 专业班级10级自动化5班 学号10220526 姓名 指导教师刘仲明 时间2013 年春学期

目录 第一章绪论 (2) 1.1设计任务和要求 (2) 1.1.1设计任务 (2) 1.1.2设计要求 (2) 1.2工作原理 (2) 1.3设计思路和功能 (2) 第二章方案论证 (4) 2.1 方案设计 (4) 2.2.1方案1 (4) 2.1.2方案2 (4) 2.1.3方案3 (5) 2.2 方案比较 (5) 第三章硬件设计 (7) 3.1 设计思路 (7) 3.2 硬件设计方案 (8) 3.3 硬件设计概要 (8) 3.3.1 货币投入和选择货物 (8) 3.3.2 显示部分 (10) 3.3.3 货物输出与退币部分 (11) 第四章软件设计 (12) 4.1 整体设计思路 (12) 4.2 系统流程图 (12) 4.3 软件程序 (14) 4.4 软件仿真与调试 (20) 4.4.1 Proteus简介 (20) 4.4.2 仿真结果 (20) 第五章设计总结 (26)

5.1调试结果 (26) 5.2调试问题 (26) 总结 (27) 参考文献 (28)

摘要 自动售货机是劳动密集型的产业构造向技术密集型社会转变的产物。本文设计了一种以AT89C51单片机为核心的自动售货机装置的控制系统。详细介绍了自动售货机系统的方案论证、硬件设计、软件设计和结果仿真,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧。该系统以单片机AT89C51芯片为核心,采用集中控制方式实现了对自动售货机全过程的自动控制。本系统选择独立按键模拟货物选择端,选择LED和继电器模拟货物输出,实现了货物的掉出以及货币数的显示功能。此外,系统程序采用keil软件进行程序的编写和编译,该软件具有编程简单、查错方便、阅读容易等特点。汇编语言是程序的基本语言,具有容易理解,便于记忆和使用等特点。 关键词:自动售货机控制系统 89C51单片机 第一章绪论

自动售货机控制系统的设计(最终版)

课程设计任务书 设计题目:饮料自动售货机PLC控制系统设计 学院:机械工程学院 专业:机械测控 班级: : 组员: 指导老师:

【摘要】 本文介绍了自动售货机的基本原理以及工作流程,然后以一次交易过程为例,把交易过程分为几个程序块,然后分别对程序块进行编程。具体说明了可编程序控制器在自动售货机中的作用。程序涉及到了自动售货机工作的绝大部分过程。利用PLC控制的自动售货机提高了系统的稳定性,保证自动售货机能够长期稳定运行。 关键词:自动售货机;可编程序控制器;梯形图 Abstract:This paper introduces the basic principles of ven ding machines, as well as workflow, and then to a transactio n process as an example, the transaction process is divided i nto several block, and then the block were programmed. Spe cify the PLC in the role of vending machines. Procedures rela ted to the work of the vast majority of vending machine proc ess. PLC control of the use of vending machines enhance the stability of the system to ensure that vending machines cap able of long-term stable operation. Key words:Vending machines; PLC; Ladder Diagram 一.PLC的概述

饮料自动售货机控制程序

饮料自动售货机控制程序 饮料自动售货机结构示意图。在该机中有两种已经配制好的饮料储液桶,一种为汽水,另一种为橙汁,分别由两个电磁阀控制放入杯中的饮料品种。 1. 控制要求 (1) 自动售货机可投入1角、5 角、1元的硬币。 (2) 当投入的硬币总值超过2 元时,汽水指示灯亮;当投入的硬 币总值超过3元时,汽水及橙汁指 示灯亮。 (3) 当汽水指示灯亮时,按放汽水按钮,则排出汽水,8 s 后, 自动停止。在这段时间内,汽水指示灯闪烁。 (4) 当橙汁按钮指示灯亮时,按放橙汁按钮,则排出橙汁,8 s 后,自动停止。在这段时间内橙汁指示灯闪烁。 (5) 若投入硬币总值超过按钮所需的钱数(汽水2元,橙汁3元)时,找钱指示灯亮,并找出多余的钱。 自动饮料售货机PLC 的输入/输出点分配表 主要设计思路:将1角、5角、1元的信息传入数据寄存器D 中。将投票过程中的投票数据进行累加并存入数据寄存器D 中,并与2元、3元进行比较。若数据寄存器D 中数据大于2元,则汽水指示灯亮;若数据寄存器D 中数据大于3元,则汽水和橙汁指示灯均发亮。根据以上思路,设计出饮料自动售货机PLC 控制梯形图及指令语句表,如图6-18所示。 程序设计说明。在图6-18(a)和(b)中:第2逻辑行为传输数据程序;第3逻辑行至第8逻辑行为数据累加程序;第9逻辑行至第12逻辑行为数据比较时间间隙程序;第13逻辑行与第14逻辑行为汽水指示灯和橙汁指示灯驱动程序;第15逻辑行至第20逻辑行为汽水电磁阀和橙汁电磁阀驱动程序;第21逻辑行至第25逻辑行为找钱比较程序;第26逻辑行至第30逻辑行为找钱、复位程序。 接通电源后,第1逻辑行中特殊标志位存储器SM0.1闭合一个扫描周期,使内部标志位存储器 M0.0闭合一个扫描周期。 由于内部标志位存储器M0.0接通一个扫描周期,因而第2逻辑行中的M0.0的常开触点也闭合一个扫描周期,1角、5角、1元的信息被传送至内部标志位存储器的字地址MW10、 汽水桶投票口电磁阀杯子

自动售货机系统程序

Coin类: #include #include #include using namespace std; class Coin { public: /** Constructs a coin with a given name and value @param n the coin name @param v the coin value */ Coin(string n, double v); /** Gets the coin name. @return the name */ string get_name() const; /** Gets the coin value @return the value */ double get_value() const; private: string name; double value; };

Coin::Coin(string n, double v) { name = n; value = v; } string Coin::get_name() const { return name; } double Coin::get_value() const { return value; } Product类: #include #include #include using namespace std; class Product { public: /** Constructs a product with a given name, price and quantity

自动售货机VHDL程序与仿真

自动售货机VHDL程序与仿真 (1)自动售货机VHDL程序如下: --文件名:pl_auto1.vhd。 --功能:货物信息存储,进程控制,硬币处理,余额计算,显示等功能。 --说明:显示的钱数coin的以5角为单位。 --最后修改日期:2004.3.23。 library ieee; use ieee.std_logic_arith.all; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity PL_auto1 is port ( clk:in std_logic; --系统时钟 set,get,sel,finish: in std_logic; --设定、买、选择、完成信号 coin0,coin1: in std_logic; --5角硬币、1元硬币 price,quantity :in std_logic_vector(3 downto 0); --价格、数量数据 item0 , act:out std_logic_vector(3 downto 0); --显示、开关信号 y0,y1 :out std_logic_vector(6 downto 0); --钱数、商品数量显示数据 act10,act5 :out std_logic); --1元硬币、5角硬币 end PL_auto1; architecture behav of PL_auto1 is type ram_type is array(3 downto 0)of std_logic_vector(7 downto 0); signal ram :ram_type; --定义RAM signal item: std_logic_vector(1 downto 0); --商品种类 signal coin: std_logic_vector(3 downto 0); --币数计数器 signal pri,qua:std_logic_vector(3 downto 0); --商品单价、数量 signal clk1: std_logic; --控制系统的时钟信号begin com:process(set,clk1) variable quan:std_logic_vector(3 downto 0); begin if set='1' then ram(conv_integer(item))<=price & quantity;act<="0000"; --把商品的单价、数量置入到RAM elsif clk1'event and clk1='1' then act5<='0'; act10<='0'; if coin0='1' then if coin<"1001"then coin<=coin+1; --投入5角硬币,coin自加1 else coin<="0000"; end if; elsif coin1='1' then if coin<"1001"then coin<=coin+2; --投入1元硬币,coin自加2 else coin<="0000"; end if; elsif sel='1' then item<=item+1; --对商品进行循环选择 elsif get='1' then --对商品进行购买

自动售货机C语言程序

#include #define list "%d....%c...%4.1fY uan.....%dleft\n",goods[i].number,goods[i].name,goods[i].price,goods[i].q uantity float M;//M作为钱 int A=1,B=1;//A为数量标记,B为金钱标记,1表示有,0表示没有 struct goods//定义出物品清单 { int number; char name; float price; int quantity; }goods[4]={{1,'A',0.5,5},{2,'B',4,5},{3,'C',11,5},{4,'D',2,5}}; struct money//定义出钱,数量用于记录补钱的某值张数 { float money; int mount; }money[8]={{100,0},{50,0},{20,0},{10,0},{5,0},{1,0},{0.5,0},{0.1,0}}; void main() { void change(float m);//声明找钱模块 int sell(int n,float m,int a,int b);//声明出售模块 int i,n;//i用于循环显示商品列表,n用于记录输入的货号 float m1;//m1用于加钱 for(i=0;i<4;i++) printf(list); printf("input money first!\n"); scanf("%f",&M); loop1:printf("you have %.1f\nnow you can choose the goods number,you can use 0 to leave\n",M); scanf("%d",&n); if(n==0) change(M); else//确认用户是选择高开还是买东西 {loop2:sell(n,M,1,1); if(A==0)//货没有了怎么办 {printf("there is no goods %d left\nyou have %.1f\ninput goods number,you can use 0 for leave\n",n,M); scanf("%d",&n); if(n==0) change(M); else {A=1; B=1;//要将标记归位 goto loop2;

C语言自动售货机代码

#include #include #include void GetltemName(char *item, FILE *file); int GetltemPrice(FILE *file); void AcceptMoney(int price); //symbolic constant definitions #define CAPACITY 10//max number itemavailable to vend int main(void){char name[CAPACITY][20]={0}; int price[CAPACITY]={0}; FILE *stockfile; int i,Nitems,choice; int listend; stockfile=fopen("pricelist.txt","r"); if(stockfile==NULL){printf("Error initialising vend: pricelist.txt not opened");}else {//read stock from file listend=0; Nitems=0; do {price[Nitems]=GetltemPrice(stockfile); GetltemName(name[Nitems],stockfile); if(price[Nitems]>0){Nitems++;}else {listend=1;}}

while(NitemsNitems-1); printf("%s seleted.\n",name[choice]); AcceptMoney(price[choice]); printf("\nEnjoy your %s.\n",name[choice]);}fclose(stockfile); return 0;}void GetltemName(char *item,FILE *file){int len; if(feof(file)){item[0]='\0';}else {fgets(item,20,file); len=strlen(item); if(item[len-1]=='\n'){item[len-1]='\0';}}}void AcceptMoney(int price){int money=0,coin,left; printf("Please pay %d p. 10p,5p,2p,1p accepted. No change given.\n\n",price); do {left=price; printf("Price: %d, paid: %d, to pay:

自动售货机软件系统的设计与实现

自动售货机软件系统的设计与实现设计人

目录 一自动售货机需求分析 1.1实验设计分工—————————————————————————1 1.2产品介绍——————————————————————————— 1 1.3产品面向的用户群体——————————————————————1 1.4产品应当遵循的标准或规范——————————————————— 1 1.5产品范围——————————————————————————— 1 1.6产品的系统需求———————————————————————— 1 1.7产品的非功能性需求—————————————————————— 2 二概要设计说明 2.1引言——————————————————————————————3 2.2总体设计————————————————————————————4 2.3接口设计————————————————————————————5 2.4运行设计————————————————————————————6 2.5系统出错处理设计————————————————————————6 三详细设计说明 3.1引言——————————————————————————————7 3.2程序系统的结构—————————————————————————7 3.3自动售货机AVM(主程序)设计说明————————————————8 3.4投币模块设计说明————————————————————————10 3.5物品栏处理模块设计说明—————————————————————10 3.6购物车处理模块设计说明—————————————————————11 3.7出货模块说明——————————————————————————12 四测试分析报告 4.1引言——————————————————————————————13 4.2测试概要————————————————————————————14 4.3对软件功能的结论————————————————————————15 4.4分析摘要————————————————————————————16 五项目开发总结报告 5.1引言——————————————————————————————17 5.2实际开发结果——————————————————————————18 5.3开发工作评价——————————————————————————19 5.4经验与教训———————————————————————————20

相关主题