版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 出租車計程計價器的設(shè)計</p><p> 一·課程設(shè)計目的與要求</p><p> 為了能夠精確地測量出租車行駛的路程和計算出該路程所需的價格,并顯示出路程值和所需的錢值,基于單片機(jī)MCS-51能夠完成該工作。</p><p> 利用實驗室提供的設(shè)配,利用實驗箱上LED顯示器設(shè)計能夠顯示6位(前四位是價錢值,后兩位路程值),利用
2、實驗箱上提供的外部脈沖作為車輪走過的路程(設(shè)車輪直徑為D=60cm,S=πD=2m),設(shè)起步價為12.5元,超過3km,超出的每千米按2.4元計算,同時包含停車每超過45s又要加6角。</p><p><b> 二·設(shè)計方案</b></p><p><b> ?。?)設(shè)計原理</b></p><p> 1.利
3、用發(fā)光二級管L0滅來辨識有乘客,亮?xí)r沒有乘客。通過開關(guān)K1來控制。具體接線是將P1.1與L0相連,P3.3與K1相連。利用實驗箱上的直流電機(jī)轉(zhuǎn)速產(chǎn)生的脈沖作為T0的外來計數(shù)脈沖。具體接線是將P3.4與實驗箱上的CKMOT(CKMOT即是直流電機(jī)轉(zhuǎn)數(shù)產(chǎn)生脈沖輸出端)相連。</p><p> 2.規(guī)定如下:①起始價為12.5元,若在3Km以內(nèi)則應(yīng)付費12.5元,如果超過了3Km則應(yīng)按超過3km的另外以每千米2.4元
4、計算,及總價為 JJ={12.5+(S-3)×2.4}元 。②若途中因為紅燈或塞車的原因停車則每停車45秒要另加0.6元即JJ=JJ+0.6.如舉個例子S=85km,中途沒有停車則JJ=12.5+(85-3)×2.4=209.3(元)則6個數(shù)碼管將顯示“209.3 85”</p><p> 3.具體過程敘述如下:①程序一開始由于CLR p1.1知L0亮,并且開始時開關(guān)K1置1檔,直到有乘客上
5、車時,把開關(guān)打向0檔,L0滅,同時顯示器開始計程計價(開始顯示為“12.5 00")之后車輪每轉(zhuǎn)一圈相當(dāng)于輸出一個外部脈沖到P3.4,利用T0計數(shù),T0每計125則T0中斷一次,由于1km=4×125×2(車輪每轉(zhuǎn)一圈則路程為2m),即在T0中斷程序中還有一個計中斷次數(shù)的。</p><p> ②在本設(shè)計中用到6個數(shù)碼管分別為 百元,十元,元,角,十千米,千米。③程序中用十進(jìn)制BCD
6、碼來表示價錢和路程,因此要用到將BCD碼轉(zhuǎn)換成非壓縮的BCD碼來驅(qū)動數(shù)碼管顯示。即用RAM 30H 存儲路程S(壓縮BCD碼)。另外用31H,32H來存儲計價值JJ的壓縮BCD碼,高字節(jié)放在32H中(百元,十元),低字節(jié)放在31H中(元,角),開始計價時30H為0,32H中為1(10元)31H中為25(二元五角)。調(diào)用BCDZH將BCD碼轉(zhuǎn)成非壓縮BCD碼在調(diào)用DISP顯示函數(shù)驅(qū)動數(shù)碼管顯示。</p><p>
7、?、茉赥0中斷中若S>3km則調(diào)用BCDJ24即以后每千米加2.4元,在調(diào)用BCDZH和DISP顯示路程和價錢。注意30H~32H中對應(yīng)的非壓縮BCD碼存放在40H~45H(40H存放一千米,41H存放十千米,42H存放角,43H存放元,44H存放十元,45H存放百元)。</p><p> ?、莩绦蛑羞€用T1定時器來檢測是否處于停車狀態(tài),由晶振頻率fosc=12MHz,T1定時為50ms,每過5S(100*
8、0.1)檢測一次TL0中的數(shù)據(jù)是否與上次相同,若相同則認(rèn)為停車狀態(tài),直到檢測了9次(9*5=45S)則就要加6角,之后再調(diào)用BCDZH和DISP驅(qū)動顯示器,顯示計價計程,又清零重新記錄停車時間。</p><p> ?、薮顺绦蛑斜容^特殊在于,T0每次中斷恰好走過250m,及恰好也是調(diào)用BCDJ6,這就省略了一些計算步驟。</p><p> 三·硬件系統(tǒng)說明和電路圖原理</p
9、><p><b> +5v</b></p><p> K1 </p><p><b> ckmot</b></p><p> 四·程序模塊主要流程圖和源程序及注釋</p><p><b> 程序流程圖</b>&l
10、t;/p><p><b> 程序 </b></p><p><b> 源程序代碼:</b></p><p> QDJ EQU 125;起步價12.5元</p><p> GLJ EQU 24;每公里價2.4元</p><p> S EQU 30H ;路程壓縮BC
11、D碼存放30H</p><p> JJDZJ EQU 31H;計價值低字節(jié)存放在31H壓縮BCD碼,元,角</p><p> JJGZJ EQU 32H;計價值高字節(jié)存放在32H壓縮BCD碼,百元,十元</p><p> SGW EQU 40H;路程個位非壓縮BCD碼,km</p><p> SSW EQU 41H ;路程十位非壓縮B
12、CD碼,10km</p><p> JJJ EQU 42H ;計價值角位,非壓縮BCD碼</p><p> JJY EQU 43H ;計價值元位,非壓縮BCD碼</p><p> JJSY EQU 44H;計價值十元位,非壓縮BCD碼</p><p> JJBY EQU 45H;計價值百元位,非壓縮BCD碼</p>&l
13、t;p> ORG 0000H;程序開始</p><p><b> LJMP MAIN</b></p><p><b> ORG 000BH</b></p><p> LJMP T0INT</p><p><b> ORG 001BH</b></p>
14、<p> LJMP T1INT</p><p> MAIN: MOV SP,#60H</p><p> MOV DPTR,#5FFFH ;顯示初始化</p><p> MOV A,#0DCH</p><p> MOVX @DPTR,A</p><p> LP: MOVX A,@DPTR&l
15、t;/p><p> JNB ACC.7,LP </p><p> MOV A,#00H</p><p> MOVX @DPTR,A</p><p> MOV A,#34H</p><p> MOVX @DPTR,A</p><p> MOV TMOD,#16H ;T0計數(shù),模式二,
16、T1定時,模式一</p><p> MOV TH0,#83H ;T0計數(shù)初值,每計到125,中斷一次</p><p> MOV TL0,#83H</p><p> MOV TH1,#3CH ;T1定時初值,每50ms,中斷一次</p><p> MOV TL1,#0B0H</p><p> MOV R7,#0
17、0H ;T0中斷的次數(shù),4次則路程加1km</p><p> MOV R3,#83H ;用于存放每次TLTLO中數(shù)</p><p> MOV R4,#00H ;T1中斷子程序中100次,則5s檢測車是否停車狀態(tài)</p><p> MOV R5,#00H ;T1中斷子程序中90次,則停車45s,加6角</p><p>
18、; SETB EA ;開啟cpu中斷,T0,T1中斷</p><p><b> SETB ET1</b></p><p><b> SETB ET0</b></p><p> SETB PT0 ;T0中斷優(yōu)先級高</p><p> CLR P1.1 ;無乘客L0亮燈
19、 </p><p> MOV SGW, #00H ;顯示位清零</p><p> MOV SSW,#00H</p>
20、<p> MOV JJJ,#00H</p><p> MOV JJY,#00H</p><p> MOV JJSY,#00H</p><p> MOV JJBY,#00H</p><p> ;ACALL DISP</p><p> JB P3.3,$ ;有乘客時,開始啟動T0計數(shù),T1定時,開關(guān)K
21、1控制</p><p><b> SETB TR0</b></p><p><b> SETB TR1</b></p><p> CLR P1.1 ;有乘客時L0滅燈</p><p> MOV S,#00H ;路程初始值0km</p><p> MOV JJGZ
22、J,#01H ;計價初始值12.5元</p><p> MOV JJDZJ,#25H</p><p> ACALL BCDZH ;調(diào)用BCD轉(zhuǎn)換程序,成非壓縮BCD碼</p><p> LL: ACALL DISP ;調(diào)用顯示程序,并等待中斷</p><p><b> LJMP LL</b></p
23、><p> ;將壓縮BCD碼轉(zhuǎn)換成非壓縮BCD碼子程序如下</p><p> BCDZH: PUSH PSW</p><p> SETB RS0 ;選用工作寄存器組0</p><p> MOV R0,#S ;S的轉(zhuǎn)換</p><p> MOV R1,#SGW</p><p> LPB
24、: MOV A,@R0</p><p><b> MOV R2,A</b></p><p> ANL A,#0FH ;保留低四位</p><p><b> MOV @R1,A</b></p><p> INC R1 </p><p><b>
25、; MOV A,R2</b></p><p> ANL A,#0F0H ;保留高四位,</p><p><b> SWAP A</b></p><p><b> MOV @R1,A</b></p><p> INC R0 ;計價值的轉(zhuǎn)?</p>
26、<p><b> INC R1</b></p><p> CJNE R0,#33H,LPB</p><p> CLR RS0 ;選回工作寄存器組0</p><p><b> POP PSW</b></p><p><b> RET</b><
27、/p><p><b> ;T0中斷子程序</b></p><p> T0INT: PUSH PSW</p><p><b> INC R7</b></p><p> CJNE R7,#04H,LPT0;路程不滿1km,S不加1,轉(zhuǎn)到LPTO</p><p> MOV A
28、,S ;S+1</p><p> ADD A,#01H</p><p><b> DA A</b></p><p><b> MOV S,A</b></p><p> MOV R7,#00H ;R7復(fù)0</p><p> LPT0: MOV A,S
29、 ;S是否大于3km </p><p><b> CLR C</b></p><p> SUBB A,#03H</p><p> JC FH0 ;S<3,轉(zhuǎn)到FH0</p><p><b> ; MOV A,S</b></p><p><b&g
30、t; ; CLR C</b></p><p> ;SUBB A,#6</p><p><b> ;JC L3</b></p><p> ;ACALL BCDJ12</p><p><b> ;LJMP FH0</b></p><p> L3: AC
31、ALL BCDJ6 ;由于每次計數(shù)125,中斷一次,125*2=250m,即中斷一次加0.6元</p><p> FH0: ACALL BCDZH ;調(diào)用bcd碼轉(zhuǎn)換成非壓縮bcd碼,驅(qū)動數(shù)碼管顯示</p><p> ;ACALL DISP</p><p><b> POP PSW</b></p><p&g
32、t;<b> RETI</b></p><p> ;BCDJ6子程序,T0中斷一次250m就加6角,使用壓縮BCD碼</p><p> BCDJ6: MOV A,JJDZJ </p><p> ADD A,#06H</p><p><b> DA A</b></p><
33、p> MOV JJDZJ,A</p><p> MOV A,JJGZJ</p><p> ADDC A,#00H</p><p><b> DA A</b></p><p> MOV JJGZJ,A</p><p><b> RET</b></p>
34、;<p><b> ;附加的</b></p><p> ;BCDJ12: MOV A,JJDZJ </p><p> ;ADD A,#12</p><p><b> ;DA A</b></p><p> ;MOV JJDZJ,A</p><p> ;
35、MOV A,JJGZJ</p><p> ;ADDC A,#0</p><p><b> ;DA A</b></p><p> ;MOV JJGZJ,A</p><p><b> ;RET</b></p><p><b> ;T1中斷子程序</b&g
36、t;</p><p> T1INT:PUSH PSW</p><p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H</p><p><b> INC R4</b></p><p> CJNE R4,#64H,LY ;未到5s,轉(zhuǎn)到LY</p>
37、<p> MOV R4,#00H ;R4復(fù)0</p><p><b> MOV A,TL0</b></p><p><b> CLR C</b></p><p> SUBB A,R3 ;5s檢測是否停車,</p><p> JNZ LY2 ;A=0,R3=T
38、L0,A!=0->LY2</p><p> INC R5 </p><p> CJNE R5,#09H,LY2 ;是否停了45s</p><p> MOV R5,#00H ;R5復(fù)0</p><p> ACALL BCDJ6 ;停車45s加6角</p><p> ACALL
39、BCDZH</p><p> LY2: MOV R3,TL0 ;用于存放每次TL0的值</p><p> LY: POP PSW</p><p><b> RETI</b></p><p><b> ;顯示子程序</b></p><p> DISP:
40、 MOV R3,#06H ;顯示的位數(shù)</p><p> MOV A,#92H ;輸出寫顯示RAM命令字</p><p> MOV DPTR,#5FFFH ;指向8279命令口</p><p> MOVX @DPTR,A ;起始地址為0單元,自動加1</p><p> MOV R1,#SGW ;要顯示數(shù)據(jù)的存放單
41、元首地址</p><p> TY11: MOV A,@R1</p><p> MOV DPTR,#CODE1 ;#CODE1為查表偏移量</p><p> MOVC A,@A+DPTR ;查表得到段碼</p><p> MOV DPTR,#5EFFH ;指向8279數(shù)據(jù)口</p><p>
42、MOVX @DPTR,A ;寫入顯示RAM</p><p><b> INC R1</b></p><p> DJNZ R3,TY11</p><p><b> RET</b></p><p> CODE1: DB 0C0H,0F9H,0A4H,0B0H,99H ;段碼表(共陽極)
43、</p><p> DB 92H,82H,0F8H,80H,90H,88H</p><p> DB 83H,0C6H,0A1H,86H,8EH,8CH</p><p> DB 0C1H,89H,0C7H,0BFH,91H</p><p> DB 00H,0FFH</p><p><b> END&l
44、t;/b></p><p><b> 五·課程設(shè)計總結(jié)</b></p><p> 這次單片機(jī)課程設(shè)計對于自己來說,收獲很多。通過這次包括匯編編程和對硬件的操作在內(nèi)的,由自己動手實踐的,在體提高自己編程能力方面和對單片機(jī)硬件操作能力方面都有一個很大的提高。由開始選題然后找到相關(guān)參考書,試著編寫程序,到最后逐步的修改,碰到問題找老師和同學(xué)幫助(如如何提
45、供外部脈沖來源,單步調(diào)式,設(shè)置斷點等),最后能夠在實驗箱實現(xiàn),這過程中收獲頗多??傊?,這次課程設(shè)計即有加深對課本知識了解,也加強(qiáng)了自己操作和編程能力。</p><p><b> 六·參考書目</b></p><p> 【1】王瓊,單片機(jī)原理及應(yīng)用實驗教程。合肥:合肥工業(yè)大學(xué)出版社,2005【2】王瓊,單片機(jī)原理及應(yīng)用。合肥:合肥工業(yè)大學(xué)出版社,2008&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租車計價器課程設(shè)計
- 出租車計價器課程設(shè)計
- 出租車計價器課程設(shè)計
- 出租車計價器課程設(shè)計
- 課程設(shè)計---出租車計價器設(shè)計
- 課程設(shè)計--出租車計價器設(shè)計
- 出租車計價器設(shè)計課程設(shè)計
- 課程設(shè)計---出租車計價器設(shè)計
- 課程設(shè)計---出租車計價器的設(shè)計
- 課程設(shè)計--出租車計價器的設(shè)計
- 接口課程設(shè)計---出租車計價器
- 硬件課程設(shè)計----出租車計價器
- eda課程設(shè)計--出租車計價器
- eda課程設(shè)計--出租車計價器
- 出租車計價器課程設(shè)計論文
- 出租車計價器課程設(shè)計報告
- eda課程設(shè)計---出租車計價器的設(shè)計
- 硬件課程設(shè)計--出租車計價器系統(tǒng)
- eda課程設(shè)計報告---出租車計價器
- eda課程設(shè)計報告--出租車計價器
評論
0/150
提交評論