自动售货机设计报告 - 范文中心

自动售货机设计报告

07/20

数字电子技术课程设计

——自动售货机

摘 要

自动售货机是一台机电一体化的自动化装置,在接收到货币已输入的前提下,靠触摸控制按钮输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。当顾客按下需要买的商品所对应的按键时,数码管将显示出该商品的的价格,然后顾客需要将货币投入投币口,数码管上显示出所投币额。当按下确认键,则自动售货机将对投入的货币与商品的价格进行比较。如果投入的币额足够时,则自动送出商品,并且把多余的钱找回,在数码管上显示出来。如果两者币的相等,则直接送出商品。如果投入的币额不足时则报警,设计时可以设置报警时间。当顾客一旦按下确认键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秒计时。

(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

end

else

a_temp2

end

always@(posedge clk)

begin

if(a_temp1==24999999)

begin

f_1s=~f_1s;

a_temp1

end

else

a_temp1

end

endmodule

该模块设计目的是实现分频,以使后续模块能得到毫秒和秒级的动作。

(2)count 模块程序代码:

module count(f_1s,ret,a);

input f_1s;

input ret;

output a;

integer a;

always @ (posedge f_1s)

begin

if(ret!=0) //用于按确认键后的计时

begin

a=a+1;

end

else

begin

a=0;

end

end

endmodule

该模块的主要功能是计时,以使后续后续模块能够实现顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,允许顾客进行下一次购货操作。

(3)shibie 模块程序代码:

module shibie(read,g,m,goods,money);

input[1:0] g,m;

input read;

output goods,money;

reg [3:0] goods,money;

always

begin

if(read!=0) //非商家读取模式(普通读写模式)

begin // 识别模块

case(g) //表每种货品的拨码开关信号转变为编码 4'b00:begin goods=1;end

4'b01:begin goods=2;end

4'b10:begin goods=5;end

4'b11:begin goods=10;end

default:begin goods=0;end

endcase

case(m) //表每种硬币的拨码开关信号转变为编码

4'b00:begin money=1;end

4'b01:begin money=2;end

4'b10:begin money=5;end

4'b11:begin money=10;end

default:begin money=0;end

endcase

end

end

endmodule

该模块的功能是识别是否是商家读取模式,如果是普通读写模式则将每种硬币、

货品的拨码开关信号转变为编码 。

(4)qingling 模块程序代码:

module qingling(f_1m,zero,count);

input f_1m,zero;

output count;

reg [9:0]count;

always @ (posedge f_1m)

begin

if(zero==0) //清零

begin

count=0;

end

end

endmodule

该模块的功能实现商家能够整体复位。

(5)init 模块程序代码:

module init(a,led,leda,ledb,x,ret);

input a;

output led,leda, ledb,x,ret;

reg[1:0] ret;

reg[3:0] led;

reg leda;

reg ledb;

reg x=1;

always

begin

if(a==3) //初始化

begin

ret=0;

led=4'b0000;

leda=1;

ledb=0;

x=0;

end

end

endmodule

该模块的功能是按确认键计时3秒后自动回到初始状态,以允许顾客进行下一次购货操作。

(6)control 模块程序代码:

module control(x,yes,money,goods,g_c,ret,leda,ledb,led,count); input[3:0] money,goods;

input yes,x;

output g_c,ret,leda,ledb,led,count;

reg [3:0] change,g_c,led;

reg leda;

reg ledb;

reg[9:0] count=0;

reg[1:0] ret;

always

begin

if(yes==0) //按确定键

begin

if(money

begin

change=0;

ret=1;

end

else

begin//金钱足够

change=money-goods;

ret=2;

if(x==0) //交易成功销售总额增加

begin

count=count+goods;

end

g_c=goods;

end

endmodule

该模块的功能是用于数据读入、投币不足、交易成功状态的控制及转化。

(7)display 模块程序代码:

module display(g_c,money,read,count,com,led_seg,);

input [3:0]g_c,money;

input [9:0] count;

input read;

output com;

output led_seg;

reg [3:0]com;

reg [7:0]led_seg;

integer r,b;

reg i=0;

reg [1:0] state=0;

always

begin

if(read!=0)

begin

case(state)

//显示选择的货物

0:begin

r=g_c % 10;

com=4'b1110;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

1:begin

r=g_c / 10;

com=4'b 1101;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

//显示投入的钱数及余额

2:begin

r=money % 10;

com=4'b 1011;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end

7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

3:begin

r=money / 10;

com=4'b 0111;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

endcase

state=state+1;

end

if(read==0)//商家读取模式

begin

case(i) //显示销售总额

0:begin

b=count/10;

com=4'b 1110;

case(b)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

1:begin

b=count%10; com=4'b 1101; case(b)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase end

endcase i=i+1; if(i==2) begin i=0; end end end

endmodule

该模块的功能是将顾客投入硬币的钱数、投币额足够送出货物、应找回的多余的钱数用数码管显示出来。

(8)总体顶层模块autoseller 程序代码: module

autoseller(f_1s,f_1m,g,m,yes,read,zero,com,led_seg,leda,ledb,led); input yes,read,zero;//确定键,商家读取键,清零键 input f_1s,f_1m;

input [1:0] g , m; //货品及投币选择键

output com,led_seg,leda,ledb,led;//数码管输出及点阵输出 wire leda;

wire leda1,leda2,ledb1,ledb2; wire [3:0]led1,led2; wire ledb; wire a;

wire [3:0] goods,money,led,change,g_c,com; integer r,b, a_tmp2,a_tmp1;

wire [1:0] ret=0;//用于控制各状态间的转换 wire [9:0]count; wire [7:0]led_seg;

wire [1:0]state=0; wire i=0; wire x;

//fenpin autoseller1(clk,f_1m,f_1s); count autoseller2(f_1s,ret,a);

init autoseller3(a,led1,leda1,ledb1,x,ret); qingling autoseller4(f_1m,zero,count); shibie autoseller5(read,g,m,goods,money);

control autoseller6(yes,money,goods,g_c,ret,leda2,ledb2,led2,count); display autoseller7(g_c,goods,money,read,com,led_seg,count); assign leda=(a==3)?leda1:leda2; assign ledb=(a==3)?ledb1:ledb2; assign led=(a==3)?led1:led2; endmodule

该模块的功能是将各子模块通过顶层模块联系在一起,以期实现整体设计功能。

五: Quartus II综合分析得各模块RTL 电路图

(1)autoseller 总模块RTL 电路图

:

(2)fenpin模块RTL 电路图:

(3)count 模块RTL 电路图:

(4)shibie 模块RTL 电路图:

(6)init 模块RTL 电路图:

(7)control模块RTL 电路图:

六:Quartus II仿真结果

(1)autoseller总模块仿真结果图:

(2)fenpin模块仿真结果图:

(3)count 模块仿真结果图:

(5)qingling 模块仿真结果图:

(6)init 模块仿真结果图:

(8)display 模块仿真结果图:

七:FPGA 开发板管脚配置图:

八:FPGA 开发板测试结果


相关内容

  • 自动取款机(ATM)项目可行性研究报告
    自动取款机(ATM )项目可行性研究报告 核心提示:自动取款机(ATM )项目投资环境分析,自动取款机(ATM )项目背景和发展概况,自动取款机(ATM )项目建设的必要性,自动取款机(ATM )行业竞争格局分析,自动取款机(ATM )行业 ...
  • 地质信息技术
    第六章 地质信息技术 前 言 当前,在加拿大.澳大利亚等西方主要矿业大国,矿业软件是矿山生产过程中必不可少的重要工具,特别是在地质数据分析.提高矿山生产与管理效率等方面发挥了巨大作用.当前国外比较著名的商业矿业软件有Surpac .Micr ...
  • 智能变电站合并单元标准化作业指导书
    智能变电站 模拟量输入式合并单元调试作业指导书 批 准: 审 核: 编 写: 作业负责人: 目 次 1. 应用范围 .............................................................. ...
  • 省创新项目结题
    项目编号 __07423___ 福建省大学生创新性实验计划 项目结题表 项 目 名 称: 项 目 负 责 人: 所在学院.年级: 联 系 电 话: 电 子 邮 件: 指 导 教 师: 项 目 起 止 时 间: 填 表 日 期: 基于 MCU ...
  • 自动包装机课程设计
    课程设计任务书 设计任务和要求 1)完成对自动包装机现有设计或产品方案的调研,做出不同设计或产品的性能分析.市场分析.技术分析等的研究综述报告一份.题目自定,字数不少于2000字. 2) 完成主传动系统.拉袋.袋成型.计量.填充机构的原理方 ...
  • 硕士学位论文开题报告格式模板
    华东交通大学硕士学位论文开题报告格式模板 本模板供统招硕士和同等学历硕士使用 (2005年12月制订) 一.页面设置  纸张大小:A4,正文部分可双面印刷  页边距:上2.8cm.下2.5cm,左.右2.5cm,装订线:0cm  页眉 ...
  • 风力监控自动化
    Q/HN Q/HN-1-0000.08.007-2012 中国华能集团公司企业标准 风力发电场监控自动化监督技术标准 2012 - 07 - 01发布 2012 - 07-01实施 目 次 前言 ...................... ...
  • 楼宇智能设计方案
    目 录 第六章.系统总体设计方案 ....................................................................................................... ...
  • 5 计算机系统验证报告
    现代中药论坛原创www.chinapat.com STP -验-S -047-00 计算机系统验证报告 第 1 页 共 47 页 1 概述: 计算机系统位于我公司提取一车间二楼中控室,适用于现代化提取车间所有设备的指令.监控.控制运行.本设 ...