北邮数电实验下 简易自动售货机 实验报告.docx
- 文档编号:2776063
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:23
- 大小:180.43KB
北邮数电实验下 简易自动售货机 实验报告.docx
《北邮数电实验下 简易自动售货机 实验报告.docx》由会员分享,可在线阅读,更多相关《北邮数电实验下 简易自动售货机 实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
北邮数电实验下简易自动售货机实验报告
2013~2014第一学期
数字电路与逻辑设计
实验报告
一.设计课题及任务要求
1.设计课题:
简易自动售货机
2.任务要求:
设计一个简易的自动售货机,能够完成钱数处理、找零、显示、退币等功能。
基本要求:
·用2个数码管(disp5,disp4)显示钱数,以元为单位。
用3个按键(btn0,btn1,btn2)分别表示一元、五元、十元,每按一次按键,增加一次相应的钱数,上限99元。
·再用3个按键(btn3,btn4,btn5)分别对应3种商品,其中,商品甲售价3元、商品乙售价8元、商品丙售价12元;
· 买东西时,先输入钱币,再按对应的商品键。
每按一次商品键,钱数要相应地减少,同时蜂鸣器提示购买成功。
剩余钱数大于3元可继续按商品键再次购买;当剩余钱数少于3元时,表示钱数的数码管disp5,disp4显示为零,同时用数码管disp0显示退出的钱数。
·买东西时,按下商品键,若输入的钱数少于商品的价格,表示钱数的数码管disp5,disp4显示为零,同时用数码管(disp1、disp0)显示退出的钱数,并用蜂鸣器表示购买失败。
·按下商品键时,用数码管disp2表示当前购买的商品,1代表商品甲,2代表商品乙,3代表商品丙。
·用btn7做为退出功能键,退出键可以随时按下,按下后,数码管(disp5,disp4)显示为零,同时数码管(disp1、disp0)显示退出的钱数,表示结束购买,钱款全部退出。
提高要求:
·用点阵设计显示投币动画、出货动画,购买成功/失败动画;
·允许随时输入钱币,购买时,钱款不足有声光报警并等待追加钱币或选择别的商品;
二.系统设计
1.设计思路
根据程序实现的功能,可将其分为分频、防抖、逻辑运算、数码管显示、点阵图形显示五大模块。
将其串联起来即可完成整体功能。
其中,分频模块将芯片50M的时钟信号分为各模块所需的不同频率的时钟。
防抖模块用增加按键延时以避免长按按键执行多次指令的情况,逻辑运算模块对余额进行加减计算实现要求中加钱、买东西等功能。
数码管显示模块把运算模块的结果通过数码管进行显示。
在购买失败时,使能点阵图形显示模块及蜂鸣器,令点阵显示“X”来提示错误,同时蜂鸣器响。
2.程序框图
是
是
否
否
BTN7
BTN(3~5)
BTN(0~2)
3.分块设计
以下五个模块通过敏感信号串联,实现完整功能。
·分频模块:
分频器的原理是对输入的时钟信号脉冲进行计数,(占空比为50%时),在计数达到模值一半时,输出信号翻转,从而完成输出频率比输入信号低的脉冲,即分频。
在本实验中,防抖模块需要用到200Hz时钟,数码管需要50KHz时钟,点阵需要2.5MHz时钟。
通过设置时钟翻转时temp的值来改变分频比N。
[N=2*(temp+1)]
·防抖模块:
在程序执行过程中会持续扫描按键输入,当按键持续按下时则会进行多次信号输入,但实际情况只按下按键一次。
为避免此问题,需要使按键信号输入到之后程序前通过防抖模块,即用一个模20计数器计数时钟周期,在一个周期内只输出一个有效电平。
·逻辑运算模块:
此模块是算法的核心模块。
以200Hz时钟和七个按键作为输入,设置变量sum和money0、money1(余额的各位和十位)。
当检测到btn0~btn2之一按下时,根据对应按键判断sum,若大于等于99、95、90,则余额显示99,若小于该数,sum加上1、5、10元(99元封顶)。
同理,btn3~btn5之一按下时,判断sum,若大于等于3,扣除相应钱数,若小于3,退出钱数sum赋值给disp0。
同时,购买商品种类1、2、3赋值给disp2。
当btn7按下时,disp1和disp0显示sum,同时disp2、disp4和disp5清零。
其中,数码管的赋值用sum做除法及取余后得到的money1和money0实现。
·数码管显示模块:
首先使用分频系数为1000的分频器产生50KHz的时钟。
用模5计数器产生5个计数状态,决定数码管接通的电路和二极管点亮的数字,在时钟频率很高时可以同时显示5个数字。
将逻辑运算模块中赋值过的disp0、disp1、disp2、disp4和disp5赋值给DOUT7,数码管选通信号赋值给CatL。
·点阵图形显示模块:
首先使用分频系数为20的分频器产生2.5MHz的时钟。
r为模8计数器,产生8个计数状态,决定点阵选通的行和该行中点亮的点(行低电平选通,列高电平选通)。
当扫描频率达到一定大小时,8x8点阵会同时点亮。
三.仿真波形及波形分析
由于整个程序功能较复杂,故进行分块仿真。
1.分频模块仿真
由于50M时钟频率太高,在仿真时对输入时钟频率和分频系数做了修改。
(f=500KHz,分频系数N=10)。
仿真图如下,实现了分频。
2.防抖模块仿真
在仿真时,需将endtime设置长一些,才能看到防抖的结果。
仿真图如下,延时为100ms。
持续按下btn1,仅输出一个有效脉冲。
3.逻辑运算模块仿真
可以看到当按下不同按键,sum的值会相应按键功能进行加减。
例如,按下btn0时,sum为1,再次按下btn0,sum累加为2。
4.数码管显示模块仿真
输出为0、1、2、4、5。
扫描频率高时,五个数码管循环一起显示数字。
5.点阵图形显示模块仿真
点阵模块仿真类似数码管仿真情况。
扫描频率高时,八行点阵循环一起显示。
四.源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
useieee.std_logic_unsigned.all;
ENTITYsIS
PORT(bn0,bn1,bn2,bn3,bn4,bn5,bn7:
INSTD_LOGIC;--按键输入信号
clk,reset:
INSTD_LOGIC;--50M时钟输入信号
DOUT7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--数码管七段选通信号
CatL:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);--数码管选通信号
col,row:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);--点阵行列选通信号
beep:
outSTD_LOGIC--蜂鸣器输出信号
);
ENDs;
ARCHITECTUREbehaveOFsIS
SIGNALdisp0,disp1,disp2,disp4,disp5:
STD_LOGIC_VECTOR(6DOWNTO0);--数码管选通信号
SIGNALbtn0,btn1,btn2,btn3,btn4,btn5,btn7,enable:
STD_LOGIC:
='0';--通过防抖模块后各按键
SIGNALclk_50k,clk_200,clk_2500k:
STD_LOGIC;--50MHz、200Hz、2.5MHz时钟信号
SIGNALQ:
STD_LOGIC_VECTOR(3downto0);--数码管显示模块模5计数器
SIGNALtemp1:
INTEGERRANGE0TO499;--时钟计数器
SIGNALtemp2:
INTEGERRANGE0TO9;--时钟计数器
SIGNALtemp:
INTEGERRANGE0TO124999;--时钟计数器
signalr:
STD_LOGIC_VECTOR(7DOWNTO0);--点阵中间变量
SIGNALcount_BTN0:
INTEGERRANGE0TO20;--防抖计数器
SIGNALcount_BTN1:
INTEGERRANGE0TO20;--防抖计数器
SIGNALcount_BTN2:
INTEGERRANGE0TO20;--防抖计数器
SIGNALcount_BTN3:
INTEGERRANGE0TO20;--防抖计数器
SIGNALcount_BTN4:
INTEGERRANGE0TO20;--防抖计数器
SIGNALcount_BTN5:
INTEGERRANGE0TO20;--防抖计数器
SIGNALcount_BTN7:
INTEGERRANGE0TO20;--防抖计数器
BEGIN
p1:
PROCESS(clk,reset)--200Hz分频
BEGIN
IFreset='0'THEN
temp<=0;
ELSIFclk'eventANDclk='1'THEN
IFtemp=124999THEN--分频系数(124999+1)*2=250000
temp<=0;clk_200<=NOTclk_200;
ELSE
temp<=temp+1;
ENDIF;
ENDIF;
ENDPROCESSp1;
p2:
PROCESS(clk_200,bn0)--btn0防抖(5ms*20=100ms)
BEGIN
IF(clk_200'eventANDclk_200='1')THEN
IF(bn0='1')THEN
IFcount_BTN0=20THEN
count_BTN0<=count_BTN0;
ELSE
count_BTN0<=count_BTN0+1;
ENDIF;
IFcount_BTN0=19THEN
btn0<='1';
ELSE
btn0<='0';
ENDIF;
ELSE
count_BTN0<=0;
ENDIF;
ELSE
ENDIF;
ENDPROCESSp2;
p3:
PROCESS(clk_200,bn1)--btn1防抖(5ms*20=100ms)
BEGIN
IF(clk_200'eventANDclk_200='1')THEN
IF(bn1='1')THEN
IFcount_BTN1=20THEN
count_BTN1<=count_BTN1;
ELSE
count_BTN1<=count_BTN1+1;
ENDIF;
IFcount_BTN1=19THEN
btn1<='1';
ELSE
btn1<='0';
ENDIF;
ELSE
count_BTN1<=0;
ENDIF;
ELSE
ENDIF;
ENDPROCESSp3;
p4:
PROCESS(clk_200,bn2)--btn2防抖(5ms*20=100ms)
BEGIN
IF(clk_200'eventANDclk_200='1')THEN
IF(bn2='1')THEN
IFcount_BTN2=20THEN
count_BTN2<=count_BTN2;
ELSE
count_BTN2<=count_BTN2+1;
ENDIF;
IFco
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮数电实验下 简易自动售货机 实验报告 北邮数电 实验 简易 自动 售货 报告