- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EDA课程设计自动售货机控制系统创新
电子课程设计
——自动售货机控制系统的设计
专业、 班级: 通信姓名:
学号
指 导 老 师:李 斌
2 0 1 5 年 1 2 月 绪论 1
一、设计任务与要求 1
二、总体框图 1
框图 1
设计思路 1
三、器件选择 1
1
1、分频器模块 1
2、数码管显示模块 1
3、取货模块 1
五、总体设计电路图 1
1、总体设计电路原理图 1
2、管脚分配表 1
3、仿真图 1
1
七、参考文献 1
自动售货机控制系统的设计
能够完成对货物信息的存储、进程控制、硬币处理、余额计算和显示等功能。
1 自动售货机可以出售四种货物,每种商品的数量和单价在初始化时设定,并存储在存储器中。
2用户可以用硬币进行购物,通过按键进行选择;售货时,能够根据用户输入的钱币数来判断钱币是否够,钱币足够时,则根据顾客要求自动售货;钱币不够时,则给出提示并推出;能够自动计算出应找钱币余额,库存数量并显示。
2 采用模拟开关分别模拟5角和1元的硬币来进行购物,并通过按键来选择商品。
3 系统能够根据用户输入的硬币,判断钱币是否够,当所投硬币达到或超过购买者所选面值时,则根据顾客的要求自动退货,并找回剩余的硬币,然后回到初始状态。当所投硬币不够时,则给出提示,并通过一个复位键退回所投硬币,然后回到初始状态。
二、总体框图
框图
设计思路
本系统由对外部投入硬币的检测来产生脉冲,并对产生的脉冲进行计数,其中a 表示投入的是0.5元的硬币,b 表示投入的是1元的硬币,每次根据投入的硬币不同而分别计数,并将投入的总金额用两位数码管显示出来,当达到了交易金额时,out产生一个正脉冲,此正脉冲控制闸门打开,饮料掉出来,当超出了交易金额,高位数码管显示找零金额找零,3秒后自动复位。
三、器件选择
分频器模块verilog设计程序如下:
module fp(old_clk,clk);
input old_clk;
output reg clk;
reg[19:0]k;
always @(posedge old_clk)
begin
begin
clk=~clk; //状态转换,从高电平跳到低电平,或从低电平跳到高电平
k=0;
end
else
k=k+1;
end
endmodule
2、数码管显示模块
数码管显示模块程序如下:
module xianshi(seg,sl,clk,reset,a,b,number_out,number_in);
input clk,reset;
input a,b;
input [9:0]number_in;
output[7:0]seg;
output[3:0]sl;
output[9:0]number_out;
reg[7:0]segdat_reg;
reg[7:0]seg_reg;
reg[3:0]sl_reg,disp_dat;
reg[1:0]count;
reg[9:0]number;
reg clk1;
reg dot,dot1;
//reg[3:0]sl;
integer cnt=0;
always@(posedge clk)
begin
if(cnt==25000)
begin
clk1=~clk1;cnt=0;end
else begin cnt=cnt+1;
end
end
always@(posedge clk1)
begin
count=count+1;
end
always@(posedge a or posedge b or posedge reset)
begin
if(reset)number=0;
else
number=a*5+b*10;
end
always@(count[1:0])
begin
case(count[1:0])
2b00:disp_dat=number%10;
2b01:begin disp_dat=number/10;dot=1b1;end
2b10:disp_dat=number_in%10;
2b11:begin disp_dat=number_in/10;dot1=1b1;end
endcase
case(count[1:0])
2b00:sl_reg=4b1110;
2b01:sl_reg=4b1101;
2b10:sl_reg=4b1011;
2b11:sl_reg=4b0111;
endcase
end
always@(disp_dat)
begin
if(dot)begin segdat_reg=8h80;dot=0;end
if(dot1)begin segdat_reg=8h80;dot1=0;end
case(disp_dat)
4h0:segda
文档评论(0)