- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字电路与逻辑设计实验
题目: 简易加油机控制系统
学号: 2012211010
姓名: 陈章斌
班级: 2012211207
学院: 电子工程学院
时间:2014/11/5
设计课题的任务要求
设计并实现一个简易加油机控制系统,能够完成定值加油、加油至油箱满等功能,并显示 所加油量和钱数。
基本要求:
1、 油价固定设为 5 元/升。
2、 用 2 个按键(btn7、btn6)分别表示一百元、十元,用 btn5 做加油开始键,用 btn0 做系统复位键。用 3 个数码管(disp2、disp1、disp0)显示钱数,以元为单位,上限 990 元;用数码管(disp5、disp4、disp3)显示加油量,精确到 0.1 升,最大显示 99.9 升。
3、 定值加油时,先输入钱币,数码管同时显示钱数,按加油键,开始加油。加油过程 中,钱数及加油量的显示从零开始递增,直到钱数到达预定值。并用发光二极管表 示购买成功。加油过程中,所有按键按下无效。
4、 加油至油箱满:在钱币数为零的状态下,按加油键,钱数及加油量的显示从零开始 递增,直到油箱加满。自行设计一个随机数发生器,控制加油量自动停止在 30 升至 50 升之间,精确到 0.1 升。加油过程中,所有按键按下无效。
5、 复位键(btn0)按下后,系统复位,此时数码管显示钱币数及加油量均为零。
提高要求: 1、 用小键盘输入价格,用点阵显示加油机各种状态及动画。 2、 设定不同的油品、油价。 3、 油库管理功能。 4、 自拟其它功能
二、系统设计(包括设计思路、总体框图、分块设计)
1、设计思路:
总分为五个模块,时钟分频模块,按键防抖模块,计费计量模块,油库管理模块,控制模块
2、设计框图:
系统框图:
单价
显示价钱
显示油量
加满加油
控制器
定值加油
油库管理
方框图:
CP
油库管理模块
单价
显示及提示模块
时钟分频模块
计费计量模块
清零
定值
加油
按键防抖模块
控制模块
YES
NO
NO
是否加满
YES
提示并复位
油量是否充足
计价计量
提示并复位
YES
NO
是否加好
警报并复位
YES
计价计量
NO
油量是否充足
NO
是否输入限额
ASM图
开始启动
等待加油
3、分块设计
①控制和计费模块:
采用状态机的设计方式,根据加油方式的不同,分为了S0、S1、
①按键防抖模块:
如图:按键防抖模块的原理是利用信号延迟,每个防抖模块都有一个输入时钟,每按下一次按键后输出端将产生一个输入时钟宽度的脉冲,输入时钟频率与主控模块中的状态切换扫描时钟频率相同,使状态能够及时的切换。
②数码管显示模块
数码管主要用于显示计费、里程、等待时间信息。clk_shu连接1kHz时钟扫描信号,s0~s6用于接收计费控制模块输出的各个数码管显示的数字。Weixuan和duanxuan控制数码管的位选和段选信号。
③时钟分频模块
将50MHz片上时钟分频为1Hz、1kHz、200Hz时钟信号,其中1Hz用于计费和计时。200Hz用于按键防抖和状态切换。1kHz用于数码管和点阵的扫描。
三、仿真波形及波形分析
①数码管显示模块:
下图是固定s0~s6为数字951413后的仿真波形,由于S1位在程序中没有用到,于是将其始终置为高电平(灭),实际输出应为9 1413。
如图所示:weixuan信号每隔6个时钟周期扫描一次,扫描频率为166Hz足以使人眼产生连续显示的感觉。观察duanxuan信号,在圆圈处应显示数字“1”,duanxuan为0000110正是“1”的段选码。说明数码管能将s0~s6传输的数字正确的显示。
②按键防抖模块
如图,keyin输入一个持续时间约为0.1s的按键信号并用高频时钟模拟抖动,keyout输出一个时钟周期(5ms)的高电平。
③时钟分频模块:
由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,观察1kHz和200Hz信号如下:
四、源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY oil IS
PORT(
clk_in:IN STD_LOGIC;
q_in:IN STD_LOGIC_VECTOR(3 downto 0);
cat_out:OUT STD_LOGIC_VECTOR(5 downto 0);
d_out:OUT STD_LOGIC_VECTOR(6 downto 0);
p_out:OUT STD_LOGIC;
st
文档评论(0)