北邮数电综合实验 加油机的设计Word文档下载推荐.docx
- 文档编号:13680887
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:45
- 大小:619.89KB
北邮数电综合实验 加油机的设计Word文档下载推荐.docx
《北邮数电综合实验 加油机的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北邮数电综合实验 加油机的设计Word文档下载推荐.docx(45页珍藏版)》请在冰豆网上搜索。
自行设计一个随机数发生器,控制加油量自动停止在30升至50升之间,精确到0.1升。
5、复位键(btn0)按下后,系统复位,此时数码管显示钱币数及加油量均为零。
提高要求:
1、用小键盘输入价格,用点阵显示加油机各种状态及动画。
2、设定不同的油品、油价。
3、油库管理功能。
4、自拟其它功能。
二.系统设计
设计思路
自动加油机的程序主要的难点在于计数器的实现与不同状态的控制,先让投币计数器器计数投入的钱数,并用数码管显示出来,当加油键按下时,数码管显示归零,并让左右三个数码管同时开始从零计数,由于是五元一升,即当油量加两个数时,价钱加一个数,当价钱等于投币计数器传过来的值时,停止计数,显示动画,提示加油成功。
总体框图
2k分频器
投币计数器
加油计数器
数码管显示器
10元
100元
Cp
clk
jiayou
money
点阵
音乐
chooseoil
对每个模块都有一个复位,所以省略。
分块说明
(1)输入部分:
输入部分有六个输入端,分别为时钟输入,10元按键,100元按键,加油键,复位键,以及附加功能中的选择油品的开关。
复位信号为高电平有效,当reset=‘1’时,所以都清为0。
(2)处理部分:
主要处理的部分为加油计数器部分,当有reset=‘1’信号后,投币计数器向加油计数器传入及时的钱数值,当有jiayou=‘1’信号后,加油计数器的输出钱数值归零,并开始计数,直到钱数等于预定钱数。
在加满油的功能上,设定一个用时钟控制的计数器,当加油键按下且输入的钱数等于零时,加油键按下的时机就从计数器中把值赋给钱数,然后开始加油,后面的类似。
(3)输出部分:
输出的部分不单单只有数码管的输出,还有点阵与音乐的输出,在数码管的输出中,我通过六个数来控制六个数码管的值并输出,而点阵则是通过复位与加油键的控制输出三种不同状态的动画(我姑且把它起名为欢迎加油,正在加油,谢谢加油三种状态),音乐在加油成功后播放音乐,为我国经典的小提琴曲《梁祝》,让人在愉悦的心情中付钱。
三.仿真波形
1.投币计数模块
10元投币计数,其中mpo3,mpo2,mpo1分别表示moneypayout的缩写,为钱输出的百位十位与个位。
100元投币的计数
从10元计数器可以看出,最多钱可记到990:
2.加油计数模块
首先,chooseoil=‘0’当加油键没有按时,money3out=mpi3,money2out=mpi2,money1out=mpi1,这个是把付钱给用户看,而oil3out,oil2out,oil1out为9,5,0,这个意思是95号油的显示,95号油的油价为5元一升,当加油键按下时,moneyout3,moneyout2,moneyout1,oilout3,oilout2,oilout1归零并开始计数。
当计数到规定钱数时,停止计数,给点阵与音乐控制一个不同的信号,让他们改变状态。
这里为了仿真方便起见,只选择输入10元时。
(mpi为moneypayin的缩写)
当chooseoil=‘1’时,加的即为97号油,97号油我设定是十元一升,此时,moneyout与oilout计数是同步的。
并且注意到开始加油键没有按下时,oil3out,oil2out为9,7.说明此时已经变成了97号油。
加油至邮箱满:
当moneypayin=0时,设定一个计数器,在加油过程中通过加油键的按下瞬间把值传给钱数,接着就是与上面一样的加油计数方式。
3.数码管显示模块
我用了六个数值同时控制六个数码管的显示。
具体我们可以看到不同的为显示我想让它显示的地方,不妨把oil3in,oil2in,oilin设为123,money3in,money2in,money1in设为246.
4.点阵显示模块
点阵在前面已经提到分为状态一:
欢迎加油;
状态二:
正在加油;
状态三:
谢谢加油三种状态。
状态一,在点阵上显示英文字母HELLO和一个^_^的笑脸的动画,为了让LL区分开,我把它做成闪烁的形式。
H
E
L
O
笑脸
当加油机正在加油时,此时en1传入1,en2传入0,在点阵上显示“加油”两个字的动画。
“加”字:
“油”字:
当en1=“0”且en2=“1”时,进入第三状态:
谢谢加油,此时,点阵显示动画的“THANKS”和一个笑脸,其中笑脸与欢迎加油一样,故略去。
T
A
N
K
S
音乐模块由于控制过于简单且仿真波形没有实质性意义,故略去。
四.VHDL源程序
1.2k分频器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydiv2kis
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
end;
architecturefenpinofdiv2kis
signalcnt:
integerrange0to999;
--当记到999时反转
signalclk_tmp:
std_logic;
begin
process(clk_in)
if(clk_in'
eventandclk_in='
1'
)then
ifcnt=999then
cnt<
=0;
clk_tmp<
=notclk_tmp;
else
=cnt+1;
endif;
endprocess;
clk_out<
=clk_tmp;
2.投币计数器
entitypayis
port(
clk:
reset:
instd_logic;
pay100,pay10:
money:
outintegerrange0to990;
mpo3,mpo2,mpo1:
outstd_logic_vector(3downto0));
endpay;
architecturepaymoneyofpayis
signalmoneypay:
integerrange0to990;
signalmoney3,money2,money1:
std_logic_vector(3downto0);
mpo3<
=money3;
mpo2<
=money2;
mpo1<
=money1;
process(clk)
if(clk'
eventandclk='
)then
ifreset='
then
moneypay<
money3<
="
0000"
;
money2<
money1<
--复位
elsif(pay100='
andpay10='
0'
if(moneypay<
=890)then
=moneypay+100;
--投100元
=money3+1;
endif;
=980)then
if(money2="
1001"
=moneypay+10;
--投10元
elsemoney2<
=money2+1;
else
=moneypay;
elsemoneypay<
money<
endpaymoney;
3.加油计数器
entityjiayoucountis
reset:
jiayou,clk:
chooseoil:
dianzhenout1:
outstd_logic;
dianzhenout2:
moneypayin:
inintegerrange0to990;
mpi3,mpi2,mpi1:
instd_logic_vector(3downto0);
money3out,money2out,money1out:
outstd_logic_vector(3downto0);
oil3out,oil2out,oil1out:
musiccontrol:
endjiayoucount;
architecturesimpleofjiayoucountis
signaldeng:
integerrange0to1999;
std_logic_vector(3downto0);
signaloil3,oil2,oil1:
signalcnt2:
integerrange0to1;
signalmpc:
signalxiaobiao:
std_logic;
signalmoneyrd1,moneyrd2:
signalcnt100:
integerrange150to250;
signalcnt200:
integerrange300to500;
begi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮数电综合实验 加油机的设计 北邮数电 综合 实验 加油机 设计