-自动售货机的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安康学院FPGA/SOPC课程设计报告书

课题名称:自动售货机的设计

姓名:

学号:

院系:电子与信息工程系

专业:

指导教师:

时间:

课程设计项目成绩评定表设计项目成绩评定表

课程设计报告书目录

设计报告书目录

一、设计目的 (1)

二、设计思路 (1)

三、设计过程 (1)

3.1、系统方案论证 (1)

3.2、模块程序设计 (2)

3.3、各单元模块功能介绍及电路设计 (4)

四、仿真结果 (6)

4.1、设计电路图 (6)

4.2、程序生成的原理图 (7)

4.3、仿真图 (8)

五、对应变量的管脚配置表 (8)

六、课程设计体会与建议 (9)

6.1、设计体会 (9)

6.2、设计建议 (10)

七、参考文献 (10)

一、设计目的

1)熟悉学习QuartusII的编程与调试方式,学会在QuartusII中使用波形图进行软件仿真,并使用EDA6000进行硬件仿真与调试。

2)设计一个自动售货机,具有投币和选择商品等功能

二、设计思路

1、售货机模块:该模块能完成货物信息的存储,硬币处理,余额计算。

2、动态扫描模块:功能主要是硬件实验板上让两路信号同时在两个7段数码管上显示出来。

3、输出控制模块:该模块主要是控制OUT和OUT1输出信号来控制阀门打开与找钱,并且控制阀门的打开时间。

设计思路:控制信号输入到售货机模块,售货机进行各项功能操作输出信号在7段数码管

三、设计过程

3.1、系统方案论证

3.1.1、自动售货机系统组成框图

图1 系统组成框图

3.1.2工作原理

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

第几种商品;

2)顾客可通过选择投入的钱数来购买商品,并且有一个确认键;

3)如果选择投入的钱小于选择的商品价格,则显示出价格和选择的钱数,;

4) 如果选择投入的钱大于选择的商品价格,则显示出价格和找回的钱;

5)此售货机有一个整体复位控制。

3.2、模块程序设计

程序如下:

module shoumaiji(clk,a,b,duanxuan,weixuan,out,out1);

input clk;

input a,b; //a为投入0.5元信号,b为投入1元信号

output [8:1]duanxuan; //输出8位段选信号

output weixuan; //输出1位位选信号

output out; //out为高电平时售卖机闸门打开,汽水掉出来

output out1; //out1为高电平时候找0.5元

reg weixuan;

reg [8:1]duanxuan;

reg [31:0]count; //数码管动态扫描计数

reg [31:0]count1; //用于计算售卖机闸门打开时间

reg [4:1]a1,b1; //用a1,b1寄存投入的0.5元和1元硬币数目

reg out,out1;

always @(posedge a or posedge out)

begin

if(out==1) a1<=0; //汽水出来后计数值清零

else a1<=a1+4'b1;

end

always @(posedge b or posedge out)

begin

if(out==1) b1<=0; //汽水出来后计数值清零

else b1<=b1+4'b1;

end

always@(posedge clk)

begin

if(a1==5) out<=1; //因为汽水为2.5,可以给5个0.5元

else if(a1==3&&b1==1) out<=1; //可以给3个0.5元和1个1元

else if(a1==1&&b1==2) out<=1; //,可以给1个0.5元和2个1元

else if(b1==3)begin out<=1;out1<=1;end //可以给3个一块的

else if(a1==0&&b1==0)

begin

count<=count+1;

if(count==50) //如果实际运行中发现数码管有闪烁,可以将此数值调小

begin

weixuan<=1'b0;

duanxuan<=8'b00111111; //0

end

if(count==100) //如果实际运行中发现数码管有闪烁,可以将此数值调小

begin

weixuan<=1'b1;

duanxuan<=8'b00111111;

count<=0;

end

end

else if(a==1) //投币0.5元,显示0.5,假设数码管为共阴极的

begin

count<=count+1;

if(count==50) //如果实际运行中发现数码管有闪烁,可以将此数值调小begin

weixuan<=1'b0;

duanxuan<=8'b01101101; //5

end

if(count==100) //如果实际运行中发现数码管有闪烁,可以将此数值调小

begin

weixuan<=1'b1;

duanxuan<=8'b10111111; //0.

count<=0;

end

end

相关文档
最新文档