自动售货机代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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