自动售货机代码

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

自动售货机控制电路设计

程序功能

本系统简单的完成了对街头自动售货机的一个模拟,算是一个小型售货机,可以完成简单的商品选择与投币处理,及输出找零等一系列流程。

调试和解决方案

调试步骤

具体的调试步骤如下:

①运行Quartus II,建立新的工程。

②建立文本文件Verilog 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;//蜂鸣器不响

if(reset)

begin

LED=4'b0000;//all LED OFF

buzzer=1'b0;//buzzer OFF

cs2=4'b1111;

cs1=4'b1111;

end

else

begin

case({s1,s2,s3,s4,s5,s6,s7})

//*************投入0.5时

7'b1001000: //buy 0.5

begin

if(divtime[7]==1'b0)

begin //价格数码管显示0.5,货物1售出LED1亮,找零0.0

cs1=4'b1110;

prc1=8'b00000010;//show 0.

cs2=4'b1110;

prc2=8'b00000010;//show 0.

end

if(divtime[7]==1'b1)

begin

cs1=4'b1101;

prc1=8'b01001001;//show 5

cs2=4'b1101;

prc2=8'b00000011;//show 0

end

LED=4'b1000;

if(deltime[28]==1'b1)//等待一段时间售货机自动恢复到初始状态

begin //back to initial

LED=4'b1111;//all LED ON

buzzer=1'b0;//buzzer OFF

cs2=4'b1111;

cs1=4'b1111;

end

end

7'b1000100: //buy 1

begin

if(divtime[7]==1'b0)

begin

cs1=4'b1110; //投入金额不够,价格数码管显示1.0,LED 不亮。蜂鸣器报警

prc1=8'b10011110;//show 1.

cs2=4'b1110;

prc2=8'b00000010;//show 0.

end

if(divtime[7]==1'b1)

begin

cs1=4'b1101;

prc1=8'b00000011;//show 0

cs2=4'b1101;

prc2=8'b01001001;//show 5

end

buzzer=1;

end

7'b1000010: //buy 1.5

begin //投入金额不够,价格数码管显示1.5,LED不亮。蜂鸣器报警

if(divtime[7]==1'b0)

begin

cs1=4'b1110;

prc1=8'b10011110;//show 1.

cs2=4'b1110;

prc2=8'b00000010;//show 0.

end

if(divtime[7]==1'b1)

begin

cs1=4'b1101;

prc1=8'b01001001;//show 5

cs2=4'b1101;

prc2=8'b01001001;//show 5

end

buzzer=1;

end

7'b1000001: //buy 2

begin //投入金额不够,价格数码管显示2.0,LED不亮。蜂鸣器报警

if(divtime[7]==1'b0)

begin

cs1=4'b1110;

prc1=8'b00100100;

cs2=4'b1110;

prc2=8'b00000010;

end

if(divtime[7]==1'b1)

begin

相关文档
最新文档