數電計程車計價器課程設計
① 數字邏輯課程設計計程車計價器
74161+74248+7404+7400+LED數碼管+光電計數器
流程就是光電計數器---74161
② 計程車計價器設計
電子技術課程設計
計程車自動計費器
學院:華科學院
專業:電氣工程及其自動化
班級:
姓名:
學號:
指導老師:
2008年1月2日
目 錄
一、設計任務與要求-------------- 1
二、總體框圖----------------- 1
三、器材選擇---------------- 1
四、模塊功能----------------- 5
五、總體設計電路圖-------------- 9
六、心得體會-----------------------10
計程車計費器
一. 設計任務與要求
計程車自動計費器根據客戶用車的實際情況而自動顯示用車費的數字儀表,根據用車起價,行車里程計費及等候時間計費三項求出客戶用車的總費用,通過數碼自動顯示。
1. 里程測量精確到1km。
2. 起步價按7元/3km,起步價外按1元/進行機費。
3. 等候按1元/60 min計費。
4. 具有里程顯示,收費顯示,里程單價顯示。
二.總體框圖
三.器件選擇
A.十進制計數器74LS160
1.74LS160是中規模集成同步十進制加法計數器,具有非同步清零和同步預置數的功能。使用74LS160通過置零法或置數法可以實現任意進制的計數器。其引腳圖見圖 。
先對74LS160的基本功能進行測試,邏輯功能表如下圖。
①非同步清零:當 CLR=0時,Q 0=Q1=Q2=Q3=0。
②同步預置:當 LOAD=0時,在時鍾脈沖CP上升沿作用下,Q 0=D0,Q1=D1,Q2=D2,Q3=D3。
③鎖存:當使能端 時,計數器禁止計數,為鎖存狀態。
④計數:當使能端EP=ET=1時,為計數狀態。
功能管腳圖
2. 74LS160的邏輯功能表
時鍾CP 非同步清除 同步置數 EP ET 工 作 狀 態
× 0 × × ×
↑ 1 0 × ×
× 1 1 0 1
× 1 1 × 0
↑ 1 1 1 1
3.74LS160的邏輯圖
B.555定時器
它含有兩個電壓比較器,一個基本RS觸發器,一個放電開關T,比較器的參考電壓由三隻5KΩ的電阻器構成分壓,它們分別使高電平比較器A1同相比較端和低電平比較器A2的反相輸入端的參考電平為和。A1和A2的輸出端控制RS觸發器狀態和放電管開關狀態。當輸入信號輸入並超過時,觸發器復位,555的輸出端3腳輸出低電平,同時放電,開關管導通;當輸入信號自2腳輸入並低於時,觸發器置位,555的3腳輸出高電平,同時放電,開關管截止。
功能管腳圖
功能管腳圖
邏輯圖
功能表
74LS192
74LS192是十進制同步加法、減法器,採用8421BCD碼編碼,具有直接清零,非同步置數的功能。
CPU CPD LD CR 操作
隨意 隨意 0 0 置數
脈沖 1 1 0 加數
1 脈沖 1 0 箭術
隨意 隨意
四.功能模塊
1.里程計算與顯示電路
里程計算模塊對測距感測器發出的0.1km的脈沖信號進行計數,計滿10個脈沖表示1km。里程計算與顯示電路如下圖。
如上圖當所示,用三片74ls160接成三個十進制計數器,由信號發生器觸發脈沖,每觸發一個脈沖為計程車行進中的0.1km,第一塊加法計數器累計十次脈沖,向第二快加法計數器輸去一次脈沖,當第二塊加法計數器累計到十次時,燈泡亮一次,表示計程車向前行進了1km.斷開開關J1實現同步清零。
2.里程比較電路
基本里程設定為3km。當實際行駛距離超過基本里程時,則在原有計費的基礎上加上每公里單價,里程比較電路如下圖所示。
里程比較電路如上圖所示,用兩片74LS160接成30進制計數器,由信號發生器觸發脈沖,每觸發一個脈沖為計程車行進中的0.1km,當計滿後觸發觸發器D使其輸出(Q)為1,作為超基本里程計費的閘門信號,Q=1後啟動超基本里程計費電路,由每公里的觸發脈沖觸發計費電路實現費用累加。一旦實際行駛里程超過了基本里程,Q非封鎖30計數器,使里程比較電路停止計數,一直到總清零信號(總清信號清除模3計數和D觸發器)後才開始新一輪的里程比較。
3.侯時電路
用555夠成多諧振盪電路,然後用計數器按秒,分計時,1min給里程計數器一個0.1km的脈沖,侯時電路如下圖所示
侯時電路如上圖所示,當一分鍾後觸發一次脈沖,燈泡亮一次。
用555定時器構成秒脈沖發生器
電路如下圖
五.總體設計電路圖
侯時電路,里程比較電路,里程計算與顯示電路,相互疊加,設置起步價7元
同過緩存器,鎖存器的連接,信號的積累,顯示總價。
六.心得體會
兩周的課程設計時間很快就過去了,雖然它的時間很短,我們很匆忙,很辛苦,課
程設計真的很不容易,在這三周里,我一次次告訴自己要堅持,再堅持通過兩周以來同學
和老師的共同努力,我們終於完成了電子課程。作完之後,我組的全體成員都大吸了一口
氣,然後感嘆道:終於做完了,可把我們可累苦了。但大家臉上的表情都是欣慰和歡喜的,
到底工夫不負有心人。俗話說的好:苦不苦想想紅軍長征二萬五。當年紅軍爬雪山,越草
地,與自然做斗爭,冰天雪地的。我們餓了還有香噴噴的飯菜吃,他們呢?吃草皮,啃樹
皮,甚至連自己身上的皮帶都煮著吃了,比起他們來我們幸福多了,看著自己的勞動成果:
麵包板上大大小小的晶元,密密麻麻的連接線,大家都笑了,我們四目相接,面面相覷,
都在感慨實習終於結束了。不知道是因為心情好還是太累, 回去特舒服,特別的塌實 。
這次的課程設計使我認識到我在學習理論方面有很多的不足,通過向其他同學詢問和學
習,才算基本上搞了出來。用555定時器產生秒脈沖,74LS160做10進制計數器,用不同
的器件組建不同的模塊,從而達到最終的設計要求。
課程設計讓我體會到知識上的收獲重要,精神上的豐收更加可喜。讓我知道了學無
止境的道理。我們每一個人永遠不能滿足於現有的成就,人生就像在爬山,一座山
峰的後面還有更高的山峰在等著你。挫折是一份財富,經歷是一份擁有。這次課程
設計必將成為我人生旅途上一個非常美好的回憶!
③ 計程車計價器的設計(用Multisim畫的設計圖)
本方案圍繞項目招投標全過程的造價管理工作,為工程項目各個參與方在招標、投標、評標階段提供專業、易用、高效的軟體產品、專業咨詢及服務,實現「計量、詢價、計價、招/投標文件編制、自動評標和招投標信息發布、數據積累」等招標投標核心業務的一體化智能解決,建立起共享、協同、整合、高效的動態招投標業務系統,推動業務管理進步。
http://www.grandsoft.com.cn/channels/17.aspx
④ QUARTUS可編程邏輯器件課程設計:計程車計價器設計
純數字設計指的大多是74系列那樣的通用晶元,有點是組建方便,簡單系統成本低,是可編程邏輯器件的基礎,早期單板機就用這個,現在led光屏也有很多,缺點是復雜應用成本高,設計復雜,功耗大,部分效率較低。PLD成本高,但是功耗較低,另外較穩定易維護,方便量產。設計開發過程隨著技術的進步也越來越簡便快捷。單片機功耗低應用靈活,但是執行並行任務效率低。不過一般的應用對實時性要求不高,所以應用特別特別特別廣泛…收發器,收音機,充電器,顯示屏,無所不在,而且沾了單片機也能顯得高端不少(其實不止是顯得,因為軟體部分很能顯示出設計者的水平)個人見解,有不全面的樓下補充
⑤ 計程車計費器課程設計
................................
⑥ 計程車計價器的設計
http://www.bbww.net/SoftView/SoftView_11755.html
http://www.happycampus.com.cn/pages/2005/07/06/D174249.html
http://bbs.mcustudy.com/printpage.asp?BoardID=5&ID=2662
⑦ 課程設計計程車計價器,用VERILOG語言編寫
我去年做過這個,和你的要求差不多,暫停鍵相當於你的停止計費鍵,停止鍵詳單與你的歸零鍵,換擋鍵你就不用管它(按一檔的速度運行),晶振的能改成50M就行了,能調的通。
1.設計要求
設計一個計程車計費器,能按路程計費,具體要求如下
(1)實現計費功能,計費標准為:按行駛里程計費,起步價為6.00元,並在車行駛3km後按1.2元/km計費,當計費器達到或超過20元時,每公里加收50%的車費,車停止和暫停時不計費。
(2)現場模擬汽車的啟動、停止、暫停、和換檔等狀態。
(3)設計數碼管動態掃描電路,將車費和路程顯示出來,各有兩位小數。
2.設計原理
設該計程車有啟動鍵、停止鍵、暫停鍵、和擋位鍵。啟動鍵為脈沖觸發信號,當其為一個脈沖時,表示汽車以啟動,並根據車速的選擇和基本車速發出響應頻率的脈沖(計費脈沖)來實現車費和路程的計數,同時車費顯示起步價;當停止鍵為高電平時,表示汽車熄火,同時停止發出脈沖,此時車費和路程計數清零;當暫停鍵為高電平時,表示汽車暫停並停止發出脈沖,此時車費和路程計數暫停;擋位鍵用來改變車速,不同的擋位對應著不同的車速,同時路程計數的速度也不同。
計程車計費器可分為兩大模塊:控制模塊和解碼顯示模塊,系統框圖如圖9-9-1所示。控制模塊實現了計費和路程的計數,並且通過不同的擋位來控制車速 。解碼顯示模塊實現十進制到4為十進制的轉換以及車費和路程的顯示 。
mole taxi(scan,seg7,dp,clk20mhz,clk,start,stop,pause,speep);
output[7:0] scan; //數碼管地址選擇信號
output[6:0] seg7; //7段顯示控制信號(abcdefg)
output dp; //小數點
input clk20mhz; //系統時鍾為20MHz
input clk; //計費時鍾
input start; //汽車起動
input stop; //汽車停止
input pause; //汽車暫停
input[1:0] speep; //擋位(4個擋位)
reg[7:0] scan;
reg[6:0] seg7;
reg dp;
reg[15:0] money_reg; //車費寄存器
reg[15:0] distance_reg; //路程寄存器
reg[3:0] num; //控制車速的計數器
reg[15:0] dis; //千米計數器
reg d; //千米標志位
reg clk1khz; //1kHz的分頻時鍾,用於掃描數碼管地址
reg[3:0] data;
reg[3:0] m_one,m_ten,m_hun,m_tho; //錢數的4位十進製表示
reg[3:0] d_one,d_ten,d_hun,d_tho; //路程的4位十進製表示
reg[15:0] count;
reg[15:0] comb1;
reg[3:0] comb1_a,comb1_b,comb1_c,comb1_d;
reg[15:0] comb2;
reg[3:0] comb2_a,comb2_b,comb2_c,comb2_d;
reg[2:0] cnt;
always @(posedge clk)
begin
if(stop) //汽車停止,計費和路程清零
begin money_reg<='d0;
distance_reg<='d0;
dis<='d0;
num<='d0;
end
else if(start) //汽車起動後,起步價為6元
begin money_reg<='d600;
distance_reg<='d0;
dis<='d0;
num<='d0;
end
else
begin
if(!start&&!speep&&!pause&&!stop) //1擋
begin
if(num=='d9)
begin num<='d0;
distance_reg<=distance_reg+1;
dis<=dis+1;
end
else
begin num<=num+1; end
end
else if(!start&&speep=='b01&&!pause&&!stop) //2擋
begin
if(num=='d9)
begin num<='d0;
distance_reg<=distance_reg+2;
dis<=dis+2;
end
else
begin num<=num+1; end
end
else if(!start&&speep=='b10&&!pause&&!stop) //3擋
begin
if(num=='d9)
begin num<='d0;
distance_reg<=distance_reg+5;
dis<=dis+5;
end
else
begin num<=num+1; end
end
else if(!start&&speep=='b11&&!pause&&!stop) //4擋
begin
distance_reg<=distance_reg+1;
dis<=dis+1;
end
end
if(dis>='d100)
begin d<='d1;dis<='d0; end
else
begin d<='d0; end
if(distance_reg>='d300) //如果超過3km則按1.2元/km計算
begin
if(money_reg<'d2000&&d=='d1)
begin money_reg<=money_reg+'d120; end
else if(money_reg>='d2000&&d=='d1)
begin money_reg<=money_reg+'d180; end
end
//-------------------當計費器達到20元時,每千米加收50%的車費-------------
end
//---------------------------1kHz的分頻時鍾,用於掃描數碼管地址----------------------
always @(posedge clk20mhz)
begin
if(count=='d10000)
begin clk1khz<=~clk1khz;count<='d0; end
else
begin count<=count+1; end
//----------------------------將車費的十進制數轉化為4位十進制數-----------------------
if(comb1<money_reg)
begin
if(comb1_a=='d9&&comb1_b=='d9&&comb1_c=='d9)
begin
comb1_a<='b0000;
comb1_b<='b0000;
comb1_c<='b0000;
comb1_d<=comb1_d+1;
comb1<=comb1+1;
end
else if(comb1_a=='d9&&comb1_b=='d9)
begin
comb1_a<='b0000;
comb1_b<='b0000;
comb1_c<=comb1_c+1;
comb1<=comb1+1;
end
else if(comb1_a=='d9)
begin
comb1_a<='b0000;
comb1_b<=comb1_b+1;
comb1<=comb1+1;
end
else
begin
comb1_a<=comb1_a+1;
comb1<=comb1+1;
end
end
else if(comb1==money_reg)
begin
m_one<=comb1_a;
m_ten<=comb1_b;
m_hun<=comb1_c;
m_tho<=comb1_d;
end
else if(comb1>money_reg)
begin
comb1_a<='b0000;
comb1_b<='b0000;
comb1_c<='b0000;
comb1_d<='b0000;
comb1<='d0;
end
//---------------------------將路程的十進制轉化為4位十進制數-----------------------
if(comb2<distance_reg)
begin
if(comb2_a=='d9&&comb2_b=='d9&&comb2_c=='d9)
begin
comb2_a<='b0000;
comb2_b<='b0000;
comb2_c<='b0000;
comb2_d<=comb2_d+1;
comb2<=comb2+1;
end
else if(comb2_a=='d9&&comb2_b=='d9)
begin
comb2_a<='b0000;
comb2_b<='b0000;
comb2_c<=comb2_c+1;
comb2<=comb2+1;
end
else if(comb2_a=='d9)
begin
comb2_a<='b0000;
comb2_b<=comb2_b+1;
comb2<=comb2+1;
end
else
begin
comb2_a<=comb2_a+1;
comb2<=comb2+1;
end
end
else if(comb2==distance_reg)
begin
d_one<=comb2_a;
d_ten<=comb2_b;
d_hun<=comb2_c;
d_tho<=comb2_d;
end
else if(comb2>distance_reg)
begin
comb2_a<='b0000;
comb2_b<='b0000;
comb2_c<='b0000;
comb2_d<='b0000;
comb2<='d0;
end
end
//-----------------------------數碼管動態掃描----------------------------------
always @(posedge clk1khz)
begin
cnt<=cnt+1;
end
always @(cnt)
begin
case(cnt)
'b000:begin data<=m_one;dp<='d0;scan<='b00000001; end
'b001:begin data<=m_ten;dp<='d0;scan<='b00000010; end
'b010:begin data<=m_hun;dp<='d1;scan<='b00000100; end
'b011:begin data<=m_tho;dp<='d0;scan<='b00001000; end
'b100:begin data<=d_one;dp<='d0;scan<='b00010000; end
'b101:begin data<=d_ten;dp<='d0;scan<='b00100000; end
'b110:begin data<=d_hun;dp<='d1;scan<='b01000000; end
'b111:begin data<=d_tho;dp<='d0;scan<='b10000000; end
default:begin data<='bx;dp<='bx;scan<='bx; end
endcase
end
//---------------------------------7段解碼----------------------------------
always @(data)
begin
case(data[3:0])
4'b0000:seg7[6:0]=7'b1111110;
4'b0001:seg7[6:0]=7'b0110000;
4'b0010:seg7[6:0]=7'b1101101;
4'b0011:seg7[6:0]=7'b1111001;
4'b0100:seg7[6:0]=7'b0110011;
4'b0101:seg7[6:0]=7'b1011011;
4'b0110:seg7[6:0]=7'b1011111;
4'b0111:seg7[6:0]=7'b1110000;
4'b1000:seg7[6:0]=7'b1111111;
4'b1001:seg7[6:0]=7'b1111011;
default:seg7[6:0]=7'b0000000;
endcase
end
endmole
具體的反考周潤景老師的那本書。
⑧ 求計程車計價器數字電路課程設計原理圖!!(純數字電路)
設計原理與實現方案論證1.里程計數及顯示
在計程車轉軸上加裝感測器,以便獲得「行駛里程信號」。
設汽車每走1Km發一個脈沖,里程的計數顯示,可用十進制、解碼顯示。該模塊涉及時序電路相關知識,如計數器(74ls60,74ls90等)、解碼驅動器、顯示器等中規模晶元相關知識。
侯時模塊設計類似於里程計數模塊,不同的是脈沖信號可由石英晶振經分頻後獲得。簡易的也可用555定時器近似獲得,涉及脈沖信號產生相關知識。但在這個實驗中使用直接的脈沖信號。
2.加法器模塊電路
該模塊功能為計價,由兩部分組成:
⑨ 計程車計價器程序設計與原理圖
目錄
前言
1、 系統工作原理
1.1 功能說明
1.2 基本原理
2、 硬體設計
2.1 單片機最小系統單元
2.2 A44E霍爾感測器檢測單元
2.3 AT24C01存儲單元
2.4 鍵盤調整單元
2.5 顯示單元
3、 軟體設計
3.1 系統主程序
3.2 中斷程序
3.2.1 里程計數中斷程序
3.2.2 中途等待中斷程序
3.3 計算程序
3.4 顯示程序
3.5 鍵盤程序
4、 總結
參考文獻
附錄A 系統原理圖
附錄B 系統源程序
前言
隨著計程車行業的發展,計程車已經是城市交通的重要組成部分,從加強行業管理以及減少司機與乘客的糾紛出發,具有良好性能的計價器對計程車司機和乘客來說都是很必要的。而採用模擬電路和數字電路設計的計價器整體電路的規模較大,用到的器件多,造成故障率高,難調試。而採用單片機進行的設計,相對來說功能強大,用較少的硬體和適當的軟體相互配合可以很容易地實現設計要求,且靈活性強,可以通過軟體編程來完成更多的附加功能。本設計採用AT89S52單片機為主控器,以A44E霍爾感測器測距,實現對計程車的多功能的計價設計,並採用AT24C01實現在系統掉電的時候保存單價等信息,輸出採用8段數碼顯示管。本電路設計的計價器不但能實現基本的計價,而且還能根據白天,黑夜和中途等待來調節單價。
第一章 系統工作原理
1.1 功能說明
計程車計價器根據乘客乘坐汽車行駛距離和等候時間的多少進行計價,並在行程中同步顯示車費值。從起步價開始,當汽車程行駛未滿3公里時,均按起步價計算。過3公里後,實現每1公里單價收費,中間遇暫停時,計程數不再增加,開始計時收費,測距收費和測時收費的和便構成了一位乘客的車費。同時,白天和夜晚價格不同,可以進行切換。白天單價、夜晚單價、等待單價和起步價格都可通過獨立鍵盤進行調節。(默認起步價為5元/3公里,里程單價白天為1.5元/公里,夜晚為1.8元/公里,等待計時單價為0.5元/5分鍾)
1.2 基本原理
計數器系統主要由五部分組成:A44E霍爾感測器、AT89S52單片機、獨立鍵盤、EEPROM AT24C01和顯示數碼管。
霍爾感測器安裝在車輪上,主要檢測汽車行進的公里數,並產生一系列相應的脈沖輸出,脈沖送到單片機進行處理,單片機根據程序設定通過計算脈沖數換算出行駛公里數,再根據從EEPROM中讀取的價格等相關數據進行金額的計算,計算好的金額、里程和單價都實時地顯示在數碼管上。獨立鍵盤可以調節價格等相關數據,按下相應的按鈕,產生信號交由單片機處理並實時顯示出來,調節好的數據存儲到EEPROM中,掉電後可以使調好的數據不丟失,下次得電後直接從EEPROM讀到單片機,系統結構圖如圖1。
圖1 系統結構圖
第二章 硬體設計
2.1 單片機最小系統單元
主控機系統採用了Atmel 公司生產的 AT89S52單片機,它含有256 位元組數據存儲器,內置8K 的電可擦除FLASH ROM,可重復編程,大小滿足主控機軟體系統設計,所以不必再擴展程序存儲器。復位電路和晶振電路是AT89S52 工作所需的最簡外圍電路。單片機最小系統電路圖如圖2所示。
圖2 單片機最小系統圖
AT89S52 的復位端是一個史密特觸發輸入,高電平有效。RST端若由低電平上升到高電平並持續2個周期,系統將實現一次復位操作。在復位電路中,按一下復位開關就使在RST端出現一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統的內部時鍾電路。
2.2 A44E霍爾感測器檢測單元
A44E 屬於開關型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標准,可以直接接到單片機的IO 埠上,而且其最高檢測頻率可達到1MHZ。
A44E 集成霍耳開關由穩壓器A、霍耳電勢發生器(即硅霍耳片)B、差分放大器C、施密特觸發器D和OC門輸出E五個基本部分組成。
在輸入端輸入電壓Vcc,經穩壓器穩壓後加在霍爾電勢發生器的兩端,根據霍爾效應原理,當霍爾片處在磁場中時,在垂直於磁場的方向通以電流,則與這二者相垂直的方向上將會產生霍爾電勢差VH輸出,該VH信號經放大器放大後送至施密特觸發器整形,使其成為方波輸送到OC門輸出。當施加的磁場達到工作點(即Bop)時,觸發器輸出高電壓(相對於地電位),使三極體導通,此時OC門輸出端輸出低電壓,三極體截止,使OC門輸出高電壓,這種狀態為關。這樣兩次電壓變換,使霍爾開關完成了一次開關動作。A44E霍爾感測器原理如圖3所示。
圖3 A44E霍爾感測器原理
里程計算是通過安裝在車輪上的霍爾感測器檢測到的脈沖信號,送到單片機產生中斷,單片機再根據程序設定,計算出里程。其原理如圖4所示。
圖4 感測器測距示意圖
本系統選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號的輸入端(這樣可以減少程序設計的麻煩),車輪每轉一圈(設車輪的周長是1米),霍爾開關就檢測並輸出信號,引起單片機的中斷,對脈沖計數,當計數達到1000次時,即1公里,單片機就控制將金額自動增加,如圖5。
圖5 A44E霍爾元件接線圖
2.3 AT24C01存儲單元
存儲單元的作用是在電源斷開的時候,存儲當前設定的單價信息。AT24C01 是Ateml公司的1KB的電可擦除存儲晶元,採用兩線串列的匯流排和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態電流10uA(5.5V),晶元內的資料可以在斷電的情況下保存40年以上,而且採用8 腳的DIP 封裝,使用方便。
AT24C02晶元引腳配置如圖6所示。
存儲單元電路連接如圖7所示。
圖 7 存儲單元電路原理圖
圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態功耗。由於AT24C01的數據線和地址線是復用的,採用串口的方式傳送數據,所以只用兩根線SCL(時鍾脈沖)和SDA(數據/地址)與單片機P2.2和P2.3口連接,進行傳送數據。
每當設定一次單價,系統就自動調用存儲程序,將單價信息保存在晶元內;當系統重新上電的時候,自動調用讀存儲器程序,將存儲器內的單價等信息,讀到緩存單元中,供主程序使用。
2.4 鍵盤調整單元
當單價等信息需要進行修改時,就要用到鍵盤進行修改。由於調節信息不多,故採用4個獨立鍵盤即可,分別實現清零、切換、增大、減小和功能等作用。電路原理如圖8所示。
圖8 鍵盤調整單元接線圖
S1:接P1.0口,對上一次的計費進行清零,為下次載客准備
S2:接P1.1口,實現白天和夜晚單價的切換;當功能鍵S4按下時,S2可對數據進行增大。
S3:接P1.2口,當功能鍵S4按下時,S3可對數據進行減小。
S4:接P1.3口,按1次,進入調整白天單價;按2次,進入調整夜晚單價;按3次,進入調整等待單價;按4次,進入調整起步價;按5次,返回。
2.5 顯示單元
顯示單元由7個8段共陽數碼管組成,採用動態掃描進行顯示。前三個數碼管分別接P3.0、P3.1和P3.2,用於顯示總金額;中間兩個分別接P3.4和P3.5,用於顯示里程;後邊兩個分別接P3.6和P3.7,用於顯示單價。電路如圖9所示。
圖9 數碼管顯示圖
第三章 軟體設計
3.1 系統主程序
在主程序模塊中,需要完成對各參量和介面的初始化、計程車起價和單價的初始化以及中斷、計算、循環等工作。另外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,並對它們進行初始化。然後,主程序將根據各標志寄存器的內容,分別完成啟動、清除、計程和計價等不同的操作。
當汽車運行起來時,就啟動計價,根據里程寄存器中的內容計算和判斷行駛里程是否已超過起步價公里數。若已超過,則根據里程值、每公里的單價數和起步價數來計算出當前的總金額,並將結果存於總金額寄存器中;中途等待時,無脈沖輸入,不產生中斷,當時間超過等待設定值時,開始進行計時,並把等待價格加到總金額里,然後將總金額、里程和單價送數碼管顯示出來。程序流程如圖10所示。
圖10 主程序流程圖 圖11 計算程序流程圖
3.2 中斷程序
3.2.1 里程計數中斷程序
每當霍爾感測器輸出一個低電平信號就使單片機中斷一次,當里程計數器對里程脈沖計滿1000次時,進入里程計數中斷服務程序中,里程變數加一。主函數中總金額也相應地變化。
3.2.2 中途等待中斷程序
在中途等待中斷程序中,每1ms產生一次中斷,將當前里程值送入某個緩存變數,每5分鍾將緩存變數中的值和當前里程值比較,當汽車停止,霍爾感測器5分鍾沒有輸出信號,當前里程值和緩存變數內的值相同,則進入等待計時,每5分鍾記一次價格。
3.3 計算程序
計算程序根據里程數分別進入不同的計算公式。如果里程大於3公里,則執行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖11所示。
3.4 顯示程序
顯示程序利用定時器每1ms產生一次中斷,相應變數置位,點亮一個數碼管,顯示一位數據,利用主函數內的循環,實現動態掃描顯示,同時根據數碼管余輝和人眼暫留現象,即可實現顯示。
3.5 鍵盤程序
鍵盤採用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環主程序,一旦右按鍵按下,便轉向相應的子程序處理,處理結束再返回。流程圖如圖12。
圖12 鍵盤程序流程圖
第四章 總結
經過這些天有關於計程車計價器的課程設計,使我對單片機的應用有了更深的了解。在課程設計的過程中,還是碰到了許多的問題。比如,對於數碼管動態掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對於代碼的前後順序及調用掌握得還不夠好;對於一些相關的應用軟體沒能熟練掌握。通過這幾天晚上的苦想和反復調試,以及參考網上的程序,最終還是把問題解決了。
通過這次課程設計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設計東西的樂趣、學會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學是學不到其中的精髓的,必須親自去試著實踐,親自去經歷才能對它們真正的掌握,凡事都要自己去動下手,去實踐一下,遇到困難,永遠不要沮喪氣餒。在動手的過程中,不僅能增強實踐能力,而且在理論上可以有更深的認識;這次設計給了我極大的鼓舞和信心,相信在以後的學習中可以通過不斷的摸索和實踐來提高其他方面的知識。
參考文獻
[1] 馬淑華,王鳳文,張美金編著. 單片機原理與介面技術(第二版). 北京:北京郵電大學出版社,2007.
[2] 譚浩強著. C程序設計(第三版). 北京:清華大學出版社,2005.
附錄A 系統原理圖
附錄B 系統源程序
算了圖貼不上去 給你個網址吧http://blog.sina.com.cn/s/blog_609003ef0100dt1o.html
挺全的去看看