當前位置:編程學習大全網 - 編程語言 - 梳狀編程

梳狀編程

課程設計的內容和要求

1,用開關按鍵代表脈沖,每個脈沖代表100m,10脈沖1km,1.4元每公裏,可同步顯示裏程和費用;

2.不足2km的,按5元計費,超過2km的,總費用=起步費用+(裏程-2km) *裏程單價+。

等待時間*等待後的單價;

3.等待時間超過2分鐘的,按每分鐘1.3元收費;

4.可以設置起步價和裏程單價。

壹、設計原則和技術方法:

包括:電路工作原理分析及原理圖、元器件選擇及參數計算、電路調試方法及結果說明;

軟件設計說明書和流程圖,軟件源代碼,軟件調試方法和運行結果說明。

根據設計要求,系統輸入信號clk、計價開始信號start、等待信號stop和裏程脈沖信號fin。系統輸出信號包括:總費用C0-C3,行駛距離K0-K1,等待時間M0-M1等。系統有兩個脈沖輸入信號,clk_750k和FIN,其中CLK _ 750K將根據設計要求分為14hz、15hz和1hz,分別作為公裏計費和超時計費的脈沖。兩個控制輸入開關啟動和停止;;控制過程如下:start作為開關開始充電。當start為高電平時,系統根據輸入情況開始充電。當有乘客上車開始行駛時,fin脈沖來充電行駛,此時的stop需要置0;如果需要停車等待,將stop轉到高電平。

並去掉鰭輸入脈沖等待充電;乘客下車不等待時,直接將start設置為0,系統停止工作;價格開始歸類為5.0元起步價。

整個設計由分頻模塊、計量模塊、充電模塊、控制模塊和顯示模塊五部分組成。

計量模塊是整個系統的重要組成部分,實現裏程計數和時間計數;控制模塊是實現不同充電方式的選擇部件。根據設計的使能終端,選擇是按裏程計費還是按等待時間計費。同時設計了分頻模塊,產生不同頻率的脈沖信號,實現對系統的充電。計量模塊采用1hz的驅動信號,充電模塊采用1.4 Hz和1.3 Hz的驅動信號;計量模塊每計數壹次,計量模塊就會計數14次或13次,即計時1.3元/分鐘,測井1.4元/公裏。組成框圖如下:

1.十進制模塊:

為實現100m脈沖的驅動信號,其組成框圖如圖3所示:

圖3十進制模塊框圖

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

實體柏金誌是

端口(start,clk2:在std_logic中;-第二次脈沖

a: out std_logic_vector(3降0));

端白金枝;

白金之建築rt1為

信號count _ 1:STD _ logic _ vector(3 down to 0);

開始

a & lt= count _ 1;

進程(開始,時鐘2)

開始

if(start='0 ')然後

count _ 1 & lt;="0000";

elsif(clk2 '事件和clk2='1 ')則

if(count _ 1 = " 0111 ")則

count _ 1 & lt;="0000";

其他

count _ 1 & lt;= count _ 1+' 1 ';

結束if;

結束if;

結束進程;

結束rt1

2.充電模塊

;實現裏程和等待時間的計費並輸出到顯示器。組件框圖如下:

圖4計費模塊框圖

源程序如下:

圖書館IEEE

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ arith . all;

使用IEEE . STD _ logic _ unsigned . all;

齊斐是實體

端口(clk2:在std_logic中;-充電驅動信號

start:在std_logic中;-計費開始信號

c0,c1,c2,C3:buffer STD _ logic _ vector(3 down to 0));

端姬妃;

齊飛的架構rt1是

開始

進程(clk2,啟動)

開始

如果start='0 ',那麽c3 & lt="0000";c2 & lt="0000";c 1 & lt;="0101";c0 & lt="0000";-起步價5元

elsif clk2 '事件,而clk2='1 '則

如果c0="1001 "那麽c0 & lt="0000";

如果c1="1001 ",則c 1 & lt;="0000";

如果c2="1001 ",那麽c2 & lt="0000";

如果c3="1001 ",那麽c3 & lt="0000";

else c3 & lt= C3+1;

結束if;

else c2 & lt= C2+1;

結束if;

else c 1 & lt;= c 1+1;

結束if;

else c0 & lt= c0+1;

結束if;

結束if;

結束進程;

end rt 1;

3.千米模塊

實現過程計數和充電脈沖輸出,組成框圖如下:

圖5公裏模塊框圖

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

實體鞏俐是

port(clk1,start:in STD _ logic;-100米脈沖

k1,k2,k3,k4:out STD _ logic _ vector(3 down to 0);-裏程顯示

temp 2:out STD _ logic);

結束鞏俐;

鞏俐的建築rt1是

信號count _ 1:STD _ logic _ vector(3 down to 0);

信號count _ 2:STD _ logic _ vector(3 down to 0);

信號count _ 3:STD _ logic _ vector(3 down to 0);

信號count _ 4:STD _ logic _ vector(3 down to 0);

開始

k 1 & lt;= count _ 1;

k2 & lt= count _ 2;

k3 & lt= count _ 3;

k4 & lt= count _ 4;

進程(開始,clk1)

開始

if(start='0 ')然後

count _ 1 & lt;="0000";

count _ 2 & lt="0000";

count _ 3 & lt="0000";

count _ 4 & lt="0000";公裏清理完畢

elsif(clk1 '事件和clk1='1 ')然後

if(count _ 1 = " 1001 ")則-公裏計數器

count _ 1 & lt;="0000";count _ 2 & lt= count _ 2+1;temp2 & lt='1';

if(count_2="1001 ")那麽

count _ 2 & lt="0000";count _ 3 & lt= count _ 3+' 1 ';

if(count_3="1001 ")那麽

count _ 3 & lt="0000";count _ 4 & lt= count _ 4+' 1 ';

結束if;

結束if;

其他

count _ 1 & lt;= count _ 1+' 1 ';temp2 & lt='0';

結束if;

結束if;

結束進程;

end rt 1;

4.輸出模塊

為了實現所有數據的輸出,部件框圖如下:

圖6輸出模塊框圖

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

實體書處是

port(y:in STD _ logic _ vector(3 down to 0);

e:out STD _ logic _ vector(6 down to 0));

端書處;

蜀楚建築rt 1為

開始

過程

開始

案例y是

當" 0000"= >時;e & lt="0111111";

當" 0001"= >時;e & lt="0000110";

當" 0010"= >時;e & lt="1011011";

當" 0011"= >時;e & lt="1001111";

當" 0100"= >e & lt="1100110";

當" 0101"= >e & lt="1101101";

當" 0110"= >e & lt="1111101";

當" 0111"= >時;e & lt="0000111";

當" 1000"= >e & lt="1111111";

當" 1001"= >e & lt="1100111";

當別人= & gte & lt="0000000";

結束案例;

結束進程;

end rt 1;

5.顯示組件

為實現所有數據的顯示,組件框圖如下:

圖7示出了該模塊的框圖。

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

實體石現是

端口(start:在std_logic中;

答:在STD _ logic _ vector(3 down to 0);-選擇信號

c1,c2,c3,c4,out1,out2,out3,out 4:in STD _ logic _ vector(3 down to 0);-裏程顯示、時間顯示輸入

y:out STD _ logic _ vector(3 down to 0));-裏程顯示,時間顯示輸出

結束石現;

石現的建築rt1是

開始

過程

開始

if(start='0 ')然後

y & lt="0000";

否則情況a是

當" 0000"= >時;y & lt= c 1;

當" 0001"= >時;y & lt= c2

當" 0010"= >時;y & lt= c3

當" 0011"= >時;y & lt= c4

當" 0100"= >y & lt= out 1;

當" 0101"= >y & lt= out2

當" 0110"= >y & lt= out3

當" 0111"= >時;y & lt= out4

當別人= & gty & lt= "0000";

結束案例;

結束if;

結束進程;

end rt 1;

6.dian模塊

圖8 dian模塊框圖

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

實體點是

端口(a:在std_logic_vector中(3向下到0);

e:out STD _ logic);

端典;

dian的架構rt1是

開始

過程

開始

案例a是

當" 0001"= >時;e & lt='1';

當" 0101"= >e & lt='1';

當別人= & gte & lt='0';

結束案例;

結束進程;

end rt 1;

第三,各個模塊的設計分析。

系統的總體頂層框圖如下:

系統總體頂層框圖

程序的最終功能是實現波形模擬。

1.分頻模塊

由於實驗箱中沒有14hz和13hz的整數倍時鐘信號,所以采用750khz的頻率進行分頻,從而近似得到14hz、13hz和1hz的時鐘頻率。通過以上三種不同頻率的脈沖信號,驅動出租車,等待兩種情況下不同的計費。模塊元素如下:

分頻模塊框圖

源程序如下:

圖書館IEEE

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ arith . all;

使用IEEE . STD _ logic _ unsigned . all;

實體分聘是

端口(clk_750k:在std_logic中;-系統時鐘

clk _ 14:buffer STD _ logic;-14分頻

clk _ 13:buffer STD _ logic;-13分頻

clk _ 1:buffer STD _ logic);-1分頻

端分聘;

分拼的架構rt1是

信號q_14:整數範圍0到53570;-定義中間信號量

信號q_13:整數範圍0到57691;

信號q_1:整數範圍0到749999;

開始

進程(clk_750k)

開始

如果(clk_750k '事件和clk_750k='1 '),則

如果q_14=53570,那麽q _ 14 & lt;=0;clk _ 14 & lt;= not clk _ 14;

else q _ 14 & lt;= q _ 14+1;

結束if;-獲得14hz頻率信號。

如果q_13=57691,則q _ 13 & lt;=0;clk _ 13 & lt;= not clk _ 13;

else q _ 13 & lt;= q _ 13+1;

結束if;-獲得13hz頻率信號。

如果q_1=749999,那麽q _ 1 & lt;=0;clk _ 1 & lt;= not clk _ 1;

else q _ 1 & lt;= q _ 1+1;

結束if;-獲得1hz頻率信號

結束if;

結束進程;

end rt 1;

2.計量模塊

計量模塊主要完成定時和記錄功能。

計時部分:計算乘客的累計等待時間。當等待時間超過2分鐘時,該模塊中的en1使能信號變為1;當clk1的每壹個上升沿到來時,定時器會自動遞增1,其量程為59min,滿刻度後自動歸零。

日誌部分:計算乘客出行的公裏數。當裏程超過2km時,該模塊中的en0使能信號會變成1;clk的每個上升沿到來時,log都會增加1,log的量程為99km,滿量程後自動歸零。

組件框圖如下:

計量模塊框圖

計量模塊的模擬波形為:

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ arith . all;

使用IEEE . STD _ logic _ unsigned . all;

實體季良是

端口(start:在std_logic中;-計費開始信號

fin:在std_logic中;-裏程脈沖信號

stop:在std_logic中;-在行駛過程中等待信號

clk1:在std_logic中;-驅動脈沖

en1,en0:buffer STD _ logic;-計費單價啟用信號

k1,k0:buffer STD _ logic _ vector(3 down to 0);-裏程計數

m1,m0:buffer STD _ logic _ vector(3 down to 0));-等待時間計數

結束季良;

季良的建築rt2是

信號w:整數範圍0到59;-定時範圍0~59

開始

流程(clk1)

開始

如果(clk1 '事件和clk1='1 '),則

如果start='0 ',則

w & lt=0;en 1 & lt;='0';en0 & lt='0';m 1 & lt;="0000";

m0 & lt="0000";k 1 & lt;="0000";k0 & lt="0000";

Elsif stop =' 1 '然後計時開始信號

如果w=59,那麽

w & lt=0;

else w & lt= w+1;

結束if;

如果m0="1001 ",則

m0 & lt="0000";

如果m1="0101 ",則

m 1 & lt;="0000";

else m 1 & lt;= m 1+1;

結束if;

else m0 & lt= m0+1;

結束if;

如果stop='1 ',則en0 & lt='0';

if m 1 & amp;m0 & gt“00000001”然後en 1 & lt;='1';-如果等待時間大於2分鐘,en1被設置為1。

else en 1 & lt;='0';

結束if;

結束if;

Elsefin =' 1 '然後開始計算裏程。

如果k0="1001 "那麽k0 & lt="0000";

如果k1="1001 ",則k 1 & lt;="0000";-日誌範圍0~99

else k 1 & lt;= k 1+1;

結束if;

else k0 & lt= k0+1;

結束if;

如果stop='0 ',則

en 1 & lt;='0';

如果k 1 & amp;k0 & gt那麽“00000001”

en0 & lt='1';-如果裏程大於2km,則en0為1。

else en0 & lt='0';

結束if;

結束if;

結束if;

結束if;

結束進程;

結束rt2

3.控制模塊

該模塊主要是通過計量模塊產生的兩路不同的輸入使能信號en0和en1,選擇輸出各分頻模塊輸出的14hz和13hz的脈沖的過程。該模塊實現了雙脈沖的選擇;最終目標是在收費模塊中計算出行駛過程中不同時間段的價格。

模塊元素如下:

控制模塊框圖

控制模塊的模擬波形為:

源程序如下:

圖書館IEEE

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ arith . all;

使用IEEE . STD _ logic _ unsigned . all;

實體控制是

端口(en0,en1:在std_logic中;-啟用選擇信號

clk _ in 1:in STD _ logic;-14分頻輸入信號

clk_in2:在std_logic中;-13分頻輸入信號

clk _ out:out STD _ logic);-輸出信號

端孔誌;

空之建築rt3是

開始

過程(en0,en1)

開始

Ifen0 =' 1 '然後——實現二選壹的功能。

clk _ out & lt= clk _ in 1;

elsif en1='1 '然後

clk _ out & lt= clk _ in2

結束if;

結束進程;

結束rt3

4.充電模塊

當充電信號start始終處於高電平,即充電狀態時,該模塊根據控制模塊選擇的信號,對不同的單價時段進行充電。即行程在2km以內,累計等待時間小於2min的,起步價為5元;2公裏以外,按每公裏1.4元計費,累計時間超過2min,按每分鐘1.3元計費。C0、c1、c2和c3分別表示費用的顯示。

模塊元素包括:

計費模塊框圖

充電模塊的模擬波形為:

源程序如下:

圖書館IEEE

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ arith . all;

使用IEEE . STD _ logic _ unsigned . all;

齊斐是實體

端口(clk2:在std_logic中;-充電驅動信號

start:在std_logic中;-計費開始信號

c0,c1,c2,C3:buffer STD _ logic _ vector(3 down to 0));

端姬妃;

吉飛的rt4架構是

開始

進程(clk2,啟動)

開始

如果start='0 ',那麽c3 & lt="0000";c2 & lt="0000";c 1 & lt;="0101";c0 & lt="0000";-起步價5元

elsif clk2 '事件,而clk2='1 '則

如果c0="1001 "那麽c0 & lt="0000";

如果c1="1001 ",則c 1 & lt;="0000";

如果c2="1001 ",那麽c2 & lt="0000";

如果c3="1001 ",那麽c3 & lt="0000";-估價範圍為0~999.9

else c3 & lt= C3+1;

結束if;

else c2 & lt= C2+1;

結束if;

else c 1 & lt;= c 1+1;

結束if;

else c0 & lt= c0+1;

結束if;

結束if;

結束進程;

結束rt4

5.顯示組件

顯示模塊完成定價、計時和日誌數據的顯示。計費數據送到顯示模塊進行解碼,最後送到相應的以100元、10元、元、角為單位的數碼管進行顯示。定時數據送到顯示模塊解碼,最後送到除法單元對應的數碼管顯示。日誌數據送到顯示模塊解碼,最後送到以km為單位的數碼管顯示。

模塊元素包括:

顯示模塊框圖

源程序如下:

圖書館ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;-定義庫包

定義實體。

端口(

clk_scan:在std_logic中;-掃描時鐘信號端口設置

c3,c2,c1,c0:在std_logic_vector(3 downto 0)中;-總成本輸入端口

k0,k 1:in STD _ logic _ vector(3 down to 0);-裏程輸入端口

m0,m 1:in STD _ logic _ vector(3 down to 0);-等待時間輸入端口

sel:out STD _ logic _ vector(2 down to 0);-控制掃描信號輸出口的數碼管位置選擇信號。

led:out STD _ logic _ vector(6 down to 0);-數碼管的控制端口

led _ DP:out STD _ logic-數碼管的小數點輸出端口。

);

結束石現;

石現的建築rt5是

信號段:STD _ logic _ vector(6 down to 0);-數字顯示管中間變量

信號Shu ju:STD _ logic _ vector(3 down to 0);-選擇輸入端的中間變量。

信號CNT:STD _ logic _ vector(2 down to 0);-控制數碼管的中間變量

信號小電:std _ logic-小數點中間變量

開始

process(clk _ scan)-啟動進程。

開始

如果clk_scan事件和clk_scan='1 '則

cnt & lt= CNT+1;-每次掃描信號有壹個上升沿,實現1掃描。

結束if;

結束進程;-結束這個過程

過程(cnt) -啟動過程(選擇掃描顯示數碼管)

開始

掃描過程中給每個數碼管賦值。

當" 000"= >時;舒居& lt= c0

當" 001"= >時;舒居& lt= c 1;

當" 010"= >時;舒居& lt= c2

當" 011"= >舒居& lt= c3

當" 100"= >舒居& lt= k0

當" 101"= >舒居& lt= k 1;

當" 110"= >舒居& lt= m0

當" 111"= >舒居& lt= m 1;

當別人= & gtnull

結束案例;

if (cnt="001 "或cnt="110 ")

然後小電& lt='1';-以裏程和總成本為單位顯示小數點。

else小電& lt='0';

結束if;

結束進程;-結束這個過程

進程(shuju) -啟動進程(解碼顯示)

開始

案例樹居是

當" 0000"= >時;段& lt="0111111";- 0

當" 0001"= >時;段& lt="0000110";- 1

當" 0010"= >時;段& lt="1011011";- 2

當" 0011"= >時;段& lt="1001111";- 3

當" 0100"= >段& lt="1100110";- 4

當" 0101"= >段& lt="1101101";- 5

當" 0110"= >段& lt="1111101";- 6

當" 0111"= >時;段& lt="0000111";- 7

當" 1000"= >段& lt="1111111";- 8

當" 1001"= >段& lt="1101111";- 9

當別人= & gtnull

結束案例;

結束進程;

sel & lt= cnt

led & lt=段;

led _ dp & lt=小電;

結束rt5

二、課程設計工作記錄:

包括:設計步驟及時間安排,調試步驟及時間安排,項目完成結果說明。

2.項目完成結果描述:

這個計價器可以實現的起步價是5元;實現了實驗所需的單價1 km。行駛距離大於2km時,按每公裏1.4元計費,並可顯示裏程和總費用。行駛6公裏,等待4分鐘,費用顯示15.8元。而計算公式的總費用=起步費用+(裏程-2km) *裏程單價+等待時間*以此類推;即15.8 = 5+(6-2)* 1.4+4 * 1.3。實驗結果與理論結果完全壹致,實驗設計是成功的。

  • 上一篇:臨沂布袋除塵器生產哪家好祥潤德鍋爐布袋除塵
  • 下一篇:怎麽做電腦病毒
  • copyright 2024編程學習大全網