C語言出租車計價器課程設計_第1頁
C語言出租車計價器課程設計_第2頁
C語言出租車計價器課程設計_第3頁
C語言出租車計價器課程設計_第4頁
C語言出租車計價器課程設計_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、出租車計價器課程設計目錄 前言1、  系統(tǒng)工作原理1.1  功能說明1.2  基本原理2、  硬件設計2.1  單片機最小系統(tǒng)單元2.2  A44E霍爾傳感器檢測單元2.3  AT24C01存儲單元2.4  鍵盤調整單元2.5  顯示單元3、  軟件設計3.1  系統(tǒng)主程序3.2  中斷程序  里程計數(shù)中斷程序  中途等待中斷程序3.3  計算程序3.4  顯示程序3.5  鍵盤程序4、  總結參考文獻附錄

2、A  系統(tǒng)原理圖附錄B  系統(tǒng)源程序  前言     隨著出租車行業(yè)的發(fā)展,出租車已經是城市交通的重要組成部分,從加強行業(yè)管理以及減少司機與乘客的糾紛出發(fā),具有良好性能的計價器對出租車司機和乘客來說都是很必要的。而采用模擬電路和數(shù)字電路設計的計價器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調試。而采用單片機進行的設計,相對來說功能強大,用較少的硬件和適當?shù)能浖嗷ヅ浜峡梢院苋菀椎貙崿F(xiàn)設計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。本設計采用AT89S52單片機為主控器,以A44E霍爾傳感器測距,

3、實現(xiàn)對出租車的多功能的計價設計,并采用AT24C01實現(xiàn)在系統(tǒng)掉電的時候保存單價等信息,輸出采用8段數(shù)碼顯示管。本電路設計的計價器不但能實現(xiàn)基本的計價,而且還能根據白天,黑夜和中途等待來調節(jié)單價。 第一章  系統(tǒng)工作原理 1.1  功能說明    出租車計價器根據乘客乘坐汽車行駛距離和等候時間的多少進行計價,并在行程中同步顯示車費值。從起步價開始,當汽車程行駛未滿3公里時,均按起步價計算。過3公里后,實現(xiàn)每1公里單價收費,中間遇暫停時,計程數(shù)不再增加,開始計時收費,測距收費和測時收費的和便構成了一位乘客的車費。同時

4、,白天和夜晚價格不同,可以進行切換。白天單價、夜晚單價、等待單價和起步價格都可通過獨立鍵盤進行調節(jié)。(默認起步價為5元/3公里,里程單價白天為1.5元/公里,夜晚為1.8元/公里,等待計時單價為0.5元/5分鐘) 1.2  基本原理    計數(shù)器系統(tǒng)主要由五部分組成:A44E霍爾傳感器、AT89S52單片機、獨立鍵盤、EEPROM AT24C01和顯示數(shù)碼管。    霍爾傳感器安裝在車輪上,主要檢測汽車行進的公里數(shù),并產生一系列相應的脈沖輸出,脈沖送到單片機進行處理,單片機根據程序設定通過計算脈沖數(shù)換算出行駛公里數(shù)

5、,再根據從EEPROM中讀取的價格等相關數(shù)據進行金額的計算,計算好的金額、里程和單價都實時地顯示在數(shù)碼管上。獨立鍵盤可以調節(jié)價格等相關數(shù)據,按下相應的按鈕,產生信號交由單片機處理并實時顯示出來,調節(jié)好的數(shù)據存儲到EEPROM中,掉電后可以使調好的數(shù)據不丟失,下次得電后直接從EEPROM讀到單片機,系統(tǒng)結構圖如圖1。                       

6、0;                 圖1 系統(tǒng)結構圖                               &#

7、160; 第二章  硬件設計 2.1  單片機最小系統(tǒng)單元    主控機系統(tǒng)采用了Atmel 公司生產的 AT89S52單片機,它含有256 字節(jié)數(shù)據存儲器,內置8K 的電可擦除FLASH ROM,可重復編程,大小滿足主控機軟件系統(tǒng)設計,所以不必再擴展程序存儲器。復位電路和晶振電路是AT89S52 工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖2所示。  圖2 單片機最小系統(tǒng)圖    AT89S52 的復位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并

8、持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復位操作。在復位電路中,按一下復位開關就使在RST端出現(xiàn)一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統(tǒng)的內部時鐘電路。 2.2  A44E霍爾傳感器檢測單元    A44E 屬于開關型的霍爾器件,其工作電壓范圍比較寬(4.518V),其輸出的信號符合TTL電平標準,可以直接接到單片機的IO 端口上,而且其最高檢測頻率可達到1MHZ。A44E 集成霍耳開關由穩(wěn)壓器A、霍耳電勢發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個基本部分組成。   

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

10、   圖3  A44E霍爾傳感器原理    里程計算是通過安裝在車輪上的霍爾傳感器檢測到的脈沖信號,送到單片機產生中斷,單片機再根據程序設定,計算出里程。其原理如圖4所示。         圖4 傳感器測距示意圖    本系統(tǒng)選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號的輸入端(這樣可以減少程序設計的麻煩),車輪每轉一圈(設車輪的周長是1米),霍爾開關就檢測并輸出信號,引起單片機的中斷,對脈沖計數(shù),當計數(shù)達到1

11、000次時,即1公里,單片機就控制將金額自動增加,如圖5。 圖5  A44E霍爾元件接線圖 2.3  AT24C01存儲單元    存儲單元的作用是在電源斷開的時候,存儲當前設定的單價信息。AT24C01 是Ateml公司的1KB的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V),芯片內的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。AT24C02芯片引腳配置如圖6所示。    &#

12、160;        存儲單元電路連接如圖7所示。 圖 7  存儲單元電路原理圖    圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態(tài)功耗。由于AT24C01的數(shù)據線和地址線是復用的,采用串口的方式傳送數(shù)據,所以只用兩根線SCL(時鐘脈沖)和SDA(數(shù)據/地址)與單片機P2.2和P2.3口連接,進行傳送數(shù)據。    每當設定一次單價,系統(tǒng)就自動調用存儲程序,將單價信息保存在芯片內;當系統(tǒng)重新上電的時候,自動調用讀存儲器

13、程序,將存儲器內的單價等信息,讀到緩存單元中,供主程序使用。 2.4  鍵盤調整單元    當單價等信息需要進行修改時,就要用到鍵盤進行修改。由于調節(jié)信息不多,故采用4個獨立鍵盤即可,分別實現(xiàn)清零、切換、增大、減小和功能等作用。電路原理如圖8所示。 圖8 鍵盤調整單元接線圖S1:接P1.0口,對上一次的計費進行清零,為下次載客準備S2:接P1.1口,實現(xiàn)白天和夜晚單價的切換;當功能鍵S4按下時,S2可對數(shù)據進行增大。S3:接P1.2口,當功能鍵S4按下時,S3可對數(shù)據進行減小。S4:接P1.3口,按1次,進入調整白天單價;按2次,進入

14、調整夜晚單價;按3次,進入調整等待單價;按4次,進入調整起步價;按5次,返回。 2.5  顯示單元    顯示單元由7個8段共陽數(shù)碼管組成,采用動態(tài)掃描進行顯示。前三個數(shù)碼管分別接P3.0、P3.1和P3.2,用于顯示總金額;中間兩個分別接P3.4和P3.5,用于顯示里程;后邊兩個分別接P3.6和P3.7,用于顯示單價。電路如圖9所示。            圖9 數(shù)碼管顯示圖 第三章  軟件設計 3.1&

15、#160; 系統(tǒng)主程序    在主程序模塊中,需要完成對各參量和接口的初始化、出租車起價和單價的初始化以及中斷、計算、循環(huán)等工作。另外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序將根據各標志寄存器的內容,分別完成啟動、清除、計程和計價等不同的操作。當汽車運行起來時,就啟動計價,根據里程寄存器中的內容計算和判斷行駛里程是否已超過起步價公里數(shù)。若已超過,則根據里程值、每公里的單價數(shù)和起步價數(shù)來計算出當前的總金額,并將結果存于總金額寄存器中;中途等待時,無脈沖輸入,不產生中斷,當時間超過等待設定值時,開始進行計

16、時,并把等待價格加到總金額里,然后將總金額、里程和單價送數(shù)碼管顯示出來。程序流程如圖10所示。              圖10 主程序流程圖                          圖11 計算程序流程圖 3.2

17、60; 中斷程序      里程計數(shù)中斷程序    每當霍爾傳感器輸出一個低電平信號就使單片機中斷一次,當里程計數(shù)器對里程脈沖計滿1000次時,進入里程計數(shù)中斷服務程序中,里程變量加一。主函數(shù)中總金額也相應地變化。       中途等待中斷程序    在中途等待中斷程序中,每1ms產生一次中斷,將當前里程值送入某個緩存變量,每5分鐘將緩存變量中的值和當前里程值比較,當汽車停止,霍爾傳感器5分鐘沒有輸出信號,當前里程值和緩存變量內的值相同,則進入等

18、待計時,每5分鐘記一次價格。 3.3  計算程序    計算程序根據里程數(shù)分別進入不同的計算公式。如果里程大于3公里,則執(zhí)行公式:總金額=起步價+(里程-3)*單價+等待時間*等待單價;否則,執(zhí)行公式:總金額=起步價+等待時間*等待單價。程序流程圖如圖11所示。 3.4  顯示程序    顯示程序利用定時器每1ms產生一次中斷,相應變量置位,點亮一個數(shù)碼管,顯示一位數(shù)據,利用主函數(shù)內的循環(huán),實現(xiàn)動態(tài)掃描顯示,同時根據數(shù)碼管余輝和人眼暫留現(xiàn)象,即可實現(xiàn)顯示。 3.5  鍵盤程序

19、    鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環(huán)主程序,一旦右按鍵按下,便轉向相應的子程序處理,處理結束再返回。流程圖如圖12。         圖12  鍵盤程序流程圖第四章  總結    經過這些天有關于出租車計價器的課程設計,使我對單片機的應用有了更深的了解。在課程設計的過程中,還是碰到了許多的問題。比如,對于數(shù)碼管動態(tài)掃描顯示和鍵盤的延時防抖的綜合編程不能較好地解決;對于代碼的前后順序及調用掌握得還不夠

20、好;對于一些相關的應用軟件沒能熟練掌握。通過這幾天晚上的苦想和反復調試,以及參考網上的程序,最終還是把問題解決了。通過這次課程設計,我最大的收獲就是自己的動手能力和獨立解決問題的能力得到了很大的提高,也充分體會到了自己設計東西的樂趣、學會查閱資料和對別人的東西融會變通的重要性,也明白了很多知識光靠趴在書本上學是學不到其中的精髓的,必須親自去試著實踐,親自去經歷才能對它們真正的掌握,凡事都要自己去動下手,去實踐一下,遇到困難,永遠不要沮喪氣餒。在動手的過程中,不僅能增強實踐能力,而且在理論上可以有更深的認識;這次設計給了我極大的鼓舞和信心,相信在以后的學習中可以通過不斷的摸索和實踐來提高其他方面

21、的知識。 參考文獻1 馬淑華,王鳳文,張美金編著. 單片機原理與接口技術(第二版). 北京:北京郵電大學出版社,2007.2 譚浩強著. C程序設計(第三版). 北京:清華大學出版社,2005.附錄A   系統(tǒng)原理圖  源程序 #include<reg52.h>#include <intrins.h> #define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();_nop_()

22、; uchar code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; sbit exter=P33; /外部中斷 sbit key0=P10; /清零sbit key1=P11; /切換/+sbit key2=P12; /-sbit key3=P13; /功能鍵 sbit p30=P30; /數(shù)碼管各位控制sbit p31=P31;sbit p32=P32;sbit p34=P34;sbit p35=P35;sbit p36=P36;sbit p37=P37; sbit SDA=P23; /IIC引腳sbit SCL=P22

23、; 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; vo

24、id stop() / IIC停止位 SDA = 0; delayNOP(); SCL = 1; delayNOP(); SDA = 1; void respons() /IIC應答位 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_byt

25、e(uchar date) / 從MCU寫到EEPROM 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; delayNOP(); SDA=1; delayNOP(); void write_data(uchar addr, uchar date) / 在指定地址addr處寫入數(shù)據date start(); write_byte(0xa0); respons(); write_byte(a

26、ddr); respons(); write_byte(date); respons(); stop(); uchar read_data(uchar addr) / 在指定地址addr讀取數(shù)據 uchar date; start(); write_byte(0xa0); respons(); write_byte(addr); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; void display(uint zongjine0,uint licheng0,uint

27、 danjia0) /數(shù)碼管顯示 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; 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

28、0:p30=0;P0=tablejbai;break; case 1:p31=0;P0=tablejshi&0x7f;break; case 2:p32=0;P0=tablejge;break; case 3:p34=0;P0=tablelshi;break; case 4:p35=0;P0=tablelge;break; case 5:p36=0;P0=tabledshi&0x7f;break; case 6:p37=0;P0=tabledge;break; numwei+; if(numwei=7) numwei=0; void keyscan() /鍵盤掃描 if(key

29、3=0) /功能鍵調節(jié) delay(5); if(key3=0) key3num=1; while(!key3); delay(5); while(!key3); while(key3num) if(key3num=1) /調白天單價 if(key1=0) delay(5); if(key1=0) danjia1+; if(danjia1=100) danjia1=0; while(!key1); delay(5); while(!key1); if(key2=0) delay(5); if(key2=0) danjia1-; if(danjia1=-1) danjia1=99; while(

30、!key2); delay(5); while(!key2); display(1,0,danjia1); if(key3num=2) /調夜晚單價 write_data(1,danjia1); if(key1=0) delay(5); if(key1=0) danjia2+; if(danjia2=100) danjia2=0; while(!key1); delay(5); while(!key1); if(key2=0) delay(5); if(key2=0) danjia2-; if(danjia2=-1) danjia2=99; while(!key2); delay(5); wh

31、ile(!key2); display(2,0,danjia2); if(key3num=3) /調等待單價 write_data(2,danjia2); if(key1=0) delay(5); if(key1=0) danjia3+; if(danjia3=100) danjia3=0; 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(

32、3,0,danjia3); if(key3num=4) /調起步價 write_data(3,danjia3); if(key1=0) delay(5); if(key1=0) qibu+; if(qibu=100) qibu=0; while(!key1); delay(5); while(!key1); if(key2=0) delay(5); if(key2=0) qibu-; if(qibu=-1) qibu=99; while(!key2); delay(5); while(!key2); display(4,0,qibu); if(key3num=5) /退出功能鍵 write_d

33、ata(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);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論