




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易加油机控制系统(数字电路实验)一、设计课题的任务要求设计并实现一个简易加油机控制系统,能够完成定值加油、加油至油箱满等功能,并显示所加油量和钱数。基本要求:1、油价固定设为5元/升。2、 用2个按键(btn7、btn6)分别表示一百元、十元,用 btn5做 加油开始键,用btnO做系统复位键。用3个数码管(disp2、displ、 dispO)显示钱数,以元为单位,上限990元;用数码管(disp5、disp4、 disp3)显示加油量,精确到 0.1升,最大显示99.9升。3、定值加油时,先输入钱币,数码管同时显示钱数,按加油键,开始加油。加油过程 中,钱数及加油量的显示从零开始递增,直
2、到钱数到达预定值。并用发光二极管表示购买成功。加油过程中,所有按键按下无效。4、加油至油箱满:在钱币数为零的状态下,按加油键,钱数及加油 量的显示从零开始 递增,直到油箱加满。自行设计一个随机数发生 器,控制加油量自动停止在 30升至50升之间,精确到0.1升。 加油过程中,所有按键按下无效。5、复位键(btn0)按下后,系统复位,此时数码管显示钱币数及加 油量均为零。二、系统设计(包括设计思路、总体框图、分块设计)1设计思路:这次设计将整个程序分为控制计数模块,按键输入 模块,数码管现实模块,防抖模块以及随机数产生模块。其中控制计 数模块为系统核心,识别分析所有按键输入信号并给出控制信号;
3、按 键输入模块用于消除按键时机械抖动时可能产生的错误输入信号;数码管现实模块采用分时显示的方法让六个数码管分别显示油价与油 量;随机数产生模块用于产生一个一定范围的随机数。2总体框图:3.分块设计 控制和计费模块:采用多重if语句判断实现逻辑功能。当时钟上升沿来临,若清零 键被按下(btnO二1'则清零变量,完成判断;若清零键非零则判 断是否按下加油键(按下则 m= T),若按下则 按键防抖模块:按键有效的判断条件是按键是否按下一定时间(其中 btn 7,bt n6 是按下150ms后有效,btn5,btn0是按下100ms后有效)。一般按键抖 动时间在5ms到10ms之间,故该判断条
4、件能有效防抖。 显示模块:该模块需同时显示油价和油量两个数据。本来需要两类信号来分别储存油量数据和油价数据。但考虑到油价与油量有一个固定的函 数关系(油量二油价/5),可以将油量类的信号省去,只储存油价类的 信号。在显示时,只需要把油价信号进行一个函数变换即可显示油量。 这样做简化了信号个数,也方便对数据进行操作。 随机数产生模块:实验要求为产生一个30升到50升的随机加油量,对应到油价 就是一个150到250的数。故随机数模块依据按下加油键的时间为随 机变量产生一个150到250的随机数送到油价信号。三、仿真波形及波形分析由于整个程序功能复杂,故做分模块仿真。1分频模块:采用clk_100为
5、例子进行仿真。鉴于50MHz是一个很大的频率,基础时钟的频率在仿真中设置为 10kHz,分频系数为100.2防抖模块:鉴于4个按键都采用相同的防抖手段,故采用加油键(btn5) 作例子。可以看见前面两个小的抖动 m值都未发生变化,直到加油 键被按下超过100毫秒时m值才变为1,即实现了防抖功能。3显示模块:啊dgtc控制某个数码管亮,可以看见它在六个时钟周期内循环 变化;dgt控制显示数码显示数字,可以看见在一个时钟周期(红色 椭圆内)其稳定为一个值,输入数码管之后就稳定为一个数字;而 point为油价小数点,它只在某个特定的数码管后亮起,在仿真上可以看见它每隔六个时钟周期值变为11 PS血娜
6、ms20.972 msi16. 0 nsJwrnwinjwuvimuumrKrownjmjmnwKrLnJUUI U I U I U I U I LI I U ILTFTTTL' - HL' - TLiTT4控制模块: 初始输入油价状态:Btn7与btn6两个键分别控制油价的百位与十位,可以看见按下btn6键后油价十位(price2)变为1,按下btn7键后油价百位变为 1( price2),再按下btn6键后油价十位(price2) 变为2.Kme16.0feiriOA =ILfctriSA IA il>«3bin?A iTtLMktLMO軋1IV-6血13L
7、tdA Q pri c«0A <Q priA <心LSIQ pr lA iO=2r3pointB i1B7 772 n=335.544 ns 5Q3. 3:IC673. D39 ns&3B. B81 ae1. DOT ek丨IIIII16. 0 nsL_一_II_II_'一 I_'I_I'一一 i_II_II_.iwjwnouiniiwininwnmwLwniuinininmnwuinmiinininmnnwniLoiiirawmcolnrrn 输入油价为零的加油过程:直接按下btn5键后可以看见目标油价(goalpri2、1、0)被直接赋
8、给随机数值(在 150 到250之间的一个数),显示油价从零开始递增(price2、1、0)。V:P PSS5 544&TLW9呷* 32 s:LLB. 0 nsJbtufl!btnS_T'- LbtnJS*3btmfiuiinn、iimiiellclkMEdklOclkJOO皿皿唧唧】训im皿皿】侧刚瀏】11唧11皿】側叩唧】训皿皿】瀏唧唧唧】i刑湘瀏洲侧i皿皿【皿w【m唧皿皿】i脚皿冊ledEiiniiiniiiiiiiaii3iiiitiiiitiiiEii£ii锣E回 priceD:OOy LU * L2 T 3 X 4 X 5 1 6 ? i: 8 X K&
9、#187;J COJ X 1: t E2 X 、;H priceltjoXJ矽LBS priet2L ; j :; j j : j : j j j : I | ID衬為 sotlpnO:0 X3冷ERS loslpsril.耐丈 sS評al卩8】黑【0 38poinl1Ia11iiu11tlith11tl11iII l!I nnaiiiii, .!i电申 iiiiiiiiiaiiiiiiiiiiiin iiiiiiii 已输入油价加油过程:输入油价10元(即只按btn6键一下),再按下加油键(btn5),可以看见目标油价被赋值为10元(goalpril被赋值为1,goalpri2、goalpr
10、iO),显示油价(price2、1、0)从零开始递增,每0.1秒增加一次。增加到目标油价后显示油价不再变化,同时led值变为1'即加油完成后led灯亮起。 清零过程:在仿真后按下清零键 (btn0),显示油价与led标志都被清零,即加油指示灯、油价显示 都回到初始状态。LltuS12Tbt&TUMcLk_ikcLkLlDSdLkjmLid回冲“D回 JKT3hlE:L±SiDH EoolpriL&備S EIpitlZ036pointC>四、源程序(要有注释)library ieee;use ieee.std_logic_1164.all;use ieee
11、.std_logic_ un sig ned.all;use IEEE.STD_LOGIC_ARITH.ALL;en tity oilm isport(clk,btn7,btn6,btn5,btnO:in stdogic;-按键输入,btn7与btn6控制油价百位、十位变化, btn5为加油键,btnO为重置键dgt:out std_logic_vector(6 downto 0);-输出,控制数码管显示数字 dgtc:out std_logic_vector(5 downto 0);-输出,分频控制某个数码管亮 poi nt,led:out stdogic);-输出,控制小数点end oil
12、m;architecture a of oilm issignal clk_100,clk_1k,clk_10:std_logic;- 分频后频率signal k,fuelf,zerof,m:stdogic;-状态标志量,m= '1'表示加油键按下,fuelf= 'T 表示 加油过程中,zerof= '1'表示输入油价为零,k由于控制改变加油最终油价signal spri2,pri2,vpri2:integer range 0 to 4;-spri2、1、0 储存按键后的油价,pri2、1、0 储存显示的油价,vpri2、1、0储存加油最终油价signa
13、l spri1,pri1,spri0,pri0,vpri1,vpri0,cap2,cap1,cap0:integer range 0 to 9;_cap2、 1、 0 用于储存显示油价pri2、1、0对应的油量值signal cnt00:integer range 0 to 249999;signal cnt01:integer range 0 to 24999;signal cnt02:integer range 0 to 2499999;sig nal cn t17,c nt16:i nteger range 0 to 14;sig nal cn t15,c nt10:i nteger r
14、ange 0 to 9;sig nal cn t2:i nteger range 0 to 5;sig nal cn t3:i nteger range 150 to 250;sig nal tmp32:i nteger range 0 to 2;sig nal tmp31,tmp30:i nteger range 0 to 9;beginzf:process(spri2,spri1)-时刻判断输入油价是否为零beginif (spri2+spri1) > 0 thenzerof <= '0'elsezerof <= '1'end if;end
15、 process zf;control:process(spri2,spri1,spri0,m,clk_10,btnO)-控制模块beginif clk_10'eve nt and clk_10 = '1' the nif btnO = '1' and fuelf /='1' thenk <= '0'led <= 'O'elseif m = '0' thenpri2 <= spri2;pri1 <= spri1; pri0 <= spri0;elseif zer
16、of = 'O' and k = '0' the nfuelf <= '1'vpri2 <= spri2;vpri1 <= spri1;vpri0 <= spri0;pri2 <= 0;pri1 <= 0;pri0 <= 0;k <= '1'elsif zerof = '1' and k = '0' the nfuelf <= '1'vpri2 <= tmp32;vpri1 <= tmp31;vpri0 <= t
17、mp30; pri2 <= 0;pri1 <= 0;pri0 <= 0;k <= '1'end if;end if;if (m='1') and (fuelf = '1') thenif (pri2*100+pri1*10+pri0) < (vpri2*100+vpri1*10+vpri0) then if (pri0=9) thenpri0<=0;if (pri仁9) the npri1<=0;pri2<=pri2+1;elsepri1<=pri1+1;end if;elsepriO<
18、=priO+1;end if;elsefuelf <= '0: led <= '1'end if;end if;end if;end if;end process;frequency:process(clk)-分频模块beginif (clk'eve nt and clk ='1') the nif cn t00 = 249999 then cn t00<= 0; clk_100 <= n ot clk_100; else cnt00 <=cnt00 +1;end if;end if;if (clk'eve
19、nt and clk ='1') the nif cn t01 = 24999 then cnt01<= 0; clk_1k <= n ot clk_1k; else cnt01 <=cnt01 +1;end if;end if;if (clk'eve nt and clk = '1') the nif cnt02 = 2499999 then cnt02<=0; clk_10 <= not clk_10; else cn t02 <=cnt02+1;end if;end if;end process;anti_sha
20、ke:process(clk_100,btn7,btn6,btn5,btn0)-防抖模块 beginif clk_100'eve nt and clk_100 = '1' the nif btn7 = '1' the nif cnt17 = 14 thencnt17 <= 0;if spri2 = 4 the nspri2 <= 0;elsespri2 <= spri2 +1;end if;elsecnt17 <= cn t17 +1;end if;end if;if btn6 = '1' the nif cnt1
21、6 = 14 thencnt16 <= 0;if spril = 9 the nspril <= 0;elsespril <= spril +1;end if;elsecnt16 <= cn t16 +1;end if;end if;if btn5 = '1' the nif cnt15 = 9 the ncnt15 <= 0;m <= '1'elsecnt15 <= cn t15 +1;end if;end if;if btnO = '1' and fuelf /='1' thenif
22、cnt10 = 9 the ncnt10 <= 0;m <= '0'spri2 <= 0;spri1 <= 0;elsecnt10 <= cn t10 +1;end if;end if;end if;spri0 <= 0;end process an ti_shake;dis1:process(clk_1k,pri2,pri1,pri0)-显示模块一,完成油价油量对应运算 beginif (clk_1k'eve nt and clk_1k = '1') the nif (pri0*2 >= 10) the nca
23、p0 <= (pri0*2 rem 10);if (pri1*2+1) >= 10) the ncap1 <= (pri1*2+1) rem 10;cap2 <= pri2*2 +1;elsecap1 <= pri1*2+1;cap2 <= pri2*2;end if;else capO <= pri0*2;if (pri1*2 >= 10) the ncapl <= pri1*2 rem 10;cap2 <= pri2*2 +1;elsecapl <= pri1*2;cap2 <= pri2*2;end if;end i
24、f;end if;end process disl;dis2:process(clk_1k,pri2,pri1,pri0,cap2,cap1,cap0)-显示模块二,六个数码管显示 beginif (clk_1k'eve nt and clk_1k = '1') the nif cnt2 = 5 the ncnt2 <= 0;elsecnt2 <= cn t2+1;end if;end if;case cnt2 iswhe n 5 => dgtc <= "011111"whe n 4 => dgtc <= &quo
25、t;101111"whe n 3 => dgtc <= "110111"whe n 2 => dgtc <= "111011"whe n 1 => dgtc <= "111101"whe n others => dgtc <= "111110"end case;case cnt2 iswhen 2 => case pri2 isWHEN 0=> dgt<="0111111"WHEN 仁dgt<="0000
26、110"WHEN 2=> dgt<="1011011"WHEN 3=> dgt<="1001111"WHEN others=> dgt<="1100110"end case;poi nt <= '0'whe n 1 => case pri1 isWHEN 0=> dgt<="0111111"WHEN 仁dgt<="0000110"WHEN 2=> dgt<="1011011"
27、;WHEN 3=> dgt<="1001111"whe n 0 =>whe n 5 =>whe n 4 =>WHEN 4=> dgt<="1100110"WHEN 5=> dgt<="1101101"WHEN 6=> dgt<="1111101"WHEN 7=> dgt<="0100111"WHEN 8=> dgt<="1111111"WHEN others=> dgt<=&
28、quot;1101111" end case;poi nt <= '0'case pri0 isWHEN 0=> dgt<="0111111"WHEN 仁dgt<="0000110"WHEN 2=> dgt<="1011011"WHEN 3=> dgt<="1001111"WHEN 4=> dgt<="1100110"WHEN 5=> dgt<="1101101"WHEN 6=&
29、gt; dgt<="1111101"WHEN 7=> dgt<="0100111"WHEN 8=> dgt<="1111111"WHEN others=> dgt<="1101111" end case;poi nt <= '0'case cap2 isWHEN 0=> dgt<="0111111"WHEN 仁dgt<="0000110"WHEN 2=> dgt<="101
30、1011"WHEN 3=> dgt<="1001111"WHEN 4=> dgt<="1100110"WHEN 5=> dgt<="1101101"WHEN 6=> dgt<="1111101"WHEN 7=> dgt<="0100111"WHEN 8=> dgt<="1111111"WHEN others=> dgt<="1101111" end case;po
31、i nt <= '0'case cap1 isWHEN 0=> dgt<="0111111"WHEN 仁dgt<="0000110"WHEN 2=> dgt<="1011011"WHEN 3=> dgt<="1001111"WHEN 4=> dgt<="1100110"WHEN 5=> dgt<="1101101"WHEN 6=> dgt<="1111101"
32、;WHEN 7=> dgt<="0100111"WHEN 8=> dgt<="1111111"WHEN others=> dgt<="1101111"end case;point <= '1'when others => case capO isWHEN 0=> dgt<="0111111"WHEN 仁dgt<="0000110"WHEN 2=> dgt<="1011011"WHEN
33、 3=> dgt<="1001111"WHEN 4=> dgt<="1100110"WHEN 5=> dgt<="1101101"WHEN 6=> dgt<="1111101"WHEN 7=> dgt<="0100111"WHEN 8=> dgt<="1111111"WHEN others=> dgt<="1101111"end case;poi nt <= '
34、;0'end case;end process dis2;rand1:process(clk)-随机数产生模块beginif clk'eve nt and clk = '1' the nif cnt3 = 250 thencnt3 <= 150;elsecnt3 <= cnt3 + 1;end if;end if;end process ran d1;tmp32 <= cnt3 / 100;tmp31 <= (cnt3 rem 100) / 10;tmp30 <= cnt3 rem 10;en d;五、功能说明及资源利用情况功能说明:初始状态按下btn7、btn6两个键会分别改变油价百位和十位(按 一次就加1)。当按下加油键(btn5),状态量m改变,进入加油状态, 以0.1秒为间隔加油,每次油价加1元。按下加油键之后会根据之前 输入油价是否为零(zerof为0则输入油价不为零),若
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司房租租凭合同范本
- 劳动安全协议合同范本
- 包子店加盟签约合同范本
- 人工打草合同范本
- 冲孔加工销售合同范本
- 2024年河南省直第三人民医院招聘笔试真题
- 第14课《回忆我的母亲》教学设计 2024-2025学年统编版语文七年级上册
- 力工合同范例
- 中国铁建合同范本
- 包月工作合同范本
- 菌菇智慧方舱栽培及食用菌菌包中心生产基地项目可行性研究报告
- 生物工程毕业设计开题报告
- 园林垃圾处理政策解读
- GT 42456-2023 工业自动化和控制系统信息安全 IACS组件的安全技术要求
- 《胎心监护及判读》
- 养老院管理-护理员-绩效考核表
- 奥尔夫技能考核方案
- 指数函数及其图像与性质教案
- BPO糊的生产工艺
- 装饰装修工程安全管理培训学习
- 非煤露天矿山风险辨识与评估及风险控制
评论
0/150
提交评论