張蒙蒙 吳萌 王艷榮
摘 要:基于對現在出租車計價器的功能的改進和完善,結合STC公司的STC89C52芯片,提出了出租車多人計價器的設計方案,給出了采用C語言,Keil C軟件設計的出租車多人計價器的實現步驟、仿真及硬件測試結果,驗證了方案的正確性。出租車多人計價器相對于現有的計價器功能更加完善,實用性更強。
關鍵詞:多人計價器;C語言;STC89C52單片機;Keil C
0 引言
在當今社會的出租車計價器中,只能計算出一位乘客的乘車價錢,所以現在的出租車計費還有一定的改進空間。為了更好的解決這個問題,設計了多人計價器,以達到打車費用更加合理,使人們的出行更加便利的目的。多人計價器是在原有的計價器基礎上進行功能的創新和改善,使得計價器的功能更加完善。
1 系統總體方案
系統主要由單片機STC89C52,霍爾傳感器,液晶顯示器LCD1602,和鍵盤電路組成(系統結構圖如圖1所示)。
單片機的功能是完成里程計算,車費計算,等待計費等,是整個系統的核心。霍爾傳感器來完成信號的采集,并且將采集到的信號傳遞給單片機。鍵盤電路控制每位乘客的計價開始和終止。液晶顯示器用于顯示每位乘客的總價。
2 硬件電路設計
2.1 霍爾傳感器
本次設計使用的是A44E型霍爾傳感器,A44E型傳感器是開關型傳感器,其傳出的信號是符合TTL電平標準的信號,所以霍爾傳感器可以直接接到單片機的I/O端口上。霍爾傳感器的工作電壓范圍是4.5~18V,最高檢測頻率可達到1MHZ(管腳圖如圖2所示)。
A44E型霍爾傳感器是由穩壓器,霍爾電勢發生器,差分放大器,施密特觸發器和三極管輸出端5個基本部分組成的。
在輸入端接入輸入電壓VCC,提供電路工作電壓。當霍爾傳感器處在磁場內部,并在與磁場垂直的方向通入電流,根據霍爾效應原理,與這兩者垂直的方向上將會產生霍爾電勢差VH輸出,再由后續電路的放大和整形,使其輸出信號成為方波。
霍爾傳感器主要完成里程的計算。把霍爾傳感器安裝在車輪上來檢測信號,把輸出端接在單片機的P3.3端口,車輪每轉過一周,霍爾傳感器就完成一個開關動作,輸出一個脈沖,引起單片機的中斷一次,通過對中斷次數的計算來完成對里程的計算。車輪的周長為1m(可以根據相應的車輛設置),每當霍爾傳感器傳出1000個脈沖,單片機中斷1000次,出租車就行走了一千米,里程加一。
2.2 鍵盤控制單元
本次設計需要對每位乘客的乘車費用分別進行計算,這部分用獨立按鍵控制。一輛出租車上最多可以乘坐4名乘客,所以采用了4個獨立按鍵。每個獨立按鍵可以控制一個乘客的乘車費用。當按鍵按下第一次時,對乘客的計費開始,當按下第二次時,對相應程序初始化,并對乘客的乘車費用清零。
按鍵的按動過程中會有抖動存在,所以在程序設計中要設置去抖程序。
2.3 顯示單元
顯示部分需要顯示四位乘客的乘車總費用,其主要功能是由LCD1602來完成。LCD1602與單片機的數據地址線0-7分別連接。根據P0口的硬件特點,外部必須接入上拉電阻。LCD1602具有的特性為:①1602采用的是5×7點陣圖來顯示單個字符,②LCD1602中的“16”代表了每行最多可以顯示16個字符,“02”代表了總共可以顯示兩行字符。1602內有一個80字節的緩沖區(如表一所示),每一行有40個字節地址,但是1602的屏幕上只能顯示前十六個字節地址的內容。
3 軟件設計
3.1 主程序
在主程序中,需要完成對各個參量寄存器以及接口的初始化,以及對應程序的中斷、計算、循環等工作,主要部分是按鍵程序的書寫。
當出租車啟動后,主程序開始執行,各個部分進行初始化并開始掃描鍵盤,當掃描到按鍵的狀態發生變化時,鍵盤狀態改變次數變量就加1(key++),當key=1時,就啟動計價子程序,執行相應子程序的內容,完成該按鍵對應乘客的乘車費用的計算,當key=2時,相應部分子程序初始化把按鍵對應乘客的乘車費用清零,并把key從新賦值為零。程序框圖如圖3所示。
3.2 總價計算子程序
主程序啟動后,里程中斷服務子程序將計算好的數值傳入里程寄存器中。總價計算子程序就是根據里程寄存器里的內容來判斷乘客乘車的里程數是否大于3km。若里程大于3km,則執行計算公式:總價金額=起步價+(里程-3)×單價+等待時間×等待單價;若乘客里程小于或等于三千米,則執行公式:總金額=起步價+等待時間×等待單價。
3.3 里程中斷服務子程序
里程中斷子程序的原理為:每當霍爾傳感器傳來一個脈沖,單片機就中斷一次。只有當相應的鍵盤狀態改變次數變量key1,key2,key3,key4得值為1時,相應乘客的里程計算才開始,對應計算子程序的單片機每中斷一次,單片機中斷次數加一,當中斷次數達到1000以后,里程加一,然后將中斷的次數清零,重新進行累加。根據按鍵的不同從而可以分別計算不同乘客的里程。
3.4 等待中斷服務子程序
等待中斷服務子程序的原理為:首先設置單片機為每1ms中斷一次,然后將當前里程值存入一個緩存變量,每過5分鐘,把當前得到的里程值與緩存變量中的里程值進行比較,如果數值相等,就可以得出霍爾傳感器沒有傳出信號,從而啟動等待計費,每過5分鐘,等待時間計價就改變一次。
4 結論
通過軟件仿真和硬件實驗可以驗證多人計價器在功能上實現了對多個乘客進行乘車計費的,并且在硬件測試時1602上顯示的乘車費用與理論值一致,所以多人計價器在準確度上也達到了要求。經實驗證明硬件系統在實時性能上比軟件系統要低,所以會出現計時功能與實際相比有微小延遲的結果。硬件實驗的靈活性較軟件仿真較差,可能會出現按鍵按下程序執行執行延遲的情況。
參考文獻
[1]耿永剛,李利珍編著.單片機技術與應用[M].上海科學技術出版社.2012.
[2]深圳信盈達電子有限公司.輕松成為設計高手51單片機設計實戰[M].北京航空航天大學出版社,2013.
[3]陳海宴.51單片機原理及應用[M].北京航空航天大學出版社,2010.
(作者單位:內蒙古工業大學)