




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于單片機的出租車計價系統設計1 設計目的,要求和設計方法1.1設計目的(1) 學習基本理論在實踐中綜合運用的初步經驗,掌握電路設計的基本方法、設計步驟,培養綜合設計與調適能力,進一步提高綜合運用所學知識和設計能力的的目的。(2) 掌握C語言程序設計方法。(3) 培養實踐技能,提高分析和解決實際問題的能力,并具備一定程度的設計能力。1.2基本設計要求本出租車自動計費,上電后顯示最初的起步價,里程計費單價,等待時間計費單價,通過按鍵可以調節起步價,里程計費單價,等待時間計費單價。同時具有運行,等待,暫停等狀態,可以顯示暫停的時間。出租車停止后能夠顯示行駛的總費用。1.3性能指標1、費用的計算是按
2、行駛里程收費。設起步價為7.00元。2、當里程<3km時,按起價計算費用。3、當里程>3km時,每公里按1.7元計費。4、等待累計時間>2min時,按1.5元/min計費。1.4顯示功能1、顯示行駛里程:用兩位數字顯示,顯示方式為“XX”,單位為km。計程范圍0-99km,精確到1km。2、顯示等候時間:用兩位數字顯示,顯示方式為“XX”,單位為min。計時范圍0-59min,精確到1min。3、顯示總費用:用四位數字顯示,顯示方式為“XXX.X”,單位為元。計價范圍0-999.9元,精確到0.1元。1.3 設計方法本設計采用AT89C51單片機為主控器,并用開關或者頻率信號
3、發生器模擬車速,利用AT89C51的定時器工作在方式1下定時實現對出租車的計時及計價設計,輸出采用LCD液晶顯示屏顯示。2 設計方案及原理2.1 設計方案本設計,利用單片機豐富的端口和控制的靈活性,采用AT89C51單片機為主控器,并用開關或頻率信號發生器模擬車速,通過石英振蕩器,LCD液晶顯示和發光二級管以及單片機內部程序構成完整的出租車計價系統,基本可以實現了按運行狀態計價的功能,價格調整功能。2.2 設計原理出租車計價是根據車所行駛的路程以及乘客乘車的里程綜合決定的。出租車行駛總路程可以通過車輪的周長乘車輪旋轉圈數得到。即可計算得到車輪旋轉幾周出租車能行駛一公里的路程。通過計數接收到的脈
4、沖個數,計算出當前所行駛的路程。同時,通過LCD液晶顯示器顯示當前的行駛里程、等待時間和需支付的車費。出租車計價器用于記錄里程、起步公里數與價格的關系。模擬出租車計價器能根據總里程數、起步公里數的情況作出相應報價等。3出租車計價器系統的硬件設計3.1出租車硬件框圖圖2-1系統的硬件框圖3.2 出租車計價器硬件連接圖AT89C51的最小系統:時鐘電路是單片機內部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取30pF)。這樣就構成一個穩定的自激振蕩器。復位操作是按鍵復位,按鍵復位具有上電復位功能外,若
5、要復位,只要按圖中的RESET鍵,電源VCC經電阻R1、R2分壓,在RESET端產生一個復位高電平。AT89C51的最小系統硬件圖如圖3.2(a)所示。圖3.2(a) AT89C51的最小系統硬件圖液晶顯示和LED燈指示電路:顯示電路對于現實電路我們采用液晶顯示,液晶又分字符型和點陣型,我們使用的液晶是字符型液晶,并且帶字符庫的,不需要查找代碼,英文字符就可以。運行狀態指示電路采用發光二級管對運行方式進行指示,可清楚看到計價器的運行狀態。液晶顯示和LED燈指示電路如圖3.2(b)所示。圖3.2(b) 液晶顯示和LED燈指示電路 按鍵電路:按鍵電路是通過按鍵去調節初始選擇、調節,模式選擇,開始運
6、行,終止等功能。霍爾傳感器里程計算是通過安裝在車輪旁的霍爾傳感器檢測到的信號,送到單片機,經處理計算,送給顯示單元的。而由于本次實驗室的局限不能利用霍爾傳感器,所以我們利用按鍵來代替霍爾傳感器,通過按一次鍵代表汽車行駛了1公里,當在行駛過程中通過按鍵來選擇運行狀態。按鍵電路如圖3.2(c)所示。圖3.2(c) 按鍵電路4出租車計價器系統的軟件設計4.1系統流程圖出租車計價器系統流程圖如附錄1所示。4.2源程序代碼 根據設計的要求,在本系統中主要有主程序和延時程序,主程序中包括中斷服務程序和鍵盤顯示子程序、計算子程序等。現在應用更廣泛的是單片機C語言,因其簡單明了,故此次課程設計采用單片機C語言
7、編程。程序源代碼如附錄2所示。4.3程序調試域運行結果在Keil C51 uvision4中對系統建立項目,選定合適的單片機AT89C51,創建一個計價器的新文件,并將上述的源程序進行編輯和選項操作進行編譯,以生成計價器的HEX文件。5 系統仿真及實際調試5.1運行圖示仿真開始后,首先按動初始選擇按鈕,則可以在運行單價,等待單價,起步價之間切換,每按一次切換一個量,選定后可以按動初始調節按鈕進行調節,調節完成后,按下開始運行按鈕則開始運行,選擇運行模式后開始計費,不同的運行模式會有不同的指示燈亮起,在運行過程中液晶屏會隨時顯示走過的路程和等待的時間,以及總的費用。仿真圖如附錄3所示。5.2仿真
8、問題分析問題需要改進,例如本設計經過多次的調試與改正,最終達到了設計方案中的結果。在仿真試驗中各種設計要求都能夠得到驗證。但由于設計的原因,本系統仍然總在一些自動化程度不夠,運行模式還需要手動選擇。6總結出租車計費器系統的設計已經全部完成,能利用AT89C51單片機對出租車啟動,停止,暫停等運行狀態進行選擇和顯示,能將單價和費用適時通過LCD顯示出來。本款出租車計價器包括單價輸出、單價調整、顯示當前的總費用等功能。雖然達到了基本的設計目的,但仍然存在一些問題,策劃的不夠全面,對單片機不夠熟悉,系統編寫不夠簡潔完善,使得計價器計費不夠細致,不夠人性化。經過這次課程設計讓我學會了很多的東西。經過自
9、己努力,基本上完成了設計要求的內容,在系統可行性分析、原理圖設計等方面都作了一些實際工作,同時也遇到了一些問題,存在一些不足。學會了怎么去查找些資料,把所找到的東西與自己的問題所結合起來并給予解決。這次設計使我學會把以前學到的理論知識應用于實踐,使我認識到理論知識與實踐之間有一定的差距,只有通過不斷的努力學習和實踐才能很好的把理論知識應用到實踐當中,也只有通過不斷的實踐才能加深對理論知識的理解。 參考文獻1王思明,張金敏,張鑫等.單片機原理及應用系統設計.北京:科學出版社,20122 張金敏,董海棠,高博等.單片機原理與應用系統設計.成都:西南交通大學出版社, 20103 李華,王思明,張金敏
10、.單片機原理及應用.蘭州:蘭州大學出版社,2001附錄1附錄2 #include<reg52.h>#define uchar unsigned char#define uint unsigned int /*定義1602讀寫使能端口*/sbit rw=P21;sbit rs=P20;sbit en=P22;sbit b=P07;sbit gl=P10;void lcd_init(); /lcd設置函數void wr_com(uchar command); /命令函數void wr_data(uchar data0); /數據函數void lcd_clear(); /清屏函數void
11、 lcd_set(); /屏幕設置函數void busy(); /測忙函數void display(); /啟動前顯示函數void printstring(uchar *s);void display1(); /啟動后顯示函數void key1();/啟動前按鍵sbit K=P30;sbit K1=P31;sbit K2=P35; /開始計價sbit K3=P33; /模式選擇(行程/等待)sbit K4=P34;/復位sbit g=P27; sbit aa=P23; /運行sbit bb=P24; /等待sbit cc=P25; /暫停/sbit led_run=P30;/sbit led_
12、await=P31;/sbit led_stop=P32;bit f_start;bit jump_in;bit jump_out;void key(); /啟動后按鍵/*定義液晶顯示地址數組*/uchar code table=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x70;uchar dispbuf=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar dispbuf1=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar v,v1; uchar i,m=0;void init();void
13、chuli();void chuli1();void delay(uchar t); /延時函數void clear(); /終止函數void set(uchar x);void set1(uchar y); uchar command;uchar count,count1;uchar second,minite,second1,minite1;unsigned int tt,tt1;unsigned char value1=70,value2=17,value3=15; /value1=起步價,value2=超出每公里價格,value3=等待價格unsigned int money; voi
14、d main()/ Init_Timer1();/定時器中斷函數 EX0=1;/開外部中斷0 IT0=1;/采用跳變沿觸發方式 init(); lcd_init(); while(1) key1();chuli(); display(); if(jump_in=1) jump_in=0; lcd_init(); while(1) key(); chuli1(); display1(); if(jump_out=1) lcd_init(); jump_out=0; clear(); break; void clear() TR0=0; TR1=0; money=0; second=0; seco
15、nd1=0; minite=0; minite1=0; value1=70; value2=17; value3=15; / led_run=1; /led_await=1; / led_stop=1; v=0; v1=0; for(i=0;i<15;i+) dispbufi=0; dispbuf1i=0; m=0;void init()/中斷定時 TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; ET0=1; ET1=1; EA=1
16、; TR0=0; TR1=0;void t0_(void) interrupt 1 using 0 /中斷1模式0 用來計時 秒、分 count+; if(count=20) count=0; second+; if(second=60) second=0;minite+;if(minite=99) minite=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; dispbuf10=m/10; dispbuf11=m%10; dispbuf12=second/10; dispbuf13=second%10;void t1_(void) inter
17、rupt 3 using 3 /中斷3模式3用來計時 秒、分 count1+; if(count1=20) count1=0; second1+; if(second1=60) second1=0;minite1+;if(minite1=99) minite1=0; TH1=(65536-50000)/256; TL1=(65536-50000)%256; dispbuf14=minite1/10; dispbuf15=minite1%10; dispbuf16=second1/10; dispbuf17=second1%10; void lcd_init() wr_com(0x3c); wr
18、_com(0x06); wr_com(0x0c); wr_com(0x01);void wr_com(uchar command) /命令 busy(); rs=0; rw=0; P0=command; en=1; en=0;void wr_data(uchar data0) /數據 busy(); rs=1; rw=0; P0=data0; en=1; en=0;void busy() /測忙函數 while(1) en=0; rs=0; rw=1; P0=0xff; en=1; if(b!=1)break; en=0;void chuli() /分離出百位十位個位 dispbuf0=val
19、ue1/100%10; dispbuf1=value1/10%10; dispbuf2=value1%10; dispbuf3=value2/100%10; dispbuf4=value2/10%10; dispbuf5=value2%10; dispbuf6=value3/100%10; dispbuf7=value3/10%10; dispbuf8=value3%10;void display() /初始顯示函數 set(0); printstring("step :"); wr_data(tabledispbuf0); wr_data(tabledispbuf1);
20、printstring("."); wr_data(tabledispbuf2); set(16); printstring("mileage :"); wr_data(tabledispbuf3); wr_data(tabledispbuf4); printstring("."); wr_data(tabledispbuf5); set1(0); printstring("await :"); wr_data(tabledispbuf6); wr_data(tabledispbuf7); printstring(
21、"."); wr_data(tabledispbuf8); set1(16); printstring("run : "); wr_data(tabledispbuf10); wr_data(tabledispbuf11); printstring(":"); wr_data(tabledispbuf12); wr_data(tabledispbuf13);void chuli1() if(f_start=1) tt=minite*60+second; tt1=minite1; if(m<=3) money=value1+val
22、ue3*tt1; if(m>3) money=value1+value2*(m-3)+value3*tt1; else if(f_start=0) money=0; dispbuf18=money/100%10; dispbuf19=money/10%10; dispbuf110=money%10;void display1() /運行后顯示函數 set(0); printstring("run: ");/ wr_data(tablem);wr_data(tabledispbuf10);wr_data(tabledispbuf11);/ printstring(&qu
23、ot;:");/ wr_data(tabledispbuf12);/ wr_data(tabledispbuf13); set(14); printstring("await:"); wr_data(tabledispbuf14); wr_data(tabledispbuf15); printstring(":"); wr_data(tabledispbuf16); wr_data(tabledispbuf17); set1(0); printstring("sum is: "); wr_data(tabledispbuf18); wr_data(tabledispbuf19); printstring("."); wr_data(tabledispbuf110);void printstring(uchar *s) /輸出顯示函數 while(*s) wr_data(*s+); void key() /啟動按鍵 if(K3=0) delay(50); /延時消抖動if(K3=0) while(K3=0); v1+; if(v1=4) v1=1; switch(v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六年級親子活動方案
- 共青團特色文化活動方案
- 巡察知識考試試題及答案
- 網絡倫理與道德教育在大學生素養提升中的重要性
- 無機化學全英教學中的學生語言能力與學術能力提升策略
- 2024年石城縣中小學教師招聘城區公立學校教師選調真題
- 建筑央企基礎設施投資項目資產管理與盤活
- 蕪湖市弋江區社區工作者筆試真題2024
- 韶關市始興縣“青年人才”招聘筆試真題2024
- 電子商務專業學生的新媒介素養構成與培養
- 等級醫院評審中應注意的迎評禮儀
- 吉林省長春市東北師大附中明珠學校2023年物理八年級第二學期期末統考模擬試題含解析
- 【小升初】貴州省遵義市2022-2023學年人教版小學六年級下學期數學升學分班考測試卷(含解析)
- LD 52-1994氣瓶防震圈
- GB/T 35351-2017增材制造術語
- GB/T 18268.1-2010測量、控制和實驗室用的電設備電磁兼容性要求第1部分:通用要求
- FZ/T 93074-2011熔噴法非織造布生產聯合機
- 小升初英語教學第一課課件
- 牽引供電系統課件
- 2023年上海市青浦區城管協管員招聘筆試題庫及答案解析
- 內蒙古自治區義務教育課程設置計劃
評論
0/150
提交評論