自动售货机课程设计.docx

上传人:b****7 文档编号:11286771 上传时间:2023-02-26 格式:DOCX 页数:12 大小:19.24KB
下载 相关 举报
自动售货机课程设计.docx_第1页
第1页 / 共12页
自动售货机课程设计.docx_第2页
第2页 / 共12页
自动售货机课程设计.docx_第3页
第3页 / 共12页
自动售货机课程设计.docx_第4页
第4页 / 共12页
自动售货机课程设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

自动售货机课程设计.docx

《自动售货机课程设计.docx》由会员分享,可在线阅读,更多相关《自动售货机课程设计.docx(12页珍藏版)》请在冰豆网上搜索。

自动售货机课程设计.docx

自动售货机课程设计

存档资料成绩:

 

华东交通大学理工学院

课程设计报告书

 

所属课程名称《电子(通信)系统设计》

题目 自动售货机系统设计     

分院  电信分院  

专业班级09级电信综合班

学  号 20090210420123

学生姓名 朱文斌    

指导教师 赵魏

 

2012年12月28日

华东交通大学理工学院

课程设计(论文)任务书

专业09通信班级1班姓名朱文斌

一、课程设计(论文)题目自动售货机系统设计

二、课程设计(论文)工作:

自2012年12月17日起至2012年12月28日止。

三、课程设计(论文)的内容要求:

1)设计一个自动售货机,此机能出售1元、2元、5元、10元的四种商品。

出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格。

2)顾客投入硬币的钱数也是有1元、2元、5元、10元四种,但每次只能投入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来。

3)顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间3秒(可用点阵模拟报警)。

如果投币额足够时自动送出货物(送出的货物用相应不同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管显示出来。

4)顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作。

5)售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管显示,显示2位即可。

此累加器只有商家可以控制清零。

学生签名:

朱文斌

2012年12月28日

课程设计(论文)评阅意见

序号

项目

等   级

优秀

良好

中等

及格

不及格

1

课程设计态度评价

2

出勤情况评价

3

任务难度评价

4

工作量饱满评价

5

设计中创新性评价

6

论文书写规范化评价

7

综合应用能力评价

综合评定等级

 

评阅人赵巍 职称讲师

2012年12月28日

目 录

第1章课程设计内容及要求........................2

第2章程序设计目的..............................5

第3章程序实现思路..............................6

第4章程序清单(或正文)........................8

第5章课程设计心得.............................15

第6章参考文献.................................16

第2章

程序设计目的

1)设计一个自动售货机,此机能出售1元、2元、5元、10元的四种商品。

出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格。

2)顾客投入硬币的钱数也是有1元、2元、5元、10元四种,但每次只能投入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来。

3)顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间3秒(可用点阵模拟报警)。

如果投币额足够时自动送出货物(送出的货物用相应不同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管显示出来。

4)顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作。

5)售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管显示,显示2位即可。

此累加器只有商家可以控制清零。

6)此售货机要设有一个由商家控制的整体复位控制。

第3章程序实现思路

3.1此次设计的自动售货机的功能简介

基本原理:

硬件实现中,顾客首先按键来选择自己想购买的货物,自动售货机会用数码管显示出来,然后顾客再选择货币种类,自动售货机也用数码管显示出来,顾客投币,自动售货机通过货币识别器来识别货币,顾客按确认键3s之后,自动售货机马上做出判断,投入的钱大于价格,则送出此货物,并找零,否则就会报警持续3s,自动售货机自动恢复初始状态等待为下一顾客服务,同时,它还会为商家做卖货额累加功能,并且这显示只能由商家来清零(商家通过整体复位来清零)

那么,基于硬件电路,软件来实现的时候就尽量模仿此按键、显示部分、以及各功能,在本文中用state、state_next、sure、give、clk、reset、goods1、goods2、goods3、goods4、j、display、profit、i、warning、readya、readyb、readyc、readyd、readye、readyf来实现模拟,并且这些变量名称通俗易懂,并且程序已全部给出。

3.2实现自动售货机的功能的设计思路

变量选择:

货物选择有四种,货币选择有四种,这样可以用编码形式设置成两位即可,但是考虑到与state作为引发条件,故两位不够,为了简便,本文用四位独热码编码方式;设计要求三次显示出货物选择、货币选择、找零显示,当然设置成三个数码管肯定可以,但是为来节约成本,就用一个两位的数码管显示即可,但此时要求数码管时分时使用;卖货额累加显示用八位的,以便在硬件中方便用数码管显示(当然需要7448显示译码器);另外售出的货物用四个数表示,送出的就为1,此功能与实际要求中四个不同颜色的指示灯显示匹配;实际要求还有说3s,故得引入时钟信号,但实现此功能只需要示意即可,用5个时钟周期示意。

程序构建:

本文模块是分步实现,所以得借助中间变量来引发下一次操作,一共六步,大概需要六个变量,结合引发功能,故用wait语句来实现,当wait()中括号内的条件满足则执行,否则循环等待,按照此想法,故每个子模块中都用到wait语句;另外,此程序明显要求多路选择,故用case语句,满足case()中对应条件,则执行对应的语句,实现对应的功能,此过程中还得用到辅助变量,本文可用j来实现,为case语句结合使用;当然if、else语句少不了;阻塞语句和非阻塞语句使用,他们只有是立即赋值还是等到下一时钟上升沿来到时再赋值,本文因为考虑到实时性,故主要用到阻塞赋值。

测试文件生成:

本来严格的需要用自动生成测试文件,这样可靠性更高,但是结合本文具体设计而言,手工写测试文件足已(程序代码不是很大),考虑到之前.v文件每个模块基本上都用到时钟的上升沿,这个引发条件就迫使测试文件中state和state_next中一直有效,等到sure按下3s后再清零,这使得硬件实现中得考虑这问题(用D触发器等们实现锁存等功能)

 

第4章程序清单或正文

程序代码:

mescale1ns/100ps

moduleAUTOTELLER(clk,state,state_next,sure,reset,give,goods1,goods2,goods3,goods4,warning,display,profit);

inputclk,state,state_next,sure,reset,give;

outputgoods1,goods2,goods3,goods4,warning,display,profit;

wireclk;

wirereset;

wiresure;

wire[3:

0]state;

wire[3:

0]state_next;

wire[3:

0]give;

reg[2:

0]j;

regreadya;

regreadyb;

regreadyc;

regreadyd;

regreadye;

regreadyf;

integeri;

reggoods1;

reggoods2;

reggoods3;

reggoods4;

regwarning;

reg[3:

0]display;

reg[7:

0]profit;

always@(posedgeclk)//商家整体复位

if(!

reset)

begin

display=4'b0000;

profit=8'b00000000;

j=3'b000;

warning=1'b0;

goods1=1'b0;

goods2=1'b0;

goods3=1'b0;

goods4=1'b0;

readya=1'b0;

readyb=1'b0;

readyc=1'b0;

readyd=1'b0;

readye=1'b0;

readyf=1'b0;

end

always@(posedgeclk)//顾客货品选择模拟以及显示

if(state!

=4'b0000)

begin

readya<=1'b1;

case(state)

4'b1000:

display=4'b0001;

4'b0100:

display=4'b0010;

4'b0010:

display=4'b0101;

4'b0001:

display=4'b1010;

endcase

end

always@(posedgeclkorposedgereadya)//顾客货币选择以及显示

begin

wait(readya)

begin

case(state_next)

4'b1000:

begin

display=4'b0001;

j=3'b001;

readyb=1'b1;

end

4'b0100:

begin

display=4'b0010;

j=3'b010;

readyb=1'b1;

end

4'b0010:

begin

display=4'b0101;

j=3'b011;

readyb=1'b1;

end

4'b0001:

begin

display=4'b1010;

j=3'b100;

readyb=1'b1;

end

default:

begin

display=4'b0000;

j=3'b000;

readyb=1'b0;

end

endcase

end

end

always@(posedgeclkorposedgereadyb)//投入货币不足引起警告准备找零显示

begin

wait(readyb)

begin

readya=1'b0;

if(sure)

begin

readyc=1'b1;

if(give

begin

i=5;

readyd=1'b1;

end

else

begin

display=give-display;

readye=1'b1;

end

end

end

end

always@(posedgeclk)//货物送出及商家卖货额累加显示

begin

wait(readye)

begin

case(j)

3'b001:

begin

goods1=1'b1;

profit=profit+8'b00000001;

end

3'b010:

begin

goods2=1'b1;

profit=profit+8'b00000010;

end

3'b011:

begin

goods3=1'b1;

profit=profit+8'b00000101;

end

3'b100:

begin

goods4=1'b1;

profit=profit+8'b00001010;

end

endcase

end

end

always@(posedgeclk)//3s警告或者是按键3s后自动复位准备下一位顾客操作

begin

wait(readyc)

begin

readyb=1'b0;

if(i>=1)

begin

if(readyd)

begin

warning<=1'b1;

i=i-1;

end

else

i=i+0;

end

else

begin

readyd=1'b0;

readyc=1'b0;

readyf=1'b1;

warning=1'b0;

goods1=1'b0;

goods2=1'b0;

goods3=1'b0;

goods4=1'b0;

end

end

end

always@(posedgeclk)

begin

wait(readyf)

begin

readye=1'b0;

end

end

 

第5章 课程设计心得

通过本次课程设计,我对VerilogHDL语言有了更深刻的了解,能够比较灵活地运用它来实现我们所想要要其实现的功能。

在实验中,我也遇到了很多挫折,不过我都和同伴一一克服了,大家齐心协力解决了问题,使我明白了和他人共同合作的重要性。

在以后的道路上我们也必须深刻认识到团队合作的精神,投入今后的发展之中。

成功就是在不断摸索着前进中实现的,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。

第6章 参考文献(资料)

[1]夏宇闻编著《Verilog数字系统教程》北京航空航天出版社

[2]梁瑞宇编写《FPGA设计实验指导书(VerilogHDL)》

[3]XX网站

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1