久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

51單片機 出租車計價器課程設(shè)計

時間:2019-05-13 23:54:39下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《51單片機 出租車計價器課程設(shè)計》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《51單片機 出租車計價器課程設(shè)計》。

第一篇:51單片機 出租車計價器課程設(shè)計

第一章 出租車計價系統(tǒng)的設(shè)計要求與設(shè)計方案

1.1 出租車計價器設(shè)計要求

設(shè)計一個出租車自動計費器,計費包括起步價、行車?yán)锍逃嬞M、等待時間計費三部分,用七段數(shù)碼管顯示總金額,單價,運行里程,起步價為6元,超過6元,每一公里增加1元或2元,等待時間單價為每30秒鐘1元,計費功能:費用的計算是按行駛里程收費。設(shè)起步價為6元。

1、當(dāng)總金額<6元時,按起價計算費用

2、當(dāng)總金額>6元時,每公里按1元或2元計費

3、等待累計時間>30s時,按1元/30s計費

4、S1為啟動按鈕、S2轉(zhuǎn)換單價按鈕、S3復(fù)位按鈕。顯示功能:

1、顯示行駛里程:用三位數(shù)字顯示,顯示方式為“XX.X”,單位為km。計程范圍0-99.9km,精確到0.1km。

2、顯示單價:用兩位數(shù)字顯示,顯示方式為“X.X”,單位為元。

3、顯示總費用:用三位數(shù)字顯示,顯示方式為“XX.X”,單位為元。計價范圍0-99.9元,精確到0.1元。

1.2 系統(tǒng)主要功能

本出租車自動計費,上電后顯示最初的起步價,里程計費單價。同時具有運行,復(fù)位,轉(zhuǎn)換等狀態(tài),可以切換白天與晚上不同計費單價,可以實現(xiàn)每等待30s收1元功能。出租車顯示行駛的總費用,里程,單價。

1.3 方案論證與比較

方案一:采用數(shù)字電子技術(shù),利用555定時芯片構(gòu)成多諧振蕩器,或采用外圍的晶振電路作為時鐘脈沖信號,采用計數(shù)芯片對脈沖盡心脈沖的計數(shù)和分頻,最后通過譯碼電路對數(shù)據(jù)進(jìn)行譯碼,將譯碼所得的數(shù)據(jù)送給數(shù)碼管顯示,一下是該方案的流程框圖,方案一如圖1-1所示:

圖1-1方案一

方案二:采用EDA技術(shù),根據(jù)層次化設(shè)計理論,該設(shè)計問題自頂向下可分為分頻模塊,控制模塊 計量模塊、譯碼和動態(tài)掃描顯示模塊,其系統(tǒng)框圖如圖1-2所示:

圖1-2方案二

方案三:采用MCU技術(shù),通過單片機作為主控器,采用外部晶振作為時鐘脈沖,通過按鍵可以方便調(diào)節(jié),以下是方案三的系統(tǒng)流程圖,本方案主要是必須對于數(shù)字電路比較熟悉,成本又不高。方案圖如圖1-3所示:

圖1-3方案三

方案總結(jié):通過各個方案的比較,本次采用方案三,不但控制簡單,而且成本低廉,設(shè)計電路簡單。

第二章 出租車計價系統(tǒng)的硬件設(shè)計

2.1 AT89C51單片機介紹

AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集合輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89S51是一種高效微控器,為很多嵌入式控制系統(tǒng)提供了一種靈活性且廉價的方案 單片機各引腳功能說明:

VCC:供電電壓。GND:接地。

P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行。校驗時,P0輸出原碼,此時P0外部必須被拉高。

P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。

P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。

P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89S52的一些特殊功能口,P3口同時為閃爍編程和編程校驗接收一些控制信號。

RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。

ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。

/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。

/EA/VPP:當(dāng)/EA保持低電平時,則在此期間選擇外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。

XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。

2.2 里程計算、計價單元的設(shè)計

里程計算是通過安裝在車輪上的霍爾傳感器A44E檢測到的信號,送到單片機,經(jīng)處理計算,送給顯示單元的。其原理如圖2-1所示

圖2-1 由于A44E 屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL 電平標(biāo)準(zhǔn),可以直接接到單片機的I/O 端口上,而且其最高檢測頻率可達(dá)到1MHZ。

如圖2-2,A44E 集成霍耳開關(guān)由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D 和OC 門輸出E 五個基本部分組成。

圖2-2 路程測量電路

在輸入端輸入電壓CC V,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢發(fā)生器的兩端,根據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍耳電勢差H V 輸出,該H V 信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC 門輸出。當(dāng)施加的磁場達(dá)到工作點(即OP B)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導(dǎo)通,此時OC 門輸出端輸出低電壓,通常稱這種狀態(tài)為開。當(dāng)施加的磁場達(dá)到釋放點(即rP B)時,觸發(fā)器輸出低電壓,三極管截止,使OC 門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍耳開關(guān)完成了一次開關(guān)動作。

我們選擇了P3.5 口作為信號的輸入端,內(nèi)部采用計數(shù)的方式,車輪每轉(zhuǎn)一圈(我們設(shè)車輪的周長是10米),霍爾開關(guān)就檢測并輸出信號,引起單片機對脈沖計數(shù),當(dāng)計數(shù)達(dá)到10次時,也就是0.1 公里,單片機就控制將金額自動的加增加,其計算公式:當(dāng)前單價× 公里數(shù)=金額。

2.3 數(shù)據(jù)顯示單元的設(shè)計

由于設(shè)計要求有單價(2 位)、路程(3位)、總金額(3位)顯示輸出,我們采用8個7段數(shù)碼管動態(tài)顯示。如圖2-3:

圖2-3 數(shù)據(jù)顯示硬件電路圖

2.4 按鍵單元的設(shè)計

電路共采用了四個按鍵,S1、S2、S3、S4,其功能分別是:S1 啟動計價開關(guān)、S2 白天/晚上轉(zhuǎn)換開關(guān)、S3 數(shù)據(jù)復(fù)位清零開關(guān)、S4閉合表示出租車正常運行,計價器也正常計價;若打開S4則表示出租車在暫停,轉(zhuǎn)入判斷是否收費程序,閉合超過30秒,開始計價。如圖2-4:

圖2-4 按鍵單元電路圖 2.5 振蕩電路

單片機內(nèi)部有一個高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取33pF)。這樣就構(gòu)成一個穩(wěn)定的自激振蕩器。振蕩電路脈沖經(jīng)過二分頻后作為系統(tǒng)的時鐘信號,再在二分頻的基礎(chǔ)上三分頻產(chǎn)生ALE信號,此時得到的信號時機器周期信號。振蕩電路如圖2-5所示:

圖2-5 振蕩電路

2.6 復(fù)位電路

復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是按鍵復(fù)位。按鍵復(fù)位具有上電復(fù)位功能外,若要復(fù)位,只要按圖中的RESET鍵,電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生一個復(fù)位高電平。上電復(fù)位電路要求接通電源后,通過外部電容充電來實現(xiàn)單片機自動復(fù)位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機器周期),單片機就可以進(jìn)行復(fù)位操作。按鍵復(fù)位電路圖如圖2-6所示。

圖2-6 復(fù)位電路 總電路圖

第三章 出租車計價系統(tǒng)的軟件設(shè)計

3.1主程序流程圖記描述

由于用到了外部中斷0,所以,按中斷系統(tǒng)的編程結(jié)構(gòu)在0000H處放置一條長跳轉(zhuǎn)指令LJMP START跳轉(zhuǎn)到主程序入口,在外部中斷0的中斷入口地址0003H處放置一條長跳轉(zhuǎn)指令LJMP EXT0跳轉(zhuǎn)到外部中斷0服務(wù)程序處。主程序進(jìn)行程序中用到的一些存儲單元的初始化,T0,T1的初始化。首先,進(jìn)行存儲器單元初始化,將71H-79H單元賦值。然后進(jìn)行定時器的設(shè)置。設(shè)置T1的工作方式為模式2,計數(shù)狀態(tài),自啟動。T0的工作方式,模式1,定時狀態(tài),自啟動,對輸入的脈沖進(jìn)行計數(shù),給T0、T1賦初值。之后調(diào)用計數(shù)脈沖子程序,及等待子程序,數(shù)碼管動態(tài)顯示子程序,最后進(jìn)入鍵盤掃描子程序進(jìn)行掃描。主程序不斷進(jìn)行調(diào)用數(shù)碼管顯示子程序及鍵盤掃描子程序循環(huán)操作,等待中斷。如圖3-1:

圖3-1 主程序流程圖 3.2計費子程序流程圖

72H存儲總金額小數(shù)位,73H存儲器總金額個位,78H存儲器總金額十位,77H存儲單價元。將72H中值放入A中,再將A與77H相加,即小數(shù)位與單價相加,結(jié)果存入A,再進(jìn)行十進(jìn)制調(diào)整,將結(jié)果存于R6,將高四位與低四位交換并屏蔽高四位,保留低四位與個位相加得到總金額個位。若總金額超過10則清零,并且總金額十位加1。將R6中數(shù)值取出,屏蔽高四位,輸出總金額小數(shù)位。如圖3-2:

圖3-2 計費子程序流程圖 3.3 等待是否收費子程序

在出租車的計價系統(tǒng)中,出租車在等待的時候也要計價,本設(shè)計體現(xiàn)了這點。程序判斷了出租車是否停止,若停止30秒以上是,開始計價。55H中賦初值20,56H中賦初值10,總共30秒延時。超過30秒時,調(diào)用計費子程序。如圖3-3

圖3-3 等待是否收費子程序流程圖

3.4 按鍵子程序流程圖

圖3-4 等待收費子程序流程圖

3.5 外部中斷0流程圖

圖3-5 外部中斷0子程序流程圖 程序

ORG 0000H LJMP MAIN ORG 0003H;外部中斷入口地址 LJMP REST ORG 030H MAIN:

MOV 71H,#00H;脈沖計數(shù)每10個脈沖里程數(shù)加0.1顯示緩沖單元 MOV 72H,#00H;存儲總金額小數(shù)位 MOV 73H,#00H;存儲總金額個位 MOV 74H,#00H;存儲里程數(shù)小數(shù)位 MOV 75H,#00H;存儲里程數(shù)個位 MOV 76H,#00H;存儲單價角位 MOV 77H,#01H;存儲單價元位 MOV 78H,#00H;存儲總金額十位 MOV 79H,#00H;存儲里程數(shù)十位 MOV 55H,#20;給定等待初值20*50ms MOV 56H,#10;10秒等待時間初值 SETB EA;開總中斷 SETB EX0;開外部中斷0 MOV TCON,#04H;外部中斷0低電平

MOV TMOD,#61H;設(shè)置使用定時器1,模式2,計數(shù)狀態(tài),自啟動,定時器0,模式1,定時狀態(tài),自啟動

MOV TL0,#0B0H;50ms初值設(shè)定C350H MOV TH0,#03CH MOV TL1,#0FFH;設(shè)置定時器低八位初值為FFH,即有一脈沖輸入就溢出

MOV TH1,#0FFH;設(shè)置定時器高八位初值為FFH,用于重裝低八位 START: LCALL PULSE;調(diào)用計數(shù)脈沖子程序 LCALL WAIT;調(diào)用等待子程序 LCALL DISPLAY;調(diào)用顯示程序進(jìn)行顯示 LCALL KEY;調(diào)用鍵盤掃描程序

SJMP START;返回START處繼續(xù)循環(huán)執(zhí)行 REST: PUSH ACC MOV 71H,#00H;脈沖計數(shù)每10個脈沖里程數(shù)加1顯示緩存單元 MOV 72H,#00H;存儲總金額個位 MOV 73H,#00H;存儲總金額十位 MOV 74H,#00H;存儲里程數(shù)個位 MOV 75H,#00H;存儲里程數(shù)十位 MOV 78H,#00H;存儲總金額百位 MOV 79H,#00H;存儲里程數(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ù)個位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秒等待計時 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

第二篇:單片機課程設(shè)計出租車計價器1.

常州機電職業(yè)技術(shù)學(xué)院 畢業(yè)設(shè)計(論文

作者:叢佳偉學(xué)號:40931111系部:電氣工程系 專業(yè):應(yīng)用電子技術(shù) 題目:出租車計價器系統(tǒng) 指導(dǎo)者:徐登黃勇 評閱者: 2012年05月 摘要

現(xiàn)在各個城市出租車行業(yè)都已普及,因此出租車計價器的技術(shù)已經(jīng)成熟,但是出租車計價器的市場還具有廣闊的前景。隨著城市建設(shè)的日益完善,關(guān)乎城市面貌的出租車行業(yè)也將迅速發(fā)展,出租車計價器的的大批量需求也是毫無疑問的,所以未來出租車計價器的市場還是有相當(dāng)大的潛力的。

本次出租車計價器設(shè)計以AT89S52單片機為中心,采用U18霍爾傳感器對輪胎轉(zhuǎn)數(shù)進(jìn)行計數(shù),實現(xiàn)對出租車?yán)锍痰臏y量,并最終計算出結(jié)果。其中采用寄存器芯片AT24C02使系統(tǒng)在掉電的時候?qū)蝺r、里程、車輪長度等信息進(jìn)行存儲,采用時鐘芯片DS1302來顯示時間和在系統(tǒng)需要時進(jìn)行計時。輸出采用兩個4段數(shù)碼顯示管,而且根據(jù)按鍵有空車指示燈、等待查詢指示燈、單程指示燈進(jìn)行指示。

汽車計價器是乘客與司機雙方的交易準(zhǔn)則,它是出租車行業(yè)發(fā)展的重要標(biāo)志,是出租車中最重要的工具。它關(guān)系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是有一定的應(yīng)用價值的。

關(guān)鍵詞:計價器、霍爾傳感器、單片機 目錄 摘要(1 1 緒論(3 1.1 出租車計價器概述(3 1.2 單片機的概述(3 2 總體方案設(shè)計(4 2.1 設(shè)計任務(wù)要求(4 2.1.1 設(shè)計任務(wù)(4 2.1.2 設(shè)計要求(5 2.2 設(shè)計的主要功能(5 2.3 方案的選取(5 2.3.1 硬件設(shè)計方案(5 2.3.2 軟件設(shè)計方案(6 3 硬件設(shè)計(7 3.1 AT89S52單片機及最小系統(tǒng)(7 3.2 測距單元(10 3.3 按鍵單元(12 3.4 時鐘單元(12

3.5 顯示單元(13 3.6 儲存單元(15 4 軟件設(shè)計(16 4.1 系統(tǒng)主程序(16 4.2 數(shù)據(jù)處理子程序(17 4.3 等待時間計時子程序(18 4.4 鍵盤掃描子程序(19 5 Proteus軟件仿真(21 總結(jié).............................................錯誤!未定義書簽。致謝.(23 參考文獻(xiàn)(23 附

1、系統(tǒng)原理圖(25 1 緒論

1.1 出租車計價器概述

我國在70年代開始出現(xiàn)出租車,但那時的計費系統(tǒng)大都是國外進(jìn)口不但不夠準(zhǔn)確,價格還十分昂貴。隨著改革開放日益深入,出租車行業(yè)的發(fā)展勢頭已十分突出,國內(nèi)各機械廠家紛紛推出國產(chǎn)計價器。出租車計價器的功能從剛開始的只顯示路程(需要司機自己定價,計算后四舍五入,到能夠自主計費,以及現(xiàn)在的能夠打一發(fā)票和語音提示、按時間自主變動單價等功能。隨著城市旅游業(yè)的發(fā)展,出租車行業(yè)已成為城市的窗口,象征著一個城市的文明程度。

本次設(shè)計的目的在于現(xiàn)在各大中城市出租車行業(yè)都已普及自動計價器,所以計價器技術(shù)的發(fā)展已成定局。而部分小城市尚未普及,但隨著城市建設(shè)日益加快,象征

著城市面貌的出租車行業(yè)也將加速發(fā)展,計價器的普及也是毫無疑問的,所以未來汽車計價器的市場還是十分有潛力的。

1.2 單片機的概述

計算機系統(tǒng)已明顯地朝巨型化、單片化、網(wǎng)絡(luò)化三個方向發(fā)展。巨型化發(fā)展的目的在于不斷提高計算機的運算速度和處理能力,以解決復(fù)雜系統(tǒng)計算和高速數(shù)據(jù)處理,比如系統(tǒng)仿真和模擬、實時運算和處理。單片化是把計算機系統(tǒng)盡可能集成在一塊半導(dǎo)體芯片上,其目的在于計算機微型化和提高系統(tǒng)的可靠性,這種單片計算簡稱單片機。單片機的內(nèi)部硬件結(jié)構(gòu)和指令系統(tǒng)主要是針對自動控制應(yīng)用而設(shè)計的所以單片機又稱微控制器MCU(Micro Controller Unit。用它可以很容易地將計算機嵌入到各種儀器和現(xiàn)場控制設(shè)備中,因此單片機又叫做嵌入式微控制器(Embedded MCU。單片機自20世紀(jì)70年代問世以來,以其鮮明的特點得到迅猛發(fā)展,已廣泛應(yīng)用于家用電器、智能玩具、智能儀器儀表、工業(yè)控制、航空航天等領(lǐng)域,經(jīng)過30多年的發(fā)展,性能不斷提高,品種不斷豐富,已經(jīng)形成自動控制的一支中堅力量。據(jù)統(tǒng)計,我國的單片機年容量已達(dá)1~3億片,且每年以大約16%的速度增長,但相對于國際市場我國的占有率還不到1%。這說明單片機應(yīng)用在我國有著廣闊的前景。對于從事自動控制的技術(shù)人員來講,掌握單片機原理及其應(yīng)用已經(jīng)成為必不可少的學(xué)習(xí)任

務(wù)。

單片機的應(yīng)用十分廣泛,在工業(yè)控制領(lǐng)域、家電產(chǎn)品、智能化儀器儀表、計算機外部設(shè)備,特別是機電一體化產(chǎn)品中,都有重要的用途。其主要的用途可以分為以下方面。

●顯示:通過單片機控制發(fā)光二極管或是液晶,顯示特定的圖形和字符。●機電控制:用單片機控制機電產(chǎn)品做定時或定向的動作。

●檢測:通過單片機和傳感器的聯(lián)合使用,用來檢測產(chǎn)品或者工況的意 外發(fā)生。

●通信:通過RS-232串行通信或者是USB通信,傳輸數(shù)據(jù)和信號。●科學(xué)計算:用來實現(xiàn)簡單的算法。

那么單片機是不是解決上述應(yīng)用的唯一選擇呢?當(dāng)然不是!單片機最明顯的優(yōu)點是價格便宜,從幾元人民幣到幾十元人民幣。這是因為這類芯片的生產(chǎn)量很大,技術(shù)也很成熟。

其次,單片機的體積也遠(yuǎn)小于其他兩種方案。單片機本身一般用40引腳封裝,當(dāng)然功能多一些的單片機也有引腳比較多的,如68引腳,功能少的只有10多個或20多個引腳,有的甚至只有8只引腳。

當(dāng)然,單片機無論在速度還是容量方面都小于其他兩種方案,但是在實際工作中并不是任何需要計算機的場合都要求計算機有很高的性能。例如,控制電冰箱的控制器就不需要使用嵌入式系統(tǒng),用一片51就可以輕松實現(xiàn)。所以應(yīng)用的關(guān)鍵是看能否夠用,是否有很好的性能價格比。51系列的單片機已經(jīng)面世十多年,依然沒有被淘汰,還在不斷發(fā)展中,這就說明是它有廣闊的應(yīng)用前景。總體方案設(shè)計

本次設(shè)計是使用單片機技術(shù)來實現(xiàn)一個出租車的數(shù)字計價器,利用單片機豐富的IO端口,及其控制的靈活性,實現(xiàn)基本的里程計價功能和單雙程價格調(diào)整、時鐘顯示功能等等。具有性能可靠,電路簡單、成本低、擴(kuò)展空間大等特點。

2.1 設(shè)計任務(wù)要求 2.1.1 設(shè)計任務(wù)

設(shè)計一款基于AT89S52單片機的出租車數(shù)字計價器,通過對傳感器的檢測,對數(shù)值進(jìn)行處理和顯示。

2.1.2 設(shè)計要求

一、基本要求

(1能顯示里程,單位為公里,最后一位為小數(shù)位。(2能顯示金額數(shù),單位為元,最后一位為小數(shù)位。

(3可設(shè)定單程價格和往返價格,單程價格為2元/公里,往返價格為1.5元/ 公里。

(4車速<5公里/小時的時間累積為總等待時間,每5分鐘等待時間相當(dāng)于 里程數(shù)增加1公里。

(5起步公里數(shù)為3公里,價格為5元,若實際距離大于3公里,按規(guī)則3計 算價格。

(6按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間。

二、發(fā)揮部分

(1增加了空車指示功能,當(dāng)無客人時,按下功能切換按鍵,空車指示燈亮。(2增加實時時間顯示,無論計價器工作或者空車,都能顯示實時時間,便于時間提醒。

(3增加信息儲存功能。可以儲存等待時間,里程和金額。2.2 設(shè)計的主要功能

本設(shè)計所設(shè)計的出租車數(shù)字計價器的主要功能有:金額輸出、路程輸出、數(shù)據(jù)復(fù)位、計時計價、空車顯示等。輸出采用2個4位8段共陽數(shù)碼管,車輛行走時前4位顯示路程,后4位顯示金額。車輛候車時,前4位顯示等待時間,后4位顯示等待金額。空車時顯示實時時間。儲存等待時間,里程和金額。

2.3 方案的選取

本設(shè)計是由軟件設(shè)計和硬件設(shè)計兩部分組成的。軟件設(shè)計要進(jìn)行程序的編寫和軟件仿真;硬件設(shè)計要設(shè)計電路、硬件仿真和制作電路板。

2.3.1 硬件設(shè)計方案

本系統(tǒng)的硬件設(shè)計主要包括單片機AT89S52、數(shù)據(jù)顯示部件、U18霍爾傳感 器電路、里程計算及計價單元的設(shè)計。在硬件設(shè)計過程中,充分利用各部件的功能,實現(xiàn)多功能的出租車計價器設(shè)計。

計價器的單片機系統(tǒng)框圖如圖2-1所示。它由以下幾個部件組成:霍爾傳感器單元、AT89S52單片機、金額顯示、里程顯示、電源。利用單片機豐富的IO 端口,及其控制的靈活性,實現(xiàn)基本的里程和價格的計算及顯示功能。

圖2-1計價器系統(tǒng)框圖 2.3.2 軟件設(shè)計方案

本設(shè)計程序的采取C 語言進(jìn)行編寫,使用Keil uVision3編譯和Proteus7.4a 仿真軟件進(jìn)行仿真調(diào)試。其中的里程計算和費用計算方案如下。

1、里程計算

(1霍爾傳感器對車輪進(jìn)行信號檢測,產(chǎn)生并輸出脈沖信號到單片機;(2單片機對傳感器輸出的脈沖信號進(jìn)行計數(shù),并進(jìn)行km 計算:每一個信號代表輪胎旋轉(zhuǎn)一周,設(shè)輪胎的周長為1.57m;每km 產(chǎn)生的信號數(shù)為N ,里程顯示為N × 1.57m = 1.57N(km

2、費用計算

(1出租車的起步費為5元,并且3km 內(nèi)不需額外計價;(2出租車行駛3km 后,單程2元/km ,雙程1.5元/km。

單 片 機 霍爾

傳感器 數(shù)據(jù)顯示 狀態(tài)指示 時鐘顯示 按鍵 信息存儲

(3等待收費的標(biāo)準(zhǔn)為5分鐘算一公里;(4暫停時計價器暫停計價,不收費用。3 硬件設(shè)計

本設(shè)計的硬件設(shè)計包括單片機AT89S52單元、測距單元、顯示單元(數(shù)碼管顯示金額、等待時間和里程,指示燈對單雙程切換指示、空車指示、等待計時指示、按鍵單元、時鐘單元和儲存單元。

3.1 AT 89S52單片機及最小系統(tǒng)

1、AT89S52單片機

AT89S52具有如下特點:40個引腳,8k Bytes Flash片內(nèi)程序存儲器, 256bytes的隨機存取數(shù)據(jù)存儲器(RAM,32個外部雙向輸入/輸出(I/O口,3個16位可編程定時計數(shù)器,全雙工串行口,看門狗(WDT電路,片內(nèi)時鐘振蕩器。

P0口有二個功能:

1、外部擴(kuò)展存儲器時,當(dāng)做數(shù)據(jù)/地址總線。

2、不擴(kuò)展時,可做一般的I/O使用,但內(nèi)部無上拉電阻,作為輸入或輸出時應(yīng)在外部接上拉電阻。

P1口只做I/O口使用:其內(nèi)部有上拉電阻。

P2口有兩個功能:

1、擴(kuò)展外部存儲器時,當(dāng)作地址總線使用。

2、做一般I/O口使用,其內(nèi)部有上拉電阻。

P3口有兩個功能:除了作為I/O使用外(其內(nèi)部有上拉電阻,還有一些特殊功能,由特殊寄存器來設(shè)置。

圖3-1 AT89S52引腳圖

設(shè)計中用到的單片機各管腳(圖3-1功能以及與其他模塊連接介紹如下: VCC:接+5V電源。

VSS:接地。

時鐘引腳:XTAL1和XTAL2兩端接晶振和30PF的電容,構(gòu)成時鐘電路。

它可以使單片機穩(wěn)定可靠的運行。

RST:復(fù)位信號輸入端,高電平有效。當(dāng)在此引腳加兩個機器周期的高電平時,就可以完成復(fù)位操作。

P1.0:接功能按鍵。

P1.1:接切換鍵,表示單雙程切換。P1.2:接查詢(上次金額鍵。P1.3:接清零鍵。P1.4:接空車指示燈。P1.5:接查詢指示燈。P1.6:接開始計時指示燈。P1.7:接雙程指示燈。P3.0:接查詢/確認(rèn)鍵。

P0口接數(shù)碼管段選端,P2口接數(shù)碼管位選段。P3.2:接霍爾傳感器的輸出口。P3.3:接存儲器的SCL口。P3.4:接儲存器的SDA口。

P3.5:接時鐘電路DS1302的RST口。P3.6:接DS1302的SCLK口。P3.7:接DS1302的I/O口。

2、單片機最小系統(tǒng)

復(fù)位電路和晶振電路是AT89S52工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖3-2所示。

圖3-2單片機最小系統(tǒng)

AT89S52 的復(fù)位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開關(guān)就使在RST端出現(xiàn)一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統(tǒng)的內(nèi)部時鐘電路。

3.2 測距單元

本次設(shè)計我們選取了霍爾傳感器來進(jìn)行里程測量。

霍爾器件是一種磁傳感器。用它們可以檢測磁場及其變化,可在各種與磁場有關(guān)的場合中使用。霍爾器件以霍爾效應(yīng)為其工作基礎(chǔ)。

霍爾器件具有許多優(yōu)點,它們的結(jié)構(gòu)牢固,體積小,重量輕,壽命長,安裝方便,功耗小,頻率高,耐震動,不怕灰塵、油污、水汽及鹽霧等的污染或腐蝕。

霍爾器件分為:霍爾元件和霍爾集成電路兩大類,前者是一個簡單的霍爾片,使用時常常需要將獲得的霍爾電壓進(jìn)行放大。后者將霍爾片和它的信號處理電路集成在同一個芯片上。本次設(shè)計選取了霍爾集成電路來測量里程。

里程測量是通過將霍爾傳感器的集成電路安裝在車輪上方的鐵板上,將磁鐵安裝在車輪上,旋轉(zhuǎn)的車輪將磁鐵對準(zhǔn)集成電路時,霍爾傳感器會輸出一個脈沖信號,送到單片機,經(jīng)過單片機的計算處理,將行駛的里程送到顯示單元并顯示出來。

其原理示意圖如下:

圖3-3 傳感器測距示意圖

U18是一種利用霍爾效應(yīng)做成的半導(dǎo)體集成電路器件,它被設(shè)計在交變磁場中運行,特別是能在低電源電壓和長時間運行溫度范圍可達(dá)到125℃。這種霍爾IC可用作各種類型的傳感器(速度傳感器、位移傳感器、轉(zhuǎn)速傳感器等等,接觸開關(guān)以及

相類似的應(yīng)用場合。其工作電壓比較寬(2.5~20V,可運行在較大的溫度范圍內(nèi)(-20℃~125℃, 其輸出的信號符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機的IO 端口上,而且其最高檢測頻率可達(dá)到1MHZ。

霍爾傳感器的特性如圖3-4所示,其中BOP為工作點“開”的磁感應(yīng)強度, BRP為釋放點“關(guān)”的磁感應(yīng)強度。當(dāng)外加的磁感應(yīng)強度超過動作點BOP時,傳

感器輸出低電平,當(dāng)磁感應(yīng)強度降到動作點BOP以下時,傳感器輸出電平不變,一直要降到釋放點BRP時,傳感器才由低電平躍變?yōu)楦唠娖健OP與BRP之間的滯后使開關(guān)動作更為可靠。

U18集成霍耳開關(guān)由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個基本部分組成。

在輸入端輸入電壓VCC,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍爾電勢差VH輸出,該VH信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當(dāng)施加的磁場達(dá)到工作點(即Bop時,觸發(fā)器輸出高電壓(相對于地電位,使三極管導(dǎo)通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動作。

圖3-4 U18霍爾傳感器和其輸出特性

U18霍爾傳感器有3個外接口,2個是電源的正負(fù)極接口,最后一個是脈沖信號輸出口,只要將霍爾傳感器的信號輸出端接到單片機的端口上便可以實現(xiàn)距離檢測。

其中,單片機的P3.2(INT0引腳作為信號的輸入端,采用外部中斷0進(jìn)行計數(shù)。車輪每轉(zhuǎn)一圈,霍爾傳感器就產(chǎn)生一個脈沖信號,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,霍爾傳感器的輸出端輸出低電平。當(dāng)車輪轉(zhuǎn)動一圈時小磁鐵提供一個磁場,則霍爾傳感器輸出一次低電平完成一次數(shù)據(jù)采集,從而產(chǎn)生信號。霍爾傳感器檢測并輸出信號到單片機的INT0或INT1計算脈沖輸入端, 引起單片機的中斷,對脈沖計數(shù),當(dāng)計數(shù)達(dá)到特定的次數(shù)時,里程就會增加,單片機對里程進(jìn)行計算后,通過接口電路將計算好的結(jié)果傳送到數(shù)碼管并顯示出來。

3.3 按鍵單元

本設(shè)計的按鍵單元電路(如圖3-5有5個按鍵,功能分別是:S1是空車時查詢上次金額和里程以及等待時間,結(jié)賬時查詢本次金額和里程以及等待時間;S2功能鍵,不按時空車指示燈亮而且數(shù)碼管顯示實時時間,按下時可設(shè)置單雙程,此時再按S3可進(jìn)行單程和雙程之間切換,再按S1可確認(rèn)單雙程,雙程時雙程指示燈亮并開始計價;按下S4可對本次金額、里程以及等待時間進(jìn)行查詢;S5為清零鍵,按下時清零之前數(shù)據(jù)消除以及存儲本次信息。

圖3-5 按鍵單元電路 3.4 時鐘單元

本設(shè)計采用基于DS1302的時鐘電路(如圖3-6對時間進(jìn)行實時顯示,單片機掉電對其沒有影響。用數(shù)碼管表現(xiàn)出來,當(dāng)出租車空車時就顯示時間,給人時間提示。

圖3-6 時鐘電路單元 3.5 顯示單元

本設(shè)計顯示單元包括兩部分:數(shù)碼管顯示(圖3-7和二極管指示顯示(圖3-8。數(shù)碼管顯示部分使用兩個四位一體的LED數(shù)碼管,LED顯示器是由LED發(fā)光二極管發(fā)展過來的一種顯示器件,是發(fā)光二極管的改型。LED是發(fā)光二極管的簡稱,是一種將電能轉(zhuǎn)換成光能的設(shè)備。本身也是一種光源。LED顯示器是由發(fā)光二極管排列組成的顯示器件。它采用低電壓掃描驅(qū)動,具有:耗電少、使用壽命長、成本低、故障少、視角大、可視距離遠(yuǎn)等特點。此外,它的響應(yīng)時間短(一般不超過0.1us,亮度也比較高。它的缺點是工作電流比較大,每一段的工作電流在10mA左右。

其中每位數(shù)碼管是由8個發(fā)光二極管演變而來,其中7個發(fā)光二極管構(gòu)成7筆字形,另一個構(gòu)成小數(shù)點,稱為8段LED。8段LED數(shù)碼管是利用7個LED(發(fā)光二極管外加一個小數(shù)點的LED組合而成的顯示設(shè)備,可以顯示0~9等10個數(shù)字和小數(shù)點,使用非常廣泛,它的外觀如圖3-9所示:

圖3-9 8段數(shù)碼管

這類數(shù)碼管可以分為共陽極(8個發(fā)光二極管的陽極接在—起與共陰極(8 個發(fā)光二極管陰極連在一起兩種,共陽極就是把所有LED的陽極連接到共同接點,而每個LED的陰極分別為a、b、c、d、e、f、g及dp(小數(shù)點;共陰極則是把所有LED的陰極連接到共同接點,而每個LED的陽極分別為a、b、c、d、e、f、g及dp(小數(shù)點,如圖3-10所示。

圖3-10 共陽和共陰數(shù)碼管結(jié)構(gòu)

通過控制這個公共端,可使該位亮或暗。如共陰極端接地或共陽極接高電平,則該位顯示器有效,反之無效。本設(shè)計采用共陰LED數(shù)碼管。

數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種,這里采用動態(tài)顯示。它具有低功耗、接口少等特點。如圖3-7兩個四位一體數(shù)碼管接P0口作為段選,接P2口作為位選。空車時顯示時間,開始計價時前四位顯示路程,后四位顯示價錢。當(dāng)查詢等待時間時顯示為等待時間。

圖3-7顯示單元(數(shù)碼管顯示部分

二極管指示部分包括空車指示燈、等待時間查詢指示、開始計時指示和雙程指示如圖3-8。這些指示燈能對出租車的每一種狀態(tài)進(jìn)行指示,空車時空車指示燈亮,查詢等待時間時等待時間查詢指示燈亮,當(dāng)汽車速度小于5km/h 時開始計時,計時指示燈亮。計價前如果按下雙程鍵雙程指示燈亮,表示為雙程。

圖3-8 顯示單元(二極管指示部分 3.6 儲存單元

存儲單元的作用是儲存上一次的里程、金額和等待時間。AT24C02 是Atmel 公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V,芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。

圖3-11儲存單元電路

圖中R3、R4 是上拉電阻,其作用是減少AT24C02 的靜態(tài)功耗。由于AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(時鐘脈沖和SDA(數(shù)據(jù)/地址與單片機P3.3和P3.4口連接,進(jìn)行傳送數(shù)據(jù)。軟件設(shè)計

本系統(tǒng)的軟件設(shè)計主要分為系統(tǒng)主程序、數(shù)據(jù)處理子程序、等待時間及時子程序和鍵盤掃描子程序五個模塊,下面對每一塊進(jìn)行介紹。

4.1 系統(tǒng)主程序

本設(shè)計中,軟件設(shè)計采用模塊化操作,利用各個模塊之間的相互聯(lián)系,在設(shè)計中采用主程序調(diào)用各個子程序的方法,使程序通俗易懂,我們設(shè)計了整體程序流程圖。

在main函數(shù)編寫開始,要進(jìn)行初始化,包括對系統(tǒng)初始化和對硬件設(shè)備進(jìn)行初始化,并使硬件處于就緒狀態(tài)。

在主程序模塊中,需要完成對各接口芯片的初始化、出租車起價和單價的初始化、中斷向量的設(shè)計以及開中斷、循環(huán)等待等工作。系統(tǒng)流程圖如下圖4-1。

開始 初始化 數(shù)據(jù)處理 鍵盤掃描 結(jié)束

圖4-1系統(tǒng)主程序流程圖 4.2 數(shù)據(jù)處理子程序

每當(dāng)霍爾傳感器輸出一個低電平信號就使單片機中斷一次,在計數(shù)中斷服務(wù)程序,里程和金額都相應(yīng)變化,當(dāng)然等待時間也換算成里程(當(dāng)速度小于5km/h 時5分鐘想當(dāng)于1公里。計算程序根據(jù)里程數(shù)分別進(jìn)入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:金額=(里程-3*單價+5;否則,執(zhí)行公式:總金額=起步價。程序流程圖如圖4-2所示。

計算里程 開始

里程<3公里否是

金額=5元金額=單價*(里程-3+5 顯示金額

結(jié)束

圖4-2 數(shù)據(jù)處理子程序流程圖 4.3 等待時間計時子程序

當(dāng)出租車的速度5km/h時等待時間開始計時,并被換算里程,進(jìn)行計算顯示等待時間和金額。當(dāng)結(jié)算時停止計時和計費并顯示金額,當(dāng)有查詢鍵按下時顯示等待時間,當(dāng)有清零鍵按下時存儲本次金額。如圖4-3: 開始

結(jié)算鍵按下?Speed<5公里/ 小時?開始計時,并顯示Speed>5公里/ 小時?停止計時,開始計 路程 否 是

停止計時,計費,顯示金額 查詢鍵按下? 存儲本次金額 是清零鍵按下? 是 否

顯示等待時間

圖4-3等待時間計時子程序 4.4 鍵盤掃描子程序

鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時候,單片機循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。流程圖如圖4-4。

開始 功能鍵按下? 單雙程設(shè)置 切換鍵按下? 切換單雙程 確認(rèn)鍵按下? 空車指示滅,開始計價計時,顯示里 程,價格 結(jié)算鍵按下? 結(jié)算金額顯示 是 是 是 是

否 顯示時間 否 否 否

查詢鍵按下? 顯示等待時間與里 程

清零鍵按下?存儲金額 是 否 是否 按下兩次? 是

查詢鍵按下? 顯示上次金額 是

圖4-4 鍵盤掃描子程序 5 Proteus軟件仿真

本設(shè)計需要用Keil uVision3對C51程序進(jìn)行編譯,生成“.hex”文件,如圖5-1 :

圖5-1 Keil uVision3編譯

在Proteus軟件中畫出仿真電路(如圖5-2,把Keil uVision3編譯后生成的“.hex”導(dǎo)入到單片機中,按“運行仿真”鍵進(jìn)行仿真。

圖5-2Proteus仿真 總結(jié)

總結(jié)在本次設(shè)計中,我們采用AT89S52芯片為核心器件,設(shè)計出了簡單的出租車計價器,能夠?qū)崿F(xiàn)顯示時間、等待時間、金額和里程,按鍵控制,空車指示。

選題后,我們便開始復(fù)習(xí)單片機方面的知識,也查閱、搜索了很多相關(guān)資料,進(jìn)行總體設(shè)計與具體設(shè)計,同時也學(xué)習(xí)仿真軟件Proteus和編程軟件Keil uVision3。由于以前都采用匯編語言實現(xiàn)編程,對用C語言來實現(xiàn)單片機的編程不太習(xí)慣,花費了一些時間來熟悉C語言的編程。在設(shè)計開始,要形成流程圖,它可以使設(shè)計有一定的邏輯性與嚴(yán)密性,使得設(shè)計思路明確。采用模塊化的設(shè)計思想很重要,它方便編寫、修改與調(diào)試,另外加上必要的注釋,便于交流與理解。

這次課程設(shè)計設(shè)計完成后,體會頗多,在學(xué)與做的過程中,取長補短,不斷學(xué)習(xí)新的知識,吸取經(jīng)驗,達(dá)到進(jìn)步的目的。通過自身的努力以及相關(guān)圖書資料的幫助,逐漸熟

悉了Keil uVision3、PROTEUS和C語言等軟件的使用以及硬件焊接與檢測過程中的一些小技巧。本次設(shè)計我學(xué)習(xí)到不少單片機的知識,但由于自己的理論知識水平有限,實踐知識和設(shè)計經(jīng)驗不足,在設(shè)計過程中難免存在一些問題。所焊實物尚有許多不足,個別功能還不能很好的實現(xiàn),主要原因是考慮問題不周全,電路設(shè)計經(jīng)驗少,實際動手能力不足。懇請各位老師批評指正,以使我在以后的學(xué)習(xí)和實踐中加以改進(jìn)和提高。

致謝

畢業(yè)設(shè)計即將結(jié)束,在老師的指導(dǎo)和同學(xué)的幫助之下,學(xué)生對于出租車計價器設(shè)計有了更多新的認(rèn)知,對出租車計價器設(shè)計有了更深一步的認(rèn)識,對出租車計價器綜合設(shè)計的整體脈絡(luò)了解得更加的清晰透徹。通過畢業(yè)設(shè)計,學(xué)生對自己三年以來所學(xué)的知識有更多的認(rèn)識。

畢業(yè)設(shè)計,幫助我們總結(jié)大學(xué)的收獲、認(rèn)清自我。同時,還幫助我們改變一些處理事情時懶散的習(xí)慣。從最開始時的搜集資料,整理資料,到方案比選,確定方案,再到著手開始設(shè)計,每一步都是環(huán)環(huán)相扣,銜接緊密,其中任何一個步驟產(chǎn)生遺漏或者疏忽,就會對以后的設(shè)計帶來很多的不便。

本次作者的畢業(yè)設(shè)計是由徐老師指導(dǎo)的,在他的悉心指導(dǎo)下,我開闊了眼界,明確了思路。在整個的設(shè)計過程中,徐老師提出了許多寶貴的建議和指導(dǎo),使我能夠順利的完成整個設(shè)計,在此,謹(jǐn)向徐老師表示由衷的感謝。

在即將離開學(xué)校之際,我要感謝在大學(xué)生活中任課的眾多老師,正是在他們的諄諄教誨下使我順利完成了大學(xué)的基礎(chǔ)知識和專業(yè)知識的學(xué)習(xí)。在此,還要感謝陪伴我共同走過大學(xué)時代并給予我?guī)椭耐瑢W(xué)和朋友們,感謝你們,祝福你們在以后的日子里開開心心的度過每一天!參考文獻(xiàn)

1.戴佳, 陳斌, 苗龍.51單片機應(yīng)用系統(tǒng)開發(fā)典型實例.中國電力出版社,2005

2.余發(fā)山,王福忠.單片機原理及應(yīng)用技術(shù).中國礦業(yè)大學(xué)出版社, 2008.6 3.侯玉寶, 陳忠平, 李成群.基于Proteus的51系列單片機設(shè)計與仿真.電子工業(yè)出版社,2008 4.李玉梅.基于MCS-51系列單片機原理的應(yīng)用設(shè)計.國防工業(yè)出版社,2006 5.邊春元, 李文濤, 江杰.C51單片機典型模塊設(shè)計與應(yīng)用.機械工業(yè)出版社,2008 6.樓然苗,胡佳文,李光飛等.單片機實驗與課程設(shè)計.浙江大學(xué)出版社,2010.10 常州機電職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計報告 附

1、系統(tǒng)原理圖、25

第三篇:單片機出租車計價器源程序

出租車計價器設(shè)計與制作

設(shè)計并制作一臺出租車計價器。調(diào)試時采用10Hz方波信號模擬,每個方波代表10m。基本要求:

(1)不同情況具有不同的收費標(biāo)準(zhǔn)

白天 1元/公里 晚上 2元/ 公里 途中等待(30s)1元/30s

(2)數(shù)據(jù)輸出(6位LED數(shù)碼管顯示)

單價輸出2位 路途輸出2位 總金額輸出2位

(3)按鍵(3個)

啟動計價開關(guān) 數(shù)據(jù)復(fù)位(清零)白天/晚上轉(zhuǎn)換

3.4.1模塊1:系統(tǒng)設(shè)計

(1)分析任務(wù)要求,寫出系統(tǒng)整體設(shè)計思路

通過分析,需要實現(xiàn)四個主要的功能模塊,分別為脈沖計數(shù)模塊、定時器計時模塊、按鍵的處理以及

數(shù)碼管動態(tài)掃描等功能。

定時器計時模塊主要完成途中等待(即沒有脈沖來時)30秒的計時。在啟動鍵按下后,定時器就不停的計時,只要有脈沖來就將計時的值清除為零。如果沒有脈沖來,當(dāng)計時超過30秒時,相應(yīng)的總金額要

按照收費標(biāo)準(zhǔn)計價。

中斷的管理:盡管中斷有嵌套以及優(yōu)先級的功能,但是由于定時器已經(jīng)使用一個了中斷資源,脈沖檢測不宜再采用中斷方式,而是采用查詢方式。由于需要不停的要清除30秒的計時,因此,脈沖的計數(shù)不

采用定時器的計數(shù)方式。

啟動鍵觸發(fā)定時器開始工作,而定時器的運行可以作為脈沖計數(shù)的標(biāo)志,只要定時器計時在運行,每來一個中斷都應(yīng)該計數(shù)。

主程序完成鍵盤的掃描和按鍵的處理,查詢脈沖產(chǎn)生的中斷,并完成脈沖的計數(shù)。每個脈沖代表10米,則當(dāng)計數(shù)到100時表示1千米的距離,相應(yīng)的總金額要按照收費標(biāo)準(zhǔn)計價

(2)選擇單片機型號和所需外圍器件型號,設(shè)計單片機硬件電路原理圖

采用MCS51系列單片機At89S51作為主控制器,外圍電路器件包括數(shù)碼管驅(qū)動、獨立式鍵盤、復(fù)位電

路等。硬件電路原理圖如圖3-9所示。

圖3-11 出租車計價器的硬件電路原理圖

數(shù)碼管驅(qū)動采用2個四聯(lián)共陰極數(shù)碼管顯示,由于單片機驅(qū)動能力有限,采用74HC244作為數(shù)碼管的驅(qū)動。在74HC244的7段碼輸出線上串聯(lián)100歐姆電阻起限流作用。

獨立式按鍵使用上提拉電路連接,在沒有鍵按下時,輸出高電平。P0口用于輸出7段LED共陰極顯示代碼,P2口用于輸出低電平有效的位選碼。0~9的7段LED共陰極顯示代碼:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。

(3)分析軟件任務(wù)要求,寫出程序設(shè)計思路,分配單片機內(nèi)部資源,畫出程序流程圖

軟件的任務(wù)要求包括定時器的設(shè)置、按鍵的掃描、按鍵的功能處理、脈沖的計數(shù)、路途等待超30秒的計

時以及總金額的計算等。

程序設(shè)計的思路:使用中斷方式對定時器的溢出進(jìn)行計數(shù)實現(xiàn)30秒的計時。主程序采用查詢外部中斷標(biāo)志實現(xiàn)脈沖的計數(shù),由于每個脈沖代表10m,因此,當(dāng)脈沖計數(shù)超過100時,計價器按照收費標(biāo)準(zhǔn)計價。主程序在初始化變量和定時器參數(shù)設(shè)置之后,進(jìn)入一個循環(huán)結(jié)構(gòu),循環(huán)掃描鍵盤、查詢脈沖的中斷、數(shù)碼管的動態(tài)掃描等功能,當(dāng)脈沖的中斷標(biāo)志被查詢到,若路途等待時間未超30秒時,要及時將路途等待時間的值清除為零。主程序的流程圖如圖3-12所示。

圖3-12 出租車計價器的主程序流程圖

中斷服務(wù)程序主要實現(xiàn)計時功能,當(dāng)啟動鍵按下之后,定時器開始工作,用一個變量對定時器溢出中斷的次數(shù)進(jìn)行計數(shù),達(dá)到計時功能,該變量在每次脈沖到來時被清零(在主程序中清零),當(dāng)脈沖長時間沒有來,則當(dāng)該變量計數(shù)超過30秒時,總金額按照途中等待計費標(biāo)準(zhǔn)進(jìn)行計價。中斷程序的流程圖如圖

3-13所示。

圖3-13 出租車計價器的中斷服務(wù)程序流程圖

(4)設(shè)計系統(tǒng)軟件調(diào)試方案、硬件調(diào)試方案及軟硬件聯(lián)合調(diào)試方案

軟件調(diào)試方案:偉福軟件中,在“文件新建文件”中,新建C語言源程序文件,編寫相應(yīng)的程序。在“文件新建項目”的菜單中,新建項目并將C語言源程序文件包括在項目文件中。

在 “項目編譯”菜單中將C源文件編譯,檢查語法錯誤及邏輯錯誤。在編譯成功后,產(chǎn)生以 “*.hex”和“*.bin” 后綴的目標(biāo)文件。

硬件調(diào)試方案:在設(shè)計平臺中,將單片機的P1.0-P1.2分別與3個獨立式鍵盤通過插線連接起來,將P3.2與脈沖信號源連接起來。

在偉福中將程序文件編譯成目標(biāo)文件后,將下載線安裝在實驗平臺上,運行“MCU下載程序”,選擇相應(yīng)的flash 數(shù)據(jù)文件,點擊“編程”按鈕,將程序文件下載到單片機的Flash中。

然后,上電重新啟動單片機,檢查所編寫的程序是否達(dá)到題目的要求,是否全面完整地完成試題的內(nèi)容。3.4.2 程序設(shè)計

/*晶振:11.0592M T1-250微秒溢出中斷一次;P3.2(int0)-中斷100次,查詢IE0置位,P1^0為啟動鍵;P1^1為清除鍵;P1^2為白天/晚上的切換鍵 變量的定義: key_val: 返回按鍵的值 255-無鍵

T1_cnt: 定時器溢出數(shù)計數(shù)

cnt_30: 30秒鐘的計時

cnt_distance: 計算路程

cnt_cost: 總金額

state_val: 狀態(tài):0-白天 1 夜晚

cost_val[3]: 收費標(biāo)準(zhǔn):白天單價cost_val[0]=1元/公里;晚上單價cost_val[1]=2元/公里; 等待單價cost_val[2]=1元/30s

led_seg_code:數(shù)碼管7段碼 */ //-------------------#include “reg51.h” unsigned char data cnt_30,cnt_distance,cnt_cost;unsigned int data T1_cnt,D_cnt;unsigned char data key_val,key_val_old;unsigned char data state_val;char code cost_val[3]={1,2,1};char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//led_seg_code[0-9]代表0-9 //-------延時-----------------void delay(unsigned int i)//延時 { while(--i);} //-------初始化變量------------------void init_variant()//初始化一些變量的內(nèi)容 {unsigned char i;cnt_30=0;//30秒的計時 D_cnt=0;//脈沖的個數(shù) cnt_distance=0;//距離的計數(shù)

cnt_cost=0;//保存總價格 } //-------掃描鍵盤-----------------unsigned char scan_key(){ unsigned char i,k;i=P1;if(i==0xff){ k=255;} //無鍵按下

else //有鍵按下

{ delay(10);//延時去抖動

if(i!=P1){k=255;} else { switch(i){ case 0xfe: k=0;break;//P1.0按下,啟動鍵

case 0xfd: k=1;break;//P1.1按下,清除鍵

case 0xfb: k=2;break;//P1.2按下,切換鍵

} } } return k;} //-------數(shù)碼管動態(tài)掃描-------------void led_show(){unsigned char i,k;

//-----顯示單價----k=cost_val[state_val];i=k%10;//暫存?zhèn)€位 P0=led_seg_code[i];P2=0xbf;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0x7f;delay(10);//-----顯示距離------k=cnt_distance;i=k%10;//暫存?zhèn)€位 P0=led_seg_code[i];P2=0xf7;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xef;delay(10);//-----顯示總價格-----------k=cnt_cost;i=k%10;//暫存?zhèn)€位 P0=led_seg_code[i];P2=0xfe;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xfd;delay(10);} //-------計時----------------void timer1()interrupt 3 //T1中斷 { T1_cnt++;if(T1_cnt>3999)//如果計數(shù)>3999, 計時1s { T1_cnt=0;if(cnt_30<30)//沒有超過30秒,繼續(xù)計時

{cnt_30++;} else //超過30秒,途中等待計價

{cnt_30=0;cnt_cost=cnt_cost+cost_val[2];} } } //---------主程序----------------

main(){//初始化各變量 T1_cnt=0;state_val=0;key_val_old=255;init_variant();//初始化51的寄存器

TMOD=0x20;//用T1計時 8位自動裝載定時模式,不用T0 TH1=0x19;//250微秒溢出一次;250=(256-x)*12/11.0592-> x= 230.4 TL1=0x19;EA=1;//開中斷 ET1=1;

TR1=0;//定時器T0 TCON=0x01;//Int0中斷取邊沿觸發(fā)模式 while(1){ key_val=scan_key();// 255;// if(key_val!=key_val_old){ key_val_old=key_val;if(key_val!=255){ switch(key_val){ case 0: //啟動鍵

TR1=1;//啟動計時,TR1=1為啟動了的標(biāo)志

break;case 1: //清除鍵

init_variant();//清除變量

TR1=0;//關(guān)閉定時器

break;case 2: //白天/黑夜的切換

if(state_val==0){state_val=1;} else {state_val=0;} break;} } } if(IE0==1&& TR1==1)//每來1個脈沖,中斷一次

{ IE0=0;cnt_30=0;//30秒的計時清零

if(D_cnt<100)

{D_cnt++;} else //計數(shù)100次,每次10米,表示一公里

{D_cnt=0;cnt_distance=cnt_distance+1;

cnt_cost=cnt_cost+cost_val[state_val];} } led_show();} } //-----出租車計價器程序結(jié)束------------

第四篇:出租車計價器 硬件課程設(shè)計

硬件課程設(shè)計報告

題目:出租車計價器

目錄

1. 引言....................................................................................................................................錯誤!未定義書簽。

1.1設(shè)計目的................................................................................................................錯誤!未定義書簽。1.2設(shè)計任務(wù)................................................................................................................錯誤!未定義書簽。1.3設(shè)計思路................................................................................................................錯誤!未定義書簽。

2.需求分析.............................................................................................................................錯誤!未定義書簽。

2.1芯片原理................................................................................................................錯誤!未定義書簽。2.1.1可編程計數(shù)器/定時器8253/8254原理.............................................................錯誤!未定義書簽。2.1.2可編程外圍接口芯片8255原理.......................................................................錯誤!未定義書簽。2.1.3 12864液晶顯示器ST7920原理........................................................................錯誤!未定義書簽。2.2硬件設(shè)計................................................................................................................錯誤!未定義書簽。2.3軟件設(shè)計................................................................................................................錯誤!未定義書簽。2.3.1功能模塊圖.........................................................................................................錯誤!未定義書簽。2.3.2程序流程圖.........................................................................................................錯誤!未定義書簽。2.3.3模塊流程圖.........................................................................................................錯誤!未定義書簽。

3.詳細(xì)設(shè)計.............................................................................................................................錯誤!未定義書簽。

3.1程序模塊分析........................................................................................................錯誤!未定義書簽。3.1.1初始化模塊程序分析.........................................................................................錯誤!未定義書簽。3.1.2判斷開關(guān)程序模塊分析.....................................................................................錯誤!未定義書簽。3.1.3圈數(shù)統(tǒng)計模塊程序分析.....................................................................................錯誤!未定義書簽。3.1.4計算里程模塊程序分析.....................................................................................錯誤!未定義書簽。3.1.5顯示模塊程序分析.............................................................................................錯誤!未定義書簽。3.1.6結(jié)束模塊程序分析.............................................................................................錯誤!未定義書簽。3.2程序代碼................................................................................................................錯誤!未定義書簽。

4.5.6.程序結(jié)果.............................................................................................................................錯誤!未定義書簽。分析與測試.........................................................................................................................錯誤!未定義書簽。體會.....................................................................................................................................錯誤!未定義書簽。

附錄A:參考文獻(xiàn).....................................................................................................................錯誤!未定義書簽。

一、引言

1.1設(shè)計目的

現(xiàn)在各大城市出租車已經(jīng)成為了一種重要的交通工具,當(dāng)然出租車的收費問題也成了人們關(guān)注的焦點,那么怎么樣才能實現(xiàn)一種合理的收費方式讓大家都認(rèn)可呢?在這種要求下,出租車自動計價器就走進(jìn)了人們的生活,當(dāng)然這就要求有一種合理公正的計價器收費方式。這不僅關(guān)系到出租車計價器的市場,也影響這出租車的市場,這就要求我們設(shè)計出更好的計價器來滿足人們的需求。

本設(shè)計是關(guān)于出租車計價器的設(shè)計。在本次設(shè)計中,我以計價器的基本功能作為設(shè)計的重點。為了完成上述設(shè)計,我們采用了8254、8255等芯片,用計算機匯編語言進(jìn)行軟件功能的實現(xiàn)。

1.2設(shè)計任務(wù)

1.實現(xiàn)一個出租車計價器,可以顯示起步價。2.一個鍵來控制是否到達(dá)終點,是否計價要清零。3.基于路程的出租車計價方式。

1.3設(shè)計思路

利用直流電機來模仿出租車輪子的轉(zhuǎn)動來計算出租車行進(jìn)的路程。將直流電機的直流端與滑動變阻器相連,通過人工控制滑動變阻器來模擬出租車的行進(jìn);并將計數(shù)端與8253CLK0端相連,GATE0接高電平,工作方式為方式二。直流電機每轉(zhuǎn)1000圈,8253輸出一個高電平,假設(shè)出租車已經(jīng)走了1公里。同時將8253OUT0接入8255方便CPU讀取。再將8255與ST7920顯示器相連,CPU通過控制8255來控制顯示,一旦8255從8253讀入一個高電平,則公里數(shù)加一,同時價格相應(yīng)增加。另有一個開關(guān)連入8255,用以判斷出租車計價器是否啟動。

二、需求分析

2.1芯片原理

本節(jié)主要在介紹本次設(shè)計所用到的芯片的原理,共有可編程計數(shù)器/定時器8253/8254、可編程外圍接口芯片8255和12864液晶顯示器ST7920原理三種芯片。

2.1.1可編程計數(shù)器/定時器8253/8254原理

圖2-1 8254內(nèi)部結(jié)構(gòu)圖

從圖2-1可見,8254內(nèi)部包含數(shù)據(jù)總線緩沖器、讀/寫控制邏輯、控制字寄存器和3個結(jié)構(gòu)完全相同的計數(shù)器,這3個計數(shù)器分別稱為計數(shù)器0、計數(shù)器1和計數(shù)器2。

圖2-2 8254管腳圖

A1、A0:地址輸入線,用來控制8253內(nèi)部的4個端口,即3個計數(shù)器和1個控制字寄存器與CPU系統(tǒng)地址線相連。

CLK0-2:時鐘脈沖輸入端,用于輸入定時脈沖或計數(shù)脈沖信號。CLK可以是系統(tǒng)的時鐘脈沖,也可以由系統(tǒng)時鐘分頻或者其他脈沖源提供。當(dāng)用于定時時,這個脈沖必須是均勻的、連續(xù)的、周期精確的,而用于計數(shù)時,這個脈沖可以是不均勻的、斷續(xù)的、周期不定的。

GATE0-2:門控輸入端,用于外部控制計數(shù)器的啟動計數(shù)和停止計數(shù)的操

作。兩個或兩個以上計數(shù)器連用時,可用此信號同步,也可用于與外部某信號的同步。

OUT0-2:計數(shù)輸出,當(dāng)計數(shù)器從初值開始完成計數(shù)操作進(jìn),OUT引腳輸出相應(yīng)的信號。

8253的方式控制字

圖2-3 8254控制字圖

本設(shè)計中8254的功能

只是用通道1,采用方式三。采用二進(jìn)制計數(shù),輸入0FFFH。先輸入低字節(jié),再輸入高字節(jié)。當(dāng)8254從0FFFFH遞減到159FH時(即轉(zhuǎn)了60000圈時),8254向總線發(fā)信號使程序向下進(jìn)行。

2.1.2可編程外圍接口芯片8255原理

內(nèi)部結(jié)構(gòu)如圖所示,由以下4個部分組成:

圖2-4 8255內(nèi)部結(jié)構(gòu)圖

(1)輸入/輸出端口A、B、C。這三個端口均可看作是I/O端口,但它們的結(jié)構(gòu)和功能也稍有不同。A口和B口是一個獨立的8位I/O口。C口:可以看作是一個獨立的8位I/O口;也可以看作是兩個獨立的4位I/O口。

(2)A組和B組控制電路。這是兩組根據(jù)CPU命令控制8255A工作方式的電路,這些控制電路內(nèi)部設(shè)有控制寄存器,可以根據(jù)CPU送來的編程命令來控制8255A的工作方式,也可以根據(jù)編程命令來對C口的指定位進(jìn)行置/復(fù)位的操作。A組控制電路用來控制A口及C口的高4位;B組控制電路用來控制B口及C口的低4位

(3)讀/寫控制邏輯。(同上:它負(fù)責(zé)管理8255A的數(shù)據(jù)傳輸過程。它接收CS*及RD*、WR*、RESET,還有來自系統(tǒng)地址總線的口地址選擇信號A0和A1。將這些信號組合后,得到對A組控制部件和B組控制部件的控制命令,并將命令發(fā)給這兩個部件,以完成對數(shù)據(jù)、狀態(tài)信息和控制信息的傳輸。)

(4)數(shù)據(jù)總緩沖器。(同上:它是8位的雙向的三態(tài)緩沖器。作為8255A與系統(tǒng)總線連接的界面,輸入/輸出的數(shù)據(jù),CPU的編程命令以及外設(shè)通過8255A傳送的工作狀態(tài)等信息,都是通過它來傳輸?shù)摹#?/p>

如圖所示8255A的芯片引腳信號。除了電源和地以外,其他信號可以分為兩組:

圖2-5 8255管腳圖

1.和外設(shè)一邊相連的: PA7-PA0:A組數(shù)據(jù)信號

PB7-PB0:B組數(shù)據(jù)信號 PC7-PC0:C組數(shù)據(jù)信號 2.和CPU一邊相連的:

RESET:復(fù)位信號,低電平有效。當(dāng)RESET信號來到時,所有內(nèi)部寄存器就被清除,同時,3個數(shù)據(jù)端口被自動設(shè)為輸入端口。

D7-D0:它們是8255A的數(shù)據(jù)線,和系統(tǒng)數(shù)據(jù)總線相連。

CS*:芯片選擇信號,低電平有效。在一個系統(tǒng)中,一般根據(jù)全部接口芯片來分配若干較低位地址(比如A5、A4、A3)來組成各種芯片選擇碼,當(dāng)這幾位地址組成某一個代碼時,譯碼器便往8255A的CS*端輸出一個低電平,于是8255A被選中。只有當(dāng) CS*有效時,讀信號RD*和寫信號WR*才對8255A有效。

RD*:芯片讀出信號低電平有效。WR*:芯片寫入信號低電平有效。8255的方式控制字格式

圖2-6 8255控制字圖

本設(shè)計中8255的功能

8255PA0-PA7和PC0-PC2與ST7920相連,控制輸出。PB0與8253的OUT1相連,讀入8253OUT1 的數(shù)據(jù)。PB1與開關(guān)K0相連,讀入K0的數(shù)值用于確定是否開啟計價器。

2.1.3可編程外圍接口芯片8255原理

ST7920控制器系列中文圖形液晶模塊的軟件特性主要由ST7920控制驅(qū)動器決定。ST7920同時作為控制器和驅(qū)動器,它可提供33路com輸出和64路seg輸出。在驅(qū)動器ST7921的配合下,最多可以驅(qū)動256×32點陣液晶。

ST7920是臺灣矽創(chuàng)電子公司生產(chǎn)的中文圖形控制芯片,它是一種內(nèi)置12864漢字圖形點陣的液晶顯示控制模塊,用于顯示漢字及圖形。該芯片共內(nèi)置8192

個中文漢字(16×16點陣)、128個字符的ASCII字符庫(8×16點陣)及64×2256點陣顯示RAM(GDRAM)。

為了能夠簡單、有效地顯示漢字和圖形,該模塊內(nèi)部設(shè)計有2MB的中文字型CGROM和64×256點陣的GDRAM繪圖區(qū)域;同時,該模塊還提供有4組可編程控制的16×16點陣造字空間;除此之外,為了適應(yīng)多種微處理器和單片機接口的需要,該模塊還提供了4位并行、8位并行、2線串行以及3線串行等多種接口方式。利用上述功能可方便地實現(xiàn)漢字、ASCII碼、點陣圖形、自造字體的同屏顯示,所有這些功能(包括顯示RAM、字符產(chǎn)生器以及液晶驅(qū)動電路和控制器)都包含在集成電路芯片里,因此,只要一個最基本的微處理系統(tǒng)就可以通過ST7920芯片來控制其它的芯片

圖2-7 ST7920外觀尺寸圖

本設(shè)計中ST7920的功能

用于顯示出租車行駛路程與應(yīng)收費用。

2.2硬件設(shè)計

其中,8253GATE1連+5V高電平,直流電機連0~+5V,8253連280h~287h,8255連288h~28fh。8255PA0-PA7連ST7920顯示器D0-D7,PC0連DI,PC1連RW,PC2連E。開關(guān)K0連8255PB0。8253CLK1連直流電機計數(shù)端。

0~+5V直流電機D0-D7計數(shù)ST7920顯示屏DIRWE+5VGATE1CLK1PA0-PA7+5VPC0PC1PC2開關(guān)K0PB0+5V8253CS8255CS280H-288H289H-28FH總線圖2-8硬件連接圖

實際連接圖如下圖所示

圖2-9硬件實際連接圖

2.3軟件設(shè)計 2.3.1功能模塊圖

本節(jié)先給出一個程序的功能模塊圖。

出租車計價器系統(tǒng)計價器開關(guān)功能模塊讀入直流電機轉(zhuǎn)圈數(shù)模塊ST7920顯示功能模塊根據(jù)里程計算價格模塊

圖2-10軟件功能模塊圖

2.3.2程序流程圖

本節(jié)先給出一個程序的整體流程圖。

開始結(jié)束8253初始化液晶顯示屏初始化8255初始化是計價器是否開始工作通過8255讀入b0否是否有鍵盤輸入否液晶顯示屏初始化是液晶顯示屏調(diào)用顯示價格功能從直流電機讀入輸入圈數(shù)將更改過的路程在顯示器中顯示出來讀到一定圈數(shù)走的路程加一比較路程是否大于3公里是價格為(路程-3)*2+7 元將儲存的顯示字符串內(nèi)路程價格改為目前路程價格否價格為7元

圖2-11軟件程序流程圖

2.3.3模塊流程圖

如果對整個程序進(jìn)行細(xì)分則可以分為初始化模塊,判斷開關(guān)模塊,圈數(shù)統(tǒng)計模塊,計算里程模塊、結(jié)束模塊和顯示模塊。其中初始化模塊是8253芯片、8255芯片和顯示屏的初始化。判斷開關(guān)模塊是對8255的b0端是否有高電平進(jìn)行判斷。

圈數(shù)統(tǒng)計模塊是對直流電機傳入8253中高電平的數(shù)量進(jìn)行圈數(shù)統(tǒng)計。計算里程模塊是對里程及價格進(jìn)行計算的模塊。結(jié)束模塊是程序結(jié)束的操作與方法。顯示模塊是控制顯示屏顯示計算模塊的結(jié)果。

初始化模塊顯示模塊調(diào)用關(guān)判斷開關(guān)模塊開結(jié)束模塊圈數(shù)統(tǒng)計模塊計算里程模塊調(diào)用顯示模塊圖2-12軟件模塊流程圖

三、詳細(xì)設(shè)計

3.1程序模塊分析

我們將按模塊分析程序的功能并給出模塊內(nèi)的功能流程圖。

3.1.1初始化模塊分析

在初始化模塊中,我們定義了需要使用的8255和8254的接口,需要使用的變量如JSS,要輸出的字符串等,初始化了DS,完成了8255的初始化以及顯示屏的初始化。其流程圖為

開始圖3-1初始化模塊流程圖

3.1.2判斷開關(guān)模塊分析

以上為判斷開關(guān)模塊,在判斷開關(guān)模塊中,系統(tǒng)讀入8255PB0的電平,如果是高電平則程序繼續(xù)進(jìn)行,如果是低電平則程序調(diào)用chushi函數(shù),用屏幕顯示“空車歡迎乘坐”,并繼續(xù)度8255PB0直到有高電平為止。其流程圖如下所示:

8255PB0是否為高電平是圈數(shù)統(tǒng)計模塊否Chushi函數(shù)計數(shù)變量和對應(yīng)的字符串置零顯示 空車 歡迎乘坐 調(diào)用顯示模塊

圖3-2判斷開關(guān)模塊流程圖

3.1.3圈數(shù)統(tǒng)計模塊分析

在圈數(shù)統(tǒng)計模塊中,我們將直流電機計數(shù)端連入8254CLK1中(8253采用方式三),在CLK1中讀所記的數(shù),從0FFFFH向下計,一直計到159FH,即轉(zhuǎn)了6000圈后,進(jìn)入程序的下一段。其流程圖如下所示:

讀8254計數(shù)值否是否到159FH以下是重新將8254計數(shù)初值設(shè)為0FFFFH計算里程模塊

圖3-3圈數(shù)統(tǒng)計模塊流程圖

3.1.4計算里程模塊分析

我們用地址JSS里表示已經(jīng)走過的公里,即8254傳過來的高電平,同時我們采用價格公式來計算價格,將其里程和價格對應(yīng)的中文字碼表存入要顯示的字符串中。我們用地址JSS里表示已經(jīng)走過的公里,即8254傳過來的高電平,同時我們采用價格公式來計算價格,將其里程和價格對應(yīng)的中文字碼表存入要顯示的字符串中。

計算公式為: 價格=(里程-3)* 2……(里程>3)

價格= 7…………………..(里程<=3)并調(diào)用顯示模塊來顯示這些字碼其流程圖如下所示:

圈數(shù)統(tǒng)計模塊計數(shù)值JSS加一并十進(jìn)制化里程數(shù)加一里程數(shù)是否是大于3是價格為(里程-3)*2調(diào)用顯示模塊否價格為7

圖3-4計算里程模塊流程圖

3.1.5顯示模塊分析

在顯示模塊中,我們使用ST7920顯示我們要顯示的兩行字符串。我們采取先顯示第一行,再顯示第二行的方法,只是用ST7920的中間兩行。

調(diào)整顯示屏指針指向第二行調(diào)整顯示屏指針指向第三行調(diào)整字符串指針指向第一個字調(diào)整字符串指針指向第九個字輸出輸出延時延時

圖3-5顯示模塊流程圖

3.1.6結(jié)束模塊分析

結(jié)束模塊在程序的尾部在結(jié)束模塊中,我們規(guī)定只要在鍵盤上按任意一個鍵就會結(jié)束整個程序。如果無鍵按下,則程序自動跳轉(zhuǎn)到程序頭部。其程序流程圖如下圖所示:

調(diào)用DOS中斷是否有鍵按下是結(jié)束否判斷開關(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;存放“空車歡迎乘坐”

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

;判斷開關(guān)是否打開 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è)置計數(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

;顯示“空車歡迎乘坐” 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ìn)位

MOV WORD PTR[DI+22],DX

;再計算十位 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

;最后計算百位 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

;加回車符

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

;啟動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顯示屏、直流電機等制作出了一個出租車計價器有專用鍵可以表示是否空車,同時利用直流電機模擬車輪運動,通過路程計算價格,成果如下圖所示:

圖4-1程序結(jié)果圖

五、分析與測試

程序中,我遇到的最大的難題就是如何完成正確的十進(jìn)制計算,因為所有的計算指令都是十六進(jìn)制的,雖然有的計算里有類似AAA這樣的調(diào)整指令,但是很多時候就不一定記得起來加上。同時由于需要根據(jù)數(shù)字來查表對應(yīng)相應(yīng)的字符碼,而且我是建立一個從零到九的數(shù)組,而由于計算錯誤導(dǎo)致經(jīng)常出現(xiàn)亂碼,而且比較難找到相應(yīng)的錯誤。而且有些計算沒有十進(jìn)制轉(zhuǎn)換指令,需要自己編寫。

同時我認(rèn)為我利用提前存儲變量來表示走過的路程比利用堆棧要好,因為堆棧容易記混,而變量有獨特的名字,利于記憶與調(diào)用。而且易于清零、增減。

六、心得體會

這次課程設(shè)計中,令我印象最為深刻的就是我們應(yīng)該有一種堅持的精神,有時候幾個小時都沒有成果,找不到BUG。顯示的就是有問題,這時候我們應(yīng)該有一種堅持下去的毅力,積極詢問老師同學(xué),問題的解決就很快了。

同時我發(fā)現(xiàn)編程習(xí)慣非常重要,應(yīng)該有一個提前的規(guī)劃,不能想到哪寫到哪,這樣的話,后期的DEBUG會非常麻煩,因為自己也看不懂自己的代碼,我們都應(yīng)該有規(guī)范化的代碼意識,這樣的編程能力才能上升。

參考文獻(xiàn)

[1]周荷琴,吳秀清,《微型計算機原理與接口技術(shù)》,合肥:中國科學(xué)技術(shù)大學(xué)出版社 2008。[2] 曹國清,《數(shù)字電路與邏輯設(shè)計》,徐州:中國礦業(yè)大學(xué)出版社 2003。[3] 8255芯片原理:http://baike.baidu.com/link?url=KHojvZzBGmo26_6iYGTdrdqH6PxQbM1Hnnc8hWQNPIp60L7TWG5LZu_ppSkXo5maU5M4APs4qCGSudiqZ0bdl_ [4]ST7920芯片原理:http://wenku.baidu.com/view/0dafd9232f60ddccda38a0fa.html訪問時間2013/10/15 [5]ST7920中文字碼表:http://wenku.baidu.com/view/d4abe628647d27284b735127.html訪問時間:2013/10/15

第五篇:出租車計價器課程設(shè)計2

出租車計價器課程設(shè)計

目錄

前言

1、系統(tǒng)工作原理 1.1 功能說明 1.2 基本原理

2、硬件設(shè)計

2.1 單片機最小系統(tǒng)單元 2.2 A44E霍爾傳感器檢測單元 2.3 AT24C01存儲單元 2.4 鍵盤調(diào)整單元 2.5 顯示單元

3、軟件設(shè)計 3.1 系統(tǒng)主程序 3.2 中斷程序

3.2.1 里程計數(shù)中斷程序 3.2.2 中途等待中斷程序 3.3 計算程序 3.4 顯示程序 3.5 鍵盤程序

4、總結(jié) 參考文獻(xiàn)

附錄A 系統(tǒng)原理圖

附錄B 系統(tǒng)源程序

前言

隨著出租車行業(yè)的發(fā)展,出租車已經(jīng)是城市交通的重要組成部分,從加強行業(yè)管理以及減少司機與乘客的糾紛出發(fā),具有良好性能的計價器對出租車司機和乘客來說都是很必要的。而采用模擬電路和數(shù)字電路設(shè)計的計價器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機進(jìn)行的設(shè)計,相對來說功能強大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙崿F(xiàn)設(shè)計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。本設(shè)計采用AT89S52單片機為主控器,以A44E霍爾傳感器測距,實現(xiàn)對出租車的多功能的計價設(shè)計,并采用AT24C01實現(xiàn)在系統(tǒng)掉電的時候保存單價等信息,輸出采用8段數(shù)碼顯示管。本電路設(shè)計的計價器不但能實現(xiàn)基本的計價,而且還能根據(jù)白天,黑夜和中途等待來調(diào)節(jié)單價。

第一章 系統(tǒng)工作原理

1.1 功能說明

出租車計價器根據(jù)乘客乘坐汽車行駛距離和等候時間的多少進(jìn)行計價,并在行程中同步顯示車費值。從起步價開始,當(dāng)汽車程行駛未滿3公里時,均按起步價計算。過3公里后,實現(xiàn)每1公里單價收費,中間遇暫停時,計程數(shù)不再增加,開始計時收費,測距收費和測時收費的和便構(gòu)成了一位乘客的車費。同時,白天和夜晚價格不同,可以進(jìn)行切換。白天單價、夜晚單價、等待單價和起步價格都可通過獨立鍵盤進(jìn)行調(diào)節(jié)。(默認(rèn)起步價為5元/3公里,里程單價白天為1.5元/公里,夜晚為1.8元/公里,等待計時單價為0.5元/5分鐘)

1.2 基本原理

計數(shù)器系統(tǒng)主要由五部分組成:A44E霍爾傳感器、AT89S52單片機、獨立鍵盤、EEPROM AT24C01和顯示數(shù)碼管。

霍爾傳感器安裝在車輪上,主要檢測汽車行進(jìn)的公里數(shù),并產(chǎn)生一系列相應(yīng)的脈沖輸出,脈沖送到單片機進(jìn)行處理,單片機根據(jù)程序設(shè)定通過計算脈沖數(shù)換算出行駛公里數(shù),再根據(jù)從EEPROM中讀取的價格等相關(guān)數(shù)據(jù)進(jìn)行金額的計算,計算好的金額、里程和單價都實時地顯示在數(shù)碼管上。獨立鍵盤可以調(diào)節(jié)價格等相關(guān)數(shù)據(jù),按下相應(yīng)的按鈕,產(chǎn)生信號交由單片機處理并實時顯示出來,調(diào)節(jié)好的數(shù)據(jù)存儲到EEPROM中,掉電后可以使調(diào)好的數(shù)據(jù)不丟失,下次得電后直接從EEPROM讀到單片機,系統(tǒng)結(jié)構(gòu)圖如圖1。

圖1 系統(tǒng)結(jié)構(gòu)圖

第二章 硬件設(shè)計

2.1 單片機最小系統(tǒng)單元

主控機系統(tǒng)采用了Atmel 公司生產(chǎn)的 AT89S52單片機,它含有256 字節(jié)數(shù)據(jù)存儲器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機軟件系統(tǒng)設(shè)計,所以不必再擴(kuò)展程序存儲器。復(fù)位電路和晶振電路是AT89S52 工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖2所示。

圖2 單片機最小系統(tǒng)圖

AT89S52 的復(fù)位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開關(guān)就使在RST端出現(xiàn)一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統(tǒng)的內(nèi)部時鐘電路。

2.2 A44E霍爾傳感器檢測單元

A44E 屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機的IO 端口上,而且其最高檢測頻率可達(dá)到1MHZ。

A44E 集成霍耳開關(guān)由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個基本部分組成。在輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍爾電勢差VH輸出,該VH信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當(dāng)施加的磁場達(dá)到工作點(即Bop)時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導(dǎo)通,此時OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動作。A44E霍爾傳感器原理如圖3所示。

圖3 A44E霍爾傳感器原理

里程計算是通過安裝在車輪上的霍爾傳感器檢測到的脈沖信號,送到單片機產(chǎn)生中斷,單片機再根據(jù)程序設(shè)定,計算出里程。其原理如圖4所示。

圖4 傳感器測距示意圖

本系統(tǒng)選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號的輸入端(這樣可以減少程序設(shè)計的麻煩),車輪每轉(zhuǎn)一圈(設(shè)車輪的周長是1米),霍爾開關(guān)就檢測并輸出信號,引起單片機的中斷,對脈沖計數(shù),當(dāng)計數(shù)達(dá)到1000次時,即1公里,單片機就控制將金額自動增加,如圖5。

圖5 A44E霍爾元件接線圖

2.3 AT24C01存儲單元 存儲單元的作用是在電源斷開的時候,存儲當(dāng)前設(shè)定的單價信息。AT24C01 是Ateml公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。

AT24C02芯片引腳配置如圖6所示。

存儲單元電路連接如圖7所示。

圖 7 存儲單元電路原理圖 圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態(tài)功耗。由于AT24C01的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(時鐘脈沖)和SDA(數(shù)據(jù)/地址)與單片機P2.2和P2.3口連接,進(jìn)行傳送數(shù)據(jù)。

每當(dāng)設(shè)定一次單價,系統(tǒng)就自動調(diào)用存儲程序,將單價信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時候,自動調(diào)用讀存儲器程序,將存儲器內(nèi)的單價等信息,讀到緩存單元中,供主程序使用。

2.4 鍵盤調(diào)整單元

當(dāng)單價等信息需要進(jìn)行修改時,就要用到鍵盤進(jìn)行修改。由于調(diào)節(jié)信息不多,故采用4個獨立鍵盤即可,分別實現(xiàn)清零、切換、增大、減小和功能等作用。電路原理如圖8所示。

圖8 鍵盤調(diào)整單元接線圖

S1:接P1.0口,對上一次的計費進(jìn)行清零,為下次載客準(zhǔn)備

S2:接P1.1口,實現(xiàn)白天和夜晚單價的切換;當(dāng)功能鍵S4按下時,S2可對數(shù)據(jù)進(jìn)行增大。S3:接P1.2口,當(dāng)功能鍵S4按下時,S3可對數(shù)據(jù)進(jìn)行減小。S4:接P1.3口,按1次,進(jìn)入調(diào)整白天單價;按2次,進(jìn)入調(diào)整夜晚單價;按3次,進(jìn)入調(diào)整等待單價;按4次,進(jìn)入調(diào)整起步價;按5次,返回。

2.5 顯示單元

顯示單元由7個8段共陽數(shù)碼管組成,采用動態(tài)掃描進(jìn)行顯示。前三個數(shù)碼管分別接P3.0、P3.1和P3.2,用于顯示總金額;中間兩個分別接P3.4和P3.5,用于顯示里程;后邊兩個分別接P3.6和P3.7,用于顯示單價。電路如圖9所示。

圖9 數(shù)碼管顯示圖

第三章 軟件設(shè)計

3.1 系統(tǒng)主程序

在主程序模塊中,需要完成對各參量和接口的初始化、出租車起價和單價的初始化以及中斷、計算、循環(huán)等工作。另外,在主程序模塊中還需要設(shè)置啟動/清除標(biāo)志寄存器、里程寄存器和價格寄存器,并對它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。

當(dāng)汽車運行起來時,就啟動計價,根據(jù)里程寄存器中的內(nèi)容計算和判斷行駛里程是否已超過起步價公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價數(shù)和起步價數(shù)來計算出當(dāng)前的總金額,并將結(jié)果存于總金額寄存器中;中途等待時,無脈沖輸入,不產(chǎn)生中斷,當(dāng)時間超過等待設(shè)定值時,開始進(jìn)行計時,并把等待價格加到總金額里,然后將總金額、里程和單價送數(shù)碼管顯示出來。程序流程如圖10所示。

圖10 主程序流程圖 圖11 計算程序流程圖

3.2 中斷程序

3.2.1 里程計數(shù)中斷程序

每當(dāng)霍爾傳感器輸出一個低電平信號就使單片機中斷一次,當(dāng)里程計數(shù)器對里程脈沖計滿1000次時,進(jìn)入里程計數(shù)中斷服務(wù)程序中,里程變量加一。主函數(shù)中總金額也相應(yīng)地變化。

3.2.2 中途等待中斷程序

在中途等待中斷程序中,每1ms產(chǎn)生一次中斷,將當(dāng)前里程值送入某個緩存變量,每5分鐘將緩存變量中的值和當(dāng)前里程值比較,當(dāng)汽車停止,霍爾傳感器5分鐘沒有輸出信號,當(dāng)前里程值和緩存變量內(nèi)的值相同,則進(jìn)入等待計時,每5分鐘記一次價格。

3.3 計算程序

計算程序根據(jù)里程數(shù)分別進(jìn)入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執(zhí)行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖11所示。

3.4 顯示程序

顯示程序利用定時器每1ms產(chǎn)生一次中斷,相應(yīng)變量置位,點亮一個數(shù)碼管,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實現(xiàn)動態(tài)掃描顯示,同時根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實現(xiàn)顯示。

3.5 鍵盤程序

鍵盤采用查詢的方式,放在主程序中,當(dāng)沒有按鍵按下的時候,單片機循環(huán)主程序,一旦右按鍵按下,便轉(zhuǎn)向相應(yīng)的子程序處理,處理結(jié)束再返回。流程圖如圖12。

圖12 鍵盤程序流程圖

第四章 總結(jié)

經(jīng)過這些天有關(guān)于出租車計價器的課程設(shè)計,使我對單片機的應(yīng)用有了更深的了解。在課程設(shè)計的過程中,還是碰到了許多的問題。比如,對于數(shù)碼管動態(tài)掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調(diào)用掌握得還不夠好;對于一些相關(guān)的應(yīng)用軟件沒能熟練掌握。通過這幾天晚上的苦想和反復(fù)調(diào)試,以及參考網(wǎng)上的程序,最終還是把問題解決了。通過這次課程設(shè)計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設(shè)計東西的樂趣、學(xué)會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學(xué)是學(xué)不到其中的精髓的,必須親自去試著實踐,親自去經(jīng)歷才能對它們真正的掌握,凡事都要自己去動下手,去實踐一下,遇到困難,永遠(yuǎn)不要沮喪氣餒。在動手的過程中,不僅能增強實踐能力,而且在理論上可以有更深的認(rèn)識;這次設(shè)計給了我極大的鼓舞和信心,相信在以后的學(xué)習(xí)中可以通過不斷的摸索和實踐來提高其他方面的知識。

參考文獻(xiàn)

[1] 馬淑華,王鳳文,張美金編著.單片機原理與接口技術(shù)(第二版).北京:北京郵電大學(xué)出版社,2007.[2] 譚浩強著.C程序設(shè)計(第三版).北京:清華大學(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)

//延時時基為1ms {

int i,j;

for(i=x;i>0;i--)

for(j=340;j>0;j--);}

void start()

//IIC開始位

{

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寫到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處寫入數(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ù)碼管動態(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()

//鍵盤掃描

{

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)白天單價

//

{

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)夜晚單價

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)等待單價

{

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);

步價

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ù)碼管動態(tài)掃描的定時器時基個數(shù)

bb=0;//判斷是否等待的時基個數(shù)

inter=0;

EA=1;//開總中斷

EX1=1;//開外部中斷1 IT1=1;//觸發(fā)方式下降沿

TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;ET0=1;//開定時器T0中斷

TR0=1;//開定時器T0

P3=0x08;P0=table[0];}

void jisuan(){ if(licheng>3)zongjine=qibu+(licheng-3)*danjia+dengdai*danjia3;//金額計算

else zongjine=qibu+dengdai*danjia3;//起步公里內(nèi)金額計算 }

void qiehuan(){ if(key1==0)//白天夜晚切換

{ delay(5);//鍵盤防抖

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();//切換白天夜晚單價

jisuan();//計算總金額

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;//測試是否進(jìn)入等待

if(bb==10000)//10s無反應(yīng)進(jìn)入等待計費

{ bb=0;if(temp=temp&temp1)dengdai++;temp=licheng;} }

原來文件地址http://blog.sina.com.cn/s/blog_609003ef0100dt1o.html

存儲器可以不用

下載51單片機 出租車計價器課程設(shè)計word格式文檔
下載51單片機 出租車計價器課程設(shè)計.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    出租車計價器Multisim課程設(shè)計[精選五篇]

    時序邏輯電路的課程設(shè)計題目 組員:楊天樂 閆帥錚 艾文杰 一、題目:出租車計價器 ? ? ? ? ? ? ? ? 設(shè)計內(nèi)容:1)進(jìn)行需求分析,確定總體框架;2)畫出邏輯圖; 3)對設(shè)計的電路進(jìn)行仿真; 設(shè)計要求:1)......

    基于單片機的出租車計價器設(shè)計報告(★)

    河南理工大學(xué) 《單片機應(yīng)用與仿真訓(xùn)練》設(shè)計報告 出租車計價器設(shè)計 姓名學(xué)號: 專業(yè)班級: 指導(dǎo)老師: 所在學(xué)院: 2012年6月25日 摘要 本設(shè)計用直流電機轉(zhuǎn)動模擬出租車車輪轉(zhuǎn)動,實現(xiàn)......

    出租車計價器(范文大全)

    基于單片機的出租車計價器設(shè)計 摘要 出租車計價器的數(shù)字系統(tǒng)的設(shè)計正是基于一些專用的芯片,才發(fā)揮其有效特性,從而實現(xiàn)出租車的計價功能。此數(shù)字系統(tǒng)主要分為三個單元,即里程計......

    《基于單片機的出租車計價器的設(shè)計》開題報告

    《基于單片機的出租車計價器的設(shè)計》開題報告 關(guān)鍵詞:出租車計價器 浙江師范大學(xué)應(yīng)用電子技術(shù)專業(yè)開題報告范文 杭州論文 開題報告 一.選題背景和意義 隨著我國經(jīng)濟(jì)的迅速發(fā)展......

    出租車計價器設(shè)計范文

    平頂山工業(yè)職業(yè)技術(shù)學(xué)院 目錄 目錄 .....................................................................................................................................

    第二組_出租車計價器課程設(shè)計調(diào)試報告

    電子設(shè)計與制作課程設(shè)計報告 題目:出租車計價器課程設(shè)計 學(xué)年:2011學(xué)年 學(xué)期:上學(xué)期 專業(yè):信息電子班級:H09-1 組別2 姓名: 曾磊 指導(dǎo)教師: 劉銳老師 小組成員: 曾磊 劉毅 朱亮......

    EDA課程設(shè)計-簡易出租車計價器設(shè)計5則范文

    HBQY #20080230403 課程設(shè)計 EDA 課 程 設(shè) 計 [RTX于2012/2/22] 簡 易 出租車計價器設(shè)計 要求: ? 計價器按1.2元/公里計費,超過10公里后,則按1.8元/公里收費。 ? 起步價6元(3公......

    出租車計價器畢業(yè)論文附錄

    北京信息科技大學(xué) 畢業(yè)設(shè)計(論文)附錄 題 目:學(xué) 院: 專 業(yè):學(xué)生姓名: 班級/學(xué)號 指導(dǎo)老師/督導(dǎo)老師:起止時間:2012 年 月 日 至 2012 年 月 日 目錄 附件1 原理圖·······......

主站蜘蛛池模板: 亚洲av一二三四区四色婷婷| 亚洲色婷婷婷婷五月基地| 亚洲熟妇无码av另类vr影视| 久久婷婷五月综合色d啪| 久久中文字幕无码中文字幕有码| 国产av无码专区亚洲av毛片搜| 国产成人无码区免费网站| 中文字幕av日韩精品一区二区| 精品乱码一区内射人妻无码| 亚洲精品久久久无码av片软件| 亚洲最大的熟女水蜜桃av网站| 四虎影视成人永久免费观看视频| 国产va免费精品高清在线观看| 999精品视频在这里| 午夜福利午夜福利1000| 久久久久国产精品人妻aⅴ网站| 国产精品-区区久久久狼| 国产亚洲成av人片在线观看下载| 国产三级精品三级在线专1| 大屁股熟女一区二区三区| 中国精品18videosex性中国| 中文字幕资源网| 国产精品亚洲综合色区| 久久99亚洲网美利坚合众国| 久久综合精品国产一区二区三区无码| 中文字幕在线日亚洲9| 国产片精品av在线观看夜色| 国产偷v国产偷v亚洲高清| 精品福利视频一区二区三区| 亚洲色在线v中文字幕| 久久精品国产99久久六动漫| 国产成人综合色视频精品| 中文字幕无线乱码人妻| 妺妺窝人体色www看美女| 亚洲欧洲综合有码无码| 精品无码av一区二区三区不卡| 婷婷久久香蕉五月综合加勒比| 中文字幕人妻丝袜美腿乱| 歪歪爽蜜臀av久久精品人人| 性高湖久久久久久久久| 国内精品久久久久电影院|