自动售货机设计报告 - 图文

更新时间:2023-09-11 12:51:01 阅读量: 教育文库 文档下载

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

数字电子技术课程设计

——自动售货机

摘 要

自动售货机是一台机电一体化的自动化装置,在接收到货币已输入的前提下,靠触摸控制按钮输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。当顾客按下需要买的商品所对应的按键时,数码管将显示出该商品的的价格,然后顾客需要将货币投入投币口,数码管上显示出所投币额。当按下确认键,则自动售货机将对投入的货币与商品的价格进行比较。如果投入的币额足够时,则自动送出商品,并且把多余的钱找回,在数码管上显示出来。如果两者币的相等,则直接送出商品。如果投入的币额不足时则报警,设计时可以设置报警时间。当顾客一旦按下确认键3秒后,自动售货机将自动恢复到初始状态,此时顾客才可以进行下一次购货操作。售货机还具有商家使用累加货币的功能,累加的货币在数码管上显示出,此累加器只能有商家可以控制清零。此售货机还有商家控制的整体复位功能。该售货机具有使用方便,结构简单,灵活通用等优点,因此在销售业,食品产业得到广泛的应用。本文设计的自动售货机,主要应用到Verilog语言和Quartus II软件,通过编写Verilog语言子模块程序经过Quartus II仿真生成电路图,然后编写总体程序并调用各子程序,经过Quartus II仿真反馈连接生成一个自动售货机模型,最后将其下载到FPGA开发板内进行功能测试。

关键字:自动售货机、Verilog语言、Quartus II软件、FPGA开发板

目录

1.设计完成的功能…………………………………………………1

2.实验原理…………………………………………………………1

3.设计思路………………………………………………………1-2

4.程序代码段…………………………………………………2-9

5.Quartus II综合分析得各模块RTL电路图………………9-12

6.Quartus II仿真结果………………………………………13-15

7.FPGA开发板管脚配置图………………………………………15

8.FPGA开发板测试结果…………………………………………16

一、设计完成的功能

(1)设计一个自动售货机,此机能出售1元、2元、5元、10元的四种商品。出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格。

(2)顾客投入硬币的钱数也是有1元、2元、5元、10元四种,但每次只能投入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来。

(3)顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间3秒(可用点阵模拟报警)。如果投币额足够时自动送出货物(送出的货物用相应不同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管显示出来。 (4)顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作。

(5)售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管显示,显示2位即可。此累加器只有商家可以控制清零。 (6)此售货机要设有一个由商家控制的整体复位控制。

二、实验原理

总的设计思想:首先用Verilog语言编写各子模块程序代码,来实现各子模块设计要求功能。然后编写一个顶层模块,并在顶层模块中调用各子模块的程序代码,以使各子模块联系起来。编程完成以后通过Quartus II调入程序进行综合分析仿真,得到总模块以及各子模块的RTL电路图,最后将其下载到FPGA开发板内进行功能测试。

具体流程:首先应搭建识别模块,将代表每种硬币的拨码开关信号转变为BCD码进行累加。当累加完成后,将累加结果与代表商品的BCD码相比较。如果大于售出商品并对两个BCD码求差,求差的结果作为找钱信号;如果等于直接售出商品;小于则报警。至于统计卖钱额,则是对售出的商品进行累加。同时还要通过数码管显示模块进行显示。

三、设计思路

采用先部分再整体的设计思想,将总体设计分为以下模块 (1)分频(fenpin)模块。

(2)计时(count)模块。用于控制确认键后到恢复初始化的3秒计时。

1

(3)识别(shibie)模块。将每种硬币、货品的拨码开关信号转变为编码 。 (4)清零(qingling)模块 。用于销售总额的清零。 (5)初始化(init)模块

(6)控制(control)模块。用于数据读入、投币不足、交易成功状态的控制及转化。

(7)显示(display)模块

四、程序代码段

(1)fenpin模块程序代码: module fenpin(clk,f_1m,f_1s); input clk;

output f_1m,f_1s; reg f_1m,f_1s;

integer a_temp1,a_temp2; always@(posedge clk) begin

if (a_temp2==24999) begin

f_1m=~f_1m; a_temp2<=0; end else

a_temp2<=a_temp2+1; end

always@(posedge clk) begin

if(a_temp1==24999999) begin

f_1s=~f_1s; a_temp1<=0; end else

a_temp1<=a_temp1+1; end endmodule

该模块设计目的是实现分频,以使后续模块能得到毫秒和秒级的动作。 (2)count模块程序代码: module count(f_1s,ret,a); input f_1s; input ret;

2

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

Top