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

下載本文檔

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

文檔簡介

1、計算機與信息工程學院單片機課程設計課程設計題目出租車計價器專 業(yè):計算機控制班 級:控制09-3 姓 名:費翔學 號:20指導教師:范愛華2012年3月2日設計題目:出租車計價器設計目的:利用單片機豐富的IO端口,及其控制的靈活性,實現(xiàn)基本的里程計價功能和價格調(diào)節(jié)、時鐘顯示功能。設計目標:1.數(shù)據(jù)輸出:單價輸出、路程輸出、總金額輸出2.按鍵:啟動計時開關、數(shù)據(jù)顯示切換、白天/晚上切換、復位3.能手動進行修改單價任務下達時間:2012年2月27日任務完成時間:2012年3月1日 指導教師評語: 年 月 日設計成績:摘要:近些年來,隨著單片機的發(fā)展,產(chǎn)品相當?shù)姆倍啵瑔纹⑿蜋C又稱嵌入式控制器,是2

2、0世紀70年代中期發(fā)展起來的一種大規(guī)模的集成電路器件。當單片機的應用不斷地深入,新技術的發(fā)展也是層出不窮的。這是一項新型的工程技術,其內(nèi)涵也是隨著單片機的發(fā)展而發(fā)展。MCS-51系列的單片機是屬于結構相當簡單,但也是單片機中的典型,應用也相當?shù)撵`活。51系列的單片機產(chǎn)品發(fā)展迅速,在國內(nèi)外占有重要的地位。 出租車計價器從最初的只能進行簡單的價格計算,發(fā)展到價格、距離獨立計量并顯示,可根據(jù)特殊情況設定相應的收費標準,能打印營運發(fā)票,可使用IC卡結算等的功能。目前市場上的計價器越來越趨向于集成有多種功能。關鍵詞:51單片機,價格計算,獨立顯示,手動輸入正文:1. 出租車計價器是乘客與司機雙方的交易準

3、則,它是出租車行業(yè)發(fā)展的重要標志,是出租車中最重要的工具。它關系著交易雙方的利益。具有良好性能的計價器無論是對廣大出租車司機朋友還是乘客來說都是很必要的。我們采用了單片機進行設計,相對來說功能強大,用較少的硬件和適當?shù)能浖嗷ヅ浜峡梢院苋菀椎膶崿F(xiàn)設計要求,且靈活性強,可以通過軟件編程來完成更多的附加功能。針對計費模式的切換,通過軟件編程就可以輕易而舉的實現(xiàn)。避免了機械開關帶來的不穩(wěn)定因素。方案論證最終方案選擇出租車計價器基本功能部分是根據(jù)里程數(shù)來完成總金額的輸出。實現(xiàn)方法有兩種。方案一:采用數(shù)字電路控制。其原理方框圖如圖2.1所示。采用傳感器件,輸出脈沖信號,經(jīng)過放大整形作為移位寄存器的脈沖,

4、實現(xiàn)計價,但是考慮到這種電路過于簡單,性能不夠穩(wěn)定,而且不能調(diào)節(jié)單價,也不能根據(jù)天氣調(diào)節(jié)計費標準,電路不夠?qū)嵱?。方案二:采用單片機控制。利用單片機豐富的IO端口,及其控制的靈活性,實現(xiàn)基本的里程計價功能和價格調(diào)節(jié)、時鐘顯示功能。本方案有較大的活動空間,不但能實現(xiàn)所要求的功能而且能在很大的程度上擴展功能,而且還可以方便的對系統(tǒng)進行升級,所以我們采用后一種方案。2.硬件詳細設計本系統(tǒng)的硬件設計主要包括單片機AT89S51、數(shù)據(jù)顯示部件、A44E霍爾傳感器電路、AT24C02 掉電存儲單元的設計、里程計算及計價單元的設計。在硬件設計過程中,充分利用各部件的功能,實現(xiàn)多功能的出租車計價器設計。2.1

5、總體硬件原理圖主控芯片使用51系列AT89C52單片機,采用高性能的靜態(tài)80C51設計,由先進工藝制造,并帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位COMS微處理芯片,市場應用最多。3.軟件設計在主程序模塊中,需要完成對各接口芯片的初始化、出租車起價和單價的初始化、中斷向量的設計以及開中斷、循環(huán)等待等工作。另外,在主程序模塊中還需要設置啟動/清除標志寄存器、里程寄存器和價格寄存器,并對它們進行初始化。然后,主程序?qū)⒏鶕?jù)各標志寄存器的內(nèi)容,分別完成啟動、清除、計程和計價等不同的操作。4.1主程序#includereg51.h#include intrins.h#define

6、uchar unsigned charuchar tmp;uchar det;uchar Coo;int m;int f;uchar DispTab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0; /字形碼uchar TAB24;sbit P00=P00;sbit P01=P01;sbit P02=P02;sbit P03=P03;sbit P04=P04;sbit P05=P05;sbit P10=P10;sbit P27=P27;sbit P14=P14;sbit SCLK =P13; /*DS1302的SCLK腳脈沖*/sb

7、it DIO=P12; /*DS1302的IO腳數(shù)據(jù)*/sbit CE=P11; /*DS1302的RST腳片選*/sbit P15=P15;sbit P23=P23;sbit P21=P21;sbit P16=P16;sbit P35=P35;sbit P22=P22;sbit P17=P17;sbit P20=P20;sbit P26=P26;sbit P24=P24;sbit ACC7=ACC7;sbit ACC0=ACC0;void time() interrupt 1 /等待計時中斷int i,j;TH0=0x15;TL0=0xa0;i+;if(i=100)i=0;j+;if(j=1

8、0)j=0;f=Coo;void mDelay(unsigned int Delay) /延時子程序 unsigned int I;for(;Delay0;Delay-) for(I=0;I0; i- ) /循環(huán)8次移位 temp = addr; DIO = (bit)(temp&0x01); /每次傳輸?shù)妥止?jié) addr = 1;SCLK = 0; /右移一位SCLK = 1; /發(fā)送數(shù)據(jù) for ( i=8; i0; i- ) temp = dat; DIO = (bit)(temp&0x01); dat = 1;SCLK = 0; SCLK = 1; CE = 0; unsigned ch

9、ar Read1302 ( unsigned char addr ) /數(shù)據(jù)讀取子程序unsigned char i,temp,dat1,dat2; CE=0; SCLK=0; CE = 1; /發(fā)送地址 for ( i=8; i0; i- ) /循環(huán)8次移位 temp = addr; DIO = (bit)(temp&0x01);/每次傳輸?shù)妥止?jié) addr = 1; SCLK = 0; SCLK = 1; /右移一位 for ( i=8; i0; i- ) ACC7=DIO; ACC=1; SCLK = 1; SCLK = 0; CE=0; dat1=ACC; dat2=dat1/16; /

10、數(shù)據(jù)進制轉換 dat1=dat1%16; /十六進制轉十進制 dat1=dat1+dat2*10; return (ACC);void Initial() /初始化DS1302 Write1302 (0x8E,0x00); /禁止寫保護 Write1302 (0x80,0x00); /秒位初始化 Write1302 (0x82,0x20); /分鐘初始化 Write1302 (0x84,0x10); Write1302 (0x86,0x23); Write1302 (0x88,0x05); Write1302 (0x8c,0x10); /小時初始化 Write1302 (0x8E,0x80);

11、 /允許寫保護void set() /修改時間 Write1302 (0x8E,0x00); /禁止寫保護 Write1302 (0x82,TAB7*16+TAB6); /分鐘初始化 Write1302 (0x84,TAB0*16+TAB1); Write1302 (0x8E,0x80);void ss() /顯示子程序int i;uchar *p;p=TAB;for(i=0;i1;i+)det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P

12、20=1;P14=1;P15=0;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=1;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=1;P16=0;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=1;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=0;P16=1;P17=0

13、;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=1;P16=1;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=1;P16=1;P17=0;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=0;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0

14、=tmp;P20=0;P20=1;P14=0;P15=1;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=1;P15=1;P16=0;P17=1;p+;det=*p;tmp=DispTabdet;P0=tmp;P20=0;P20=1;P14=0;P15=0;P16=1;P17=1;p+;void sett() /顯示等待時間及單價、總價、路程子程序TAB0=Read1302(0x83)/10;TAB1=Read1302(0x83)%10;TAB7=Read1302(0x81)/10;TAB6=Read1302(0x81)%

15、10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4=3&TAB2=0&TAB3=0)TAB11=8;elseTAB11=(8+(Coo-3)*TAB8)%10;TAB5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo/10*TAB8+Coo%10*TAB8/10)%10;void mmm() /顯示時間子程序 TAB0=Read1302(0x85)/10; TAB1=Read1302(0x85)%10; TAB7=Read1302(0x83)/10; TAB6=

16、Read1302(0x83)%10;TAB8=3;void qie(int j) /修改時間、單價子程序uchar i;switch(j) case 4:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB8+;if(TAB8=10)TAB8=0;break;case 3:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB6+;if(TAB6=10)TAB6=0;break;case 2:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB7+;if(TAB7=6)TAB7=0;break;cas

17、e 1:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB1+;if(TAB0=2&TAB1=4)|TAB1=10)TAB1=0;break;case 0:ss();if(P22=0)for(i=0;i!=1;)i=P22;ss();TAB0+;if(TAB0=3)TAB0=0;break; default:break;Void die() /修改單價位、時間位子程序int x;for(m=0;m5;)ss();qie(m);if(P21=0)for(x=0;x1;)ss();x=P21;m+;set();void mm() /非計價時的顯示時間TAB0=Re

18、ad1302(0x85)/10;TAB1=Read1302(0x85)%10;TAB7=Read1302(0x83)/10;TAB6=Read1302(0x83)%10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4=3&TAB2=0&TAB3=0)TAB11=8;elseTAB11=(8+(Coo-3)*TAB8)%10;TAB5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo/10*TAB8+Coo%10*TAB8/10)%10;void count() /計

19、價子程序int x;EA=1;if(f=Coo)sett();ss();elsemm();if(P35=0)for(x=0;x1;)ss();x=P35;Coo+;void main()int i,j;TMOD=0x01;TH0=0x15;TL0=0xa0;TR0=1;ET0=1;Initial();P27=0;for(;)if(P23=0)for(i=0;i1;)ss();i=P23;for(j=0;j1;)count();ss();if(P23=0)for(i=0;i1;)ss();i=P23;EA=0;j+;TAB2=TAB3=TAB11=TAB5=TAB9=TAB10=TAB4=0;

20、else mmm();ss();if(P21=0)for(i=0;i1;)ss();i=P21;die();4.2 子程序顯示子程序void sett() /顯示等待時間及單價、總價、路程子程序TAB0=Read1302(0x83)/10;TAB1=Read1302(0x83)%10;TAB7=Read1302(0x81)/10;TAB6=Read1302(0x81)%10;TAB8=3;TAB2=Coo/100;TAB3=Coo/10%10;TAB4=Coo%10;if(TAB4=3&TAB2=0&TAB3=0)TAB11=8;elseTAB11=(8+(Coo-3)*TAB8)%10;TAB5=TAB2*TAB8/10;TAB9=Coo/100*TAB8+Coo%100*TAB8/100;TAB10=(Coo/10*TAB8+Coo%10*TAB8/10)%10;void mmm() /顯示時間子程序 TAB0=Read1302(0x85)/10; TAB1=Read1302(0x85)%10; TAB7=Read1302(0x83)/10; TAB6=Read1302(0x83)%10;TAB8=3;TAB11=(8+

溫馨提示

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

評論

0/150

提交評論