標(biāo)題: 單片機(jī)出租車計價器的設(shè)計+Proteus仿真+keil程序 [打印本頁]

作者: zyujun    時間: 2023-5-31 10:15
標(biāo)題: 單片機(jī)出租車計價器的設(shè)計+Proteus仿真+keil程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

本設(shè)計的是一個基于單片機(jī)AT89C51的出租車自動設(shè)計,附有復(fù)位電路,時鐘電路,鍵盤電路等。復(fù)位電路是單片機(jī)的初始化操作,除了正常的初始化外,為擺脫困境,通過復(fù)位電路可以重新開始。時鐘電路采用12MHz的晶振,作為系統(tǒng)的時鐘源,具有較高的準(zhǔn)確性。
在上電時四位共陽極74EG-MPX4-CA數(shù)碼管顯示最初的起步價,里程,汽車行駛時間,通過按鍵可以切換起步價,里程,汽車行駛時間。通過按鍵模擬出租車的運行,暫停,停止。在74EG-MPX4-CA液晶上可以顯示運行的時間,運行時暫停的時間,以及所用的。在這里主要是以AT89C51單片機(jī)為核心控制器,P3口接74EG-MPX4-CA液晶顯示模塊,P0口接按鍵的,通過按鍵輸入。

傳感器知識面廣,如果在實踐技能的鍛煉上下功夫,單憑課堂理論課學(xué)習(xí),勢必出現(xiàn)理論與實踐脫節(jié)的局面。任隨書本上把單片機(jī)技術(shù)介紹得多么重要、多么實用多么好用,同學(xué)們?nèi)匀粫械侥侵皇强罩袠情w,離自己十分遙遠(yuǎn),或者會感到對它失去興趣,或者會感到它高深莫測無從下手,這些情況都會令課堂教學(xué)的效果大打折扣。

本次設(shè)計的目的就是讓我們在理論學(xué)習(xí)的基礎(chǔ)上,通過完成一個傳感品器件的設(shè)計,使我們學(xué)生不但能夠?qū)⒄n堂上學(xué)到的理論知識與實際應(yīng)用結(jié)合起來,而且能夠?qū)﹄娮与娐、電子元器件、印制電路板等方面的知識進(jìn)一步加深認(rèn)識,同時在軟件編程、排版調(diào)試、焊接技術(shù)、相關(guān)儀器設(shè)備的使用技能等方面得到較全面的鍛煉和提高。

出租車計價器是出租車營運的專用智能化儀表,隨著電子技術(shù)的發(fā)展,出租車計價器技術(shù)也在不斷進(jìn)步和提高。國內(nèi)出租車計價器已經(jīng)經(jīng)歷了4 個階段的發(fā)展。從傳統(tǒng)的全部由機(jī)械元器件組成的機(jī)械式,到半電子式即用電子線路代替部分機(jī)械元器件的出租車計價器;再從集成電路式到目前的單片機(jī)系統(tǒng)設(shè)計的出租車計價器。出租車計價器是否準(zhǔn)確、出租車司機(jī)是否作弊才是乘客最關(guān)心的問題,而計價器營運數(shù)據(jù)的管理是否方便才是出租車司機(jī)最關(guān)注的。因此怎樣設(shè)計出一種既能有效防止司機(jī)作弊又能方便司機(jī)的計價器尤為重要。因此, 本文以單片機(jī)A T89C51 為核心設(shè)計一款多功能出租車計價器,該計價器能實現(xiàn)按時間和里程綜合計算車價,能顯示時間、總車價等相關(guān)信息顯示。它比市場上的一些計價器使用更方便,功能更全,還具有有效防止司機(jī)作弊和系統(tǒng)穩(wěn)定性好的優(yōu)點。


2  系統(tǒng)設(shè)計簡介

2.1出租車計價器簡介

以單片機(jī)AT89C51為核心設(shè)計一款多功能出租車計價器,該計價器能實現(xiàn)按時間和里程綜合計算車價,能顯示時間、總車價等相關(guān)信息顯示。它比市場上的一些計價器使用更方便,功能更全,還具有有效防止司機(jī)作弊和系統(tǒng)穩(wěn)定性好的優(yōu)點。
2.2 設(shè)計要求

基于單片機(jī)的出租車計價器系統(tǒng)設(shè)計,基本實現(xiàn)出租車計價器的部分功能。
2.3 設(shè)計方案論證

根據(jù)系統(tǒng)的設(shè)計要求,用時間模擬路程設(shè)計出租車計價器,選擇單片機(jī)AT89C51為測控系統(tǒng)的核心來完成數(shù)據(jù)采集、處理、顯示等功能。選用時間模擬路程省卻了采樣/保持電路、運放、數(shù)/模轉(zhuǎn)換電路以及進(jìn)行長距離傳輸時的串/并轉(zhuǎn)換電路,簡化了電路,縮短了系統(tǒng)的工作時間,降低了系統(tǒng)的硬件成本。
該系統(tǒng)的總體設(shè)計思路如下:將設(shè)計好的時間間隔發(fā)送到單片機(jī)上,經(jīng)過51單片機(jī)處理,將把時間和價在顯示電路上顯示,本系統(tǒng)顯示器用4位共陽LED數(shù)碼管以動態(tài)掃描法實現(xiàn)。
按照系統(tǒng)設(shè)計功能的要求,確定系統(tǒng)由5個模塊組成:主控制器、時鐘電路,復(fù)位電路,振蕩電路和顯示電路。
本課題以是AT89C51單片機(jī)為核心設(shè)計的一種出租車計價器,系統(tǒng)整體硬件電路包括,時鐘電路,復(fù)位電路,振蕩電路和顯示電路,單片機(jī)主板電路等組成。

系統(tǒng)框圖主要由主控制器、單片機(jī)復(fù)位、時鐘振蕩、LED顯示、總體電路結(jié)構(gòu)框圖如圖2.3所示。





                圖2.3  出租車計價器總體電路結(jié)構(gòu)框圖

2.4 硬件設(shè)計電路
本設(shè)計電路圖如圖2.4所示。本系統(tǒng)控制器使用單片機(jī)AT89C51,顯示器用4位共陽LED數(shù)碼管以動態(tài)掃描法實現(xiàn)。
圖2.4  出租車計價器總電路圖

3  設(shè)計語言及軟件介紹
3.1 C語言介紹
C語言是一種計算機(jī)程序設(shè)計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie于1972年推出,1978年后,C語言已先后被移植到大、中、小及微型機(jī)上,它可以作為工作系統(tǒng)設(shè)計語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計語言,編寫不依賴計算機(jī)硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件,三維,二維圖形和動畫,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
3.2 Keil uVision4軟件介紹
Keil uVision4是一款與51系列兼容單片機(jī)匯編和C語言的軟件開發(fā)系統(tǒng),該軟件提供了豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。它的集成開發(fā)環(huán)境集成了一個項目管理器和一個功能豐富 有錯誤提示的編輯器,以及設(shè)置選項,生成工具,在線幫助等功能。利用Keil uVision4可以編譯C、匯編、C和匯編的混合編程源程序,并把它們組織到一個能確定的目標(biāo)應(yīng)用的項目中去。Keil uVision4會自動編譯,匯編,連接嵌入式應(yīng)用,并為你的開發(fā)提供一個單一的焦點。
4  系統(tǒng)軟件設(shè)計
4.1 概述
整個系統(tǒng)的功能是由硬件電路配合軟件來實現(xiàn)的,當(dāng)硬件基本定型后,軟件的功能也就基本定下來了。從軟件的功能不同可分為兩大類:一是監(jiān)控軟件(主程序),它是整個控制系統(tǒng)的核心,專門用來協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系。二是執(zhí)行軟件(子程序),它是用來完成各種實質(zhì)性的功能如測量、計算、顯示、通訊等。每一個執(zhí)行軟件是一個小的功能執(zhí)行模塊。這里將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進(jìn)行功能定義和接口定義。各執(zhí)行模塊規(guī)劃好后,就可以規(guī)劃監(jiān)控程序了。首先要根據(jù)系統(tǒng)的總體功能選擇一種最合適的監(jiān)控程序結(jié)構(gòu),然后根據(jù)實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調(diào)度關(guān)系。用C語言完成對設(shè)計的軟件編程,程序開始首先定義幾個函數(shù),以及幾個初值;然后通過延時程序連接顯示電路和AT89C51,然后編寫價程序和時間程序,同時設(shè)計一個中斷程序,還有體現(xiàn)按鍵功能的程序?qū)懭爰白x取數(shù)據(jù)子程序,之后再經(jīng)過數(shù)據(jù)轉(zhuǎn)換,由數(shù)碼管顯示出來,不斷循環(huán)。

4.2 系統(tǒng)程序設(shè)計模塊
系統(tǒng)程序主要包括主程序,延時子子程序,鍵盤掃描子程序,價計算顯示子程序和時間顯示子程序,中斷子程序等。
4.2.1主程序
主程序的主要功能是實現(xiàn)整個計價器系統(tǒng)的實時顯示,時間價的轉(zhuǎn)換,按鍵控制功能。主程序流程圖如圖4.2.1所示。
圖4.2.1  主程序流程圖
4.2.2延時子程序
延時程序的主要功能是對單片機(jī)和顯示數(shù)碼管之間的延時轉(zhuǎn)換,以及按鍵和數(shù)碼管之間的延時作用。延時子程序流程圖如圖4.2.2所示。
圖4.2.2  延時子程序流程圖
4.2.3鍵盤掃描子程序
鍵盤掃描子程序主要是對暫停播放,時間價的轉(zhuǎn)換和清零鍵的控制。鍵盤掃描子程序圖4.2.3所示。

      

                                                     

圖4.2.3  鍵盤掃描子程序流程圖

4.2.4價計算顯示子程序
價計算顯示子程序?qū)Τ鲎廛囆旭偟膬r計算和數(shù)碼管對價的顯示。其流程圖如圖4.2.4所示。






圖4.2.4  價計算顯示子程序圖

4.2.5時間顯示子程序

時間顯示子程序主要是對出租車行駛中時間的顯示操作。時間顯示子程序流程圖如圖4.2.5所示。
圖4.2.5 時間顯示子程序圖

4.2.6中斷子程序
     中斷子程序主要是對出租車系統(tǒng)中每個中斷環(huán)節(jié)的控制盒實現(xiàn)。中斷子程序流程圖如圖4.2.6所示。

圖4.2.6 中斷示子程序圖

4.3 控制源C語言程序
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit p00=P0^0 ;
sbit p01=P0^1 ;
sbit p02=P0^2 ;
sbit p37=P3^7 ;
uint i,j;
uint code Seg[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x80};
//數(shù)碼管譯碼表:   { 0  , 1 , 2 , 3 , 4  ,5    6     7   8    9    0    . }       P}
uchar jps,ks,key_do;//鍵盤緩存,上次有按鍵按下標(biāo)志位,按鍵已處理標(biāo)志位
uint count_10ms=0,second=0;
float cost;    //
void delay(uint tt)  //延時函數(shù)
{
  uint i;
  for(;tt>0;tt--)
    for(i=0;i<200;i++);
}

void LED(uint d1,uint d2)
{
       if(d1==1)  P0=(P0|0xf0)&0x1f;
       if(d1==2)  P0=(P0|0xf0)&0x2f;
       if(d1==3)  P0=(P0|0xf0)&0x4f;
       if(d1==4)  P0=(P0|0xf0)&0x8f;
       P0=P0|0x0f;
       P1=Seg[d2];
}
int keyscan()     //鍵盤掃描函數(shù)
{
  int t=0;
  if(p00==0) { t=1; jps=1;}
  if(p01==0) { t=1; jps=2;}
  if(p02==0) { t=1; jps=3;}
  return(t);  
}
void money()    //價計算
{
  count_10ms++;
  if(count_10ms==100)
     {count_10ms=0;second++;}
  if(second<=3) cost=5.0;
       else if(second>3) cost=5.0+0.7*(second-3);
}
void ledshow()
{  
       while(j%2==0)   //  價顯示
              {
                      LED(1,(int) (cost/10) );
                      delay(5);
               LED(2,(int) cost%10 );
                      delay(5);
                      LED(3,(int) (cost*10)%10 );
                      delay(5);
                      LED(4,(int) (cost*100)%10 );
                      delay(5);
                      LED(2,11);
                      delay(5);
              }

       while(j%2==1)   //    時間顯示   
       {
                     LED(1,second/10);
                    delay(5);
                     LED(2,second%10);
                     delay(5);
                     LED(3,count_10ms/10);
                     delay(5);
                     LED(4,count_10ms%10);
                     delay(5);
                     LED(2,11);
                     delay(5);            
          }

}
void Time_fun() interrupt 1    //10ms中斷函數(shù)
{
  uint k;
  if(k==15) { k=0; p37=1; }
    else k++;
  TH0=(0xffff-10000)/256;  //10ms
  TL0=(0xffff-10000)%256;  //10ms

  if(i%2==1) money();     //   暫停/播放
  if((ks==1)&&(keyscan()==1)&&(key_do==0))
        {                                    
              k=0;
              p37=0;   //按鍵提示音
              key_do=1;
              if(jps==1) i++;  //   暫停/播放鍵
              if(jps==2) j++; //    時間價顯示轉(zhuǎn)換
              if(jps==3)  //   清零鍵
                     {
                       count_10ms=0;
                       second=0;
                       cost=0;
                     }
        }  
  ks=keyscan();
  if(ks==0)  key_do=0;

}

main()
{  
       TMOD=0x01;     //Time0為16計數(shù)器
       TH0=(0xffff-10000)/256;
       TL0=(0xffff-10000)%256;
       TR0=1;    //打開定時器
       IE=0x82;  //EA=1  ET0=1  打開中斷

       while(1)
    {
              ledshow();

    }
}
;

4. 4 調(diào)試及仿真
經(jīng)軟件調(diào)試-仿真器proteus調(diào)試通過,并燒錄芯片,得到所要求的設(shè)計結(jié)果。如下圖,試驗成功。
圖4.4.1價(一)
圖4.4.2時間(一)

圖4.4.3價(二)
圖4.4.4時間(二)

圖4.4.5價(三)
圖4.4.6時間(三)

圖4.4.7價(四)
圖4.4.8時間(四)

圖4.4.9價(五)
圖4.4.10時間(五)

結(jié) 論
本文介紹了基于AT89C51單片機(jī)的數(shù)字溫度計控制系統(tǒng)的設(shè)計,對整個硬件電和軟件程序設(shè)計做了分析,文中介紹了數(shù)字溫度計的現(xiàn)狀及發(fā)展,介紹了仿真軟件Proteus及Keil的基本知識,一個月來,經(jīng)過我們的努力,基本上完成了設(shè)計要求的內(nèi)容,在系統(tǒng)可行性分析、原理圖設(shè)計等方面都作了許多實際工作,取得了一些成績,也遇到了一些問題,存在一些不足。經(jīng)過這一個月的學(xué)習(xí),我們在理論知識方面還是在動手能力方面都有了不小的進(jìn)步,受益匪淺。這次設(shè)計很好的把以前學(xué)到的理論知識應(yīng)用于實踐,使我們認(rèn)識到理論知識與實踐之間有一定的差距,只有通過不斷的努力學(xué)習(xí)和實踐才能很好的把理論知識應(yīng)用到實踐當(dāng)中,也只有通過不斷的實踐才能對理論知識的理解。
通過這次設(shè)計不僅學(xué)會了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學(xué)到了不少知識,擴(kuò)大了知識面,提高了知識水平。經(jīng)過單元設(shè)計和系統(tǒng)設(shè)計鞏固了以前所學(xué)的專業(yè)知識,真正認(rèn)識到理論聯(lián)系實際的重要性,為以后的學(xué)習(xí)和工作提供了很多有價值的經(jīng)驗。通過這次設(shè)計不僅增強了動腦能力和動手能力,也提高了我們思考問題、分析問題、解決問題的能力,更重要的是學(xué)會用工程化的思想來解決問題。
這次設(shè)計使我們認(rèn)識到完整、嚴(yán)謹(jǐn)、科學(xué)分析問題、解決問題的思想是多么的重要,只有擁有了科學(xué)的態(tài)度才能設(shè)計出有用的產(chǎn)品。另外通過本次設(shè)計,也使我們認(rèn)識到自己理論知識的應(yīng)用能力有很大的欠缺,需要在以后的學(xué)習(xí)中進(jìn)一步提高。

Keil代碼與Proteus仿真下載(注意要先按暫停后再按轉(zhuǎn)換): 出租車計價器.7z (502.72 KB, 下載次數(shù): 68)





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1