北邮数电实验下 简易自动售货机 实验报告.docx

上传人:b****5 文档编号:2776063 上传时间:2022-11-15 格式:DOCX 页数:23 大小:180.43KB
下载 相关 举报
北邮数电实验下 简易自动售货机 实验报告.docx_第1页
第1页 / 共23页
北邮数电实验下 简易自动售货机 实验报告.docx_第2页
第2页 / 共23页
北邮数电实验下 简易自动售货机 实验报告.docx_第3页
第3页 / 共23页
北邮数电实验下 简易自动售货机 实验报告.docx_第4页
第4页 / 共23页
北邮数电实验下 简易自动售货机 实验报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

北邮数电实验下 简易自动售货机 实验报告.docx

《北邮数电实验下 简易自动售货机 实验报告.docx》由会员分享,可在线阅读,更多相关《北邮数电实验下 简易自动售货机 实验报告.docx(23页珍藏版)》请在冰豆网上搜索。

北邮数电实验下 简易自动售货机 实验报告.docx

北邮数电实验下简易自动售货机实验报告

 

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

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

当前位置:首页 > 工程科技 > 能源化工

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

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