版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 簡易加油機(jī)控制系統(tǒng) (數(shù)字電路實(shí)驗(yàn)) 1、 設(shè)計(jì)課題的任務(wù)要求 設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡易加油機(jī)控制系統(tǒng),能夠完成定值加油、加油至油箱滿等功能,并顯示 所加油量和錢數(shù)。 基本要求: 1、 油價(jià)固定設(shè)為 5 元/升。 2、 用 2 個(gè)按鍵(btn7、btn6)分別表示一百元、十元,用 btn5 做加油開始鍵,用 btn0 做系統(tǒng)復(fù)位鍵。用 3 個(gè)數(shù)碼管(disp2、disp1、disp0)顯示錢數(shù),以元為單位,上限 990 元;用數(shù)碼管(disp5、disp4、disp3)顯示加油量,精確到 0.1 升,最大顯示 99.9 升。 3、 定值加油時(shí),先輸入錢幣,數(shù)碼管同時(shí)顯示錢數(shù),按加油鍵,開始加油。加
2、油過程 中,錢數(shù)及加油量的顯示從零開始遞增,直到錢數(shù)到達(dá)預(yù)定值。并用發(fā)光二極管表 示購買成功。加油過程中,所有按鍵按下無效。 4、 加油至油箱滿:在錢幣數(shù)為零的狀態(tài)下,按加油鍵,錢數(shù)及加油量的顯示從零開始 遞增,直到油箱加滿。自行設(shè)計(jì)一個(gè)隨機(jī)數(shù)發(fā)生器,控制加油量自動(dòng)停止在 30 升至 50 升之間,精確到 0.1 升。加油過程中,所有按鍵按下無效。 5、 復(fù)位鍵(btn0)按下后,系統(tǒng)復(fù)位,此時(shí)數(shù)碼管顯示錢幣數(shù)及加油量均為零。 2、 系統(tǒng)設(shè)計(jì)(包括設(shè)計(jì)思路、總體框圖、分塊設(shè)計(jì))1. 設(shè)計(jì)思路:這次設(shè)計(jì)將整個(gè)程序分為控制計(jì)數(shù)模塊,按鍵輸入模塊,數(shù)碼管現(xiàn)實(shí)模塊,防抖模塊以及隨機(jī)數(shù)產(chǎn)生模塊。其中控制
3、計(jì)數(shù)模塊為系統(tǒng)核心,識別分析所有按鍵輸入信號并給出控制信號;按鍵輸入模塊用于消除按鍵時(shí)機(jī)械抖動(dòng)時(shí)可能產(chǎn)生的錯(cuò)誤輸入信號;數(shù)碼管現(xiàn)實(shí)模塊采用分時(shí)顯示的方法讓六個(gè)數(shù)碼管分別顯示油價(jià)與油量;隨機(jī)數(shù)產(chǎn)生模塊用于產(chǎn)生一個(gè)一定范圍的隨機(jī)數(shù)。2. 總體框圖: 分頻模塊 控制計(jì)數(shù)模塊 數(shù) 碼 管 顯 示 模 塊按鍵防抖1 Price-hundred按鍵防抖1 Price-ten按鍵防抖1 Reset按鍵防抖1 Start 隨機(jī)數(shù)產(chǎn)生模塊 3.分塊設(shè)計(jì) 控制和計(jì)費(fèi)模塊:采用多重if語句判斷實(shí)現(xiàn)邏輯功能。當(dāng)時(shí)鐘上升沿來臨,若清零鍵被按下(btn0 = 1)則清零變量,完成判斷;若清零鍵非零則判斷是否按下加油鍵(按
4、下則m=1),若按下則 按鍵防抖模塊: 按鍵有效的判斷條件是按鍵是否按下一定時(shí)間(其中btn7,btn6是按下150ms后有效,btn5,btn0是按下100ms后有效)。一般按鍵抖動(dòng)時(shí)間在5ms到10ms之間,故該判斷條件能有效防抖。顯示模塊: 該模塊需同時(shí)顯示油價(jià)和油量兩個(gè)數(shù)據(jù)。本來需要兩類信號來分別儲存油量數(shù)據(jù)和油價(jià)數(shù)據(jù)。但考慮到油價(jià)與油量有一個(gè)固定的函數(shù)關(guān)系(油量=油價(jià)/5),可以將油量類的信號省去,只儲存油價(jià)類的信號。在顯示時(shí),只需要把油價(jià)信號進(jìn)行一個(gè)函數(shù)變換即可顯示油量。這樣做簡化了信號個(gè)數(shù),也方便對數(shù)據(jù)進(jìn)行操作。隨機(jī)數(shù)產(chǎn)生模塊: 實(shí)驗(yàn)要求為產(chǎn)生一個(gè)30升到50升的隨機(jī)加油量,對應(yīng)
5、到油價(jià)就是一個(gè)150到250的數(shù)。故隨機(jī)數(shù)模塊依據(jù)按下加油鍵的時(shí)間為隨機(jī)變量產(chǎn)生一個(gè)150到250的隨機(jī)數(shù)送到油價(jià)信號。 3、 仿真波形及波形分析由于整個(gè)程序功能復(fù)雜,故做分模塊仿真。1. 分頻模塊: 采用clk_100為例子進(jìn)行仿真。鑒于50MHz是一個(gè)很大的頻率,基礎(chǔ)時(shí)鐘的頻率在仿真中設(shè)置為10kHz,分頻系數(shù)為100. 2.防抖模塊: 鑒于4個(gè)按鍵都采用相同的防抖手段,故采用加油鍵(btn5)作例子。可以看見前面兩個(gè)小的抖動(dòng)m值都未發(fā)生變化,直到加油鍵被按下超過100毫秒時(shí)m值才變?yōu)?,即實(shí)現(xiàn)了防抖功能。 3.顯示模塊: 啊dgtc控制某個(gè)數(shù)碼管亮,可以看見它在六個(gè)時(shí)鐘周期內(nèi)循環(huán)變化;d
6、gt控制顯示數(shù)碼顯示數(shù)字,可以看見在一個(gè)時(shí)鐘周期(紅色橢圓內(nèi))其穩(wěn)定為一個(gè)值,輸入數(shù)碼管之后就穩(wěn)定為一個(gè)數(shù)字;而point為油價(jià)小數(shù)點(diǎn),它只在某個(gè)特定的數(shù)碼管后亮起,在仿真上可以看見它每隔六個(gè)時(shí)鐘周期值變?yōu)?。 4. 控制模塊: 初始輸入油價(jià)狀態(tài): Btn7與btn6兩個(gè)鍵分別控制油價(jià)的百位與十位,可以看見按下btn6鍵后油價(jià)十位(price2)變?yōu)?,按下btn7鍵后油價(jià)百位變?yōu)?(price2),再按下btn6鍵后油價(jià)十位(price2)變?yōu)?.輸入油價(jià)為零的加油過程: 直接按下btn5鍵后可以看見目標(biāo)油價(jià)(goalpri2、1、0)被直接賦給隨機(jī)數(shù)值(在150到250之間的一個(gè)數(shù)),顯示
7、油價(jià)從零開始遞增(price2、1、0)。已輸入油價(jià)加油過程: 輸入油價(jià)10元(即只按btn6鍵一下),再按下加油鍵(btn5),可以看見目標(biāo)油價(jià)被賦值為10元(goalpri1被賦值為1,goalpri2、goalpri0),顯示油價(jià)(price2、1、0)從零開始遞增,每0.1秒增加一次。增加到目標(biāo)油價(jià)后顯示油價(jià)不再變化,同時(shí)led值變?yōu)?1,即加油完成后led燈亮起。清零過程: 在仿真后按下清零鍵(btn0),顯示油價(jià)與led標(biāo)志都被清零,即加油指示燈、油價(jià)顯示都回到初始狀態(tài)。4、 源程序(要有注釋) library ieee;use ieee.std_logic_1164.all;us
8、e ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity oilm is port( clk,btn7,btn6,btn5,btn0:in std_logic; -按鍵輸入,btn7與btn6控制油價(jià)百位、十位變化,btn5為加油鍵,btn0為重置鍵 dgt:out std_logic_vector(6 downto 0); -輸出,控制數(shù)碼管顯示數(shù)字 dgtc:out std_logic_vector(5 downto 0); -輸出,分頻控制某個(gè)數(shù)碼管亮 point,led:out std_logic); -輸出,控
9、制小數(shù)點(diǎn)end oilm;architecture a of oilm is signal clk_100,clk_1k,clk_10:std_logic;-分頻后頻率 signal k,fuelf,zerof,m:std_logic;-狀態(tài)標(biāo)志量,m=1表示加油鍵按下,fuelf=1表示加油過程中,zerof=1表示輸入油價(jià)為零,k由于控制改變加油最終油價(jià) signal spri2,pri2,vpri2:integer range 0 to 4;-spri2、1、0儲存按鍵后的油價(jià),pri2、1、0儲存顯示的油價(jià),vpri2、1、0儲存加油最終油價(jià) signal spri1,pri1,spr
10、i0,pri0,vpri1,vpri0,cap2,cap1,cap0:integer range 0 to 9;-cap2、1、0用于儲存顯示油價(jià)pri2、1、0對應(yīng)的油量值 signal cnt00:integer range 0 to 249999; signal cnt01:integer range 0 to 24999; signal cnt02:integer range 0 to 2499999; signal cnt17,cnt16:integer range 0 to 14; signal cnt15,cnt10:integer range 0 to 9; signal cn
11、t2:integer range 0 to 5; signal cnt3:integer range 150 to 250; signal tmp32:integer range 0 to 2; signal tmp31,tmp30:integer range 0 to 9;begin zf:process(spri2,spri1) -時(shí)刻判斷輸入油價(jià)是否為零 begin if (spri2+spri1) > 0 then zerof <= '0' else zerof <= '1' end if; end process zf;control
12、:process(spri2,spri1,spri0,m,clk_10,btn0) -控制模塊begin if clk_10'event and clk_10 = '1' then if btn0 = '1' and fuelf /='1' then k <= '0'led <= '0' else if m = '0' then pri2 <= spri2;pri1 <= spri1; pri0 <= spri0; else if zerof = '0&
13、#39; and k = '0' then fuelf <= '1' vpri2 <= spri2;vpri1 <= spri1;vpri0 <= spri0; pri2 <= 0;pri1 <= 0;pri0 <= 0;k <= '1' elsif zerof = '1' and k = '0' then fuelf <= '1' vpri2 <= tmp32;vpri1 <= tmp31;vpri0 <= tmp30; pr
14、i2 <= 0;pri1 <= 0;pri0 <= 0;k <= '1' end if; end if; if (m='1') and (fuelf = '1') then if (pri2*100+pri1*10+pri0) < (vpri2*100+vpri1*10+vpri0) then if (pri0=9) then pri0<=0; if (pri1=9) thenpri1<=0;pri2<=pri2+1; elsepri1<=pri1+1; end if; else pri0&l
15、t;=pri0+1; end if; else fuelf <= '0' led <= '1' end if; end if;end if; end if;end process; frequency:process(clk)-分頻模塊 begin if (clk'event and clk ='1') then if cnt00 = 249999 then cnt00<= 0; clk_100 <= not clk_100; else cnt00 <=cnt00 +1; end if; end if; if
16、 (clk'event and clk ='1') then if cnt01 = 24999 then cnt01<= 0; clk_1k <= not clk_1k; else cnt01 <=cnt01 +1; end if; end if; if (clk'event and clk = '1') then if cnt02 = 2499999 then cnt02<=0; clk_10 <= not clk_10; else cnt02 <=cnt02+1; end if; end if; end p
17、rocess; anti_shake:process(clk_100,btn7,btn6,btn5,btn0) -防抖模塊 begin if clk_100'event and clk_100 = '1' then if btn7 = '1' then if cnt17 = 14 then cnt17 <= 0; if spri2 = 4 then spri2 <= 0; else spri2 <= spri2 +1; end if; else cnt17 <= cnt17 +1; end if; end if; if btn6
18、= '1' then if cnt16 = 14 then cnt16 <= 0; if spri1 = 9 then spri1 <= 0; else spri1 <= spri1 +1; end if; else cnt16 <= cnt16 +1; end if; end if; if btn5 = '1' then if cnt15 = 9 then cnt15 <= 0; m <= '1' else cnt15 <= cnt15 +1; end if; end if; if btn0 =
19、9;1' and fuelf /='1' then if cnt10 = 9 then cnt10 <= 0; m <= '0'spri2 <= 0;spri1 <= 0; else cnt10 <= cnt10 +1; end if; end if; end if; spri0 <= 0; end process anti_shake; dis1:process(clk_1k,pri2,pri1,pri0)-顯示模塊一,完成油價(jià)油量對應(yīng)運(yùn)算 begin if (clk_1k'event and clk_1k
20、= '1') then if (pri0*2 >= 10) then cap0 <= (pri0*2 rem 10); if (pri1*2+1) >= 10) then cap1 <= (pri1*2+1) rem 10; cap2 <= pri2*2 +1; else cap1 <= pri1*2+1; cap2 <= pri2*2; end if; else cap0 <= pri0*2; if (pri1*2 >= 10) then cap1 <= pri1*2 rem 10; cap2 <= pri2*
21、2 +1; else cap1 <= pri1*2; cap2 <= pri2*2; end if; end if; end if; end process dis1; dis2:process(clk_1k,pri2,pri1,pri0,cap2,cap1,cap0)-顯示模塊二,六個(gè)數(shù)碼管顯示 begin if (clk_1k'event and clk_1k = '1') then if cnt2 = 5 then cnt2 <= 0; else cnt2 <= cnt2+1; end if; end if; case cnt2 is wh
22、en 5 => dgtc <= "011111" when 4 => dgtc <= "101111" when 3 => dgtc <= "110111" when 2 => dgtc <= "111011" when 1 => dgtc <= "111101" when others => dgtc <= "111110" end case; case cnt2 is when 2 => cas
23、e pri2 is WHEN 0=> dgt<="0111111" WHEN 1=> dgt<="0000110" WHEN 2=> dgt<="1011011" WHEN 3=> dgt<="1001111" WHEN others=> dgt<="1100110" end case; point <= '0' when 1 => case pri1 is WHEN 0=> dgt<="
24、;0111111" WHEN 1=> dgt<="0000110" WHEN 2=> dgt<="1011011" WHEN 3=> dgt<="1001111" WHEN 4=> dgt<="1100110" WHEN 5=> dgt<="1101101" WHEN 6=> dgt<="1111101" WHEN 7=> dgt<="0100111" WHEN
25、8=> dgt<="1111111" WHEN others=> dgt<="1101111" end case; point <= '0' when 0 => case pri0 is WHEN 0=> dgt<="0111111" WHEN 1=> dgt<="0000110" WHEN 2=> dgt<="1011011" WHEN 3=> dgt<="1001111"
26、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; point <= '0' when 5 => case cap
27、2 is WHEN 0=> dgt<="0111111" WHEN 1=> dgt<="0000110" WHEN 2=> dgt<="1011011" WHEN 3=> dgt<="1001111" WHEN 4=> dgt<="1100110" WHEN 5=> dgt<="1101101" WHEN 6=> dgt<="1111101" WHEN 7=> dgt
28、<="0100111" WHEN 8=> dgt<="1111111" WHEN others=> dgt<="1101111" end case; point <= '0' when 4 => case cap1 is WHEN 0=> dgt<="0111111" WHEN 1=> dgt<="0000110" WHEN 2=> dgt<="1011011" WHEN 3=>
29、; 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; point <=
30、9;1' when others => case cap0 is WHEN 0=> dgt<="0111111" WHEN 1=> dgt<="0000110" WHEN 2=> dgt<="1011011" WHEN 3=> dgt<="1001111" WHEN 4=> dgt<="1100110" WHEN 5=> dgt<="1101101" WHEN 6=> dgt<=
31、"1111101" WHEN 7=> dgt<="0100111" WHEN 8=> dgt<="1111111" WHEN others=> dgt<="1101111" end case; point <= '0' end case; end process dis2; rand1:process(clk)-隨機(jī)數(shù)產(chǎn)生模塊 begin if clk'event and clk = '1' then if cnt3 = 250 then cnt3 <= 150; else cnt3 <= cnt3 + 1; end if; end if; end
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)性化定制版2024外賣送餐服務(wù)合同
- 溫泉度假酒店項(xiàng)目市場前景
- 安置房市場進(jìn)入壁壘分析
- 隨州正大-九保技術(shù)服務(wù)人員安全生產(chǎn)知識考試題202402
- 購物廣場項(xiàng)目實(shí)施方案
- 電動(dòng)汽車智能充電樁項(xiàng)目可行性與技術(shù)路線分析
- 2023年宿州職業(yè)技術(shù)學(xué)院引進(jìn)筆試真題
- 人事經(jīng)理個(gè)人工作總結(jié)
- 迎中秋發(fā)言稿(3篇)
- 2023年呼和浩特市中潤農(nóng)業(yè)有限公司招聘工作人員筆試真題
- 城市軌道交通概論P(yáng)PT完整全套教學(xué)課件
- 航空器系統(tǒng)與動(dòng)力裝置學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 呼吸機(jī)相關(guān)性肺炎診斷、預(yù)防和治療指南(2023年)
- 2023年副主任醫(yī)師(副高)-中醫(yī)骨傷科學(xué)(副高)考試歷年真題摘選帶答案
- 《紅星照耀中國》PPT只是分享
- 引水隧洞專項(xiàng)施工方案
- 初中英語-Unit5 What are the shirts made of教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 污水處理站安全培訓(xùn)課件
- 消毒供應(yīng)中心質(zhì)量管理課件
- 大型幕墻施工工程重點(diǎn)難點(diǎn)分析
- 六年級寫自己典型事例300字范文(6篇)
評論
0/150
提交評論