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

單片機出租車計價器源程序

時間:2019-05-13 18:24:18下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《單片機出租車計價器源程序》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機出租車計價器源程序》。

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

出租車計價器設計與制作

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

(1)不同情況具有不同的收費標準

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

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

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

(3)按鍵(3個)

啟動計價開關 數據復位(清零)白天/晚上轉換

3.4.1模塊1:系統設計

(1)分析任務要求,寫出系統整體設計思路

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

數碼管動態掃描等功能。

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

按照收費標準計價。

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

采用定時器的計數方式。

啟動鍵觸發定時器開始工作,而定時器的運行可以作為脈沖計數的標志,只要定時器計時在運行,每來一個中斷都應該計數。

主程序完成鍵盤的掃描和按鍵的處理,查詢脈沖產生的中斷,并完成脈沖的計數。每個脈沖代表10米,則當計數到100時表示1千米的距離,相應的總金額要按照收費標準計價

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

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

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

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

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

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

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

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

時以及總金額的計算等。

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

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

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

3-13所示。

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

(4)設計系統軟件調試方案、硬件調試方案及軟硬件聯合調試方案

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

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

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

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

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

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

T1_cnt: 定時器溢出數計數

cnt_30: 30秒鐘的計時

cnt_distance: 計算路程

cnt_cost: 總金額

state_val: 狀態:0-白天 1 夜晚

cost_val[3]: 收費標準:白天單價cost_val[0]=1元/公里;晚上單價cost_val[1]=2元/公里; 等待單價cost_val[2]=1元/30s

led_seg_code:數碼管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()//初始化一些變量的內容 {unsigned char i;cnt_30=0;//30秒的計時 D_cnt=0;//脈沖的個數 cnt_distance=0;//距離的計數

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;} //-------數碼管動態掃描-------------void led_show(){unsigned char i,k;

//-----顯示單價----k=cost_val[state_val];i=k%10;//暫存個位 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;//暫存個位 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;//暫存個位 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)//如果計數>3999, 計時1s { T1_cnt=0;if(cnt_30<30)//沒有超過30秒,繼續計時

{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中斷取邊沿觸發模式 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為啟動了的標志

break;case 1: //清除鍵

init_variant();//清除變量

TR1=0;//關閉定時器

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 //計數100次,每次10米,表示一公里

{D_cnt=0;cnt_distance=cnt_distance+1;

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

第二篇:51單片機 出租車計價器課程設計

第一章 出租車計價系統的設計要求與設計方案

1.1 出租車計價器設計要求

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

1、當總金額<6元時,按起價計算費用

2、當總金額>6元時,每公里按1元或2元計費

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

4、S1為啟動按鈕、S2轉換單價按鈕、S3復位按鈕。顯示功能:

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

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

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

1.2 系統主要功能

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

1.3 方案論證與比較

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

圖1-1方案一

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

圖1-2方案二

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

圖1-3方案三

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

第二章 出租車計價系統的硬件設計

2.1 AT89C51單片機介紹

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

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

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

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

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

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

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

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

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

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

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

2.2 里程計算、計價單元的設計

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

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

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

圖2-2 路程測量電路

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

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

2.3 數據顯示單元的設計

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

圖2-3 數據顯示硬件電路圖

2.4 按鍵單元的設計

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

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

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

圖2-5 振蕩電路

2.6 復位電路

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

圖2-6 復位電路 總電路圖

第三章 出租車計價系統的軟件設計

3.1主程序流程圖記描述

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

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

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

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

在出租車的計價系統中,出租車在等待的時候也要計價,本設計體現了這點。程序判斷了出租車是否停止,若停止30秒以上是,開始計價。55H中賦初值20,56H中賦初值10,總共30秒延時。超過30秒時,調用計費子程序。如圖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;脈沖計數每10個脈沖里程數加0.1顯示緩沖單元 MOV 72H,#00H;存儲總金額小數位 MOV 73H,#00H;存儲總金額個位 MOV 74H,#00H;存儲里程數小數位 MOV 75H,#00H;存儲里程數個位 MOV 76H,#00H;存儲單價角位 MOV 77H,#01H;存儲單價元位 MOV 78H,#00H;存儲總金額十位 MOV 79H,#00H;存儲里程數十位 MOV 55H,#20;給定等待初值20*50ms MOV 56H,#10;10秒等待時間初值 SETB EA;開總中斷 SETB EX0;開外部中斷0 MOV TCON,#04H;外部中斷0低電平

MOV TMOD,#61H;設置使用定時器1,模式2,計數狀態,自啟動,定時器0,模式1,定時狀態,自啟動

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

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

SJMP START;返回START處繼續循環執行 REST: PUSH ACC MOV 71H,#00H;脈沖計數每10個脈沖里程數加1顯示緩存單元 MOV 72H,#00H;存儲總金額個位 MOV 73H,#00H;存儲總金額十位 MOV 74H,#00H;存儲里程數個位 MOV 75H,#00H;存儲里程數十位 MOV 78H,#00H;存儲總金額百位 MOV 79H,#00H;存儲里程數百位 MOV 55H,#20 MOV 56H,#10 POP ACC RETI PULSE: JBC TF1,PTO1;TF1為1則轉PT01 LJMP PSOUT PTO1: MOV 55H,#20 MOV 56H,#10 INC 71H MOV R1,71H CJNE R1,#0AH,PSOUT;脈沖調整,改變立即數即可;里程數個位74H,R1不等于0AH則轉PSOUT MOV 71H,#00H INC 74H LCALL MONEY MOV R1,74H CJNE R1,#0AH,PSOUT;里程數十位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則轉 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

第三篇:單片機課程設計出租車計價器1.

常州機電職業技術學院 畢業設計(論文

作者:叢佳偉學號:40931111系部:電氣工程系 專業:應用電子技術 題目:出租車計價器系統 指導者:徐登黃勇 評閱者: 2012年05月 摘要

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

本次出租車計價器設計以AT89S52單片機為中心,采用U18霍爾傳感器對輪胎轉數進行計數,實現對出租車里程的測量,并最終計算出結果。其中采用寄存器芯片AT24C02使系統在掉電的時候對單價、里程、車輪長度等信息進行存儲,采用時鐘芯片DS1302來顯示時間和在系統需要時進行計時。輸出采用兩個4段數碼顯示管,而且根據按鍵有空車指示燈、等待查詢指示燈、單程指示燈進行指示。

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

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

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

1、系統原理圖(25 1 緒論

1.1 出租車計價器概述

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

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

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

1.2 單片機的概述

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

務。

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

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

●檢測:通過單片機和傳感器的聯合使用,用來檢測產品或者工況的意 外發生。

●通信:通過RS-232串行通信或者是USB通信,傳輸數據和信號。●科學計算:用來實現簡單的算法。

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

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

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

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

2.1 設計任務要求 2.1.1 設計任務

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

2.1.2 設計要求

一、基本要求

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

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

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

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

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

二、發揮部分

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

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

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

2.3 方案的選取

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

2.3.1 硬件設計方案

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

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

圖2-1計價器系統框圖 2.3.2 軟件設計方案

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

1、里程計算

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

2、費用計算

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

單 片 機 霍爾

傳感器 數據顯示 狀態指示 時鐘顯示 按鍵 信息存儲

(3等待收費的標準為5分鐘算一公里;(4暫停時計價器暫停計價,不收費用。3 硬件設計

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

3.1 AT 89S52單片機及最小系統

1、AT89S52單片機

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

P0口有二個功能:

1、外部擴展存儲器時,當做數據/地址總線。

2、不擴展時,可做一般的I/O使用,但內部無上拉電阻,作為輸入或輸出時應在外部接上拉電阻。

P1口只做I/O口使用:其內部有上拉電阻。

P2口有兩個功能:

1、擴展外部存儲器時,當作地址總線使用。

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

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

圖3-1 AT89S52引腳圖

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

VSS:接地。

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

它可以使單片機穩定可靠的運行。

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

P1.0:接功能按鍵。

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

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

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

2、單片機最小系統

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

圖3-2單片機最小系統

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

3.2 測距單元

本次設計我們選取了霍爾傳感器來進行里程測量。

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

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

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

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

其原理示意圖如下:

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

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

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

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

感器輸出低電平,當磁感應強度降到動作點BOP以下時,傳感器輸出電平不變,一直要降到釋放點BRP時,傳感器才由低電平躍變為高電平。BOP與BRP之間的滯后使開關動作更為可靠。

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

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

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

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

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

3.3 按鍵單元

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

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

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

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

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

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

圖3-9 8段數碼管

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

圖3-10 共陽和共陰數碼管結構

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

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

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

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

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

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

圖3-11儲存單元電路

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

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

4.1 系統主程序

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

在main函數編寫開始,要進行初始化,包括對系統初始化和對硬件設備進行初始化,并使硬件處于就緒狀態。

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

開始 初始化 數據處理 鍵盤掃描 結束

圖4-1系統主程序流程圖 4.2 數據處理子程序

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

計算里程 開始

里程<3公里否是

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

結束

圖4-2 數據處理子程序流程圖 4.3 等待時間計時子程序

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

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

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

顯示等待時間

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

鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環主程序,一旦右按鍵按下,便轉向相應的子程序處理,處理結束再返回。流程圖如圖4-4。

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

否 顯示時間 否 否 否

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

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

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

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

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

圖5-1 Keil uVision3編譯

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

圖5-2Proteus仿真 總結

總結在本次設計中,我們采用AT89S52芯片為核心器件,設計出了簡單的出租車計價器,能夠實現顯示時間、等待時間、金額和里程,按鍵控制,空車指示。

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

這次課程設計設計完成后,體會頗多,在學與做的過程中,取長補短,不斷學習新的知識,吸取經驗,達到進步的目的。通過自身的努力以及相關圖書資料的幫助,逐漸熟

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

致謝

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

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

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

在即將離開學校之際,我要感謝在大學生活中任課的眾多老師,正是在他們的諄諄教誨下使我順利完成了大學的基礎知識和專業知識的學習。在此,還要感謝陪伴我共同走過大學時代并給予我幫助的同學和朋友們,感謝你們,祝福你們在以后的日子里開開心心的度過每一天!參考文獻

1.戴佳, 陳斌, 苗龍.51單片機應用系統開發典型實例.中國電力出版社,2005

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

1、系統原理圖、25

第四篇:基于單片機的出租車計價器設計報告

河南理工大學

《單片機應用與仿真訓練》設計報告 出租車計價器設計

姓名學號: 專業班級: 指導老師: 所在學院: 2012年6月25日 摘要

本設計用直流電機轉動模擬出租車車輪轉動,實現出租車多功能的計價功能。設計采用AT89S52單片機為主控芯片,用光電對管檢測電機轉盤轉速,采用24C02芯片為系統在掉電時路程、錢數等重要信息提供存儲保護,采用兩個四位8段共陰數碼管顯示里程、總價格和等待時間等信息。本設計可以實現單雙程設置、系統暫停、空車指示、信息顯示、掉電保護等功能。

出租車計價是根據車所行駛的路程以及乘客乘車的方式綜合決定的。出租車行駛總路程可以通過車輪的周長乘車輪旋轉圈數得到。即可計算得到車輪旋轉幾周出租車能行駛一公里的路程。使用光電對管能方便地計量車輪旋轉的圈數,輸出的脈沖信號被接入到AT89S52單片機系統中,通過計算接收到的脈沖個數,計算出當前所行駛的路程,并且可以計算實時的速度。與此同時,根據不同的收費標準計算收費。通過鍵盤能夠實現往返設置,啟動、暫停、停止計價器、設置單返程等。

關鍵字:出租車計價器,AT89S52,24C02,光電對管 Abstract This design with DC motor to rotate the analog taxi wheels turning, multi-purpose taxi pricing function.Design using AT89S52 MCU for master chip with a photoelectric tube test motor turntable speed, AT24C02 chip to make the system power-down distance, money and other important information on the storage protection, the use of two four-segment common cathode digital display tube mileage, the total price and waiting time information.This design enables single and double-way set, system halted, empty instructions, information display, power-down protection and other functions.The taxi meter according to the distance traveled by the vehicle and passengers ride the decision.Taxi driving the total distance by the circumference of the wheel drive wheel rotation laps.Can be calculated by the wheel rotation a few weeks a taxi to travel one kilometer away.The use of opto-the number of turns of the tube can be easily measured wheel rotation, the output pulse signal is connected to the microcontroller AT89S52 system, calculated by computing the number of pulses received, the current driving distance, and can calculate the real-time speed.At the same time, the charge will be calculated according to the different charges.Able to achieve a round trip via the keyboard settings, start, pause, stop the meter, set the single return.Key words: Meter,AT89S52,AT24C02,Photoelectric tube 目錄 1 概述 1 2 系統總體方案及硬件設計 2 2.1系統總體方案 2 2.2 硬件電路設計單元 2.2.1 電源電路單元 2 2.2.2 系統控制單元 3 2.2.3 驅動電路單元 6 2.2.4 信號檢測單元 7 2.2.5 顯示單元 8 2.2.6 數據存儲單元 9 3 軟件設計 10 3.1 軟件設計流程圖 10 3.2 計算模塊 11 3.3 鍵盤掃描 11 3.4 顯示程序 11 3.5 PWM波的生成 11 3.6 速度檢測 12 3.7 程序源代碼 12 4 Proteus軟件仿真 13 5 課程設計體會 14 6 主要參考文獻 16 致謝 17 附1 程序源代碼 18 附2 系統原理圖 33 1 概述

出租車計價器是乘客與司機雙方的交易準則,它是出租車行業發展的重要標志。它關系著交易雙方的利益,具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是十分有應用價值和現實意義的。

出租車計價是根據車所行駛的路程以及乘客乘車的方式綜合決定的。出租車行駛總路程可以通過車輪的周長乘車輪旋轉圈數得到。即可計算得到車輪旋轉幾周出租車能行駛一公里的路程。使用霍爾傳感器方便地計量車輪旋轉的圈數。輸出的脈沖信號被接入到AT89S52單片機系統中,通過計算接收到的脈沖個數,計算出當前所行駛的路程,并且可以計算實時的速度,在速度低于5公里每小時是進入等待計費。于此同時,根據不同的收費標準,通過選擇相應的起步價、單價等收費標準進行計算。通過鍵盤能夠實現往返設置,啟動、暫停、停止計價器以及切換顯示當前的行駛里程和需支付的車費。

本設計硬件電路分為六個單元:電源電路單元,系統控制單元,驅動電路單元,信號檢測單元,顯示單元和數據存儲單元。軟件系統分為五個大的模塊為:總初始化模塊,按鍵掃描模塊,中斷與定時模塊,數據計算模塊,數碼管顯示模塊。其中,鍵盤掃描和數碼管顯示采用查詢方式,轉速信號接收與等待記時采用中斷方式。這些軟硬件系統構成了最終的設計。系統總體方案及硬件設計 2.1系統總體方案 本設計以AT89S52單片機為中央控制芯片,通過按鍵控制實現計價器的啟動、停止、暫停、等待時間顯示、單返程等功能;因為單片機的I/O無法直接驅動直流電機轉動,所以通過L298N為驅動芯片驅動電路來驅動直流電機轉動;通過光電對管檢測直流電機的轉速,并利用電壓比較器將整理后的信號送給給單片機;通過數碼管來顯示里程、總價格、等待時間等信息;通過AT24C02來存儲信息,防止系統掉電信息丟失。系統設計總框圖,如圖2.1所示。

圖2.1系統設計總框圖 2.2 硬件電路設計單元

本設計硬件電路分為六個單元:電源電路單元,系統控制單元,驅動電路單元,信號檢測單元,顯示單元和數據存儲單元。

2.2.1 電源電路單元

電源是由7805芯片,變壓器和整流橋組成的一個5V穩壓電源。變壓器將220V交流電轉變為12V交流電,經過整流橋和濾波電容后變為直流,經過7805芯片后輸出5V穩壓電源。電源電路原理圖,如圖2.2所示。

圖2.2電源電路原理圖 2.2.2 系統控制單元

系統控制單元主要有單片機最小系統和獨立按鍵組成。2.2.2.1 單片機最小系統

單片機采用了Atmel 公司生產的 AT89S52單片機,它含有256 字節數據存儲器,內置8K 的電可擦除FLASH ROM,可重復編程,大小滿足主控機軟件系統設計。

AT89S52芯片的主要引腳功能分別為: VCC 電源電壓。GND 接地。

RST 復位輸入。當RST變為高電平并保持2個機器周期時,將使單片機復位。WDT溢出將使該引腳輸出高電平,設置SFR AUXR的DISRTO位(地址8EH)可打開或關閉該功能。DISKRTO位缺省為RESET輸出高電平打開狀態。

ALE/PROG: 當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。

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

P0口:一組8位漏極開路型雙向I/O口。也即地址/數據總線復用口。作為輸出口用時,每位能驅動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8位)和數據總線復用,在訪問期間激活內部上拉電阻。在Flash編程時,P0口接收指令字節,而在程序校驗時,輸出指令字節,校驗時,要求外接上拉電阻。

P1口:一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。Flash編程和程序校驗期間,P1接收低8位地址。

P2口:一個帶內部上拉電阻的8位雙向I/O口。P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。在訪問外部程序存儲器或16位地址的外部數據存儲器時,P2口送出高8位地址數據。在訪問8位地址的外部數據存儲器時,P2口線上的內容在整個訪問期間不改變。Flash編程和程序校驗期間,P2亦接收低8位地址。

P3口:一個帶內部上拉電阻的8位雙向I/O口。P3的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫“1”時,它們被內部的上拉電阻把拉到高電并可作輸入端口。作輸入端口使用時,被外部拉低的P3口將用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,還作特殊功能口。P3口的第二功能引腳分配如下:

P3.0:RXD,串行通信輸入。P3.1:TXD,串行通信輸出。P3.2:INT0,外部中斷0輸入。P3.3:INT1,外部中斷1輸入。P3.4:T0,計時計數器0輸入。P3.5:T1,計時計數器1輸入。P3.6:WR:外部數據存儲器的寫入信號。P3.7:RD,外部數據存儲器的讀取信號。單片機最小系統原理圖,如圖2.3所示。圖2.3 單片機最小系統原理圖 2.2.2.2 獨立按鍵

本設計按照功能要求設置了六個按鍵。按鍵接線圖,如圖2.4所示。按鍵功能分別為:

key0:系統啟動,用來啟動計價器,使計價器開始工作; key1:系統停止/復位,用來關閉計價器,是計價器停止工作并復位;

key2:單程雙程,用來設置是單程計費還是往返計費;

key3:系統暫停,用來將整個計費系統暫停; key4:等待時間顯示,當按下不放時 圖2.4按鍵接線圖

數碼管為顯示等待的時間。

Key5:調速按鈕,用來調整電機的轉速,使測試時可控制電機轉速。2.2.3 驅動電路單元

LM298N是SGS公司的產品,內部包含4通道邏輯驅動電路。是一種二相和四相電機的專用驅動器,即內含二個H橋的高電壓大電流雙全橋式驅動器,接收標準TTL邏輯電平信號,可驅動46V、2A一下的電機。LM298N的管腳圖,如圖2.5所示。通過單片機的I/O輸入改變芯片控制端的電平,即可以對電機進行正反轉,停止的操作,LM298N的邏輯功能表,如圖2.6所示。

圖2.5 LM298N的管腳圖 圖2.6 LM298N的邏輯功能表

LM298N有兩路電源分別為邏輯電源和動力電源,圖中6V為邏輯電源,12V為動力電源。J4接入邏輯電源,J6接入動力電源,J1與J2分別為單片機控制兩個電機的輸入端,J3與J5分別與兩個電極的正負極相連。ENA與ENB直接接入AVR單片機的PWM輸出口;控制電機的正反轉通過J1與J2兩個接口,控制電機的轉速的通過ENA和ENB的口輸入的PWM波的占空比。由于我們使用的電機是線圈式的,在從運行狀態突然轉換到停止狀態和從順時針狀態突然轉換到逆時針狀態時會形成很大的反向電流,在電路中加入二極管的作用就是在產生反向電流的時候進行泄流,保護芯片的安全。LM298N電機驅動原理圖,如圖2.7所示。

圖2.7 LM298N電機驅動原理圖 2.2.4 信號檢測單元

電機轉速的檢測模塊是由對射式光電傳感器及其配套電路組成的,對射式光電傳感器原理圖,如圖2.8所示。

對射式光電傳感器由紅外發光二極管與光敏三極管組成,主要檢測發射管與接收管之間有無物體存在。如上圖所示,當發射管與接收管之間沒有物體存在時,光敏三極管接收到紅外光后導通,out輸出低電平;當發射管與接收管之間有物體存在時,光敏三極管無法接收到足夠的強的紅外光所以截止,out輸出高電平。

但是上述電路存在缺陷,當直流電機高速旋轉時,out輸出的信號就容易失真,很難被單片機檢測識別。為了能夠讓單片機準確識別光電傳感器輸出地信號,需在傳感器的輸出端連接一個比較器。

電壓比較器可以看作是放大倍數接近“無窮大”的運算放大器。電壓比較器的功能:比較兩個電壓的大小 用輸出電壓的高或低電平,表示兩個輸入電壓的大小關系 :當”+”輸入端電壓高于”-”輸入端時,電壓比較器輸出為高電平;當”+”輸入端電壓低于”-”輸入端時,電壓比較器輸出為低電平。LM393是雙電壓比較器集成電路

圖2.8對射式光電傳感器原理圖 圖2.9 LM393引腳圖

速度檢測電路原理圖,如圖2.10所示。由原理圖可知, 當發射管與接收管之間沒有物體存在時,光敏三極管接收到紅外光后導通,out輸出高電平;當發射管與接收管之間有物體存在時,光敏三極管無法接收到足夠的強的紅外光所以截止,out輸出低電平。經過整理后的電路能輸出比較標準的高低電平信號,很容易被單片機識別。圖2.10 速度檢測電路原理圖 2.2.5 顯示單元 2.2.5.1 數碼管顯示

顯示單元采用兩個四位8段數碼管顯示信息,一組顯示金額,另一組顯示路程配合按鍵來切換顯示。用鎖存器來驅動數碼管顯示,數據位連接單片機P0口,片選端和段選端分別用單片機的P2.6和P2.7端口。如圖2.11所示為數碼管顯示接線圖。

圖2.11 數碼管顯示接線圖 2.2.5.1 LED指示燈

本設計按照功能要求設置了五個LED燈。接線圖如圖2.12所示。各個LED燈的功能分別為:

DS0:等待指示燈,車速小于5Km/h時指示燈亮; DS1:暫停指示燈,當暫停鍵按下,計價器暫停計價時亮; DS2:空車指示,當計價器停止工作也就是空車時,此指示燈亮; DS3:啟動指示燈,當按下啟動鍵,計價器開始計價時亮; DS4:單雙程指示燈,默認為單程,當選 圖2.12 LED指示燈接線圖

擇雙程時亮。2.2.6 數據存儲單元

本設計使用了24C02作為外部存儲芯片。24C02是串行2K的EEPROM,是基于I2C-BUS 的存儲器件,遵循二線制協議,具有接口方便,體積小,數據掉電不丟失等特點。計價器能將里程和總價格實時的存儲到24C02中,當計價器因掉電停止工作,24C02會存儲掉電前一刻的數據,使系統從新上電時能夠恢復里程和總價格。當計價器是被手動正常停止時,將會對24C02相應的地址寫0,以使下次啟動時,計價器從初始化數據開始計價。24C02的接線圖,如圖2.13所示。

圖2.13 24C02的接線圖 3 軟件設計 3.1 軟件設計流程圖

軟件系統可以大致分為幾個大的模塊為:初始化模塊,按鍵掃描模塊,中斷與定時模塊,數據計算模塊,數碼管顯示模塊,IIC總線通信模塊等。其中,鍵盤掃描和數碼管顯示采用查詢方式,轉速信號接收采用中斷方式。軟件設計流程圖,如圖3.1所示。

圖3.1 軟件設計流程圖 3.2 計算模塊

計算程序根據里程數分別進入不同的計算公式。如果里程大于3公里,則執行公式:總金額 起步價+(里程-3)*單價+等待時間*等待單價;否則,執行公式:總金額 起步價+等待時間*等待單價。

對于速度的判斷及等待時間的記錄采用定時器零中斷,設定10ms一個中斷,然后判斷車速,小于5公里/小時時,則開始記錄等待時間。

3.3 鍵盤掃描

鍵盤掃描才用查詢方式,當有按鍵按下時就對相應的標志進行取反,或調用其他子函數,在消抖過程中,這里將數碼管顯示程序潛入以保證顯示的穩定。

3.4 顯示程序

顯示程序利用主函數內的循環,實現動態掃描顯示,同時根據數碼管余輝和人眼暫留現象,即可實現顯示

3.5 PWM波的生成

在AT89系列單片機中,由于沒有PWM控制器,要輸出PWM信號就需通過軟件的方式在I/O口上模擬PWM的輸出。PWM軟件設計一般可以利用軟件延時的方式或利用單片機內部的定時器/計數器作為時鐘信號。

本設計是利用軟件延時獲得PWM信號的,在軟件中設計一個基準的軟件延時程序,通過反復調用這個延時程序,從而獲得不同的時間長度,為了電機速度穩定,我們選擇使用同周期,不同占空比的PWM進行調速。

若頻率為1kHZ,則每個方波的周期為1ms,占空比從0變化到100%,最小的變化量為10%,即高電平維持時間的最小值是100us,所以只要設計出100us的延時程序作為基準即可。具體程序如下: #define uchar unsigned char sbit PWM P3^4;//定義PWM輸出口為P3.4 void PWMout uchar q //生成同周期的PWM波

PWM 1;delay q;PWM 0;delay 10-q;

void delay uchar a //100us延時函數

uchar b;for;a 0;a--

for b 29;b 0;b--

_nop_;

_nop_;

3.6 速度檢測

經檢測模塊得到的信號輸入到單片機內,因為輸入的是低電平信號,所以我把信號輸入到了中斷0端口,每接收一個低電平信號程序就會進入中斷函數里面,中斷0函數如下: void int0 interrupt 0

sudu++;

這樣就完成了速度測量。3.7 程序源代碼 程序源代碼見附錄2。4 Proteus軟件仿真

將整個系統原理圖在Proteus連接好后,下載如編寫好的程序仿真如下:如圖4.1顯示的狀態設置為:單程,車速大于5km/h,當路程等于40.4km時的顯示情況。

圖4.1 Proteus軟件仿真圖 5 課程設計體會

本次單片機課程設計,我們選的題目是出租車計價器的設計。通過仿真、焊接、調試等不斷的努力,我們的出租車計價器實現了基本要求的全部功能和發揮部分的部分功能。比如能顯示里程、金額數、總等待時間,可設定單程價格和雙程價格,按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間,空車指示、信息存儲等。

經過這些天有關于出租車計價器的課程設計,使我們對MCS-51系列單片機的應用有了更深的了解。從前的學習過程過于浮淺,只是流于表面的理解,而現在要做課程設計,就不得不要求我們對所用到的知識有更深層次的理解。因為課程設計的內容比及書本中的理論知識而言,更接近于現實生活,而理論到實踐的轉化往往是一個艱難的過程,它猶如一只攔路虎,橫更在我們的面前。但是我們毫不畏懼,因為我們相信我們能行。

事情并不總是一帆風順的,我們總會遇到困難和險阻。在此次課程設計的過程中,我們碰到了許多的問題。比如,對于數碼管動態掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調用掌握得還不夠好;對于一些相關的應用軟件 KEIL、PROTEUS、Altium esigner 沒能熟練掌握。當然,問題并不可怕,只要我們懷著一顆不服輸的心,勇往直前,那么勝利將不會離我們太遠。通過上網查找資料、與同學老師交流、小組成員間的討論、不斷實踐與探索,我們總能找到解決問題的方法,最后得到良好的效果。

通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。

總之,本次課程設計讓我們更加深刻的掌握了MCS-51系列單片機的工作原理和編程語言,更加熟練的掌握了KEIL、PROTEUS、Altium designer等專業軟件的使用,熟悉了產品開發的大致流程,深刻的體會到了團隊協作精神的重要性,培養了我們發現問題、獨立思考問題、多種途徑解決問題的能力,鍛煉并提高了了我們的動手實踐能力和理論與實踐相結合的能力。

我以后做一個動手能力強的大學生。http://www.tmdps.cn.致謝

在課程設計即將完成之際,我想向給予我幫助和支持的人表示衷心的感謝!感謝高老師和王老師給我們提供這次難得的課程設計機會,讓我們有機會把理論

得以應用到實踐上。

感謝我們的指導老師王莉,課程設計是在老師的親切關懷和悉心指導下完成的。嚴肅的科學態度,嚴謹的治學精神,精益求精的工作作風,深深地感染和激勵著我。老師不僅在學業上給我以精心指導,同時還在思想、上給我以無微不至的關懷,在此謹向老師致以誠摯的謝意和崇高的敬意。我還要感謝在一起愉快的度過的同學們,正是由于你們的幫助和支持,我才能克服一個一個的困難和疑惑,直至本文的順利完成。最后,再次對關心、幫助我的老師和同學表示衷心地感謝!#include

//頭文件

#include

#include

//IIC總線通信 #include

//數碼管顯示 #define uint unsigned int

#define uchar unsigned char sbit key0 P1^0;//啟動 sbit key1 P1^1;//停止 sbit key2 P1^2;//單返程 sbit key3 P1^3;//暫停 sbit key4 P1^4;//顯示等待時間 sbit key5 P1^5;//調速 sbit led0 P2^2;//暫停指示燈 sbit led1 P2^3;//空車指示燈 sbit led2 P2^4;//啟動指示燈 sbit led3 P2^5;//雙程指示燈 sbit led4 P2^1;//等待指示燈 sbit PWM P3^4;//PWM輸出口

uchar sudu,sudu0,shi,fen,miao,shi0 12,fen0 30,miao0;uchar danfanflag 0,flag 0,speedflag 1,stopflag 0;uint licheng 0,maichong,r 0,money 0;uint t,t1,t2;uchar num1,num2,num3,num4,lichenga,lichengb,moneya,moneyb;long licheng0;void init0;//系統初始化函數 void delay uint a;//延時函數 void PWMout uchar q;//PWM產生函數 void anjian;//按鍵掃描函數 void jisuan;//路程、價錢計算函數 void chuli;void main

num1 read_add 25;num2 read_add 26;delay 5;licheng num1*100+num2;licheng0 150*licheng-300*fen;init0;while 1

anjian;chuli;lichenga licheng/100;lichengb licheng%100;

write_add 25,lichenga;delay 5;write_add 26,lichengb;

void init0

TH0 0x3c;TL0 0xb0;EA 1;

//初始化

TMOD 0x01;EX0 0;IT0 1;ET0 1;TR0 1;P0 0xff;P1 0xff;P2 0xff;P3 0xfe;

void chuli

if speedflag 1 PWMout 12;else if speedflag 2 PWMout 20;else PWMout 6;if flag 1 led2 0;

led3 1;jisuan;

if key4 0

display0 shi,fen,miao;

else

display licheng,money;

if flag 2

led2 0;led3 1;display 1,2;

if flag 0

display0 shi0,fen0,miao0;led3 0;led2 1;

if danfanflag 1 led1 0;if danfanflag 0 led1 1;if stopflag 1

led0 0;

else led0 1;

void jisuan

r maichong;licheng0+ r;licheng licheng0/150+ fen/5 *10;sudu0+ r;maichong 0;if t2 10

t2 0;

sudu sudu0;

sudu0 0;

if licheng 30

money 50;else

if danfanflag 1

money 50+1.5* licheng-30;

else

money 50+2* licheng-30;

void anjian

if key0 0

EX0 1;

flag 1;

stopflag 0;

if key1 0 EX0 0;maichong 0;

licheng0 0;licheng 0;flag 0;

shi 0;

fen 0;

miao 0;write_add 25,0;delay 5;write_add 26,0;

if key2 0

delay 5;

if key2 0

if flag 1

danfanflag++;

if danfanflag 2

danfanflag 0;

while!key2;delay 5;while!key2;

if key3 0

if flag 1

EX0 0;

stopflag 1;

if key5 0

delay 5;

if key5 0

speedflag++;

if speedflag 3

speedflag 0;

while!key5;delay 5;while!key5;

void int0 interrupt 0 數

maichong++;

void timer0 interrupt 1

TH0 0x3c;TL0 0xb0;t++;t1++;t2++;if t1 20

t1 0;

miao0++;

//檢測與計定時器50ms

//

if miao0 60

miao0 0;

fen0++;

if fen0 60

fen0 0;

shi0++;

if shi0 24

shi0 0;

if sudu 50&&flag 1&&stopflag 0 led4 0;if t 20

t 0;

miao++;

if miao 60

miao 0;

fen++;

if fen 60

fen 0;

shi++;

if shi 24

shi 0;

else led4 1;

void PWMout uchar q

PWM 1;delay q;

//生成PWM波

PWM 0;delay 20-q;

IIC.h IIC通信

#define uint unsigned int

#define uchar unsigned char sbit sda P1^6;sbit scl P1^7;void delay0;;void start

sda 1;delay0;scl 1;delay0;sda 0;delay0;

void stop

sda 0;delay0;scl 1;delay0;sda 1;delay0;

void respons

uchar i;scl 1;delay0;while sda 1 && i 250 i++;scl 0;delay0;

void init

sda 1;scl 1;

void write_byte uchar date uchar i,temp;temp date;scl 0;delay0;for i 0;i 8;i++

temp temp 1;

sda CY;

delay0;

scl 1;

delay0;

scl 0;

delay0;

sda 1;

delay0;

uchar read_byte

uchar i,j,k;scl 0;delay0;sda 1;delay0;for i 0;i 8;i++

scl 1;

delay0;

j sda;

k k 1 |j;

scl 0;

delay0;

return k;

void write_add uchar address,uchar date

start;write_byte 0xa0;//器件地址;

respons;write_byte address;//存儲器地址;

respons;write_byte date;//寫數據

respons;stop;

uchar read_add uchar address

uchar date;start;write_byte 0xa0;respons;write_byte address;respons;start;write_byte 0xa1;respons;date read_byte;stop;return date;

display.h 數碼管顯示#define uint unsigned int

#define uchar unsigned char sbit dula P2^7;//端口

定義段選

sbit wela P2^6;//定義位選端口

uchar code table[]

//數碼管編碼 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71;void delay uint c

//延時100us

uint a,b;for a c;a 0;a--for b 40;b 0;b--;

void display uint shu,uint shu1 //顯示函數

uchar qian,bai,shi,ge,qian1,bai1,shi1,ge1;qian shu/1000;bai shu/100%10;shi shu%100/10;ge shu%10;qian1 shu1/1000;bai1 shu1/100%10;shi1 shu1%100/10;ge1 shu1%10;dula 1;P0 table[qian];dula 0;wela 1;P0 0xfe;wela 0;delay 2;dula 1;P0 table[bai];dula 0;wela 1;P0 0xfd;wela 0;delay 2;dula 1;P0 table[shi]|0x80;dula 0;wela 1;P0 0xfb;wela 0;delay 2;dula 1;P0 table[ge];dula 0;wela 1;P0 0xf7;wela 0;delay 2;dula 1;P0 table[qian1];dula 0;wela 1;P0 0xef;wela 0;delay 2;dula 1;P0 table[bai1];dula 0;wela 1;P0 0xdf;wela 0;delay 2;dula 1;P0 table[shi1]|0x80;dula 0;wela 1;P0 0xbf;wela 0;delay 2;dula 1;P0 table[ge1];dula 0;wela 1;P0 0x7f;wela 0;delay 2;

void display0 uchar shi,uchar fen,uchar miao 示時間函數

uchar aa,bb,cc,dd,ee,ff;aa shi/10;bb shi%10;cc fen/10;

顯 // dd fen%10;ee miao/10;ff miao%10;dula 1;P0 table[aa];dula 0;wela 1;P0 0xfe;wela 0;delay 4;dula 1;P0 table[bb]|0x80;dula 0;wela 1;P0 0xfd;wela 0;delay 4;dula 1;P0 table[cc];dula 0;wela 1;P0 0xfb;wela 0;delay 3;dula 1;P0 table[dd]|0x80;dula 0;wela 1;P0 0xf7;wela 0;delay 4;dula 1;P0 table[ee];dula 0;wela 1;P0 0xef;wela 0;delay 4;dula 1;P0 table[ff];dula 0;wela 1;P0 0xdf;wela 0;delay 4;

附2 系統原理圖

河南理工大學本科課程設計報告河南理工大學本科課程設計報告按 鍵

AT89S52單片機 L298N驅動 數碼管顯示 信號檢測 24C02 指示燈 直 流 電 機 開始 初始化 按鍵掃描 是否啟動 結束 是否暫停

速度是否小于5Km/h 是 否

1.5元/公里 2元/公里 數碼管顯示 是否雙程 暫停計價 是 是 否

每5分鐘加1公里 是 否 查詢 處理計算

第五篇:出租車計價器

基于單片機的出租車計價器設計

摘要

出租車計價器的數字系統的設計正是基于一些專用的芯片,才發揮其有效特性,從而實現出租車的計價功能。此數字系統主要分為三個單元,即里程計數及顯示單元、價格計數及顯示單元、脈沖產生。本設計是一個基于單片機AT89C51的出租車自動計費設計,附有復位電路,時鐘電路等。關鍵詞:出租車計費器;單片機;控制

Abstract Taximeter design digital system is based on some special chip, to play their effective characteristics, thus realizing the taxi valuation function.This system is mainly divided into there modules, namely the mileage counting and display unit, and display unit price counting, pulsing.The design is based on a single chip AT89C51taxis design, a reset circuit, clock circuit.Keywords:taximeter,a single-chip microcomputer,control

1引言

1.1 設計目的

近幾年來,出租汽車行業在各地得以蓬勃發展,但采用模擬電路和數字電路設計的計價器整體電路的規模較大,用到的器件多,造成故障率高,難調試。而采用單片機進行的設計,相對來說功能強大,用較少的硬件和適當的軟件相互配合可以很容易地實現設計要求,且靈活性強。

1.2 功能要求

(1)用前4位數碼管實時顯示里程數,單位為千米,最后一位為小數位;用后4位數碼管時時顯示金額數,單位為元,最后一位為小數位。

(2)規定出租車里程小于2千米收費5元,超過2千米收費為8*(way-20)/5。

1.3 設計方法

本設計采用AT89C51單片機為主控器,并用頻率信號發生器模擬車速,利用AT89C51的定時器工作在方式1下定時實現對出租車的計價設計,輸出采用共陰極的集成8位7段數碼顯示管。設計方案及原理

2.1 設計方案

采用AT89C51單片機為主控器,并用頻率信號發生器模擬車速,利用AT89C51的定時器/定時器T1工作在方式1下定時實現對出租車的計價設計,輸出采用共陰極的集成8位7段數碼顯示管。本電路設計的計價器不但能實現基本的計價,而且

單片機原理及系統課程設計報告

還能根據里程來調節單價。

2.2 設計原理

出租車計價是根據車所行駛的路程以及乘客乘車的里程綜合決定的。出租車行駛總路程可以通過車輪的周長乘車輪旋轉圈數得到。即可計算得到車輪旋轉幾周出租車能行駛一公里的路程。通過計數接收到的脈沖個數,計算出當前所行駛的路程。同時,通過數碼管顯示當前的行駛里程和需支付的車費。出租車計價器用于記錄里程、起步公里數與價格的關系。模擬出租車計價器能根據總里程數、起步公里數的情況作出相應報價等。這個系統以AT89C51單片機為主控器,單片機的計數器/定時器T1工作在方式1下來對外部脈沖計數,最后通過集成的8位7段LED數碼管顯示里程數和價錢。總體模塊框圖如圖1所示。

總金額顯示單價顯示AT89C51脈沖產生動態掃描數碼管顯示

圖1 總體框圖 硬件設計

對于AT89C51的計數器/定時器T1,通過對寄存器TCON的設置,即使它的M1M0=01,計數器/定時器T1工作在方式1下,構成16位計數器/定時器。此時TH0、TL0都是8位加法計數器。此設計中,T1為計數工作方式,計數范圍為1~2^16=1~65536(個外部脈沖)。當計數溢出時則置位并申請中斷,進入中斷服務 執行中斷程序。

通過74HC138接P20、P21、P22輸出來對8位7段的智能掃描LED進行段選,并且通過P1口對LED進行位選,最后將結果顯示在LED上。硬件設計圖如圖2所示。

74HC138是三八譯碼器,在工作之前,使74HC138的使能端有效,再使74HC138的A、B、C接P20、P21、P22的輸出達到對LED位選線的控制,使相應的位顯示相應的結果。硬件總設計圖如圖2所示。

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

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

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

    《基于單片機的出租車計價器的設計》開題報告 關鍵詞:出租車計價器 浙江師范大學應用電子技術專業開題報告范文 杭州論文 開題報告 一.選題背景和意義 隨著我國經濟的迅速發展......

    出租車計價器設計范文

    平頂山工業職業技術學院 目錄 目錄 .....................................................................................................................................

    單片機課程設計電子鐘源程序[最終定稿]

    ORG0000H LJMPMAIN ORG001BH LJMPLOOP ORG0100H MAIN:MOV21H,#17H MOV22H,#3AH MOV23H,#00H;設定時間初值 MOV36H,#10 MOV39H,#10 MOVR7,#14H;循環20次50*20=1000msMOVDPTR,......

    出租車計價器 硬件課程設計

    硬件課程設計報告 題目:出租車計價器 目錄 1. 引言 ........................................................................................................................

    出租車計價器畢業論文附錄

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

    出租車計價器調試報告

    出租車計價器調試報告 本設計可分為單片機主控模塊、鍵盤、顯示器、溫度檢測、狀態指示、時鐘日歷、語音收錄播報、分頻器電路、脈沖信號發生器等9部分。仔細分析系統的工作......

    出租車計價器信息(精選5篇)

    霍市質監局集中對全市出租車計價器進行安裝檢定 切實規范運營行為近期,霍市質監局下屬檢測中心對全市范圍內具有交通主管部門頒發經營許可證的500余輛出租車計價器進行統一......

    出租車計價器課程設計2

    出租車計價器課程設計 目錄 前言 1、 系統工作原理 1.1 功能說明 1.2 基本原理 2、 硬件設計 2.1 單片機最小系統單元 2.2 A44E霍爾傳感器檢測單元 2.3 AT24C01存儲單元 2.......

主站蜘蛛池模板: 国产精品成人久久小草| 国产 字幕 制服 中文 在线| 水蜜桃亚洲一二三四在线| 好男人社区影院www| 国产精品成人永久在线四虎| 国产精品久久久久久久伊一| 国产无遮挡18禁无码网站| 人人人妻人人澡人人爽欧美一区| 人妻被按摩师玩弄到潮喷| 放荡的闷骚娇妻h| 性夜夜春夜夜爽aa片a| 欧美日韩精品一区二区在线播放| 国产精品高清网站| 美丽人妻被按摩中出中文字幕| 青青草99久久精品国产综合| 色av综合av综合无码网站| 中文无码字幕一区到五区免费| 国产一区二区三区精品av| 国内露脸少妇精品视频| 国产精品久久久久久久妇| 国产精品午夜爆乳美女视频| 又黄又爽又高潮免费毛片| 暴力调教一区二区三区| 久久综合九色综合97伊人| 青青草国产精品免费观看| 精品无码一区二区三区电影| 狠狠色噜噜狠狠狠狠色综合网| 精品1卡二卡三卡四卡老狼| 久久久久久无码日韩欧美| 国产乱子伦农村xxxx| 欧美国产成人精品一区二区三区| 无码aⅴ免费中文字幕久久| av无码精品一区二区三区宅噜噜| 欧美黑人巨大videos精品男男| 日韩欧美一区二区三区免费观看| 国产亚洲精品久久77777| 一边摸一边吃奶一边做爽| 亚洲国产成人精品无码区在线观看| 免费无码久久成人影片| 人妻少妇久久中文字幕| 欧美综合精品久久久久成人影院|