自动售货机设计Verilog
更新时间:2024-03-25 11:26:01 阅读量: 综合文库 文档下载
自动售货机设计
一、实验目的 1、实现自动售货机的功能; 2、运用状态机原理设计。 二、实验内容
? 这种自动售货机只销售听装与瓶装两种罐装可乐,售价均为1.5元。顾客只能通过
两个不同的投币口分别投入五角的硬币或者一元硬币。一次交易可以买多罐,且自动找零。若钱不够,则自动退币。并且在购买之前只要一按下取消键cancel就马上无条件退币。
? 此机器的硬件示范电路,以二個按键电路代替二個投币孔,以两个八段数码管显示
投币数量,再以4hz闪烁之led來显示退币,以两个八段数码管显示退币数量。此机器就采用1024hz的系统clock信号同步所有的买卖行为,并且作为弹跳消除电路的基准参考脉冲。这个电路虽然是纯数位电路但是可作为一个自动售货机的控制核心电路加上驱动器就可以用来驱动机械装置。
? 下图为自动售货机的操作盘,有两个投币按钮,分別为五角硬币与一元硬币。每投
入一个硬币就将下方的LED指示灯号点亮到具体数额,并且最高上限只能接受9.5元的金额。另外,每一种饮料商品都配置3个灯号(分别显示存货、选择数量与出货等三个信息)与一个选择购买的按钮。每按一次选择购买按钮,选择数量显示加1,并且存货自动计算,若没有货存,则货存灯灭,一旦选择商品与投币金额足够,就需要按下确定要购买的按键;当然也可以后悔不买而按下取消键,让机器退回已经投入的硬币。如若投入的钱币不足以购所有的饮料,则退币。退币时货存更改为原状态。
三、程序设计
module auto_vending(clk,cel_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_buy,//输入 led_cola_ok,led_diet_ok,led_buy,led_cancel,led_cola_out,led_diet_out,shu_cola_sel,shu_diet_sel,
led_display,shu_money_return,Hex);//输出
input clk,cel_cola,cel_diet,reset,coin_ten,coin_five,ok_buy,cancel_buy; output led_cola_ok,led_diet_ok,//表示还有存货
led_buy,led_cancel,//表示选择购买和取消购买 led_cola_out,led_diet_out;//显示表示已出货 //led_return;//每四秒闪烁一次代表被退之硬币 wire [10:0]led_cola_sel,led_diet_sel;////选中饮料的数量 output [6:0]shu_cola_sel,shu_diet_sel;
output [13:0]led_display;//表示投币的金额 output [13:0]shu_money_return;
wire ok,cancel,money_ok;//在ok_or_cancel出来的 //wire [10:0]no_diet,no_cola;//售货机内的饮料数量 wire [10:0]money_return;
//reg [10:0]no_sock_cola,no_sock_diet; wire [10:0]total_count,total_consum; output [13:0]Hex;
assign Hex=14'b111_111_111_11111; parameter Idle = 2'd0, S1 = 2'd1, S2 = 2'd2;
reg [1:0]state; reg clk_1; reg rst;
reg [29:0]count;
always@(posedge clk)//sheng cheng 1s de shi zhong begin
if(count==30'd25000000) begin
clk_1<=~clk_1; count<=0; end else
count<=count+1; end
always@(posedge clk_1 or negedge reset) if(!reset) begin state <=Idle; rst<=0; end else case (state) Idle: begin rst<=0; state<=S1; end S1: begin rst<=1; if(ok_buy||cancel_buy) state<=Idle; end endcase
wire buyok;
toubi u1(rst,clk,coin_five,coin_ten,led_display,total_count);
select_drink u2(clk,rst,cel_cola,cel_diet,/*no_cola,no_diet,*/
led_cola_sel,led_diet_sel,/*led_cola_ok,led_diet_ok,*/total_consum);
ok_or_cancel u3(clk,rst,ok_buy,cancel_buy,ok,cancel,led_buy,led_cancel);
give_check u4(reset,buyok,clk,ok,money_ok,rst,led_cola_out,led_diet_out, led_cola_sel,led_diet_sel,led_cola_ok,led_diet_ok/*no_cola,no_diet*/); coin_return
u5(clk,rst,ok_buy,money_return,total_count,total_consum,money_ok,cancel_buy,cancel);
xianshi q1(led_cola_sel,shu_cola_sel); xianshi q2(led_diet_sel,shu_diet_sel);
xianshi2 w2(money_return,shu_money_return); endmodule
///显示数量的
module xianshi(a,b); //用来显示 input [10:0]a; output reg [6:0]b; always@(a) case(a) 11'd0:b<=7'b1000000; 11'd1:b<=7'b1111001; 11'd2:b<=7'b0100100; 11'd3:b<=7'b0110000; 11'd4:b<=7'b0011001; 11'd5:b<=7'b0010010; 11'd6:b<=7'b0000010; 11'd7:b<=7'b1111000; 11'd8:b<=7'b0000000; 11'd9:b<=7'b0010000; endcase endmodule //钱数显示
module xianshi2(total_count,led_display); input [10:0]total_count;
output reg [13:0]led_display; always@(total_count) case(total_count) 11'd0: led_display<=14'b1000000_1000000; 11'd1: led_display<=14'b1000000_0010010;
11'd2: led_display<=14'b1111001_1000000; 11'd3: led_display<=14'b1111001_0010010; 11'd4: led_display<=14'b0100100_1000000; 11'd5: led_display<=14'b0100100_0010010; 11'd6: led_display<=14'b0110000_1000000; 11'd7: led_display<=14'b0110000_0010010; 11'd8: led_display<=14'b0011001_1000000; 11'd9: led_display<=14'b0011001_0010010; 11'd10: led_display<=14'b0010010_1000000; 11'd11: led_display<=14'b0010010_0010010; 11'd12: led_display<=14'b0000010_1000000; 11'd13: led_display<=14'b0000010_0010010; 11'd14: led_display<=14'b1111000_1000000; 11'd15: led_display<=14'b1111000_0010010; 11'd16: led_display<=14'b0000000_1000000; 11'd17: led_display<=14'b0000000_0010010; 11'd18: led_display<=14'b0010000_1000000; 11'd19: led_display<=14'b0010000_0010010; endcase endmodule
//去抖模块
module qudou(clk,reset,k,key); input k,reset,clk; output reg key; reg [10:0]clock;
always@(posedge clk) if(!reset) clock<=11'd0; else begin if(k) begin key<=1; clock<=0; end else begin clock<=clock+1; if(clock==1000) begin clock<=11'b0; key=0;
end end end endmodule
/////投币电路
module toubi(reset,clk,coin_05,coin_10,led_display,total_count);//加一个去抖模块 input reset,clk,coin_05,coin_10; output [13:0]led_display;
output reg[10:0]total_count;//统计投入里面的金币 wire qu_coin_05,qu_coin_10;
qudou a1(clk,reset,coin_05,qu_coin_05); qudou a2(clk,reset,coin_10,qu_coin_10); reg [10:0]count_1,count_2;
always@(negedge qu_coin_05 or negedge reset) begin if(!reset) begin count_1<=11'd0; end else if(!qu_coin_05) begin count_1 <= count_1+11'd1; end end
always@(negedge qu_coin_10 or negedge reset) if(!reset) begin count_2<=11'd0; end else if(!coin_10) begin
count_2<=count_2+11'd2; end
always@(count_1 or count_2) total_count<=count_2+count_1;
xianshi2 a4(total_count,led_display); endmodule
//饮料选择处理模块
module select_drink(clk,reset,select_cola,select_diet/*,sock_cola,sock_diet*/,
cola_sel,diet_sel,/*led_cola_ok,led_diet_ok,*/total_consum); input clk,reset,select_cola,select_diet;
正在阅读:
自动售货机设计Verilog03-25
大亚湾核电站选址问题的分析08-18
8数学冀教版 第19章 平面直角坐标系用坐标表示图形的06-22
人类与环境之间的关系探讨06-07
铝合金 特性08-15
“被遗忘”的黑板板书04-25
海南省小升初英语语法专项提高训练 句子专项6(2)01-07
七年级英语上册 Unit 9 My favorite subject is science Period05-28
软件测试计划书模板02-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 自动售货机
- Verilog
- 设计
- 2014年国家公务员考试行测备考言语理解:细节理解型题目精讲
- 2018届高三第二次模拟考试理科综合生物试题含答案
- 2018年大学生暑期社会实践活动报告
- 参考资料 工艺管道专业技术员手册 - secret - 图文
- 运用思维导图培养学生的自主学习能力
- 用充满爱的行为陪伴孩子成长 德育论文
- 2018年美国留学金融工程专业选校名单及申请要求 - 图文
- “以读为本 阅读感悟”结题报告
- 安全技术规范
- 大学语文课后练习题目与答案
- 每日一填《弟子规》360改命力行表
- 人员素质测评理论与方法试题
- 机组励磁系统检修作业指导书
- 烧结作业区烧结矿看火工实习报告
- 关于农业部定点市场重新核定情况的通报
- 关于做好江苏省2012年普通高校招生网上填报志愿工作的通知
- DSP+FPGA在高速高精运动控制器中的应用
- 涡北矿安全生产体系建设考核实施细则
- 寒假社会实践活动策划书
- 《窃读记》教案