




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本科畢業論文畢業設計(論文)題目 出租車計價系統設計 專業班級 計算機通信工程08級 學號 姓名 指導教師姓名 指導教師職稱 講師 2011年 12 月 2 日摘 要摘 要:出租車計價器是乘客與司機雙方的交易準則,它是出租車行業發展的重要標志,是出租車中最重要的工具。它關系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。因此,汽車計價器的研究也是十分有一個應用價值的。 而采用模擬電路和數字電路設計的計價器整體電路的規模較大,用到的器件多,造成故障率高,難調試,對于模式的切換需要用到機械開關,機械開關時間久了會造成接觸不良,功能不易實現。而采用單片機進行
2、的設計,相對來說功能強大,用較少的硬件和適當的軟件相互配合可以很容易的實現設計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。針對計費模式的切換,通過軟件編程就可以輕易而舉的實現。避免了機械開關帶來的不穩定因素。關鍵詞: 出租車計價器; 單片機 ; 控制abstractabstract: taximeter is both passengers and drivers of the transaction criteria, it is the taxi industry an important symbol, a taxi is the most important tools.
3、it relates to the interests of both transactions. has a good performance regardless of the meter is a vast number of taxi drivers or passengers are very necessary. therefore, the car meter is also very much a study of value. the use of analog circuits and digital circuit design of the meter as a who
4、le circuit of a larger scale, using the device, a failure rate is high and difficult to debug, the pattern of switching need to use mechanical switches, mechanical switch will cause a long-time contacts bad, functions not easy to achieve. scm used for the design, a relatively powerful, with less har
5、dware and appropriate software can easily coordinate with each other to achieve the design requirements, flexibility and strong, can be programmed by software to complete more of the additional function. pricing model for the switch, software programming and can easily cite the achievement. to avoid
6、 a mechanical switch the destabilizing factors.keywords: taximeter ; 89 s51 mcu ; control目 錄摘要 .第 1章 引言 .1. 1 出租車計價器概述 .1. 2 本設計任務 . 1.2.1 設計任務 . 1.2.2 設計要求 .1. 3 系統主要功能 .第2章 系統主程序設計 .第3章 定時中斷程序設計.第4章 中斷服務程序設計.4. 1 里程計數中斷服務程序. 4. 2 中斷等待服務程序概述.第5章 鍵盤服務程序設計 .第6章 顯示子程序服務程序設計.第7章 設計源程序 .致謝.參考文獻.第1章 引 言本
7、次課程設計利用單片機技術來實現一臺多功能出租車計價器,具有性能可靠、電路簡單、成本低等特點。1.1 出租車計價器概述計價器顯示的營運金額是營運里程與價格的函數(等候時間一般折算成一定比例的里程來計算)。出租車計價器通過傳感器與行駛車輛連接。出租汽車的實際里程通過傳感器的脈沖信號在計價器里折算成一定的計價營運里程。目前市場上出租車計價器功能主要有具有數據的復位功能、白天/晚上轉換功能、數據輸出功能、計時計價功能等等,但能夠進行語音播報數據信息的出租車計價器還是比較少見的,針對這一點我們來設計一款多功能出租車計價器,在原有功能的基礎上增加單價輸出、單價調整、路程輸出、顯示當前的系統時間、語音播報數
8、據信息等功能。1.2 本設計任務1.2.1 設計任務 設計一款基于at89s51單片機,霍爾傳感器的出租車計價器。1.2.2 設計要求1 不同情況具有不同的收費標準。l 白天l 晚上l 途中等待(10min 開始收費)2能進行手動修改單價。3具有數據的復位功能。(1) io 口分配的簡易要求。l 距離檢測使用霍爾開關a44el 白天/晚上收費標準的轉換開關l 數據的清零開關l 單價的調整(最好使用和按鍵)(2) 數據輸出(采用lcm103)。l 單價輸出 2 位l 路程輸出 2 位l 總金額輸出 3 位4.按鍵。l 啟動計時開關l 數據復位(清零)l 白天/晚上轉換1.3 系統主要功能 本課程
9、設計所設計的出租車計價器的主要功能有:數據的復位、白天/晚上轉換、數據輸出、計時計價、單價輸出及調整、路程輸出、語音播報數據信息、實現在系統掉電的時候保存單價和系統時間等信息等功能。輸出采用8 段數碼顯示管。本電路設計的計價器不但能實現基本的計價,而且還能根據白天、黑夜、中途等待來調節單價,同時在不計價的時候還能作為時鐘為司機同志提供方便。 第2章 系統主程序設計2.1 初始化程序系統上電時,初始化程序將r1r5儲存單元清0.2.2 主程序主程序中通過循環判斷是否等待計價和車輪計數進行總體計價的實現。在等計價中,調用等待計價子程序,每4秒調用計數子程序對計數器加1,在車輪計中,車輪每轉過1周調
10、用計數子程序對計數器加1。通過計數器中的累加值,判斷數值并調用顯示。計數子程序是通過對工作寄存器的循環累加實現的。 秒定時子程序通過2000循環調用定時器的2毫秒定時實現,對應調用相應子程序。 碼管顯示子程序通過動態掃描實現。 毫秒定時是通過軟件延時來實現的。系統初始化后,判斷p1.1口,是否等待計價.若是則進入等待計價處理,若否,則進入下一步,判斷是否進行車輪計數,若沒有進行車輪計數則返回等待計價處理,若進行車輪計數,則由計數器加1,然后判斷計數器是否加到50,若不到50,則由數碼管顯示,若到了50則由到50方式處理,最后由數碼管顯示計算的價錢。2.3 主程序流程圖開始初始化是否等待計價是否
11、車輪計數計數器加1是否計數到50到50處理不到50處理數碼管顯示等待計價處理是否否否是是第3章 定時中斷程序設計 3.1 程序概述在定時中斷服務程序中,每100ms 產生一次中斷,當產生10 次中斷的時候,也就到了一秒,送數據到相應的顯示緩沖單元,并調用顯示子程序實時顯示。3.2定時中斷程序流程圖開始保護現場重置計數初值否中斷10次?是數據送顯示緩沖單元調用顯示子程序恢復現場并中斷返回 定時中斷服務程序第4章 中斷服務程序設計4.1里程計數中斷服務程序概述每當霍爾傳感器輸出一個低電平信號就使單片機中斷一次,當里程計數器對里程脈沖計滿1000 次時,使微機進入里程計數中斷服務程序中。在該程序中,
12、需要完成當前行駛里程數和總額的累加操作,并將結果存入里程和總額寄存器中4.2中斷等待服務程序概述當在計數狀態下霍爾開關沒有輸出信號,片內的t1 定時器便被啟動,每當計時到達10分鐘,就對當前金額加上中途等待的單價,以后每十分鐘都自動加上中途等待的單價。當中途等待結束的時候,也就自動切換到正常的計價。第5章 鍵盤服務程序設計5.1鍵盤服務程序概述鍵盤采用查詢的方式,放在主程序中,當沒有按鍵按下的時候,單片機循環主程序,一旦有按鍵按下,便轉向相應的子程序處理,處理結束再返回。第6章 顯示子程序服務程序設計6.1顯示子程序服務程序概述由于是分屏顯示數據,所以就要用到4 個顯示子程序,分別是:時分秒顯
13、示子程序(hms_dis)、金額單價顯示子程序(cp_dis)、路程單價顯示子程序(dp_dis)、單價調節子程序(pa_dis)。第7章 設計源程序#include#include#include #include #define uchar unsigned char#define uint unsigned int/* ds12887實時時鐘時間地址設置 */#define second xbyte 0x6000 /* 秒寄存器地址 */#define sec_alarm xbyte 0x6001#define minute xbyte 0x6002 /* 分寄存器地址 */#defin
14、e min_alarm xbyte 0x6003#define hour xbyte 0x6004 /* 小時寄存器地址 */#define week xbyte 0x6006 /* 星期寄存器地址 */#define date xbyte 0x6007 /* 日期寄存器地址 */#define month xbyte 0x6008 /* 月寄存器地址 */#define year xbyte 0x6009 /* 年寄存器地址 */#define rega xbyte 0x600a /* a寄存器地址 */#define regb xbyte 0x600b /* b寄存器地址 */#defin
15、e regc xbyte 0x600c /* c寄存器地址 */#define regd xbyte 0x600d /* d寄存器地址 */* rt12864hz漢字圖形點陣液晶地址設置 */#define w_c_add xbyte0x2070 /* 寫命令字地址 */#define w_d_add xbyte0x2071 /* 寫數據地址 */#define r_s_add xbyte0x2072 /* 讀狀態字地址 */ #define r_d_add xbyte0x2073 /* 讀數據地址 */#define com xbyte0x2021 /*8279命令口 */#define d
16、at xbyte0x2020 /*8279數據口 */ #define l 1 /*長度系數 */#define ti 50 /*分度數 */#define hn 30 /*孔個數 */ #define low 30 /*最低速度 */uchar xdata key; /*鍵值 */uint idata num=0; /*計數值 */ uint xdata a=1,b=0; /*單價 */uint idata len,fa; /*路程 費用中間參數*/uint idata cout; /*低速計數*/uint idata h1,h2,m1,m2,s1,s2; /*時鐘參數*/ uint ida
17、ta price=10,fate=00,length=0,leng; /*顯示參數*/uint idata m,n,o,p,q,r,s,t; /*顯示中間參數 */uint idata state=0,clear=1,begin=0,pri,tim,tt=0,cc=0;nn=0;/*幾個狀態標志位*/ /*設置,清除,開始計價,單價修改,時間修改,兩位數監視,六位數監視,數字標志*/unsigned char bdata status; /* lcd可位尋址片內數據存儲器,允許位與字節混合訪問 */sbit busy=status7; /*lcd“忙”線的第7位*/uchar bdata st
18、a_8279; /*8279*/sbit du=sta_82797; /* 8279方式設置命令字 */unsigned char rflag; unsigned char bdata sta_ds; sbit uip=sta_ds7; uchar ds_h,ds_m,ds_s,ds_t; unsigned char bdata ds_time; unsigned char code no10=0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9;/* 09lcd*/uchar code tab16=0x3f,0x06,0x5b,0x4f,0x66
19、,0x6d,0x7d,0x07,0x7f,0x6f, 0x71,0x7c,0x39,0x73,0x31,0x71;/* 0f的字型編碼*/*lcd顯示數組 第一行為時鐘占用*/uchar xdata hz216=0xb5,0xa5,0xbc,0xdb,0xa3,0xba,0x20,0x20,0x20,0x20, /* 單 價 : 空 空 */ 0xa3,0xb0,0xa3,0xb0,0xd4,0xaa; /* n n 元 */ uchar xdata hz316=0xbe,0xe0,0xc0,0xeb,0xa3,0xba,0xa3,0xb0,0xa3,0xb0, /* 距 離 : 空 n */
20、 0xa3,0xb0,0xa3,0xb0,0x4b,0x4d; /* n n k m */uchar xdata hz416=0xbc,0xdb,0xc7,0xae,0xa3,0xba,0xa3,0xb0,0xa3,0xb0, /* 價 格 : n n */ 0xa3,0xb0,0xa3,0xb0,0xd4,0xaa; /* n n 元 */ uchar xdata hz516=0x20,0x20,0xca,0xe4,0xc8,0xeb,0xc1,0xbd,0xce,0xbb, /* 空 輸 入 兩 位 */ 0xb5,0xa5,0xbc,0xdb,0x20,0x20; /* 單 價 空 */
21、uchar xdata hz616=0x20,0x20,0x20,0x20,0xa3,0xba,0xa3,0xb0,0xa3,0xb0, /* 空 空 : n n */ 0xd4,0xaa,0xa3,0xaf,0x4b,0x4d; /* 元 / k m */ void initial (void); /*初始化子程序*/void delay(void); /*延時子程序*/void check_lcd(void); /*lcd設置子程序*/void show_lcd(uchar *,uchar *,uchar *); /*lcd顯示子程序*/void lcd_busy(void); /*lcd
22、忙狀態檢測函數 */void compute(void); /*路程 費用數字位拆分子程序*/void change_pri(void); /*單價修改子程序*/void change_time(void); /*時間修改子程序*/void clock(void); /*時鐘顯示子程序*/void check_ds12887(void); /*時鐘設置子程序*/main() /*主函數*/ uint inf=0; /*第一次標志位*/ initial(); show_lcd(hz2,hz3,hz4); while(1) clock(); if(begin=1)/開始計價 if(inf=0) f
23、ate=20; /第一次加上起價費 inf=1; if(state=0) /不是設置狀態 if(num=low) /大于最低速度 cout=0; /低速計數清零 price=a*10+b; /單價 len+=num*l/hn; /本次路程加上上次剩余 if(len/ti=0) /達到千位 leng=len/ti; /千位增加 len%=ti; /去除千位 fa=leng*price; /臨時費用 length+=leng; /全部路程 leng=0; fate+=fa; /全部費用 else if(cout)=60)/低速計數 length+; fate+=(10*a+b); cout=0;
24、compute(); /將數字按位拆分 用以顯示 show_lcd(hz2,hz3,hz4); else /設置狀態 調用修改子程序 if(pri=1) change_pri(); if(tim=1) change_time(); if(clear=1) /清零 length=0; fate=0; inf=0; com=0xd1; /* 清除led顯示*/ compute(); show_lcd(hz2,hz3,hz4); if(pri=1) change_pri(); if(tim=1) change_time(); /while(1)/main /*以下是子程序代碼(包括中斷)*/void
25、 keybord(void) interrupt 0 using 1 /*按鍵中斷服務程序*/ uchar keyboard=0; ex0=0; /關中斷 com=0x50; keyboard=dat; keyboard &=0x0f; /* 保留低四位 */ switch(keyboard) /鍵值轉換為可用數據 并且修改相應標志位 case 0x0: key=0; tt+;nn=1;cc+; break; case 0x1: key=1; tt+;nn=1;cc+; break; case 0x2: key=2; tt+;nn=1;cc+; break; case 0x3: key=3;
26、tt+;nn=1;cc+; break; case 0x4: key=4; tt+;nn=1;cc+; break; case 0x5: key=5; tt+;nn=1;cc+; break; case 0x6: key=6; tt+;nn=1;cc+; break; case 0x7: key=7; tt+;nn=1;cc+; break; case 0x8: key=8; tt+;nn=1;cc+; break; case 0x9: key=9; tt+;nn=1;cc+; break; case 0x0b: key=11; begin=1;clear=0;nn=0;break; /*b
27、begin*/ case 0x0c: key=12; clear=1;begin=0;nn=0;break; /*c clear*/ case 0x0d: key=13; state=1;pri=1;tim=0;nn=0;break; /*d set price*/ case 0x0e: key=14; state=1;tim=1;pri=0;nn=0;break; /*e set time*/ default: key=15; nn=0;break; /*f finish*/ keyboard=tabkeyboard; /按鍵后 在led上顯示 if(pri=1) if(nn=0) /字母
28、是功能鍵 在第一位上顯示 com=0x80+8; else /數字 在后面依次顯示 com=0x80+4+tt; if(tim=1) if(nn=0) com=0x80+8; else com=0x80+1+cc; dat=keyboard; ex0=1; /開中斷void clockserve() interrupt 2 using 2 /*時鐘中斷服務程序*/ unsigned char temp2;cout+: /低速計數加一ex1=0; /關中斷rflag=1;sta_ds=rega; /取數據 (小時、分鐘、秒)while(uip);ds_h=hour;ds_m=minute;ds_
29、s=second;temp2=regc;rflag=0;ex1=1; /開中斷void timer(void) interrupt 3 using 3 /*定時器中斷服務程序*/ tr1=0; tr0=0; /關定時器 關中斷 num=th0*256+tl0; /取計數值 th0=0; /計時器清零 tl0=0; th1=-(50000/256); /重新賦定時常數 tl1=-(50000%256); tr1=1; tr0=1; /開定時器 開中斷void initial(void) /*初始化子程序*/ com=0xd1; /* led設置 : 清除顯示*/ acc=dat; if(acc1
30、); /* p奇偶標志。若值為1的位數為奇數,則p置位,否則清除 */ com=0x00; /* 8字符顯示左入口 */ com=0x34; /* 34次分頻*/ tmod=0x15; /定時/計數器置標志位 th0=0; tl0=0; /計數器清零 th1=-(50000/256); tl1=-(50000%256); /定時常數賦初值 tr0=1; tr1=1; /開定時器 計數器 ea=1; /開中斷 ex0=1; ex1=1; et1=1; check_ds12887(); /時鐘初始化 void delay(void) /*延時子程序*/ unsigned char i,j; for
31、(i=0;i100;i+) for(j=0;j150;j+) ; ; void check_lcd(void) /*lcd設置子程序*/ uint i; lcd_busy();w_c_add=0x30;/* 功能設置:8位數據 */for(i=0;i255;i+)lcd_busy();w_c_add=0x0c; /* 顯示狀態:整體顯示,游標位置無效*/lcd_busy();w_c_add=0x01;/* 清除顯示:將ddram填滿“20h”,并且設定ddram的地址計數器到“00”*/lcd_busy();w_c_add=0x02;/* 地址歸位:設定ddram的地址計數器到“00”,將游標
32、移到開頭原點位置 */void show_lcd (uchar *b1,uchar *c1,uchar *d1) /*lcd顯示子程序*/unsigned char add;unsigned char i; check_lcd(); lcd_busy();add=0x90; /* 設置顯示坐標,90h對應字符的第二行第一列 */ lcd_busy();w_c_add=add; /* 送命令 */for(i=0;i8;i+) lcd_busy(); w_d_add=b12*i; lcd_busy(); w_d_add=b12*i+1; add=0x88; /* 設置顯示坐標,88h對應字符的第三
33、行第一列 */ lcd_busy();w_c_add=add; /* 送命令 */for(i=0;i8;i+) lcd_busy(); w_d_add=c12*i; lcd_busy(); w_d_add=c12*i+1; add=0x98; /* 設置顯示坐標,98h對應字符的第四行第一列 */ lcd_busy();w_c_add=add; /* 送命令 */for(i=0;i8;i+) lcd_busy(); w_d_add=d12*i; lcd_busy(); w_d_add=d12*i+1; delay(); clock();void lcd_busy(void) /*lcd忙狀態檢
34、測函數 */do status=r_s_add; /* 讀狀態字地址的第7位 */while(busy);void compute(void) /*路程 費用數字位拆分子程序*/ uint f1,l1; f1=fate; l1=length; p=l1%10; /*數字位拆分*路程*/ l1/=10; o=l1%10; l1/=10; n=l1%10; l1/=10; m=l1%10; t=f1%10; /*數字位拆分*價錢*/ f1/=10; s=f1%10; f1/=10; r=f1%10; f1/=10; q=f1%10; hz211=hz213=0xb0; /*清零*/ hz39=hz
35、311=hz313=0xb0; hz49=hz411=hz413=0xb0; hz211+=a; /*賦值*/ hz213+=b; hz37+=m; hz39+=n; hz311+=o; hz313+=p; hz47+=q; hz49+=r; hz411+=s; hz413+=t; if(cout%500=0) /分頻顯示 show_lcd(hz2,hz3,hz4); /*顯示*/ void change_pri() /*單價修改子程序*/ show_lcd(hz2,hz5,hz6); if(key=15) /15 完成設置 com=0xd1; /* led清除顯示*/ pri=0; state=0; tt=0; hz211=hz67; hz213=hz69; show_lcd(hz2,hz3,hz4); /保存設置結果并顯示 else if(nn) /如果是數字進行設置 if(tt=1) a=key; if(tt=2)b=key;tt=0; /單價 兩位 hz67=0xb0; hz67+=a; hz69=0xb0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 千圖網特邀設計師
- 家務任務:成長必修課
- Ivacaftor-13C6-VX-770-sup-13-sup-C-sub-6-sub-生命科學試劑-MCE
- 福安經濟開發區鋰電新能源配套產業小微園區項目可行性研究報告
- 2025年航空發動機維修技術革新與維修政策法規解讀報告
- 2025年環境監測物聯網在環境監測領域的物聯網技術應用與產業發展報告
- 2025年醫療器械國產化替代的關鍵技術與產業布局報告
- 多式聯運信息平臺功能優化與協同發展在物流園區運營中的應用探索報告
- 教育信息化基礎設施建設在智能教育評價系統中的應用報告
- 2025年紡織服裝行業智能化生產智能化生產設備技術升級項目實施報告
- 2024年國家知識產權局知識產權發展研究中心招聘考試真題
- 四川綿陽公開招聘社區工作者考試高頻題庫帶答案2025年
- 《水利工程造價與招投標》課件-模塊六 招投標程序
- 關于水表考試題及答案
- 2025年安全管理員安全培訓考試試題(典型題)
- 短文選詞填空12篇(新疆中考真題+中考模擬)(解析版)
- 2025年中國黃石市寫字樓行業發展前景預測及投資方向研究報告
- 初中歷史論述題必需的24個答題模版
- 新能源發展與環境保護試題及答案
- 液晶彈性體在人工肌肉領域的新進展
- 中國海洋生態環境監測市場調查研究及行業投資潛力預測報告
評論
0/150
提交評論