第一篇:出租車(chē)計(jì)價(jià)器 硬件課程設(shè)計(jì)
硬件課程設(shè)計(jì)報(bào)告
題目:出租車(chē)計(jì)價(jià)器
目錄
1. 引言....................................................................................................................................錯(cuò)誤!未定義書(shū)簽。
1.1設(shè)計(jì)目的................................................................................................................錯(cuò)誤!未定義書(shū)簽。1.2設(shè)計(jì)任務(wù)................................................................................................................錯(cuò)誤!未定義書(shū)簽。1.3設(shè)計(jì)思路................................................................................................................錯(cuò)誤!未定義書(shū)簽。
2.需求分析.............................................................................................................................錯(cuò)誤!未定義書(shū)簽。
2.1芯片原理................................................................................................................錯(cuò)誤!未定義書(shū)簽。2.1.1可編程計(jì)數(shù)器/定時(shí)器8253/8254原理.............................................................錯(cuò)誤!未定義書(shū)簽。2.1.2可編程外圍接口芯片8255原理.......................................................................錯(cuò)誤!未定義書(shū)簽。2.1.3 12864液晶顯示器ST7920原理........................................................................錯(cuò)誤!未定義書(shū)簽。2.2硬件設(shè)計(jì)................................................................................................................錯(cuò)誤!未定義書(shū)簽。2.3軟件設(shè)計(jì)................................................................................................................錯(cuò)誤!未定義書(shū)簽。2.3.1功能模塊圖.........................................................................................................錯(cuò)誤!未定義書(shū)簽。2.3.2程序流程圖.........................................................................................................錯(cuò)誤!未定義書(shū)簽。2.3.3模塊流程圖.........................................................................................................錯(cuò)誤!未定義書(shū)簽。
3.詳細(xì)設(shè)計(jì).............................................................................................................................錯(cuò)誤!未定義書(shū)簽。
3.1程序模塊分析........................................................................................................錯(cuò)誤!未定義書(shū)簽。3.1.1初始化模塊程序分析.........................................................................................錯(cuò)誤!未定義書(shū)簽。3.1.2判斷開(kāi)關(guān)程序模塊分析.....................................................................................錯(cuò)誤!未定義書(shū)簽。3.1.3圈數(shù)統(tǒng)計(jì)模塊程序分析.....................................................................................錯(cuò)誤!未定義書(shū)簽。3.1.4計(jì)算里程模塊程序分析.....................................................................................錯(cuò)誤!未定義書(shū)簽。3.1.5顯示模塊程序分析.............................................................................................錯(cuò)誤!未定義書(shū)簽。3.1.6結(jié)束模塊程序分析.............................................................................................錯(cuò)誤!未定義書(shū)簽。3.2程序代碼................................................................................................................錯(cuò)誤!未定義書(shū)簽。
4.5.6.程序結(jié)果.............................................................................................................................錯(cuò)誤!未定義書(shū)簽。分析與測(cè)試.........................................................................................................................錯(cuò)誤!未定義書(shū)簽。體會(huì).....................................................................................................................................錯(cuò)誤!未定義書(shū)簽。
附錄A:參考文獻(xiàn).....................................................................................................................錯(cuò)誤!未定義書(shū)簽。
一、引言
1.1設(shè)計(jì)目的
現(xiàn)在各大城市出租車(chē)已經(jīng)成為了一種重要的交通工具,當(dāng)然出租車(chē)的收費(fèi)問(wèn)題也成了人們關(guān)注的焦點(diǎn),那么怎么樣才能實(shí)現(xiàn)一種合理的收費(fèi)方式讓大家都認(rèn)可呢?在這種要求下,出租車(chē)自動(dòng)計(jì)價(jià)器就走進(jìn)了人們的生活,當(dāng)然這就要求有一種合理公正的計(jì)價(jià)器收費(fèi)方式。這不僅關(guān)系到出租車(chē)計(jì)價(jià)器的市場(chǎng),也影響這出租車(chē)的市場(chǎng),這就要求我們?cè)O(shè)計(jì)出更好的計(jì)價(jià)器來(lái)滿足人們的需求。
本設(shè)計(jì)是關(guān)于出租車(chē)計(jì)價(jià)器的設(shè)計(jì)。在本次設(shè)計(jì)中,我以計(jì)價(jià)器的基本功能作為設(shè)計(jì)的重點(diǎn)。為了完成上述設(shè)計(jì),我們采用了8254、8255等芯片,用計(jì)算機(jī)匯編語(yǔ)言進(jìn)行軟件功能的實(shí)現(xiàn)。
1.2設(shè)計(jì)任務(wù)
1.實(shí)現(xiàn)一個(gè)出租車(chē)計(jì)價(jià)器,可以顯示起步價(jià)。2.一個(gè)鍵來(lái)控制是否到達(dá)終點(diǎn),是否計(jì)價(jià)要清零。3.基于路程的出租車(chē)計(jì)價(jià)方式。
1.3設(shè)計(jì)思路
利用直流電機(jī)來(lái)模仿出租車(chē)輪子的轉(zhuǎn)動(dòng)來(lái)計(jì)算出租車(chē)行進(jìn)的路程。將直流電機(jī)的直流端與滑動(dòng)變阻器相連,通過(guò)人工控制滑動(dòng)變阻器來(lái)模擬出租車(chē)的行進(jìn);并將計(jì)數(shù)端與8253CLK0端相連,GATE0接高電平,工作方式為方式二。直流電機(jī)每轉(zhuǎn)1000圈,8253輸出一個(gè)高電平,假設(shè)出租車(chē)已經(jīng)走了1公里。同時(shí)將8253OUT0接入8255方便CPU讀取。再將8255與ST7920顯示器相連,CPU通過(guò)控制8255來(lái)控制顯示,一旦8255從8253讀入一個(gè)高電平,則公里數(shù)加一,同時(shí)價(jià)格相應(yīng)增加。另有一個(gè)開(kāi)關(guān)連入8255,用以判斷出租車(chē)計(jì)價(jià)器是否啟動(dòng)。
二、需求分析
2.1芯片原理
本節(jié)主要在介紹本次設(shè)計(jì)所用到的芯片的原理,共有可編程計(jì)數(shù)器/定時(shí)器8253/8254、可編程外圍接口芯片8255和12864液晶顯示器ST7920原理三種芯片。
2.1.1可編程計(jì)數(shù)器/定時(shí)器8253/8254原理
圖2-1 8254內(nèi)部結(jié)構(gòu)圖
從圖2-1可見(jiàn),8254內(nèi)部包含數(shù)據(jù)總線緩沖器、讀/寫(xiě)控制邏輯、控制字寄存器和3個(gè)結(jié)構(gòu)完全相同的計(jì)數(shù)器,這3個(gè)計(jì)數(shù)器分別稱(chēng)為計(jì)數(shù)器0、計(jì)數(shù)器1和計(jì)數(shù)器2。
圖2-2 8254管腳圖
A1、A0:地址輸入線,用來(lái)控制8253內(nèi)部的4個(gè)端口,即3個(gè)計(jì)數(shù)器和1個(gè)控制字寄存器與CPU系統(tǒng)地址線相連。
CLK0-2:時(shí)鐘脈沖輸入端,用于輸入定時(shí)脈沖或計(jì)數(shù)脈沖信號(hào)。CLK可以是系統(tǒng)的時(shí)鐘脈沖,也可以由系統(tǒng)時(shí)鐘分頻或者其他脈沖源提供。當(dāng)用于定時(shí)時(shí),這個(gè)脈沖必須是均勻的、連續(xù)的、周期精確的,而用于計(jì)數(shù)時(shí),這個(gè)脈沖可以是不均勻的、斷續(xù)的、周期不定的。
GATE0-2:門(mén)控輸入端,用于外部控制計(jì)數(shù)器的啟動(dòng)計(jì)數(shù)和停止計(jì)數(shù)的操
作。兩個(gè)或兩個(gè)以上計(jì)數(shù)器連用時(shí),可用此信號(hào)同步,也可用于與外部某信號(hào)的同步。
OUT0-2:計(jì)數(shù)輸出,當(dāng)計(jì)數(shù)器從初值開(kāi)始完成計(jì)數(shù)操作進(jìn),OUT引腳輸出相應(yīng)的信號(hào)。
8253的方式控制字
圖2-3 8254控制字圖
本設(shè)計(jì)中8254的功能
只是用通道1,采用方式三。采用二進(jìn)制計(jì)數(shù),輸入0FFFH。先輸入低字節(jié),再輸入高字節(jié)。當(dāng)8254從0FFFFH遞減到159FH時(shí)(即轉(zhuǎn)了60000圈時(shí)),8254向總線發(fā)信號(hào)使程序向下進(jìn)行。
2.1.2可編程外圍接口芯片8255原理
內(nèi)部結(jié)構(gòu)如圖所示,由以下4個(gè)部分組成:
圖2-4 8255內(nèi)部結(jié)構(gòu)圖
(1)輸入/輸出端口A、B、C。這三個(gè)端口均可看作是I/O端口,但它們的結(jié)構(gòu)和功能也稍有不同。A口和B口是一個(gè)獨(dú)立的8位I/O口。C口:可以看作是一個(gè)獨(dú)立的8位I/O口;也可以看作是兩個(gè)獨(dú)立的4位I/O口。
(2)A組和B組控制電路。這是兩組根據(jù)CPU命令控制8255A工作方式的電路,這些控制電路內(nèi)部設(shè)有控制寄存器,可以根據(jù)CPU送來(lái)的編程命令來(lái)控制8255A的工作方式,也可以根據(jù)編程命令來(lái)對(duì)C口的指定位進(jìn)行置/復(fù)位的操作。A組控制電路用來(lái)控制A口及C口的高4位;B組控制電路用來(lái)控制B口及C口的低4位
(3)讀/寫(xiě)控制邏輯。(同上:它負(fù)責(zé)管理8255A的數(shù)據(jù)傳輸過(guò)程。它接收CS*及RD*、WR*、RESET,還有來(lái)自系統(tǒng)地址總線的口地址選擇信號(hào)A0和A1。將這些信號(hào)組合后,得到對(duì)A組控制部件和B組控制部件的控制命令,并將命令發(fā)給這兩個(gè)部件,以完成對(duì)數(shù)據(jù)、狀態(tài)信息和控制信息的傳輸。)
(4)數(shù)據(jù)總緩沖器。(同上:它是8位的雙向的三態(tài)緩沖器。作為8255A與系統(tǒng)總線連接的界面,輸入/輸出的數(shù)據(jù),CPU的編程命令以及外設(shè)通過(guò)8255A傳送的工作狀態(tài)等信息,都是通過(guò)它來(lái)傳輸?shù)摹#?/p>
如圖所示8255A的芯片引腳信號(hào)。除了電源和地以外,其他信號(hào)可以分為兩組:
圖2-5 8255管腳圖
1.和外設(shè)一邊相連的: PA7-PA0:A組數(shù)據(jù)信號(hào)
PB7-PB0:B組數(shù)據(jù)信號(hào) PC7-PC0:C組數(shù)據(jù)信號(hào) 2.和CPU一邊相連的:
RESET:復(fù)位信號(hào),低電平有效。當(dāng)RESET信號(hào)來(lái)到時(shí),所有內(nèi)部寄存器就被清除,同時(shí),3個(gè)數(shù)據(jù)端口被自動(dòng)設(shè)為輸入端口。
D7-D0:它們是8255A的數(shù)據(jù)線,和系統(tǒng)數(shù)據(jù)總線相連。
CS*:芯片選擇信號(hào),低電平有效。在一個(gè)系統(tǒng)中,一般根據(jù)全部接口芯片來(lái)分配若干較低位地址(比如A5、A4、A3)來(lái)組成各種芯片選擇碼,當(dāng)這幾位地址組成某一個(gè)代碼時(shí),譯碼器便往8255A的CS*端輸出一個(gè)低電平,于是8255A被選中。只有當(dāng) CS*有效時(shí),讀信號(hào)RD*和寫(xiě)信號(hào)WR*才對(duì)8255A有效。
RD*:芯片讀出信號(hào)低電平有效。WR*:芯片寫(xiě)入信號(hào)低電平有效。8255的方式控制字格式
圖2-6 8255控制字圖
本設(shè)計(jì)中8255的功能
8255PA0-PA7和PC0-PC2與ST7920相連,控制輸出。PB0與8253的OUT1相連,讀入8253OUT1 的數(shù)據(jù)。PB1與開(kāi)關(guān)K0相連,讀入K0的數(shù)值用于確定是否開(kāi)啟計(jì)價(jià)器。
2.1.3可編程外圍接口芯片8255原理
ST7920控制器系列中文圖形液晶模塊的軟件特性主要由ST7920控制驅(qū)動(dòng)器決定。ST7920同時(shí)作為控制器和驅(qū)動(dòng)器,它可提供33路com輸出和64路seg輸出。在驅(qū)動(dòng)器ST7921的配合下,最多可以驅(qū)動(dòng)256×32點(diǎn)陣液晶。
ST7920是臺(tái)灣矽創(chuàng)電子公司生產(chǎn)的中文圖形控制芯片,它是一種內(nèi)置12864漢字圖形點(diǎn)陣的液晶顯示控制模塊,用于顯示漢字及圖形。該芯片共內(nèi)置8192
個(gè)中文漢字(16×16點(diǎn)陣)、128個(gè)字符的ASCII字符庫(kù)(8×16點(diǎn)陣)及64×2256點(diǎn)陣顯示RAM(GDRAM)。
為了能夠簡(jiǎn)單、有效地顯示漢字和圖形,該模塊內(nèi)部設(shè)計(jì)有2MB的中文字型CGROM和64×256點(diǎn)陣的GDRAM繪圖區(qū)域;同時(shí),該模塊還提供有4組可編程控制的16×16點(diǎn)陣造字空間;除此之外,為了適應(yīng)多種微處理器和單片機(jī)接口的需要,該模塊還提供了4位并行、8位并行、2線串行以及3線串行等多種接口方式。利用上述功能可方便地實(shí)現(xiàn)漢字、ASCII碼、點(diǎn)陣圖形、自造字體的同屏顯示,所有這些功能(包括顯示RAM、字符產(chǎn)生器以及液晶驅(qū)動(dòng)電路和控制器)都包含在集成電路芯片里,因此,只要一個(gè)最基本的微處理系統(tǒng)就可以通過(guò)ST7920芯片來(lái)控制其它的芯片
圖2-7 ST7920外觀尺寸圖
本設(shè)計(jì)中ST7920的功能
用于顯示出租車(chē)行駛路程與應(yīng)收費(fèi)用。
2.2硬件設(shè)計(jì)
其中,8253GATE1連+5V高電平,直流電機(jī)連0~+5V,8253連280h~287h,8255連288h~28fh。8255PA0-PA7連ST7920顯示器D0-D7,PC0連DI,PC1連RW,PC2連E。開(kāi)關(guān)K0連8255PB0。8253CLK1連直流電機(jī)計(jì)數(shù)端。
0~+5V直流電機(jī)D0-D7計(jì)數(shù)ST7920顯示屏DIRWE+5VGATE1CLK1PA0-PA7+5VPC0PC1PC2開(kāi)關(guān)K0PB0+5V8253CS8255CS280H-288H289H-28FH總線圖2-8硬件連接圖
實(shí)際連接圖如下圖所示
圖2-9硬件實(shí)際連接圖
2.3軟件設(shè)計(jì) 2.3.1功能模塊圖
本節(jié)先給出一個(gè)程序的功能模塊圖。
出租車(chē)計(jì)價(jià)器系統(tǒng)計(jì)價(jià)器開(kāi)關(guān)功能模塊讀入直流電機(jī)轉(zhuǎn)圈數(shù)模塊ST7920顯示功能模塊根據(jù)里程計(jì)算價(jià)格模塊
圖2-10軟件功能模塊圖
2.3.2程序流程圖
本節(jié)先給出一個(gè)程序的整體流程圖。
開(kāi)始結(jié)束8253初始化液晶顯示屏初始化8255初始化是計(jì)價(jià)器是否開(kāi)始工作通過(guò)8255讀入b0否是否有鍵盤(pán)輸入否液晶顯示屏初始化是液晶顯示屏調(diào)用顯示價(jià)格功能從直流電機(jī)讀入輸入圈數(shù)將更改過(guò)的路程在顯示器中顯示出來(lái)讀到一定圈數(shù)走的路程加一比較路程是否大于3公里是價(jià)格為(路程-3)*2+7 元將儲(chǔ)存的顯示字符串內(nèi)路程價(jià)格改為目前路程價(jià)格否價(jià)格為7元
圖2-11軟件程序流程圖
2.3.3模塊流程圖
如果對(duì)整個(gè)程序進(jìn)行細(xì)分則可以分為初始化模塊,判斷開(kāi)關(guān)模塊,圈數(shù)統(tǒng)計(jì)模塊,計(jì)算里程模塊、結(jié)束模塊和顯示模塊。其中初始化模塊是8253芯片、8255芯片和顯示屏的初始化。判斷開(kāi)關(guān)模塊是對(duì)8255的b0端是否有高電平進(jìn)行判斷。
圈數(shù)統(tǒng)計(jì)模塊是對(duì)直流電機(jī)傳入8253中高電平的數(shù)量進(jìn)行圈數(shù)統(tǒng)計(jì)。計(jì)算里程模塊是對(duì)里程及價(jià)格進(jìn)行計(jì)算的模塊。結(jié)束模塊是程序結(jié)束的操作與方法。顯示模塊是控制顯示屏顯示計(jì)算模塊的結(jié)果。
初始化模塊顯示模塊調(diào)用關(guān)判斷開(kāi)關(guān)模塊開(kāi)結(jié)束模塊圈數(shù)統(tǒng)計(jì)模塊計(jì)算里程模塊調(diào)用顯示模塊圖2-12軟件模塊流程圖
三、詳細(xì)設(shè)計(jì)
3.1程序模塊分析
我們將按模塊分析程序的功能并給出模塊內(nèi)的功能流程圖。
3.1.1初始化模塊分析
在初始化模塊中,我們定義了需要使用的8255和8254的接口,需要使用的變量如JSS,要輸出的字符串等,初始化了DS,完成了8255的初始化以及顯示屏的初始化。其流程圖為
開(kāi)始圖3-1初始化模塊流程圖
3.1.2判斷開(kāi)關(guān)模塊分析
以上為判斷開(kāi)關(guān)模塊,在判斷開(kāi)關(guān)模塊中,系統(tǒng)讀入8255PB0的電平,如果是高電平則程序繼續(xù)進(jìn)行,如果是低電平則程序調(diào)用chushi函數(shù),用屏幕顯示“空車(chē)歡迎乘坐”,并繼續(xù)度8255PB0直到有高電平為止。其流程圖如下所示:
8255PB0是否為高電平是圈數(shù)統(tǒng)計(jì)模塊否Chushi函數(shù)計(jì)數(shù)變量和對(duì)應(yīng)的字符串置零顯示 空車(chē) 歡迎乘坐 調(diào)用顯示模塊
圖3-2判斷開(kāi)關(guān)模塊流程圖
3.1.3圈數(shù)統(tǒng)計(jì)模塊分析
在圈數(shù)統(tǒng)計(jì)模塊中,我們將直流電機(jī)計(jì)數(shù)端連入8254CLK1中(8253采用方式三),在CLK1中讀所記的數(shù),從0FFFFH向下計(jì),一直計(jì)到159FH,即轉(zhuǎn)了6000圈后,進(jìn)入程序的下一段。其流程圖如下所示:
讀8254計(jì)數(shù)值否是否到159FH以下是重新將8254計(jì)數(shù)初值設(shè)為0FFFFH計(jì)算里程模塊
圖3-3圈數(shù)統(tǒng)計(jì)模塊流程圖
3.1.4計(jì)算里程模塊分析
我們用地址JSS里表示已經(jīng)走過(guò)的公里,即8254傳過(guò)來(lái)的高電平,同時(shí)我們采用價(jià)格公式來(lái)計(jì)算價(jià)格,將其里程和價(jià)格對(duì)應(yīng)的中文字碼表存入要顯示的字符串中。我們用地址JSS里表示已經(jīng)走過(guò)的公里,即8254傳過(guò)來(lái)的高電平,同時(shí)我們采用價(jià)格公式來(lái)計(jì)算價(jià)格,將其里程和價(jià)格對(duì)應(yīng)的中文字碼表存入要顯示的字符串中。
計(jì)算公式為: 價(jià)格=(里程-3)* 2……(里程>3)
價(jià)格= 7…………………..(里程<=3)并調(diào)用顯示模塊來(lái)顯示這些字碼其流程圖如下所示:
圈數(shù)統(tǒng)計(jì)模塊計(jì)數(shù)值JSS加一并十進(jìn)制化里程數(shù)加一里程數(shù)是否是大于3是價(jià)格為(里程-3)*2調(diào)用顯示模塊否價(jià)格為7
圖3-4計(jì)算里程模塊流程圖
3.1.5顯示模塊分析
在顯示模塊中,我們使用ST7920顯示我們要顯示的兩行字符串。我們采取先顯示第一行,再顯示第二行的方法,只是用ST7920的中間兩行。
調(diào)整顯示屏指針指向第二行調(diào)整顯示屏指針指向第三行調(diào)整字符串指針指向第一個(gè)字調(diào)整字符串指針指向第九個(gè)字輸出輸出延時(shí)延時(shí)
圖3-5顯示模塊流程圖
3.1.6結(jié)束模塊分析
結(jié)束模塊在程序的尾部在結(jié)束模塊中,我們規(guī)定只要在鍵盤(pán)上按任意一個(gè)鍵就會(huì)結(jié)束整個(gè)程序。如果無(wú)鍵按下,則程序自動(dòng)跳轉(zhuǎn)到程序頭部。其程序流程圖如下圖所示:
調(diào)用DOS中斷是否有鍵按下是結(jié)束否判斷開(kāi)關(guān)模塊
圖3-6結(jié)束模塊流程圖
3.2程序代碼
IO8253A
EQU 280H IO8253B
EQU 281H IO8253C
EQU 283H
DATA
SEGMENT HZ DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH
DW BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放原始輸出 HZ_TAB DW 0C2B7H,0B3CCH,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0B9ABH,0C0EFH
DW 0BCDBH,0B8F1H,0A3B0H,0A3B0H,0A3B0H,0A3AEH,0A3B0H,0D4AAH;存放要輸出的值 HZ_BG DW 0BFD5H,0B3B5H,0A2A0H,0A2A0H,0BBB6H,0D3ADH,0B3CBH,0D7F8H
DW 0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H,0A2A0H;存放“空車(chē)歡迎乘坐”
HZ_ADR DB ?
;存放顯示行起始端口地址 JSS
DW 0000H DII
DW 0000H GAO
DW 0000H ZHE
DW 0000H NUMBER
DW 0A3B0H,0A3B1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H,0A3B8H,0A3B9H DATA
ENDS IO_ADDRESS
EQU 288H
CODE SEGMENT ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV DX,IO_ADDRESS ADD DX,3 MOV AL,82H OUT DX,AL
;8255初始化 MOV AL,0FFH MOV DX,300H OUT DX, AL CALL CLEAR
;LCD 清除
LLL:
MOV DX,IO_ADDRESS ADD DX,1 IN AL,DX
;判斷開(kāi)關(guān)是否打開(kāi) AND AL,01H CMP AL,01H JZ F0 CALL CHUSHI JMP LLL F0: MOV AL,01110110B MOV DX,IO8253C OUT DX,AL
;8254初始化 MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH
;設(shè)置計(jì)數(shù)初值0FFFFH OUT DX,AL F1: MOV AL,01000000B
MOV DX,IO8253C OUT DX,AL MOV DX,IO8253B
IN AL,DX MOV AH,AL IN AL,DX XCHG AH,AL CMP AX,159FH
;查看是否下降到159FH JA F1
;不滿足條件繼續(xù)讀值
MOV AL,01110110B
;重置8253 MOV DX,IO8253C OUT DX,AL MOV AL,0FFH MOV DX,IO8253B OUT DX,AL MOV AL,0FFH OUT DX,AL
CALL DISP
;調(diào)顯示子程序
CALL DDSP
CALL DELAY PUSH DX
MOV AH,06H MOV DL,0FFH INT 21H POP DX
JZ LLL
MOV AH,4CH
;退出
INT 21H L1:
JMP
START;L1
CHUSHI PROC NEAR
LEA SI, HZ_TAB LEA DI,HZ MOV CX,0FH F3: ADD SI,2 ADD DI,2 MOV AX,[DI] MOV [SI],AX LOOP F3
;重置HZ_TAB
MOV AX,0000H LEA BX,JSS MOV [BX],AX LEA BX, HZ_BG MOV CH,2
CALL LCD_DISP LEA BX, HZ_BG MOV CH,3
;顯示“空車(chē)歡迎乘坐” CALL LCD_DISP RET CHUSHI ENDP
DDSP
PROC NEAR
LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX]
MOV BP,AX AND BP,00FFH ADD BP,BP
MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+6],DX
;將JSS中低八位傳入HZ_TAB MOV BP,AX AND BP,0FF00H ROR BP,8 ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+4],DX
LEA BX, HZ_TAB
MOV CH,2
息
CALL LCD_DISP LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AX,0003H
JBE L3 CALL BJ LEA BX,JSS JMP L4
L3:MOV BP,0007H
ADD BP,BP MOV DX,WORD PTR[BP+SI ] MOV WORD PTR[DI+24],DX JMP L4 L4:
LEA BX, HZ_TAB
MOV CH,3
CALL LCD_DISP RET DDSP
ENDP
BJ
PROC NEAR
LEA DI,HZ_TAB LEA BX,JSS LEA SI,NUMBER MOV AX,WORD PTR[BX] CMP AL,03H
;將JSS中高八位傳入HZ_TAB
;顯示第2行信;比較路程與3的大小;路程比3小的情況
;顯示第3行信息
JAE BJ1 SUB AH,01H ADD AL,0AH SUB AL,03H AAS
;路程減三并十進(jìn)制化 JMP BJ2 BJ1:
SUB AX,0003H BJ2: MOV CX,AX AND AX,00FFH ADD AL,AL AAA ADD AX,07H AAA
LEA BX,DII MOV [BX],AX;DII MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+24],DX
MOV AX,CX SHR AX,8 AND AX,00FFH ADD AL,AL
AAA LEA BX,GAO MOV [BX],AX;GAO LEA BX,DII MOV DX,[BX];DII AND AX,00FFH AND DX,0FF00H SHR DX,8 AND DX,00FFH ADD AL,DL
AAA LEA BX,ZHE MOV [BX],AX;ZHE MOV BP,AX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI]
;路程加七并十進(jìn)制化;先計(jì)算個(gè)位
;十位相加
;再加進(jìn)位
MOV WORD PTR[DI+22],DX
;再計(jì)算十位 LEA BX,ZHE MOV DX,[BX] LEA BX,GAO MOV AX,[BX] AND DX,0FF00H AND AX,0FF00H SHR AX,8 SHR DX,8 ADD DL,AL
;百位加進(jìn)位 AAA MOV BP,DX AND BP,00FFH ADD BP,BP MOV DX,WORD PTR[BP+SI] MOV WORD PTR[DI+20],DX
;最后計(jì)算百位 RET BJ ENDP
DISP
PROC NEAR
;顯示子程序
PUSH DX
LEA BX, JSS
MOV AX,WORD PTR[BX]
ADD AL,01H
CMP AL,09H
;判斷是否<=9
JLE NUM
;若是則為'0'-'9',ASCII碼加30H
MOV AL,00H
ADD AH,01H
CMP AH,0AH
JZ L2 NUM:
MOV WORD PTR[BX],AX
ADD AL,30H
ADD AH,30H
MOV DL,AH
MOV DH,AL
MOV AH,02H
;屏幕顯示
INT 21H
MOV DL,DH
MOV AH,02H
;屏幕顯示
INT 21H
MOV DL,0DH
;加回車(chē)符
INT 21H
MOV DL,0AH
;加換行符
INT 21H
POP DX
RET
;子程序返回 DISP ENDP L2: MOV AH,4CH
;退出
INT 21H
CLEAR
PROC
MOV AL,0CH
CLEAR
FUNCUP
;
;
;
FUNCUP
LCD_DISP
;
址
DISP_SEC:
NEXT:
CONTINUE:
MOV DX, IO_ADDRESS OUT DX,AL
;設(shè)置CLEAR命令 CALL CMD_SETUP
;啟動(dòng)LCD執(zhí)行命令 RET
ENDP
PROC MOV AL, 0FH
;LCD功能設(shè)置命令 OUT DX, AL CALL CMD_SETUP MOV AL, 34H
;LCD顯示狀態(tài)命令 OUT DX, AL CALL CMD_SETUP RET
ENDP PROC LEA BX, HZ_TAB CMP CH, 2 JZ DISP_SEC MOV BYTE PTR HZ_ADR, 88H
;第三行起始端口地ADD BX,16
;指向第二行信息 JMP NEXT MOV BYTE PTR HZ_ADR,90H MOV CL,8
PUSH CX MOV AL,HZ_ADR MOV DX, IO_ADDRESS OUT DX, AL CALL CMD_SETUP
;設(shè)定DDRAM地址命令 MOV AX,[BX] PUSH AX MOV AL,AH
;先送漢字編碼高位 MOV DX,IO_ADDRESS OUT DX,AL CALL DATA_SETUP
;輸出漢字編碼高字節(jié)
CALL DELAY
;延遲
POP AX
MOV DX,IO_ADDRESS
OUT DX, AL
CALL DATA_SETUP
;輸出漢字編碼低字節(jié)
CALL DELAY
INC BX
INC BX
;修改顯示內(nèi)碼緩沖區(qū)指針
INC BYTE PTR HZ_ADR
;修改LCD顯示端口地址
POP CX
DEC CL
JNZ CONTINUE
RET LCD_DISP
ENDP CMD_SETUP
PROC
MOV DX,IO_ADDRESS
制端口
ADD DX,2
NOP
MOV AL,00000000B
(LCD I端=0,W端=0)
OUT DX, AL
CALL DELAY
NOP
MOV AL,00000100B
=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL, 00000000B
0)
OUT DX, AL
CALL DELAY
RET CMD_SETUP
ENDP DATA_SETUP
PROC
MOV DX,IO_ADDRESS
口
ADD DX,2
MOV AL,00000001B
(LCD I端=1)
OUT DX, AL
NOP
CALL DELAY
;指向8255端口控
;PC1置0,PC0置0
;PC2置1(LCD E端
;PC2置0,(LCD E端置
;指向8255控制端
;PC1置0,PC0=1
MOV AL,00000101B
;PC2置1(LCD E端=1)
OUT DX, AL
NOP
CALL DELAY
MOV AL, 00000001B
;PC2置0,(LCD E端=0)
OUT DX, AL
NOP
CALL DELAY
RET DATA_SETUP
ENDP DELAY
PROC
PUSH CX
PUSH DX
MOV CX, 0FFFH X1:
LOOP
X1
POP DX
POP CX
RET DELAY
ENDP
CODE ENDS
END START
四、程序結(jié)果
我們利用8254、8255、ST7920顯示屏、直流電機(jī)等制作出了一個(gè)出租車(chē)計(jì)價(jià)器有專(zhuān)用鍵可以表示是否空車(chē),同時(shí)利用直流電機(jī)模擬車(chē)輪運(yùn)動(dòng),通過(guò)路程計(jì)算價(jià)格,成果如下圖所示:
圖4-1程序結(jié)果圖
五、分析與測(cè)試
程序中,我遇到的最大的難題就是如何完成正確的十進(jìn)制計(jì)算,因?yàn)樗械挠?jì)算指令都是十六進(jìn)制的,雖然有的計(jì)算里有類(lèi)似AAA這樣的調(diào)整指令,但是很多時(shí)候就不一定記得起來(lái)加上。同時(shí)由于需要根據(jù)數(shù)字來(lái)查表對(duì)應(yīng)相應(yīng)的字符碼,而且我是建立一個(gè)從零到九的數(shù)組,而由于計(jì)算錯(cuò)誤導(dǎo)致經(jīng)常出現(xiàn)亂碼,而且比較難找到相應(yīng)的錯(cuò)誤。而且有些計(jì)算沒(méi)有十進(jìn)制轉(zhuǎn)換指令,需要自己編寫(xiě)。
同時(shí)我認(rèn)為我利用提前存儲(chǔ)變量來(lái)表示走過(guò)的路程比利用堆棧要好,因?yàn)槎褩H菀子浕欤兞坑歇?dú)特的名字,利于記憶與調(diào)用。而且易于清零、增減。
六、心得體會(huì)
這次課程設(shè)計(jì)中,令我印象最為深刻的就是我們應(yīng)該有一種堅(jiān)持的精神,有時(shí)候幾個(gè)小時(shí)都沒(méi)有成果,找不到BUG。顯示的就是有問(wèn)題,這時(shí)候我們應(yīng)該有一種堅(jiān)持下去的毅力,積極詢問(wèn)老師同學(xué),問(wèn)題的解決就很快了。
同時(shí)我發(fā)現(xiàn)編程習(xí)慣非常重要,應(yīng)該有一個(gè)提前的規(guī)劃,不能想到哪寫(xiě)到哪,這樣的話,后期的DEBUG會(huì)非常麻煩,因?yàn)樽约阂部床欢约旱拇a,我們都應(yīng)該有規(guī)范化的代碼意識(shí),這樣的編程能力才能上升。
參考文獻(xiàn)
[1]周荷琴,吳秀清,《微型計(jì)算機(jī)原理與接口技術(shù)》,合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社 2008。[2] 曹?chē)?guó)清,《數(shù)字電路與邏輯設(shè)計(jì)》,徐州:中國(guó)礦業(yè)大學(xué)出版社 2003。[3] 8255芯片原理:http://baike.baidu.com/link?url=KHojvZzBGmo26_6iYGTdrdqH6PxQbM1Hnnc8hWQNPIp60L7TWG5LZu_ppSkXo5maU5M4APs4qCGSudiqZ0bdl_ [4]ST7920芯片原理:http://wenku.baidu.com/view/0dafd9232f60ddccda38a0fa.html訪問(wèn)時(shí)間2013/10/15 [5]ST7920中文字碼表:http://wenku.baidu.com/view/d4abe628647d27284b735127.html訪問(wèn)時(shí)間:2013/10/15
第二篇:出租車(chē)計(jì)價(jià)器課程設(shè)計(jì)2
出租車(chē)計(jì)價(jià)器課程設(shè)計(jì)
目錄
前言
1、系統(tǒng)工作原理 1.1 功能說(shuō)明 1.2 基本原理
2、硬件設(shè)計(jì)
2.1 單片機(jī)最小系統(tǒng)單元 2.2 A44E霍爾傳感器檢測(cè)單元 2.3 AT24C01存儲(chǔ)單元 2.4 鍵盤(pán)調(diào)整單元 2.5 顯示單元
3、軟件設(shè)計(jì) 3.1 系統(tǒng)主程序 3.2 中斷程序
3.2.1 里程計(jì)數(shù)中斷程序 3.2.2 中途等待中斷程序 3.3 計(jì)算程序 3.4 顯示程序 3.5 鍵盤(pán)程序
4、總結(jié) 參考文獻(xiàn)
附錄A 系統(tǒng)原理圖
附錄B 系統(tǒng)源程序
前言
隨著出租車(chē)行業(yè)的發(fā)展,出租車(chē)已經(jīng)是城市交通的重要組成部分,從加強(qiáng)行業(yè)管理以及減少司機(jī)與乘客的糾紛出發(fā),具有良好性能的計(jì)價(jià)器對(duì)出租車(chē)司機(jī)和乘客來(lái)說(shuō)都是很必要的。而采用模擬電路和數(shù)字電路設(shè)計(jì)的計(jì)價(jià)器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機(jī)進(jìn)行的設(shè)計(jì),相對(duì)來(lái)說(shuō)功能強(qiáng)大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙?shí)現(xiàn)設(shè)計(jì)要求,且靈活性強(qiáng),可以通過(guò)軟件編程來(lái)完成更多的附加功能。本設(shè)計(jì)采用AT89S52單片機(jī)為主控器,以A44E霍爾傳感器測(cè)距,實(shí)現(xiàn)對(duì)出租車(chē)的多功能的計(jì)價(jià)設(shè)計(jì),并采用AT24C01實(shí)現(xiàn)在系統(tǒng)掉電的時(shí)候保存單價(jià)等信息,輸出采用8段數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià),而且還能根據(jù)白天,黑夜和中途等待來(lái)調(diào)節(jié)單價(jià)。
第一章 系統(tǒng)工作原理
1.1 功能說(shuō)明
出租車(chē)計(jì)價(jià)器根據(jù)乘客乘坐汽車(chē)行駛距離和等候時(shí)間的多少進(jìn)行計(jì)價(jià),并在行程中同步顯示車(chē)費(fèi)值。從起步價(jià)開(kāi)始,當(dāng)汽車(chē)程行駛未滿3公里時(shí),均按起步價(jià)計(jì)算。過(guò)3公里后,實(shí)現(xiàn)每1公里單價(jià)收費(fèi),中間遇暫停時(shí),計(jì)程數(shù)不再增加,開(kāi)始計(jì)時(shí)收費(fèi),測(cè)距收費(fèi)和測(cè)時(shí)收費(fèi)的和便構(gòu)成了一位乘客的車(chē)費(fèi)。同時(shí),白天和夜晚價(jià)格不同,可以進(jìn)行切換。白天單價(jià)、夜晚單價(jià)、等待單價(jià)和起步價(jià)格都可通過(guò)獨(dú)立鍵盤(pán)進(jìn)行調(diào)節(jié)。(默認(rèn)起步價(jià)為5元/3公里,里程單價(jià)白天為1.5元/公里,夜晚為1.8元/公里,等待計(jì)時(shí)單價(jià)為0.5元/5分鐘)
1.2 基本原理
計(jì)數(shù)器系統(tǒng)主要由五部分組成:A44E霍爾傳感器、AT89S52單片機(jī)、獨(dú)立鍵盤(pán)、EEPROM AT24C01和顯示數(shù)碼管。
霍爾傳感器安裝在車(chē)輪上,主要檢測(cè)汽車(chē)行進(jìn)的公里數(shù),并產(chǎn)生一系列相應(yīng)的脈沖輸出,脈沖送到單片機(jī)進(jìn)行處理,單片機(jī)根據(jù)程序設(shè)定通過(guò)計(jì)算脈沖數(shù)換算出行駛公里數(shù),再根據(jù)從EEPROM中讀取的價(jià)格等相關(guān)數(shù)據(jù)進(jìn)行金額的計(jì)算,計(jì)算好的金額、里程和單價(jià)都實(shí)時(shí)地顯示在數(shù)碼管上。獨(dú)立鍵盤(pán)可以調(diào)節(jié)價(jià)格等相關(guān)數(shù)據(jù),按下相應(yīng)的按鈕,產(chǎn)生信號(hào)交由單片機(jī)處理并實(shí)時(shí)顯示出來(lái),調(diào)節(jié)好的數(shù)據(jù)存儲(chǔ)到EEPROM中,掉電后可以使調(diào)好的數(shù)據(jù)不丟失,下次得電后直接從EEPROM讀到單片機(jī),系統(tǒng)結(jié)構(gòu)圖如圖1。
圖1 系統(tǒng)結(jié)構(gòu)圖
第二章 硬件設(shè)計(jì)
2.1 單片機(jī)最小系統(tǒng)單元
主控機(jī)系統(tǒng)采用了Atmel 公司生產(chǎn)的 AT89S52單片機(jī),它含有256 字節(jié)數(shù)據(jù)存儲(chǔ)器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機(jī)軟件系統(tǒng)設(shè)計(jì),所以不必再擴(kuò)展程序存儲(chǔ)器。復(fù)位電路和晶振電路是AT89S52 工作所需的最簡(jiǎn)外圍電路。單片機(jī)最小系統(tǒng)電路圖如圖2所示。
圖2 單片機(jī)最小系統(tǒng)圖
AT89S52 的復(fù)位端是一個(gè)史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個(gè)周期,系統(tǒng)將實(shí)現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開(kāi)關(guān)就使在RST端出現(xiàn)一段時(shí)間的高電平,外接11.0592M 晶振和兩個(gè)30pF 電容組成系統(tǒng)的內(nèi)部時(shí)鐘電路。
2.2 A44E霍爾傳感器檢測(cè)單元
A44E 屬于開(kāi)關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號(hào)符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。
A44E 集成霍耳開(kāi)關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門(mén)輸出E五個(gè)基本部分組成。在輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢(shì)發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍爾電勢(shì)差VH輸出,該VH信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門(mén)輸出。當(dāng)施加的磁場(chǎng)達(dá)到工作點(diǎn)(即Bop)時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí)OC門(mén)輸出端輸出低電壓,三極管截止,使OC門(mén)輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開(kāi)關(guān)完成了一次開(kāi)關(guān)動(dòng)作。A44E霍爾傳感器原理如圖3所示。
圖3 A44E霍爾傳感器原理
里程計(jì)算是通過(guò)安裝在車(chē)輪上的霍爾傳感器檢測(cè)到的脈沖信號(hào),送到單片機(jī)產(chǎn)生中斷,單片機(jī)再根據(jù)程序設(shè)定,計(jì)算出里程。其原理如圖4所示。
圖4 傳感器測(cè)距示意圖
本系統(tǒng)選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號(hào)的輸入端(這樣可以減少程序設(shè)計(jì)的麻煩),車(chē)輪每轉(zhuǎn)一圈(設(shè)車(chē)輪的周長(zhǎng)是1米),霍爾開(kāi)關(guān)就檢測(cè)并輸出信號(hào),引起單片機(jī)的中斷,對(duì)脈沖計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到1000次時(shí),即1公里,單片機(jī)就控制將金額自動(dòng)增加,如圖5。
圖5 A44E霍爾元件接線圖
2.3 AT24C01存儲(chǔ)單元 存儲(chǔ)單元的作用是在電源斷開(kāi)的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的單價(jià)信息。AT24C01 是Ateml公司的1KB的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。
AT24C02芯片引腳配置如圖6所示。
存儲(chǔ)單元電路連接如圖7所示。
圖 7 存儲(chǔ)單元電路原理圖 圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態(tài)功耗。由于AT24C01的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(時(shí)鐘脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)P2.2和P2.3口連接,進(jìn)行傳送數(shù)據(jù)。
每當(dāng)設(shè)定一次單價(jià),系統(tǒng)就自動(dòng)調(diào)用存儲(chǔ)程序,將單價(jià)信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時(shí)候,自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)器內(nèi)的單價(jià)等信息,讀到緩存單元中,供主程序使用。
2.4 鍵盤(pán)調(diào)整單元
當(dāng)單價(jià)等信息需要進(jìn)行修改時(shí),就要用到鍵盤(pán)進(jìn)行修改。由于調(diào)節(jié)信息不多,故采用4個(gè)獨(dú)立鍵盤(pán)即可,分別實(shí)現(xiàn)清零、切換、增大、減小和功能等作用。電路原理如圖8所示。
圖8 鍵盤(pán)調(diào)整單元接線圖
S1:接P1.0口,對(duì)上一次的計(jì)費(fèi)進(jìn)行清零,為下次載客準(zhǔn)備
S2:接P1.1口,實(shí)現(xiàn)白天和夜晚單價(jià)的切換;當(dāng)功能鍵S4按下時(shí),S2可對(duì)數(shù)據(jù)進(jìn)行增大。S3:接P1.2口,當(dāng)功能鍵S4按下時(shí),S3可對(duì)數(shù)據(jù)進(jìn)行減小。S4:接P1.3口,按1次,進(jìn)入調(diào)整白天單價(jià);按2次,進(jìn)入調(diào)整夜晚單價(jià);按3次,進(jìn)入調(diào)整等待單價(jià);按4次,進(jìn)入調(diào)整起步價(jià);按5次,返回。
2.5 顯示單元
顯示單元由7個(gè)8段共陽(yáng)數(shù)碼管組成,采用動(dòng)態(tài)掃描進(jìn)行顯示。前三個(gè)數(shù)碼管分別接P3.0、P3.1和P3.2,用于顯示總金額;中間兩個(gè)分別接P3.4和P3.5,用于顯示里程;后邊兩個(gè)分別接P3.6和P3.7,用于顯示單價(jià)。電路如圖9所示。
圖9 數(shù)碼管顯示圖
第三章 軟件設(shè)計(jì)
3.1 系統(tǒng)主程序
在主程序模塊中,需要完成對(duì)各參量和接口的初始化、出租車(chē)起價(jià)和單價(jià)的初始化以及中斷、計(jì)算、循環(huán)等工作。另外,在主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。
當(dāng)汽車(chē)運(yùn)行起來(lái)時(shí),就啟動(dòng)計(jì)價(jià),根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷行駛里程是否已超過(guò)起步價(jià)公里數(shù)。若已超過(guò),則根據(jù)里程值、每公里的單價(jià)數(shù)和起步價(jià)數(shù)來(lái)計(jì)算出當(dāng)前的總金額,并將結(jié)果存于總金額寄存器中;中途等待時(shí),無(wú)脈沖輸入,不產(chǎn)生中斷,當(dāng)時(shí)間超過(guò)等待設(shè)定值時(shí),開(kāi)始進(jìn)行計(jì)時(shí),并把等待價(jià)格加到總金額里,然后將總金額、里程和單價(jià)送數(shù)碼管顯示出來(lái)。程序流程如圖10所示。
圖10 主程序流程圖 圖11 計(jì)算程序流程圖
3.2 中斷程序
3.2.1 里程計(jì)數(shù)中斷程序
每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào)就使單片機(jī)中斷一次,當(dāng)里程計(jì)數(shù)器對(duì)里程脈沖計(jì)滿1000次時(shí),進(jìn)入里程計(jì)數(shù)中斷服務(wù)程序中,里程變量加一。主函數(shù)中總金額也相應(yīng)地變化。
3.2.2 中途等待中斷程序
在中途等待中斷程序中,每1ms產(chǎn)生一次中斷,將當(dāng)前里程值送入某個(gè)緩存變量,每5分鐘將緩存變量中的值和當(dāng)前里程值比較,當(dāng)汽車(chē)停止,霍爾傳感器5分鐘沒(méi)有輸出信號(hào),當(dāng)前里程值和緩存變量?jī)?nèi)的值相同,則進(jìn)入等待計(jì)時(shí),每5分鐘記一次價(jià)格。
3.3 計(jì)算程序
計(jì)算程序根據(jù)里程數(shù)分別進(jìn)入不同的計(jì)算公式。如果里程大于3公里,則執(zhí)行公式:總金額=起步價(jià)+(里程-3)*單價(jià)+等待時(shí)間*等待單價(jià);否則,執(zhí)行公式:總金額=起步價(jià)+等待時(shí)間*等待單價(jià)。程序流程圖如圖11所示。
3.4 顯示程序
顯示程序利用定時(shí)器每1ms產(chǎn)生一次中斷,相應(yīng)變量置位,點(diǎn)亮一個(gè)數(shù)碼管,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實(shí)現(xiàn)動(dòng)態(tài)掃描顯示,同時(shí)根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實(shí)現(xiàn)顯示。
3.5 鍵盤(pán)程序
鍵盤(pán)采用查詢的方式,放在主程序中,當(dāng)沒(méi)有按鍵按下的時(shí)候,單片機(jī)循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。流程圖如圖12。
圖12 鍵盤(pán)程序流程圖
第四章 總結(jié)
經(jīng)過(guò)這些天有關(guān)于出租車(chē)計(jì)價(jià)器的課程設(shè)計(jì),使我對(duì)單片機(jī)的應(yīng)用有了更深的了解。在課程設(shè)計(jì)的過(guò)程中,還是碰到了許多的問(wèn)題。比如,對(duì)于數(shù)碼管動(dòng)態(tài)掃描顯示和鍵盤(pán)的延時(shí)防抖的綜合編程不能較好地解決;對(duì)于代碼的前后順序及調(diào)用掌握得還不夠好;對(duì)于一些相關(guān)的應(yīng)用軟件沒(méi)能熟練掌握。通過(guò)這幾天晚上的苦想和反復(fù)調(diào)試,以及參考網(wǎng)上的程序,最終還是把問(wèn)題解決了。通過(guò)這次課程設(shè)計(jì),我最大的收獲就是自己的動(dòng)手能力和獨(dú)立解決問(wèn)題的能力得到了很大的提高,也充分體會(huì)到了自己設(shè)計(jì)東西的樂(lè)趣、學(xué)會(huì)查閱資料和對(duì)別人的東西融會(huì)變通的重要性,也明白了很多知識(shí)光靠趴在書(shū)本上學(xué)是學(xué)不到其中的精髓的,必須親自去試著實(shí)踐,親自去經(jīng)歷才能對(duì)它們真正的掌握,凡事都要自己去動(dòng)下手,去實(shí)踐一下,遇到困難,永遠(yuǎn)不要沮喪氣餒。在動(dòng)手的過(guò)程中,不僅能增強(qiáng)實(shí)踐能力,而且在理論上可以有更深的認(rèn)識(shí);這次設(shè)計(jì)給了我極大的鼓舞和信心,相信在以后的學(xué)習(xí)中可以通過(guò)不斷的摸索和實(shí)踐來(lái)提高其他方面的知識(shí)。
參考文獻(xiàn)
[1] 馬淑華,王鳳文,張美金編著.單片機(jī)原理與接口技術(shù)(第二版).北京:北京郵電大學(xué)出版社,2007.[2] 譚浩強(qiáng)著.C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,2005.附錄A 系統(tǒng)原理圖
源程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define delayNOP();{_nop_();_nop_();_nop_();_nop_();_nop_();};
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
sbit exter=P3^3;
//外部中斷
sbit key0=P1^0;
//清零
sbit key1=P1^1;
//切換/+
sbit key2=P1^2;
//-
sbit key3=P1^3;
//功能鍵
sbit p30=P3^0;
//數(shù)碼管各位控制
sbit p31=P3^1;
sbit p32=P3^2;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit SDA=P2^3;
//IIC引腳
sbit SCL=P2^2;
uint inter,aa,bb,temp,temp1;
uint zongjine,licheng,dengdai;
uint key3num,qiehuantemp,delaytemp;
uchar danjia1,danjia2,danjia3,danjia,qibu;
void delay(uint x)
//延時(shí)時(shí)基為1ms {
int i,j;
for(i=x;i>0;i--)
for(j=340;j>0;j--);}
void start()
//IIC開(kāi)始位
{
SDA = 1;
SCL = 1;
delayNOP();
SDA = 0;
delayNOP();
SCL = 0;
}
void stop()
// IIC停止位
{
SDA = 0;
delayNOP();
SCL = 1;
delayNOP();
SDA = 1;}
void respons()
//IIC應(yīng)答位
{
uchar i;
SCL=1;
delayNOP();
while((SDA==1)&&(i<250))
i++;
SCL=0;
delayNOP();}
uchar read_byte()
// 從EEPROM讀到MCU {
uchar i,j;
for(i=0;i<8;i++)
{
SCL=1;
j<<=1;
j|=SDA;
SCL=0;
}
return(j);}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delayNOP();
SDA=CY;
delayNOP();
SCL=1;
delayNOP();
}
SCL=0;
// 從MCU寫(xiě)到EEPROM
delayNOP();
SDA=1;
delayNOP();}
void write_data(uchar addr, uchar date){
start();
write_byte(0xa0);
respons();
write_byte(addr);
respons();
write_byte(date);
respons();
stop();}
uchar read_data(uchar addr)
{
uchar date;
start();
write_byte(0xa0);
// 在指定地址addr處寫(xiě)入數(shù)據(jù)date // 在指定地址addr讀取數(shù)據(jù)
respons();
write_byte(addr);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;}
void display(uint zongjine0,uint licheng0,uint danjia0){
uint jbai,jshi,jge,lshi,lge,dshi,dge;
uint numwei,numshu;
//數(shù)碼管位置分配
jbai=zongjine0/100;
jshi=zongjine0%100/10;
jge=zongjine0%100%10;
lshi=licheng0/10;
//數(shù)碼管顯示
lge=licheng0%10;
dshi=danjia0/10;
dge=danjia0%10;
//數(shù)碼管動(dòng)態(tài)顯示
if(aa)
{
aa=0;numshu++;if(numshu==7)
numshu=0;P3=0xff;switch(numwei){
case 0:p30=0;P0=table[jbai];break;
case 1:p31=0;P0=table[jshi]&0x7f;break;
case 2:p32=0;P0=table[jge];break;
case 3:p34=0;P0=table[lshi];break;
case 4:p35=0;P0=table[lge];break;
case 5:p36=0;P0=table[dshi]&0x7f;break;
case 6:p37=0;P0=table[dge];break;
}
numwei++;
if(numwei==7)
numwei=0;
} }
void keyscan()
//鍵盤(pán)掃描
{
if(key3==0)
//功能鍵調(diào)節(jié)
{
delay(5);
if(key3==0)
{
key3num=1;
while(!key3);
delay(5);
while(!key3);
while(key3num)
{
if(key3num==1)
調(diào)白天單價(jià)
//
{
if(key1==0)
{
delay(5);
if(key1==0)
danjia1=0;
{
danjia1++;
if(danjia1==100)
while(!key1);
delay(5);
while(!key1);
} } if(key2==0){
delay(5);
if(key2==0)
{
danjia1--;
if(danjia1==-1)
danjia1=99;
while(!key2);
delay(5);
while(!key2);
}
調(diào)夜晚單價(jià)
danjia2=0;
}
display(1,0,danjia1);} if(key3num==2)
//{
write_data(1,danjia1);
if(key1==0)
{
delay(5);
if(key1==0)
{
danjia2++;
if(danjia2==100)
while(!key1);
delay(5);
while(!key1);
}
}
danjia2=99;
if(key2==0)
{
delay(5);
if(key2==0)
{
danjia2--;
if(danjia2==-1)
while(!key2);
delay(5);
while(!key2);
}
}
display(2,0,danjia2);} if(key3num==3)
//調(diào)等待單價(jià)
{
write_data(2,danjia2);
if(key1==0)
danjia3=0;
{
delay(5);
if(key1==0)
{
danjia3++;
if(danjia3==100)
while(!key1);
delay(5);
while(!key1);
} } if(key2==0){
delay(5);
if(key2==0)
{
danjia3--;
if(danjia3==-1)
danjia3=99;
while(!key2);
步價(jià)
delay(5);
while(!key2);
}
}
display(3,0,danjia3);} if(key3num==4)
//調(diào)起{
write_data(3,danjia3);
if(key1==0)
{
delay(5);
if(key1==0)
{
qibu++;
if(qibu==100)
qibu=0;
while(!key1);
delay(5);
qibu=99;
while(!key1);
} } if(key2==0){
delay(5);
if(key2==0)
{
qibu--;
if(qibu==-1)
while(!key2);
delay(5);
while(!key2);
} }
display(4,0,qibu);
}
if(key3num==5)
//退出功能鍵
{
}
}
write_data(4,qibu);
key3num=0;}
if(key3==0){
delay(5);
if(key3==0)
{
key3num++;
while(!key3);
delay(5);
while(!key3);
} }
} } void init(){ SDA=1;SCL=1;
zongjine=0;licheng=0;dengdai=0;
danjia1=read_data(1);danjia2=read_data(2);danjia3=read_data(3);qibu=read_data(4);
aa=0;//數(shù)碼管動(dòng)態(tài)掃描的定時(shí)器時(shí)基個(gè)數(shù)
bb=0;//判斷是否等待的時(shí)基個(gè)數(shù)
inter=0;
EA=1;//開(kāi)總中斷
EX1=1;//開(kāi)外部中斷1 IT1=1;//觸發(fā)方式下降沿
TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;ET0=1;//開(kāi)定時(shí)器T0中斷
TR0=1;//開(kāi)定時(shí)器T0
P3=0x08;P0=table[0];}
void jisuan(){ if(licheng>3)zongjine=qibu+(licheng-3)*danjia+dengdai*danjia3;//金額計(jì)算
else zongjine=qibu+dengdai*danjia3;//起步公里內(nèi)金額計(jì)算 }
void qiehuan(){ if(key1==0)//白天夜晚切換
{ delay(5);//鍵盤(pán)防抖
if(key1==0)qiehuantemp=!qiehuantemp;while(!key1);delay(5);while(!key1);} if(qiehuantemp==0)danjia=danjia2;if(qiehuantemp==1)danjia=danjia1;}
void main(){ init();qiehuantemp=1;key3num=0;while(1){ qiehuan();//切換白天夜晚單價(jià)
jisuan();//計(jì)算總金額
display(zongjine,licheng,danjia);keyscan();if(key0==0)//清零鍵
init();} }
void inter1()interrupt 2 //脈沖中斷 { delay(5);// if(exter==0)// { // IT1=1;inter++;if(inter==5){ inter=0;licheng++;} } // while(!exter);// delay(5);// while(!exter);// }
void timer0()interrupt 1 { TH0=(65536-1000)/256;TL0=(65536-1000)%256;aa++;bb++;temp1=licheng;//測(cè)試是否進(jìn)入等待
if(bb==10000)//10s無(wú)反應(yīng)進(jìn)入等待計(jì)費(fèi)
{ bb=0;if(temp=temp&temp1)dengdai++;temp=licheng;} }
原來(lái)文件地址http://blog.sina.com.cn/s/blog_609003ef0100dt1o.html
存儲(chǔ)器可以不用
第三篇:51單片機(jī) 出租車(chē)計(jì)價(jià)器課程設(shè)計(jì)
第一章 出租車(chē)計(jì)價(jià)系統(tǒng)的設(shè)計(jì)要求與設(shè)計(jì)方案
1.1 出租車(chē)計(jì)價(jià)器設(shè)計(jì)要求
設(shè)計(jì)一個(gè)出租車(chē)自動(dòng)計(jì)費(fèi)器,計(jì)費(fèi)包括起步價(jià)、行車(chē)?yán)锍逃?jì)費(fèi)、等待時(shí)間計(jì)費(fèi)三部分,用七段數(shù)碼管顯示總金額,單價(jià),運(yùn)行里程,起步價(jià)為6元,超過(guò)6元,每一公里增加1元或2元,等待時(shí)間單價(jià)為每30秒鐘1元,計(jì)費(fèi)功能:費(fèi)用的計(jì)算是按行駛里程收費(fèi)。設(shè)起步價(jià)為6元。
1、當(dāng)總金額<6元時(shí),按起價(jià)計(jì)算費(fèi)用
2、當(dāng)總金額>6元時(shí),每公里按1元或2元計(jì)費(fèi)
3、等待累計(jì)時(shí)間>30s時(shí),按1元/30s計(jì)費(fèi)
4、S1為啟動(dòng)按鈕、S2轉(zhuǎn)換單價(jià)按鈕、S3復(fù)位按鈕。顯示功能:
1、顯示行駛里程:用三位數(shù)字顯示,顯示方式為“XX.X”,單位為km。計(jì)程范圍0-99.9km,精確到0.1km。
2、顯示單價(jià):用兩位數(shù)字顯示,顯示方式為“X.X”,單位為元。
3、顯示總費(fèi)用:用三位數(shù)字顯示,顯示方式為“XX.X”,單位為元。計(jì)價(jià)范圍0-99.9元,精確到0.1元。
1.2 系統(tǒng)主要功能
本出租車(chē)自動(dòng)計(jì)費(fèi),上電后顯示最初的起步價(jià),里程計(jì)費(fèi)單價(jià)。同時(shí)具有運(yùn)行,復(fù)位,轉(zhuǎn)換等狀態(tài),可以切換白天與晚上不同計(jì)費(fèi)單價(jià),可以實(shí)現(xiàn)每等待30s收1元功能。出租車(chē)顯示行駛的總費(fèi)用,里程,單價(jià)。
1.3 方案論證與比較
方案一:采用數(shù)字電子技術(shù),利用555定時(shí)芯片構(gòu)成多諧振蕩器,或采用外圍的晶振電路作為時(shí)鐘脈沖信號(hào),采用計(jì)數(shù)芯片對(duì)脈沖盡心脈沖的計(jì)數(shù)和分頻,最后通過(guò)譯碼電路對(duì)數(shù)據(jù)進(jìn)行譯碼,將譯碼所得的數(shù)據(jù)送給數(shù)碼管顯示,一下是該方案的流程框圖,方案一如圖1-1所示:
圖1-1方案一
方案二:采用EDA技術(shù),根據(jù)層次化設(shè)計(jì)理論,該設(shè)計(jì)問(wèn)題自頂向下可分為分頻模塊,控制模塊 計(jì)量模塊、譯碼和動(dòng)態(tài)掃描顯示模塊,其系統(tǒng)框圖如圖1-2所示:
圖1-2方案二
方案三:采用MCU技術(shù),通過(guò)單片機(jī)作為主控器,采用外部晶振作為時(shí)鐘脈沖,通過(guò)按鍵可以方便調(diào)節(jié),以下是方案三的系統(tǒng)流程圖,本方案主要是必須對(duì)于數(shù)字電路比較熟悉,成本又不高。方案圖如圖1-3所示:
圖1-3方案三
方案總結(jié):通過(guò)各個(gè)方案的比較,本次采用方案三,不但控制簡(jiǎn)單,而且成本低廉,設(shè)計(jì)電路簡(jiǎn)單。
第二章 出租車(chē)計(jì)價(jià)系統(tǒng)的硬件設(shè)計(jì)
2.1 AT89C51單片機(jī)介紹
AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓,高性能CMOS8位微處理器,俗稱(chēng)單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集合輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89S51是一種高效微控器,為很多嵌入式控制系統(tǒng)提供了一種靈活性且廉價(jià)的方案 單片機(jī)各引腳功能說(shuō)明:
VCC:供電電壓。GND:接地。
P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行。校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能口,P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。
/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間選擇外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來(lái)自反向振蕩器的輸出。
2.2 里程計(jì)算、計(jì)價(jià)單元的設(shè)計(jì)
里程計(jì)算是通過(guò)安裝在車(chē)輪上的霍爾傳感器A44E檢測(cè)到的信號(hào),送到單片機(jī),經(jīng)處理計(jì)算,送給顯示單元的。其原理如圖2-1所示
圖2-1 由于A44E 屬于開(kāi)關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號(hào)符合TTL 電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的I/O 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。
如圖2-2,A44E 集成霍耳開(kāi)關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D 和OC 門(mén)輸出E 五個(gè)基本部分組成。
圖2-2 路程測(cè)量電路
在輸入端輸入電壓CC V,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢(shì)發(fā)生器的兩端,根據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍耳電勢(shì)差H V 輸出,該H V 信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC 門(mén)輸出。當(dāng)施加的磁場(chǎng)達(dá)到工作點(diǎn)(即OP B)時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí)OC 門(mén)輸出端輸出低電壓,通常稱(chēng)這種狀態(tài)為開(kāi)。當(dāng)施加的磁場(chǎng)達(dá)到釋放點(diǎn)(即rP B)時(shí),觸發(fā)器輸出低電壓,三極管截止,使OC 門(mén)輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍耳開(kāi)關(guān)完成了一次開(kāi)關(guān)動(dòng)作。
我們選擇了P3.5 口作為信號(hào)的輸入端,內(nèi)部采用計(jì)數(shù)的方式,車(chē)輪每轉(zhuǎn)一圈(我們?cè)O(shè)車(chē)輪的周長(zhǎng)是10米),霍爾開(kāi)關(guān)就檢測(cè)并輸出信號(hào),引起單片機(jī)對(duì)脈沖計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到10次時(shí),也就是0.1 公里,單片機(jī)就控制將金額自動(dòng)的加增加,其計(jì)算公式:當(dāng)前單價(jià)× 公里數(shù)=金額。
2.3 數(shù)據(jù)顯示單元的設(shè)計(jì)
由于設(shè)計(jì)要求有單價(jià)(2 位)、路程(3位)、總金額(3位)顯示輸出,我們采用8個(gè)7段數(shù)碼管動(dòng)態(tài)顯示。如圖2-3:
圖2-3 數(shù)據(jù)顯示硬件電路圖
2.4 按鍵單元的設(shè)計(jì)
電路共采用了四個(gè)按鍵,S1、S2、S3、S4,其功能分別是:S1 啟動(dòng)計(jì)價(jià)開(kāi)關(guān)、S2 白天/晚上轉(zhuǎn)換開(kāi)關(guān)、S3 數(shù)據(jù)復(fù)位清零開(kāi)關(guān)、S4閉合表示出租車(chē)正常運(yùn)行,計(jì)價(jià)器也正常計(jì)價(jià);若打開(kāi)S4則表示出租車(chē)在暫停,轉(zhuǎn)入判斷是否收費(fèi)程序,閉合超過(guò)30秒,開(kāi)始計(jì)價(jià)。如圖2-4:
圖2-4 按鍵單元電路圖 2.5 振蕩電路
單片機(jī)內(nèi)部有一個(gè)高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過(guò)這兩個(gè)引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取33pF)。這樣就構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。振蕩電路脈沖經(jīng)過(guò)二分頻后作為系統(tǒng)的時(shí)鐘信號(hào),再在二分頻的基礎(chǔ)上三分頻產(chǎn)生ALE信號(hào),此時(shí)得到的信號(hào)時(shí)機(jī)器周期信號(hào)。振蕩電路如圖2-5所示:
圖2-5 振蕩電路
2.6 復(fù)位電路
復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是按鍵復(fù)位。按鍵復(fù)位具有上電復(fù)位功能外,若要復(fù)位,只要按圖中的RESET鍵,電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生一個(gè)復(fù)位高電平。上電復(fù)位電路要求接通電源后,通過(guò)外部電容充電來(lái)實(shí)現(xiàn)單片機(jī)自動(dòng)復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時(shí)間(2個(gè)機(jī)器周期),單片機(jī)就可以進(jìn)行復(fù)位操作。按鍵復(fù)位電路圖如圖2-6所示。
圖2-6 復(fù)位電路 總電路圖
第三章 出租車(chē)計(jì)價(jià)系統(tǒng)的軟件設(shè)計(jì)
3.1主程序流程圖記描述
由于用到了外部中斷0,所以,按中斷系統(tǒng)的編程結(jié)構(gòu)在0000H處放置一條長(zhǎng)跳轉(zhuǎn)指令LJMP START跳轉(zhuǎn)到主程序入口,在外部中斷0的中斷入口地址0003H處放置一條長(zhǎng)跳轉(zhuǎn)指令LJMP EXT0跳轉(zhuǎn)到外部中斷0服務(wù)程序處。主程序進(jìn)行程序中用到的一些存儲(chǔ)單元的初始化,T0,T1的初始化。首先,進(jìn)行存儲(chǔ)器單元初始化,將71H-79H單元賦值。然后進(jìn)行定時(shí)器的設(shè)置。設(shè)置T1的工作方式為模式2,計(jì)數(shù)狀態(tài),自啟動(dòng)。T0的工作方式,模式1,定時(shí)狀態(tài),自啟動(dòng),對(duì)輸入的脈沖進(jìn)行計(jì)數(shù),給T0、T1賦初值。之后調(diào)用計(jì)數(shù)脈沖子程序,及等待子程序,數(shù)碼管動(dòng)態(tài)顯示子程序,最后進(jìn)入鍵盤(pán)掃描子程序進(jìn)行掃描。主程序不斷進(jìn)行調(diào)用數(shù)碼管顯示子程序及鍵盤(pán)掃描子程序循環(huán)操作,等待中斷。如圖3-1:
圖3-1 主程序流程圖 3.2計(jì)費(fèi)子程序流程圖
72H存儲(chǔ)總金額小數(shù)位,73H存儲(chǔ)器總金額個(gè)位,78H存儲(chǔ)器總金額十位,77H存儲(chǔ)單價(jià)元。將72H中值放入A中,再將A與77H相加,即小數(shù)位與單價(jià)相加,結(jié)果存入A,再進(jìn)行十進(jìn)制調(diào)整,將結(jié)果存于R6,將高四位與低四位交換并屏蔽高四位,保留低四位與個(gè)位相加得到總金額個(gè)位。若總金額超過(guò)10則清零,并且總金額十位加1。將R6中數(shù)值取出,屏蔽高四位,輸出總金額小數(shù)位。如圖3-2:
圖3-2 計(jì)費(fèi)子程序流程圖 3.3 等待是否收費(fèi)子程序
在出租車(chē)的計(jì)價(jià)系統(tǒng)中,出租車(chē)在等待的時(shí)候也要計(jì)價(jià),本設(shè)計(jì)體現(xiàn)了這點(diǎn)。程序判斷了出租車(chē)是否停止,若停止30秒以上是,開(kāi)始計(jì)價(jià)。55H中賦初值20,56H中賦初值10,總共30秒延時(shí)。超過(guò)30秒時(shí),調(diào)用計(jì)費(fèi)子程序。如圖3-3
圖3-3 等待是否收費(fèi)子程序流程圖
3.4 按鍵子程序流程圖
圖3-4 等待收費(fèi)子程序流程圖
3.5 外部中斷0流程圖
圖3-5 外部中斷0子程序流程圖 程序
ORG 0000H LJMP MAIN ORG 0003H;外部中斷入口地址 LJMP REST ORG 030H MAIN:
MOV 71H,#00H;脈沖計(jì)數(shù)每10個(gè)脈沖里程數(shù)加0.1顯示緩沖單元 MOV 72H,#00H;存儲(chǔ)總金額小數(shù)位 MOV 73H,#00H;存儲(chǔ)總金額個(gè)位 MOV 74H,#00H;存儲(chǔ)里程數(shù)小數(shù)位 MOV 75H,#00H;存儲(chǔ)里程數(shù)個(gè)位 MOV 76H,#00H;存儲(chǔ)單價(jià)角位 MOV 77H,#01H;存儲(chǔ)單價(jià)元位 MOV 78H,#00H;存儲(chǔ)總金額十位 MOV 79H,#00H;存儲(chǔ)里程數(shù)十位 MOV 55H,#20;給定等待初值20*50ms MOV 56H,#10;10秒等待時(shí)間初值 SETB EA;開(kāi)總中斷 SETB EX0;開(kāi)外部中斷0 MOV TCON,#04H;外部中斷0低電平
MOV TMOD,#61H;設(shè)置使用定時(shí)器1,模式2,計(jì)數(shù)狀態(tài),自啟動(dòng),定時(shí)器0,模式1,定時(shí)狀態(tài),自啟動(dòng)
MOV TL0,#0B0H;50ms初值設(shè)定C350H MOV TH0,#03CH MOV TL1,#0FFH;設(shè)置定時(shí)器低八位初值為FFH,即有一脈沖輸入就溢出
MOV TH1,#0FFH;設(shè)置定時(shí)器高八位初值為FFH,用于重裝低八位 START: LCALL PULSE;調(diào)用計(jì)數(shù)脈沖子程序 LCALL WAIT;調(diào)用等待子程序 LCALL DISPLAY;調(diào)用顯示程序進(jìn)行顯示 LCALL KEY;調(diào)用鍵盤(pán)掃描程序
SJMP START;返回START處繼續(xù)循環(huán)執(zhí)行 REST: PUSH ACC MOV 71H,#00H;脈沖計(jì)數(shù)每10個(gè)脈沖里程數(shù)加1顯示緩存單元 MOV 72H,#00H;存儲(chǔ)總金額個(gè)位 MOV 73H,#00H;存儲(chǔ)總金額十位 MOV 74H,#00H;存儲(chǔ)里程數(shù)個(gè)位 MOV 75H,#00H;存儲(chǔ)里程數(shù)十位 MOV 78H,#00H;存儲(chǔ)總金額百位 MOV 79H,#00H;存儲(chǔ)里程數(shù)百位 MOV 55H,#20 MOV 56H,#10 POP ACC RETI PULSE: JBC TF1,PTO1;TF1為1則轉(zhuǎn)PT01 LJMP PSOUT PTO1: MOV 55H,#20 MOV 56H,#10 INC 71H MOV R1,71H CJNE R1,#0AH,PSOUT;脈沖調(diào)整,改變立即數(shù)即可;里程數(shù)個(gè)位74H,R1不等于0AH則轉(zhuǎn)PSOUT MOV 71H,#00H INC 74H LCALL MONEY MOV R1,74H CJNE R1,#0AH,PSOUT;里程數(shù)十位75H MOV 74H,#00H INC 75H MOV R1,75H CJNE R1,#0AH,PSOUT MOV 75H,#00H INC 79H MOV R1,79H CJNE R1,#0AH,PSOUT MOV 79H,#00H PSOUT:RET WAIT: JBC TF0,PTO2 LJMP CHU0 PTO2:MOV TL0,#0B0H MOV TH0,#03CH DJNZ 55H,CHU0;不為0則轉(zhuǎn) MOV 55H,#20 DJNZ 56H,CHU0 MOV 56H,#10;30秒等待計(jì)時(shí) INC 72H MOV A,72H LCALL MONEY1 CHU0:RET MONEY: MOV A,72H ADD A,77H MONEY1:DA A MOV R6,A SWAP A ANL A,#0FH ADD A,73H MOV 73H,A CJNE A,#0AH,MONEY2 MOV 73H,#00H INC 78H MOV A,78H CJNE A,#0AH,MONEY2 MOV 78H,#00H MONEY2:MOV A,R6 ANL A,#0FH MOV 72H,A RET DISPLAY:MOV A,78H CJNE A,#00H,L2 MOV A,73H CJNE A,#06H,L1 L1:JNC L2 MOV A,#82H ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,#0C0H MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H LJMP L3 L2:MOV A,73H MOV DPTR,#TAB MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#02H LCALL DELAY MOV P2,#00H MOV A,72H MOVC A,@A+DPTR MOV P0,A MOV P2,#01H LCALL DELAY MOV P2,#00H MOV A,78H MOVC A,@A+DPTR MOV P0,A MOV P2,#40H LCALL DELAY MOV P2,#00H L3:MOV A,75H MOV DPTR,#TAB MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#08H LCALL DELAY MOV P2,#00H MOV A,74H MOVC A,@A+DPTR MOV P0,A MOV P2,#04H LCALL DELAY MOV P2,#00H MOV A,77H MOVC A,@A+DPTR ADD A,#80H MOV P0,A MOV P2,#20H LCALL DELAY MOV P2,#00H MOV A,76H MOVC A,@A+DPTR MOV P0,A MOV P2,#10H LCALL DELAY MOV P2,#00H
MOV A,79H MOVC A,@A+DPTR MOV P0,A MOV P2,#80H LCALL DELAY MOV P2,#00H RET KEY: MOV A,#0FH MOV P3,A MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY1 LCALL DELAY SJMP EKEOUT KEY1: LCALL DELAY MOV A,P3 ORL A,#0F0H CJNE A,#0FFH,KEY2 SJMP EKEOUT KEY2: MOV R1,A KEY3: MOV A,P3 ORL A,#0FCH CJNE A,#0FFH,KEY3 MOV A,R1 JNB ACC.0,RUN JNB ACC.1,CHANGE SJMP EKEOUT RUN: SETB TR0 SETB TR1 SETB EA SJMP EKEOUT EKEOUT:RET CHANGE: PUSH ACC MOV A,77H CJNE A,#02H,NIGHT MOV 77H,#01H SJMP CHOUT NIGHT: MOV 77H,#02H CHOUT: POP ACC RET DELAY: MOV R7,#100 DJNZ R7,$ RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END
第四篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)出租車(chē)計(jì)價(jià)器1.
常州機(jī)電職業(yè)技術(shù)學(xué)院 畢業(yè)設(shè)計(jì)(論文
作者:叢佳偉學(xué)號(hào):40931111系部:電氣工程系 專(zhuān)業(yè):應(yīng)用電子技術(shù) 題目:出租車(chē)計(jì)價(jià)器系統(tǒng) 指導(dǎo)者:徐登黃勇 評(píng)閱者: 2012年05月 摘要
現(xiàn)在各個(gè)城市出租車(chē)行業(yè)都已普及,因此出租車(chē)計(jì)價(jià)器的技術(shù)已經(jīng)成熟,但是出租車(chē)計(jì)價(jià)器的市場(chǎng)還具有廣闊的前景。隨著城市建設(shè)的日益完善,關(guān)乎城市面貌的出租車(chē)行業(yè)也將迅速發(fā)展,出租車(chē)計(jì)價(jià)器的的大批量需求也是毫無(wú)疑問(wèn)的,所以未來(lái)出租車(chē)計(jì)價(jià)器的市場(chǎng)還是有相當(dāng)大的潛力的。
本次出租車(chē)計(jì)價(jià)器設(shè)計(jì)以AT89S52單片機(jī)為中心,采用U18霍爾傳感器對(duì)輪胎轉(zhuǎn)數(shù)進(jìn)行計(jì)數(shù),實(shí)現(xiàn)對(duì)出租車(chē)?yán)锍痰臏y(cè)量,并最終計(jì)算出結(jié)果。其中采用寄存器芯片AT24C02使系統(tǒng)在掉電的時(shí)候?qū)蝺r(jià)、里程、車(chē)輪長(zhǎng)度等信息進(jìn)行存儲(chǔ),采用時(shí)鐘芯片DS1302來(lái)顯示時(shí)間和在系統(tǒng)需要時(shí)進(jìn)行計(jì)時(shí)。輸出采用兩個(gè)4段數(shù)碼顯示管,而且根據(jù)按鍵有空車(chē)指示燈、等待查詢指示燈、單程指示燈進(jìn)行指示。
汽車(chē)計(jì)價(jià)器是乘客與司機(jī)雙方的交易準(zhǔn)則,它是出租車(chē)行業(yè)發(fā)展的重要標(biāo)志,是出租車(chē)中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計(jì)價(jià)器無(wú)論是對(duì)廣大出租車(chē)司機(jī)朋友還是乘客來(lái)說(shuō)都是很必要的。因此,汽車(chē)計(jì)價(jià)器的研究也是有一定的應(yīng)用價(jià)值的。
關(guān)鍵詞:計(jì)價(jià)器、霍爾傳感器、單片機(jī) 目錄 摘要(1 1 緒論(3 1.1 出租車(chē)計(jì)價(jià)器概述(3 1.2 單片機(jī)的概述(3 2 總體方案設(shè)計(jì)(4 2.1 設(shè)計(jì)任務(wù)要求(4 2.1.1 設(shè)計(jì)任務(wù)(4 2.1.2 設(shè)計(jì)要求(5 2.2 設(shè)計(jì)的主要功能(5 2.3 方案的選取(5 2.3.1 硬件設(shè)計(jì)方案(5 2.3.2 軟件設(shè)計(jì)方案(6 3 硬件設(shè)計(jì)(7 3.1 AT89S52單片機(jī)及最小系統(tǒng)(7 3.2 測(cè)距單元(10 3.3 按鍵單元(12 3.4 時(shí)鐘單元(12
3.5 顯示單元(13 3.6 儲(chǔ)存單元(15 4 軟件設(shè)計(jì)(16 4.1 系統(tǒng)主程序(16 4.2 數(shù)據(jù)處理子程序(17 4.3 等待時(shí)間計(jì)時(shí)子程序(18 4.4 鍵盤(pán)掃描子程序(19 5 Proteus軟件仿真(21 總結(jié).............................................錯(cuò)誤!未定義書(shū)簽。致謝.(23 參考文獻(xiàn)(23 附
1、系統(tǒng)原理圖(25 1 緒論
1.1 出租車(chē)計(jì)價(jià)器概述
我國(guó)在70年代開(kāi)始出現(xiàn)出租車(chē),但那時(shí)的計(jì)費(fèi)系統(tǒng)大都是國(guó)外進(jìn)口不但不夠準(zhǔn)確,價(jià)格還十分昂貴。隨著改革開(kāi)放日益深入,出租車(chē)行業(yè)的發(fā)展勢(shì)頭已十分突出,國(guó)內(nèi)各機(jī)械廠家紛紛推出國(guó)產(chǎn)計(jì)價(jià)器。出租車(chē)計(jì)價(jià)器的功能從剛開(kāi)始的只顯示路程(需要司機(jī)自己定價(jià),計(jì)算后四舍五入,到能夠自主計(jì)費(fèi),以及現(xiàn)在的能夠打一發(fā)票和語(yǔ)音提示、按時(shí)間自主變動(dòng)單價(jià)等功能。隨著城市旅游業(yè)的發(fā)展,出租車(chē)行業(yè)已成為城市的窗口,象征著一個(gè)城市的文明程度。
本次設(shè)計(jì)的目的在于現(xiàn)在各大中城市出租車(chē)行業(yè)都已普及自動(dòng)計(jì)價(jià)器,所以計(jì)價(jià)器技術(shù)的發(fā)展已成定局。而部分小城市尚未普及,但隨著城市建設(shè)日益加快,象征
著城市面貌的出租車(chē)行業(yè)也將加速發(fā)展,計(jì)價(jià)器的普及也是毫無(wú)疑問(wèn)的,所以未來(lái)汽車(chē)計(jì)價(jià)器的市場(chǎng)還是十分有潛力的。
1.2 單片機(jī)的概述
計(jì)算機(jī)系統(tǒng)已明顯地朝巨型化、單片化、網(wǎng)絡(luò)化三個(gè)方向發(fā)展。巨型化發(fā)展的目的在于不斷提高計(jì)算機(jī)的運(yùn)算速度和處理能力,以解決復(fù)雜系統(tǒng)計(jì)算和高速數(shù)據(jù)處理,比如系統(tǒng)仿真和模擬、實(shí)時(shí)運(yùn)算和處理。單片化是把計(jì)算機(jī)系統(tǒng)盡可能集成在一塊半導(dǎo)體芯片上,其目的在于計(jì)算機(jī)微型化和提高系統(tǒng)的可靠性,這種單片計(jì)算簡(jiǎn)稱(chēng)單片機(jī)。單片機(jī)的內(nèi)部硬件結(jié)構(gòu)和指令系統(tǒng)主要是針對(duì)自動(dòng)控制應(yīng)用而設(shè)計(jì)的所以單片機(jī)又稱(chēng)微控制器MCU(Micro Controller Unit。用它可以很容易地將計(jì)算機(jī)嵌入到各種儀器和現(xiàn)場(chǎng)控制設(shè)備中,因此單片機(jī)又叫做嵌入式微控制器(Embedded MCU。單片機(jī)自20世紀(jì)70年代問(wèn)世以來(lái),以其鮮明的特點(diǎn)得到迅猛發(fā)展,已廣泛應(yīng)用于家用電器、智能玩具、智能儀器儀表、工業(yè)控制、航空航天等領(lǐng)域,經(jīng)過(guò)30多年的發(fā)展,性能不斷提高,品種不斷豐富,已經(jīng)形成自動(dòng)控制的一支中堅(jiān)力量。據(jù)統(tǒng)計(jì),我國(guó)的單片機(jī)年容量已達(dá)1~3億片,且每年以大約16%的速度增長(zhǎng),但相對(duì)于國(guó)際市場(chǎng)我國(guó)的占有率還不到1%。這說(shuō)明單片機(jī)應(yīng)用在我國(guó)有著廣闊的前景。對(duì)于從事自動(dòng)控制的技術(shù)人員來(lái)講,掌握單片機(jī)原理及其應(yīng)用已經(jīng)成為必不可少的學(xué)習(xí)任
務(wù)。
單片機(jī)的應(yīng)用十分廣泛,在工業(yè)控制領(lǐng)域、家電產(chǎn)品、智能化儀器儀表、計(jì)算機(jī)外部設(shè)備,特別是機(jī)電一體化產(chǎn)品中,都有重要的用途。其主要的用途可以分為以下方面。
●顯示:通過(guò)單片機(jī)控制發(fā)光二極管或是液晶,顯示特定的圖形和字符。●機(jī)電控制:用單片機(jī)控制機(jī)電產(chǎn)品做定時(shí)或定向的動(dòng)作。
●檢測(cè):通過(guò)單片機(jī)和傳感器的聯(lián)合使用,用來(lái)檢測(cè)產(chǎn)品或者工況的意 外發(fā)生。
●通信:通過(guò)RS-232串行通信或者是USB通信,傳輸數(shù)據(jù)和信號(hào)。●科學(xué)計(jì)算:用來(lái)實(shí)現(xiàn)簡(jiǎn)單的算法。
那么單片機(jī)是不是解決上述應(yīng)用的唯一選擇呢?當(dāng)然不是!單片機(jī)最明顯的優(yōu)點(diǎn)是價(jià)格便宜,從幾元人民幣到幾十元人民幣。這是因?yàn)檫@類(lèi)芯片的生產(chǎn)量很大,技術(shù)也很成熟。
其次,單片機(jī)的體積也遠(yuǎn)小于其他兩種方案。單片機(jī)本身一般用40引腳封裝,當(dāng)然功能多一些的單片機(jī)也有引腳比較多的,如68引腳,功能少的只有10多個(gè)或20多個(gè)引腳,有的甚至只有8只引腳。
當(dāng)然,單片機(jī)無(wú)論在速度還是容量方面都小于其他兩種方案,但是在實(shí)際工作中并不是任何需要計(jì)算機(jī)的場(chǎng)合都要求計(jì)算機(jī)有很高的性能。例如,控制電冰箱的控制器就不需要使用嵌入式系統(tǒng),用一片51就可以輕松實(shí)現(xiàn)。所以應(yīng)用的關(guān)鍵是看能否夠用,是否有很好的性能價(jià)格比。51系列的單片機(jī)已經(jīng)面世十多年,依然沒(méi)有被淘汰,還在不斷發(fā)展中,這就說(shuō)明是它有廣闊的應(yīng)用前景??傮w方案設(shè)計(jì)
本次設(shè)計(jì)是使用單片機(jī)技術(shù)來(lái)實(shí)現(xiàn)一個(gè)出租車(chē)的數(shù)字計(jì)價(jià)器,利用單片機(jī)豐富的IO端口,及其控制的靈活性,實(shí)現(xiàn)基本的里程計(jì)價(jià)功能和單雙程價(jià)格調(diào)整、時(shí)鐘顯示功能等等。具有性能可靠,電路簡(jiǎn)單、成本低、擴(kuò)展空間大等特點(diǎn)。
2.1 設(shè)計(jì)任務(wù)要求 2.1.1 設(shè)計(jì)任務(wù)
設(shè)計(jì)一款基于AT89S52單片機(jī)的出租車(chē)數(shù)字計(jì)價(jià)器,通過(guò)對(duì)傳感器的檢測(cè),對(duì)數(shù)值進(jìn)行處理和顯示。
2.1.2 設(shè)計(jì)要求
一、基本要求
(1能顯示里程,單位為公里,最后一位為小數(shù)位。(2能顯示金額數(shù),單位為元,最后一位為小數(shù)位。
(3可設(shè)定單程價(jià)格和往返價(jià)格,單程價(jià)格為2元/公里,往返價(jià)格為1.5元/ 公里。
(4車(chē)速<5公里/小時(shí)的時(shí)間累積為總等待時(shí)間,每5分鐘等待時(shí)間相當(dāng)于 里程數(shù)增加1公里。
(5起步公里數(shù)為3公里,價(jià)格為5元,若實(shí)際距離大于3公里,按規(guī)則3計(jì) 算價(jià)格。
(6按暫停鍵,計(jì)價(jià)器可暫停計(jì)價(jià),按查詢鍵,可顯示總等待時(shí)間。
二、發(fā)揮部分
(1增加了空車(chē)指示功能,當(dāng)無(wú)客人時(shí),按下功能切換按鍵,空車(chē)指示燈亮。(2增加實(shí)時(shí)時(shí)間顯示,無(wú)論計(jì)價(jià)器工作或者空車(chē),都能顯示實(shí)時(shí)時(shí)間,便于時(shí)間提醒。
(3增加信息儲(chǔ)存功能??梢詢?chǔ)存等待時(shí)間,里程和金額。2.2 設(shè)計(jì)的主要功能
本設(shè)計(jì)所設(shè)計(jì)的出租車(chē)數(shù)字計(jì)價(jià)器的主要功能有:金額輸出、路程輸出、數(shù)據(jù)復(fù)位、計(jì)時(shí)計(jì)價(jià)、空車(chē)顯示等。輸出采用2個(gè)4位8段共陽(yáng)數(shù)碼管,車(chē)輛行走時(shí)前4位顯示路程,后4位顯示金額。車(chē)輛候車(chē)時(shí),前4位顯示等待時(shí)間,后4位顯示等待金額??哲?chē)時(shí)顯示實(shí)時(shí)時(shí)間。儲(chǔ)存等待時(shí)間,里程和金額。
2.3 方案的選取
本設(shè)計(jì)是由軟件設(shè)計(jì)和硬件設(shè)計(jì)兩部分組成的。軟件設(shè)計(jì)要進(jìn)行程序的編寫(xiě)和軟件仿真;硬件設(shè)計(jì)要設(shè)計(jì)電路、硬件仿真和制作電路板。
2.3.1 硬件設(shè)計(jì)方案
本系統(tǒng)的硬件設(shè)計(jì)主要包括單片機(jī)AT89S52、數(shù)據(jù)顯示部件、U18霍爾傳感 器電路、里程計(jì)算及計(jì)價(jià)單元的設(shè)計(jì)。在硬件設(shè)計(jì)過(guò)程中,充分利用各部件的功能,實(shí)現(xiàn)多功能的出租車(chē)計(jì)價(jià)器設(shè)計(jì)。
計(jì)價(jià)器的單片機(jī)系統(tǒng)框圖如圖2-1所示。它由以下幾個(gè)部件組成:霍爾傳感器單元、AT89S52單片機(jī)、金額顯示、里程顯示、電源。利用單片機(jī)豐富的IO 端口,及其控制的靈活性,實(shí)現(xiàn)基本的里程和價(jià)格的計(jì)算及顯示功能。
圖2-1計(jì)價(jià)器系統(tǒng)框圖 2.3.2 軟件設(shè)計(jì)方案
本設(shè)計(jì)程序的采取C 語(yǔ)言進(jìn)行編寫(xiě),使用Keil uVision3編譯和Proteus7.4a 仿真軟件進(jìn)行仿真調(diào)試。其中的里程計(jì)算和費(fèi)用計(jì)算方案如下。
1、里程計(jì)算
(1霍爾傳感器對(duì)車(chē)輪進(jìn)行信號(hào)檢測(cè),產(chǎn)生并輸出脈沖信號(hào)到單片機(jī);(2單片機(jī)對(duì)傳感器輸出的脈沖信號(hào)進(jìn)行計(jì)數(shù),并進(jìn)行km 計(jì)算:每一個(gè)信號(hào)代表輪胎旋轉(zhuǎn)一周,設(shè)輪胎的周長(zhǎng)為1.57m;每km 產(chǎn)生的信號(hào)數(shù)為N ,里程顯示為N × 1.57m = 1.57N(km
2、費(fèi)用計(jì)算
(1出租車(chē)的起步費(fèi)為5元,并且3km 內(nèi)不需額外計(jì)價(jià);(2出租車(chē)行駛3km 后,單程2元/km ,雙程1.5元/km。
單 片 機(jī) 霍爾
傳感器 數(shù)據(jù)顯示 狀態(tài)指示 時(shí)鐘顯示 按鍵 信息存儲(chǔ)
(3等待收費(fèi)的標(biāo)準(zhǔn)為5分鐘算一公里;(4暫停時(shí)計(jì)價(jià)器暫停計(jì)價(jià),不收費(fèi)用。3 硬件設(shè)計(jì)
本設(shè)計(jì)的硬件設(shè)計(jì)包括單片機(jī)AT89S52單元、測(cè)距單元、顯示單元(數(shù)碼管顯示金額、等待時(shí)間和里程,指示燈對(duì)單雙程切換指示、空車(chē)指示、等待計(jì)時(shí)指示、按鍵單元、時(shí)鐘單元和儲(chǔ)存單元。
3.1 AT 89S52單片機(jī)及最小系統(tǒng)
1、AT89S52單片機(jī)
AT89S52具有如下特點(diǎn):40個(gè)引腳,8k Bytes Flash片內(nèi)程序存儲(chǔ)器, 256bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM,32個(gè)外部雙向輸入/輸出(I/O口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,全雙工串行口,看門(mén)狗(WDT電路,片內(nèi)時(shí)鐘振蕩器。
P0口有二個(gè)功能:
1、外部擴(kuò)展存儲(chǔ)器時(shí),當(dāng)做數(shù)據(jù)/地址總線。
2、不擴(kuò)展時(shí),可做一般的I/O使用,但內(nèi)部無(wú)上拉電阻,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻。
P1口只做I/O口使用:其內(nèi)部有上拉電阻。
P2口有兩個(gè)功能:
1、擴(kuò)展外部存儲(chǔ)器時(shí),當(dāng)作地址總線使用。
2、做一般I/O口使用,其內(nèi)部有上拉電阻。
P3口有兩個(gè)功能:除了作為I/O使用外(其內(nèi)部有上拉電阻,還有一些特殊功能,由特殊寄存器來(lái)設(shè)置。
圖3-1 AT89S52引腳圖
設(shè)計(jì)中用到的單片機(jī)各管腳(圖3-1功能以及與其他模塊連接介紹如下: VCC:接+5V電源。
VSS:接地。
時(shí)鐘引腳:XTAL1和XTAL2兩端接晶振和30PF的電容,構(gòu)成時(shí)鐘電路。
它可以使單片機(jī)穩(wěn)定可靠的運(yùn)行。
RST:復(fù)位信號(hào)輸入端,高電平有效。當(dāng)在此引腳加兩個(gè)機(jī)器周期的高電平時(shí),就可以完成復(fù)位操作。
P1.0:接功能按鍵。
P1.1:接切換鍵,表示單雙程切換。P1.2:接查詢(上次金額鍵。P1.3:接清零鍵。P1.4:接空車(chē)指示燈。P1.5:接查詢指示燈。P1.6:接開(kāi)始計(jì)時(shí)指示燈。P1.7:接雙程指示燈。P3.0:接查詢/確認(rèn)鍵。
P0口接數(shù)碼管段選端,P2口接數(shù)碼管位選段。P3.2:接霍爾傳感器的輸出口。P3.3:接存儲(chǔ)器的SCL口。P3.4:接儲(chǔ)存器的SDA口。
P3.5:接時(shí)鐘電路DS1302的RST口。P3.6:接DS1302的SCLK口。P3.7:接DS1302的I/O口。
2、單片機(jī)最小系統(tǒng)
復(fù)位電路和晶振電路是AT89S52工作所需的最簡(jiǎn)外圍電路。單片機(jī)最小系統(tǒng)電路圖如圖3-2所示。
圖3-2單片機(jī)最小系統(tǒng)
AT89S52 的復(fù)位端是一個(gè)史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個(gè)周期,系統(tǒng)將實(shí)現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開(kāi)關(guān)就使在RST端出現(xiàn)一段時(shí)間的高電平,外接11.0592M 晶振和兩個(gè)30pF 電容組成系統(tǒng)的內(nèi)部時(shí)鐘電路。
3.2 測(cè)距單元
本次設(shè)計(jì)我們選取了霍爾傳感器來(lái)進(jìn)行里程測(cè)量。
霍爾器件是一種磁傳感器。用它們可以檢測(cè)磁場(chǎng)及其變化,可在各種與磁場(chǎng)有關(guān)的場(chǎng)合中使用?;魻柶骷曰魻栃?yīng)為其工作基礎(chǔ)。
霍爾器件具有許多優(yōu)點(diǎn),它們的結(jié)構(gòu)牢固,體積小,重量輕,壽命長(zhǎng),安裝方便,功耗小,頻率高,耐震動(dòng),不怕灰塵、油污、水汽及鹽霧等的污染或腐蝕。
霍爾器件分為:霍爾元件和霍爾集成電路兩大類(lèi),前者是一個(gè)簡(jiǎn)單的霍爾片,使用時(shí)常常需要將獲得的霍爾電壓進(jìn)行放大。后者將霍爾片和它的信號(hào)處理電路集成在同一個(gè)芯片上。本次設(shè)計(jì)選取了霍爾集成電路來(lái)測(cè)量里程。
里程測(cè)量是通過(guò)將霍爾傳感器的集成電路安裝在車(chē)輪上方的鐵板上,將磁鐵安裝在車(chē)輪上,旋轉(zhuǎn)的車(chē)輪將磁鐵對(duì)準(zhǔn)集成電路時(shí),霍爾傳感器會(huì)輸出一個(gè)脈沖信號(hào),送到單片機(jī),經(jīng)過(guò)單片機(jī)的計(jì)算處理,將行駛的里程送到顯示單元并顯示出來(lái)。
其原理示意圖如下:
圖3-3 傳感器測(cè)距示意圖
U18是一種利用霍爾效應(yīng)做成的半導(dǎo)體集成電路器件,它被設(shè)計(jì)在交變磁場(chǎng)中運(yùn)行,特別是能在低電源電壓和長(zhǎng)時(shí)間運(yùn)行溫度范圍可達(dá)到125℃。這種霍爾IC可用作各種類(lèi)型的傳感器(速度傳感器、位移傳感器、轉(zhuǎn)速傳感器等等,接觸開(kāi)關(guān)以及
相類(lèi)似的應(yīng)用場(chǎng)合。其工作電壓比較寬(2.5~20V,可運(yùn)行在較大的溫度范圍內(nèi)(-20℃~125℃, 其輸出的信號(hào)符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。
霍爾傳感器的特性如圖3-4所示,其中BOP為工作點(diǎn)“開(kāi)”的磁感應(yīng)強(qiáng)度, BRP為釋放點(diǎn)“關(guān)”的磁感應(yīng)強(qiáng)度。當(dāng)外加的磁感應(yīng)強(qiáng)度超過(guò)動(dòng)作點(diǎn)BOP時(shí),傳
感器輸出低電平,當(dāng)磁感應(yīng)強(qiáng)度降到動(dòng)作點(diǎn)BOP以下時(shí),傳感器輸出電平不變,一直要降到釋放點(diǎn)BRP時(shí),傳感器才由低電平躍變?yōu)楦唠娖?。BOP與BRP之間的滯后使開(kāi)關(guān)動(dòng)作更為可靠。
U18集成霍耳開(kāi)關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片B、差分放大器C、施密特觸發(fā)器D和OC門(mén)輸出E五個(gè)基本部分組成。
在輸入端輸入電壓VCC,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢(shì)發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍爾電勢(shì)差VH輸出,該VH信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門(mén)輸出。當(dāng)施加的磁場(chǎng)達(dá)到工作點(diǎn)(即Bop時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位,使三極管導(dǎo)通,此時(shí)OC門(mén)輸出端輸出低電壓,三極管截止,使OC門(mén)輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開(kāi)關(guān)完成了一次開(kāi)關(guān)動(dòng)作。
圖3-4 U18霍爾傳感器和其輸出特性
U18霍爾傳感器有3個(gè)外接口,2個(gè)是電源的正負(fù)極接口,最后一個(gè)是脈沖信號(hào)輸出口,只要將霍爾傳感器的信號(hào)輸出端接到單片機(jī)的端口上便可以實(shí)現(xiàn)距離檢測(cè)。
其中,單片機(jī)的P3.2(INT0引腳作為信號(hào)的輸入端,采用外部中斷0進(jìn)行計(jì)數(shù)。車(chē)輪每轉(zhuǎn)一圈,霍爾傳感器就產(chǎn)生一個(gè)脈沖信號(hào),根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場(chǎng)中時(shí),霍爾傳感器的輸出端輸出低電平。當(dāng)車(chē)輪轉(zhuǎn)動(dòng)一圈時(shí)小磁鐵提供一個(gè)磁場(chǎng),則霍爾傳感器輸出一次低電平完成一次數(shù)據(jù)采集,從而產(chǎn)生信號(hào)。霍爾傳感器檢測(cè)并輸出信號(hào)到單片機(jī)的INT0或INT1計(jì)算脈沖輸入端, 引起單片機(jī)的中斷,對(duì)脈沖計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到特定的次數(shù)時(shí),里程就會(huì)增加,單片機(jī)對(duì)里程進(jìn)行計(jì)算后,通過(guò)接口電路將計(jì)算好的結(jié)果傳送到數(shù)碼管并顯示出來(lái)。
3.3 按鍵單元
本設(shè)計(jì)的按鍵單元電路(如圖3-5有5個(gè)按鍵,功能分別是:S1是空車(chē)時(shí)查詢上次金額和里程以及等待時(shí)間,結(jié)賬時(shí)查詢本次金額和里程以及等待時(shí)間;S2功能鍵,不按時(shí)空車(chē)指示燈亮而且數(shù)碼管顯示實(shí)時(shí)時(shí)間,按下時(shí)可設(shè)置單雙程,此時(shí)再按S3可進(jìn)行單程和雙程之間切換,再按S1可確認(rèn)單雙程,雙程時(shí)雙程指示燈亮并開(kāi)始計(jì)價(jià);按下S4可對(duì)本次金額、里程以及等待時(shí)間進(jìn)行查詢;S5為清零鍵,按下時(shí)清零之前數(shù)據(jù)消除以及存儲(chǔ)本次信息。
圖3-5 按鍵單元電路 3.4 時(shí)鐘單元
本設(shè)計(jì)采用基于DS1302的時(shí)鐘電路(如圖3-6對(duì)時(shí)間進(jìn)行實(shí)時(shí)顯示,單片機(jī)掉電對(duì)其沒(méi)有影響。用數(shù)碼管表現(xiàn)出來(lái),當(dāng)出租車(chē)空車(chē)時(shí)就顯示時(shí)間,給人時(shí)間提示。
圖3-6 時(shí)鐘電路單元 3.5 顯示單元
本設(shè)計(jì)顯示單元包括兩部分:數(shù)碼管顯示(圖3-7和二極管指示顯示(圖3-8。數(shù)碼管顯示部分使用兩個(gè)四位一體的LED數(shù)碼管,LED顯示器是由LED發(fā)光二極管發(fā)展過(guò)來(lái)的一種顯示器件,是發(fā)光二極管的改型。LED是發(fā)光二極管的簡(jiǎn)稱(chēng),是一種將電能轉(zhuǎn)換成光能的設(shè)備。本身也是一種光源。LED顯示器是由發(fā)光二極管排列組成的顯示器件。它采用低電壓掃描驅(qū)動(dòng),具有:耗電少、使用壽命長(zhǎng)、成本低、故障少、視角大、可視距離遠(yuǎn)等特點(diǎn)。此外,它的響應(yīng)時(shí)間短(一般不超過(guò)0.1us,亮度也比較高。它的缺點(diǎn)是工作電流比較大,每一段的工作電流在10mA左右。
其中每位數(shù)碼管是由8個(gè)發(fā)光二極管演變而來(lái),其中7個(gè)發(fā)光二極管構(gòu)成7筆字形,另一個(gè)構(gòu)成小數(shù)點(diǎn),稱(chēng)為8段LED。8段LED數(shù)碼管是利用7個(gè)LED(發(fā)光二極管外加一個(gè)小數(shù)點(diǎn)的LED組合而成的顯示設(shè)備,可以顯示0~9等10個(gè)數(shù)字和小數(shù)點(diǎn),使用非常廣泛,它的外觀如圖3-9所示:
圖3-9 8段數(shù)碼管
這類(lèi)數(shù)碼管可以分為共陽(yáng)極(8個(gè)發(fā)光二極管的陽(yáng)極接在—起與共陰極(8 個(gè)發(fā)光二極管陰極連在一起兩種,共陽(yáng)極就是把所有LED的陽(yáng)極連接到共同接點(diǎn),而每個(gè)LED的陰極分別為a、b、c、d、e、f、g及dp(小數(shù)點(diǎn);共陰極則是把所有LED的陰極連接到共同接點(diǎn),而每個(gè)LED的陽(yáng)極分別為a、b、c、d、e、f、g及dp(小數(shù)點(diǎn),如圖3-10所示。
圖3-10 共陽(yáng)和共陰數(shù)碼管結(jié)構(gòu)
通過(guò)控制這個(gè)公共端,可使該位亮或暗。如共陰極端接地或共陽(yáng)極接高電平,則該位顯示器有效,反之無(wú)效。本設(shè)計(jì)采用共陰LED數(shù)碼管。
數(shù)碼管有靜態(tài)顯示和動(dòng)態(tài)顯示兩種,這里采用動(dòng)態(tài)顯示。它具有低功耗、接口少等特點(diǎn)。如圖3-7兩個(gè)四位一體數(shù)碼管接P0口作為段選,接P2口作為位選??哲?chē)時(shí)顯示時(shí)間,開(kāi)始計(jì)價(jià)時(shí)前四位顯示路程,后四位顯示價(jià)錢(qián)。當(dāng)查詢等待時(shí)間時(shí)顯示為等待時(shí)間。
圖3-7顯示單元(數(shù)碼管顯示部分
二極管指示部分包括空車(chē)指示燈、等待時(shí)間查詢指示、開(kāi)始計(jì)時(shí)指示和雙程指示如圖3-8。這些指示燈能對(duì)出租車(chē)的每一種狀態(tài)進(jìn)行指示,空車(chē)時(shí)空車(chē)指示燈亮,查詢等待時(shí)間時(shí)等待時(shí)間查詢指示燈亮,當(dāng)汽車(chē)速度小于5km/h 時(shí)開(kāi)始計(jì)時(shí),計(jì)時(shí)指示燈亮。計(jì)價(jià)前如果按下雙程鍵雙程指示燈亮,表示為雙程。
圖3-8 顯示單元(二極管指示部分 3.6 儲(chǔ)存單元
存儲(chǔ)單元的作用是儲(chǔ)存上一次的里程、金額和等待時(shí)間。AT24C02 是Atmel 公司的1KB的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V,芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。
圖3-11儲(chǔ)存單元電路
圖中R3、R4 是上拉電阻,其作用是減少AT24C02 的靜態(tài)功耗。由于AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(時(shí)鐘脈沖和SDA(數(shù)據(jù)/地址與單片機(jī)P3.3和P3.4口連接,進(jìn)行傳送數(shù)據(jù)。軟件設(shè)計(jì)
本系統(tǒng)的軟件設(shè)計(jì)主要分為系統(tǒng)主程序、數(shù)據(jù)處理子程序、等待時(shí)間及時(shí)子程序和鍵盤(pán)掃描子程序五個(gè)模塊,下面對(duì)每一塊進(jìn)行介紹。
4.1 系統(tǒng)主程序
本設(shè)計(jì)中,軟件設(shè)計(jì)采用模塊化操作,利用各個(gè)模塊之間的相互聯(lián)系,在設(shè)計(jì)中采用主程序調(diào)用各個(gè)子程序的方法,使程序通俗易懂,我們?cè)O(shè)計(jì)了整體程序流程圖。
在main函數(shù)編寫(xiě)開(kāi)始,要進(jìn)行初始化,包括對(duì)系統(tǒng)初始化和對(duì)硬件設(shè)備進(jìn)行初始化,并使硬件處于就緒狀態(tài)。
在主程序模塊中,需要完成對(duì)各接口芯片的初始化、出租車(chē)起價(jià)和單價(jià)的初始化、中斷向量的設(shè)計(jì)以及開(kāi)中斷、循環(huán)等待等工作。系統(tǒng)流程圖如下圖4-1。
開(kāi)始 初始化 數(shù)據(jù)處理 鍵盤(pán)掃描 結(jié)束
圖4-1系統(tǒng)主程序流程圖 4.2 數(shù)據(jù)處理子程序
每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào)就使單片機(jī)中斷一次,在計(jì)數(shù)中斷服務(wù)程序,里程和金額都相應(yīng)變化,當(dāng)然等待時(shí)間也換算成里程(當(dāng)速度小于5km/h 時(shí)5分鐘想當(dāng)于1公里。計(jì)算程序根據(jù)里程數(shù)分別進(jìn)入不同的計(jì)算公式。如果里程大于3公里,則執(zhí)行公式:金額=(里程-3*單價(jià)+5;否則,執(zhí)行公式:總金額=起步價(jià)。程序流程圖如圖4-2所示。
計(jì)算里程 開(kāi)始
里程<3公里否是
金額=5元金額=單價(jià)*(里程-3+5 顯示金額
結(jié)束
圖4-2 數(shù)據(jù)處理子程序流程圖 4.3 等待時(shí)間計(jì)時(shí)子程序
當(dāng)出租車(chē)的速度5km/h時(shí)等待時(shí)間開(kāi)始計(jì)時(shí),并被換算里程,進(jìn)行計(jì)算顯示等待時(shí)間和金額。當(dāng)結(jié)算時(shí)停止計(jì)時(shí)和計(jì)費(fèi)并顯示金額,當(dāng)有查詢鍵按下時(shí)顯示等待時(shí)間,當(dāng)有清零鍵按下時(shí)存儲(chǔ)本次金額。如圖4-3: 開(kāi)始
結(jié)算鍵按下?Speed<5公里/ 小時(shí)?開(kāi)始計(jì)時(shí),并顯示Speed>5公里/ 小時(shí)?停止計(jì)時(shí),開(kāi)始計(jì) 路程 否 是
停止計(jì)時(shí),計(jì)費(fèi),顯示金額 查詢鍵按下? 存儲(chǔ)本次金額 是清零鍵按下? 是 否
顯示等待時(shí)間
圖4-3等待時(shí)間計(jì)時(shí)子程序 4.4 鍵盤(pán)掃描子程序
鍵盤(pán)采用查詢的方式,放在主程序中,當(dāng)沒(méi)有按鍵按下的時(shí)候,單片機(jī)循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。流程圖如圖4-4。
開(kāi)始 功能鍵按下? 單雙程設(shè)置 切換鍵按下? 切換單雙程 確認(rèn)鍵按下? 空車(chē)指示滅,開(kāi)始計(jì)價(jià)計(jì)時(shí),顯示里 程,價(jià)格 結(jié)算鍵按下? 結(jié)算金額顯示 是 是 是 是
否 顯示時(shí)間 否 否 否
查詢鍵按下? 顯示等待時(shí)間與里 程
清零鍵按下?存儲(chǔ)金額 是 否 是否 按下兩次? 是
查詢鍵按下? 顯示上次金額 是
圖4-4 鍵盤(pán)掃描子程序 5 Proteus軟件仿真
本設(shè)計(jì)需要用Keil uVision3對(duì)C51程序進(jìn)行編譯,生成“.hex”文件,如圖5-1 :
圖5-1 Keil uVision3編譯
在Proteus軟件中畫(huà)出仿真電路(如圖5-2,把Keil uVision3編譯后生成的“.hex”導(dǎo)入到單片機(jī)中,按“運(yùn)行仿真”鍵進(jìn)行仿真。
圖5-2Proteus仿真 總結(jié)
總結(jié)在本次設(shè)計(jì)中,我們采用AT89S52芯片為核心器件,設(shè)計(jì)出了簡(jiǎn)單的出租車(chē)計(jì)價(jià)器,能夠?qū)崿F(xiàn)顯示時(shí)間、等待時(shí)間、金額和里程,按鍵控制,空車(chē)指示。
選題后,我們便開(kāi)始復(fù)習(xí)單片機(jī)方面的知識(shí),也查閱、搜索了很多相關(guān)資料,進(jìn)行總體設(shè)計(jì)與具體設(shè)計(jì),同時(shí)也學(xué)習(xí)仿真軟件Proteus和編程軟件Keil uVision3。由于以前都采用匯編語(yǔ)言實(shí)現(xiàn)編程,對(duì)用C語(yǔ)言來(lái)實(shí)現(xiàn)單片機(jī)的編程不太習(xí)慣,花費(fèi)了一些時(shí)間來(lái)熟悉C語(yǔ)言的編程。在設(shè)計(jì)開(kāi)始,要形成流程圖,它可以使設(shè)計(jì)有一定的邏輯性與嚴(yán)密性,使得設(shè)計(jì)思路明確。采用模塊化的設(shè)計(jì)思想很重要,它方便編寫(xiě)、修改與調(diào)試,另外加上必要的注釋,便于交流與理解。
這次課程設(shè)計(jì)設(shè)計(jì)完成后,體會(huì)頗多,在學(xué)與做的過(guò)程中,取長(zhǎng)補(bǔ)短,不斷學(xué)習(xí)新的知識(shí),吸取經(jīng)驗(yàn),達(dá)到進(jìn)步的目的。通過(guò)自身的努力以及相關(guān)圖書(shū)資料的幫助,逐漸熟
悉了Keil uVision3、PROTEUS和C語(yǔ)言等軟件的使用以及硬件焊接與檢測(cè)過(guò)程中的一些小技巧。本次設(shè)計(jì)我學(xué)習(xí)到不少單片機(jī)的知識(shí),但由于自己的理論知識(shí)水平有限,實(shí)踐知識(shí)和設(shè)計(jì)經(jīng)驗(yàn)不足,在設(shè)計(jì)過(guò)程中難免存在一些問(wèn)題。所焊實(shí)物尚有許多不足,個(gè)別功能還不能很好的實(shí)現(xiàn),主要原因是考慮問(wèn)題不周全,電路設(shè)計(jì)經(jīng)驗(yàn)少,實(shí)際動(dòng)手能力不足。懇請(qǐng)各位老師批評(píng)指正,以使我在以后的學(xué)習(xí)和實(shí)踐中加以改進(jìn)和提高。
致謝
畢業(yè)設(shè)計(jì)即將結(jié)束,在老師的指導(dǎo)和同學(xué)的幫助之下,學(xué)生對(duì)于出租車(chē)計(jì)價(jià)器設(shè)計(jì)有了更多新的認(rèn)知,對(duì)出租車(chē)計(jì)價(jià)器設(shè)計(jì)有了更深一步的認(rèn)識(shí),對(duì)出租車(chē)計(jì)價(jià)器綜合設(shè)計(jì)的整體脈絡(luò)了解得更加的清晰透徹。通過(guò)畢業(yè)設(shè)計(jì),學(xué)生對(duì)自己三年以來(lái)所學(xué)的知識(shí)有更多的認(rèn)識(shí)。
畢業(yè)設(shè)計(jì),幫助我們總結(jié)大學(xué)的收獲、認(rèn)清自我。同時(shí),還幫助我們改變一些處理事情時(shí)懶散的習(xí)慣。從最開(kāi)始時(shí)的搜集資料,整理資料,到方案比選,確定方案,再到著手開(kāi)始設(shè)計(jì),每一步都是環(huán)環(huán)相扣,銜接緊密,其中任何一個(gè)步驟產(chǎn)生遺漏或者疏忽,就會(huì)對(duì)以后的設(shè)計(jì)帶來(lái)很多的不便。
本次作者的畢業(yè)設(shè)計(jì)是由徐老師指導(dǎo)的,在他的悉心指導(dǎo)下,我開(kāi)闊了眼界,明確了思路。在整個(gè)的設(shè)計(jì)過(guò)程中,徐老師提出了許多寶貴的建議和指導(dǎo),使我能夠順利的完成整個(gè)設(shè)計(jì),在此,謹(jǐn)向徐老師表示由衷的感謝。
在即將離開(kāi)學(xué)校之際,我要感謝在大學(xué)生活中任課的眾多老師,正是在他們的諄諄教誨下使我順利完成了大學(xué)的基礎(chǔ)知識(shí)和專(zhuān)業(yè)知識(shí)的學(xué)習(xí)。在此,還要感謝陪伴我共同走過(guò)大學(xué)時(shí)代并給予我?guī)椭耐瑢W(xué)和朋友們,感謝你們,祝福你們?cè)谝院蟮娜兆永镩_(kāi)開(kāi)心心的度過(guò)每一天!參考文獻(xiàn)
1.戴佳, 陳斌, 苗龍.51單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)典型實(shí)例.中國(guó)電力出版社,2005
2.余發(fā)山,王福忠.單片機(jī)原理及應(yīng)用技術(shù).中國(guó)礦業(yè)大學(xué)出版社, 2008.6 3.侯玉寶, 陳忠平, 李成群.基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真.電子工業(yè)出版社,2008 4.李玉梅.基于MCS-51系列單片機(jī)原理的應(yīng)用設(shè)計(jì).國(guó)防工業(yè)出版社,2006 5.邊春元, 李文濤, 江杰.C51單片機(jī)典型模塊設(shè)計(jì)與應(yīng)用.機(jī)械工業(yè)出版社,2008 6.樓然苗,胡佳文,李光飛等.單片機(jī)實(shí)驗(yàn)與課程設(shè)計(jì).浙江大學(xué)出版社,2010.10 常州機(jī)電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)報(bào)告 附
1、系統(tǒng)原理圖、25
第五篇:出租車(chē)計(jì)價(jià)器Multisim課程設(shè)計(jì)
時(shí)序邏輯電路的課程設(shè)計(jì)題目
組員:楊天樂(lè)
閆帥錚 艾文杰
一、題目:出租車(chē)計(jì)價(jià)器
? ? ? ? ? ? ? ? 設(shè)計(jì)內(nèi)容:1)進(jìn)行需求分析,確定總體框架;
2)畫(huà)出邏輯圖;
3)對(duì)設(shè)計(jì)的電路進(jìn)行仿真;
設(shè)計(jì)要求:1)根據(jù)出租車(chē)上的速度傳感器傳來(lái)的脈沖個(gè)數(shù)和設(shè)置的里程單價(jià)來(lái)計(jì)算對(duì)應(yīng)的總價(jià)格,并將總價(jià)格通過(guò)LED實(shí)時(shí)顯示;
2)起步價(jià)可以設(shè)置;
3)里程單價(jià)可以設(shè)置;
4)可以對(duì)總價(jià)格進(jìn)行復(fù)位,從而為下次計(jì)費(fèi)做好準(zhǔn)備;
設(shè)計(jì)提示:本設(shè)計(jì)應(yīng)主要實(shí)現(xiàn)兩個(gè)功能,顯示行駛里程與總價(jià)。行駛里程的計(jì)算可由計(jì)數(shù)器實(shí)現(xiàn),每一個(gè)脈沖假設(shè)為1Km。實(shí)驗(yàn)系統(tǒng)有標(biāo)準(zhǔn)時(shí)鐘信號(hào),因此通過(guò)分頻可以獲得脈沖信號(hào)。
總價(jià)格可由可控制條件的累加器實(shí)現(xiàn),然后予以輸出。累加器可由一個(gè)加法器和一個(gè)可復(fù)位的寄存器組成,最后設(shè)計(jì)譯碼器,將2位的十六進(jìn)制轉(zhuǎn)化為BCD碼。?
二、設(shè)計(jì)原理及Multisim電路圖
電路分兩部分,一部分用于記錄行車(chē)?yán)锍蹋徊糠钟糜谟涗涃M(fèi)用。
所用器件:74LS163,74LS283,2輸入與門(mén),4輸入與門(mén),1輸入非門(mén),2輸入與非門(mén),4輸入與非門(mén),6輸入與非門(mén),DCD-HEX-BLUEx6,74LS77。
(1)里程單價(jià):
電路有2個(gè)時(shí)鐘,一個(gè)用于里程,一個(gè)用于價(jià)格,單價(jià)為第二個(gè)時(shí)鐘與第一個(gè)時(shí)鐘的比值,比如第一個(gè)時(shí)鐘為3HZ,第二個(gè)1HZ,則單價(jià)為3元,以此來(lái)調(diào)整價(jià)格。
(2)行車(chē)?yán)锍?/p>
三個(gè)163計(jì)數(shù)器從左到右依次為個(gè),十,百位計(jì)數(shù)器,通過(guò):
當(dāng)個(gè)位為9時(shí)使十位使能;
當(dāng)個(gè)位與十位同時(shí)為9時(shí)使下一個(gè)計(jì)數(shù)器使能。
均采用163接成模十計(jì)數(shù)器。
(3)價(jià)格
起步價(jià)部分:通過(guò)4個(gè)與門(mén)分別接一根總線接出到個(gè)位輸出9,其他接起步價(jià)0-9,當(dāng)計(jì)數(shù)到9時(shí),使起步價(jià)無(wú)效,則不會(huì)產(chǎn)生當(dāng)起步價(jià)為1時(shí),計(jì)數(shù)不會(huì)出現(xiàn)10的情況,其中采用了D鎖存器。整體相當(dāng)于一個(gè)起步價(jià)輸入的使能端。具體電路圖如下:
(4)實(shí)例:
起步價(jià)為0,里程單價(jià)為3時(shí):
單價(jià)為1時(shí):
三、Verilog編程