出租車計費系統_第1頁
出租車計費系統_第2頁
出租車計費系統_第3頁
出租車計費系統_第4頁
出租車計費系統_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

PAGE26課程設計報告項目名稱:出租車計價器設計與制作課程名稱:單片機技術二級學院:電氣與電子工程學院系:電氣工程系班級:14電氣4班學號:2014010143409學生姓名:黃凌周小組成員:劉智超黃凌周指導教師:鐘立華成績:報告完成日期2016年12月20日目錄TOC\o"1-3"\h\u26365摘要 130311課程設計任務書 2201801.1課程設計任務 211321.2課程設計方案 3282662硬件電路設計 4155732.1振蕩電路 4261932.2復位電路設計 4158252.3鍵盤接口電路 5176382.4顯示電路 6109042.4.11602LCD的基本參數及引腳功能 6239672.4.2顯示模塊采用1602液晶顯示接口電路 7228792.5單片機各引腳功能說明 792363軟件設計 10217073.1單片機資源使用 10286893.2單片機軟件模塊設計 10138733.2.1中斷子函數 10315973.2.2判鍵子函數 1116813.2.3顯示子程序 11121673.3總程序流程框圖 121201總結 1318310參考文獻 1424767附錄1元件件清單 1513786附錄2原理圖 1617000附錄3程序清單 17

摘要本設計的是一個基于單片機STC89C52的出租車自動計費設計,附有復位電路,時鐘電路,鍵盤電路等。復位電路是單片機的初始化操作,除了正常的初始化外,為擺脫困境,通過復位電路可以重新開始。時鐘電路采用12MHz的晶振,作為系統的時鐘源,具有較高的準確性。在上電時字符型液晶1602顯示最初的起步價,里程收費,等待時間收費三種收費,通過按鍵可以調整起步價,里程收費,等待時間收費。通過按鍵模擬出租車的運行,暫停,停止。在1602液晶上可以顯示運行的時間,運行時暫停的時間,通過計算可以得出總共的費用和總的路程。在這里主要是以STC89C52單片機為核心控制器,P1口接1602液晶顯示模塊。關鍵字STC89C52;1602液晶;出租車計費器

1課程設計任務書1.1課程設計任務基于單片機出租車模擬計價器,采用at24c02存儲芯片+LCD1602液晶顯示等設計而成。用24c02來存儲單價,通過按鍵來模擬增加里程,模擬出租車向前開。通過液晶顯示器顯示當前的行駛狀態、行駛公里、行駛時間時間(時、分、秒)、費用、單價、等信息。可以設置每公里單價,以及夜間單價和白天單價的不同模式,設置后掉電無需重新設置,設置有等待/繼續計時模式。計費分行走的里程*單價+等待的時間*價格。1.2課程設計方案方案一:采用數字電子技術,利用555定時芯片構成多諧振蕩器,或采用外圍的晶振電路作為時鐘脈沖信號,采用計數芯片對脈沖盡心脈沖的計數和分頻,最后通過譯碼電路對數據進行譯碼,將譯碼所得的數據送給數碼管顯示,一下是該方案的流程框圖,方案一如圖1.1所示:時時鐘脈沖等待信號公里脈沖計費脈沖計時計費譯碼數碼管顯示圖1.1方案一方案二:采用EDA技術,根據層次化設計理論,該設計問題自頂向下可分為分頻模塊,控制模塊計量模塊、譯碼和動態掃描顯示模塊,其系統框圖如圖1.2所示:時鐘信號時鐘信號等待信號公里脈沖計費/復位分頻器控制器計費計時計程譯碼顯示圖1.2方案二方案三:采用MCU技術,通過單片機作為主控器,利用1602字符液晶作為顯示電路,采用外部晶振作為時鐘脈沖,通過按鍵可以方便調節,以下是方案三的系統流程圖,本方案主要是必須對于數字電路比較熟悉,成本又高。方案圖如圖1.3所示:STC89C52STC89C521602液晶LED燈電源電路按鍵電路復位電路圖1.3方案三方案總結:通過各個方案的比較本次采用方案三,不但控制簡單,而且成本低廉,設計電路簡單。2硬件電路設計2.1振蕩電路單片機內部有一個高增益、反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。通過這兩個引腳在芯片外并接石英晶體振蕩器和兩只電容(電容和一般取20pF)。這樣就構成一個穩定的自激振蕩器。振蕩電路脈沖經過二分頻后作為系統的時鐘信號,再在二分頻的基礎上三分頻產生ALE信號,此時得到的信號時機器周期信號。振蕩電路如圖2.1所示:圖2.1振蕩電路2.2復位電路設計復位操作有兩種基本形式:一種是上電復位,另一種是按鍵復位。按鍵復位具有上電復位功能外,若要復位,只要按圖中的RESET鍵,電源VCC經電阻R1、R2分壓,在RESET端產生一個復位高電平。上電復位電路要求接通電源后,通過外部電容充電來實現單片機自動復位操作。上電瞬間RESET引腳獲得高電平,隨著電容的充電,RERST引腳的高電平將逐漸下降。RERST引腳的高電平只要能保持足夠的時間(2個機器周期),單片機就可以進行復位操作。按鍵復位電路圖如圖2.2所示。圖2.2復位電路2.3鍵盤接口電路獨立式鍵盤:獨立式鍵盤中,每個按鍵占用一根I/O口線,每個按鍵電路相對獨立。I/O口通過按鍵與地相連,I/O口有上拉電阻,無鍵按下時,引腳端為高電平,有鍵按下時,引腳電平被拉低。I/O口內部有上拉電阻時,外部可不接上拉電阻。鍵盤接口電路如圖2.3所示:圖2.3鍵盤接口電路2.4顯示電路2.4.11602LCD的基本參數及引腳功能1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如圖10所示。圖10LM016L結構圖LCD1602主要技術參數:

容量:16×2個字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能說明:1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:表1引腳接口說明表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數據2VDD電源正極10D3數據3VL液晶顯示偏壓11D4數據4RS數據/命令選擇12D5數據5R/W讀/寫選擇13D6數據6E使能信號14D7數據7D0數據15BLA背光源正極8D1數據16BLK背光源負極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。第7~14腳:D0~D7為8位雙向數據線。第15腳:背光源正極。第16腳:背光源負極。2.4.2顯示模塊采用1602液晶顯示接口電路圖2.4顯示電路2.5單片機各引腳功能說明下面對STC89C52各引腳的功能進行較為詳細的介紹:1)電源引腳Vcc和VssVcc(40腳):電源端為+5VVss(20腳):接地端。2)時鐘電路引腳XTAL1和XTAL2XTAL2(18腳):接外部晶體和微調電容的一端。在單片機內部它是振蕩電路反向放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時針電路時,該引腳輸入外時鐘脈沖。要檢查89C52的振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號輸出。XTAL1(19腳):接外部晶體和微調電容的另一端。在片內,它是振蕩電路反向放大器的輸入端。在采用外部時鐘時,該引腳必須接地。3)控制信號腳RSTALEPSEN和EA。RST(9腳):RST是復位信號輸入端,高電平有效。在此輸入端保持兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操作。ALE/PROG(30引腳):地址鎖存允許信號端。當STC89C52上電正常工作后,ALE引腳不斷向外輸出正脈沖信號。此頻率為振蕩器頻率fosc的1/6,當CPU訪問片外存儲器時,ALE輸出信號作為鎖存低8位地址的控制信號。在CPU訪問片外數據存儲時,每取值一次(一個機器周期)會丟失一個脈沖。平時不訪問片外存儲時,ALE端也以1/6的振蕩頻率固定輸出正脈沖,因而ALE信號可以用作對外輸出時鐘或定時信號。如果你想看一下STC89C52芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出,如有脈沖信號輸出,則STC89C52基本上是好的。ALE的負載驅動能力為8個LS型TTL(低功耗高速TTL)。PSEN(29腳);程序存儲允許輸出信號引腳,在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引腳接ERROM的OE端。PSEN端有效,即允許讀出ERROM/ROM中的指令碼。CPU在從外部ERROM/ROM取指令期間,每個周期PSEN兩次有效。不過,在訪問片外RAM時,要少產生兩次PSEN負脈沖信號。要檢查一個STC89C52小系統上電后CPU能否正常到ERROM/ROM中讀取指令碼,也可用于示波器看PSEN端有無脈沖輸出。如有,說明基本上工作正常。EA/VPP(31腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA引腳接高電平時,CPU只訪問片內ERROM/ROM并執行內部程序存儲器中的指令。但在PC(程序計數器)的值超過OFFFH(對8751/8051為4k)時,將自動轉向執行片外存儲器的程序。當出入信號EA引腳接低電平(接地)時,CPU只訪問外部ERROM/ROM并執行外部程序存儲器中的指令,而不管是否有片內程序存儲器。對于無芯片內的ROM的8031或8032,須外擴ERROM,此時必須將EA引腳接地。如果使用有片內ROM的STC89C52,外擴ERROM也是可以的,但也要使EA接地。4)I/O(輸入/輸出端口,P0,P1,P2,P3)P0口:P0口是一個漏極開路的8位準雙向I/O端口。P1口:8位準雙向I/O端口。P2口:即可以做地址總線輸出地址高8位,也可以做普通I/O用,(此時為準雙向口)。P3口:雙功能口,即可以做普通I/O口用(此時為準向口,也可以按每位定義實現第二功能操作)。見表1。表1P3口的第二功能表引腳第二功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2INT0(外部中斷0)P3.3INT1(外部中斷1)P3.4T0(定時器0外部中斷)P3.5T1(定時器1外部中斷)P3.6WR(外部存儲器寫選通)P3.7RD(外部存儲器讀寫通)3軟件設計3.1單片機資源使用在本次設計中像電路鍵盤用到了P2口,其中P2.0到P2.5口作為鍵盤的輸入,顯示電路用到了P1和P3口,P1口為液晶的數據口。3.2單片機軟件模塊設計3.2.1中斷子函數對于中斷程序,只要定時器計數滿就會產生中斷50ms中斷一次,共計20次,秒鐘加1,秒鐘計滿再分鐘加,當分鐘加到99時全部清零。以下是中斷子函數的流程圖如圖3.1所示:圖3.1中斷子程序流程圖3.2.2判鍵子函數對于獨立式鍵盤判鍵,首先看有鍵按下不,如果有鍵按下則延時一會兒,在判斷是否真的有鍵按下,如果確實有鍵按下,在判鍵釋放,最后執行鍵功能程序。判鍵子函數的流程框圖如圖3.2所示:圖3.2判鍵子程序流程圖3.2.3顯示子程序1602液晶是字符型液晶,它的內部自帶字符庫,它可以寫兩行的字符,同時每行可以寫40個字符,在寫顯示程序的時候,我們先寫命令,再設定字符顯示,最后寫數據,在每寫一次命令或數據都需要判斷液晶是否忙。液晶顯示程序流程圖如圖3.3所示:3.3顯示子程序流程圖3.3總程序流程框圖整體程序的流程框圖如圖3.4所示:圖3.4整體程序的流程框圖總結出租車計費器系統的設計已經全部完成,能按預期的效果進行模擬汽車啟動,停止,暫停等功能,并能夠通過LCD顯示車費數目。本款出租車計價器包括單價輸出、單價調整、顯示當前的系統時間等功能。另外,多功能出租車計價器還具有性能可靠、電路簡單、成本低、實用性強等特點,加上經過優化的程序,使其有很高的智能化水平。兩個星期來,經過自己努力,基本上完成了設計要求的內容,在系統可行性分析、原理圖設計等方面都作了許多實際工作,取得了一些成績,同時也遇到了一些問題,存在一些不足。經過這兩個星期的學習和工作,我覺得自己不論是在理論知識方面還是在動手能力方面都有了不小的進步,自己從中受益匪淺。這次設計很好的把以前學到的理論知識應用于實踐,使我認識到理論知識與實踐之間有一定的差距,只有通過不斷的努力學習和實踐才能很好的把理論知識應用到實踐當中,也只有通過不斷的實踐才能對理論知識的理解。通過這次設計不僅學會了如何去查找相關資料,更重要的是通過查找資料和翻閱書籍學到了不少知識,擴大了知識面,提高了知識水平。經過單元設計和系統設計鞏固了以前所學的專業知識,自己真正認識到理論聯系實際的重要性,為以后的學習和工作提供了很多有價值的經驗。通過這次設計不僅增強了自己的動腦能力和動手能力,也提高了我思考問題、分析問題、解決問題的能力,更重要的是學會用工程化的思想來解決問題。這在以前的學習過程中是不曾學到的。在短短的三個月時間內完成設計內容,在很大程度上得益于老師的幫助。這次設計是我認真認識到完整、嚴謹、科學分析問題、解決問題的思想是多么的重要,只有擁有了科學的態度才能設計出有用的產品。另外通過本次設計,是我認識到自己理論知識的應用能力有很大的欠缺,需要在以后的學習中進一步提高。參考文獻[1]李廣弟,朱月秀,冷祖祁.單片機基礎[M].第3版.北京航空航天大學出版社,2007年1月[2]李華.MCS-51系列單片機實用接口技術[M].北京航空航天大學出版社,1996[3]馬忠梅,張凱,馬巖,單片機的C語言應用程序設計,[M],北京:北京航空航天大學出版社,2003.11;[4]胡輝,單片機原理及應用設計—21世紀高等院校規劃教材[M],水利水電出版社,2005.7;[5]劉守義,單片機應用技術[M],西安:西安電子科技大學出版社,1996.8;附錄1元件件清單表5.1元器件清單名稱規格數量備注電阻2001個1K1個10K5個1002個電容20pF2個10μF2個極性電容發光二極管3個按鍵7個直流電機1個晶振12MHz1個芯片STC89C521塊1602液晶1塊內帶字符庫附錄2原理圖附錄3程序清單#include<reg52.h> //調用單片機頭文件#defineucharunsignedchar//無符號字符型宏定義 變量范圍0~255#defineuintunsignedint //無符號整型宏定義 變量范圍0~65535ucharmiao,fen=0,shi;ucharflag_bai_hei;//白天的晚上的標志位ucharvalue;uintbai_3l_price=60;//白天3千米內的單價6元uintbai_3w_price=18;//白天3千米外的單價/千米 1.8元uintbai_wait_price=5;//白天等待時的單價/分鐘 0.5元uintwan_3l_price=70;//晚上3千米內的單價/千米 7元uintwan_3w_price=22;//晚上3千米外的單價/千米 2.2元uintwan_wait_price=10;//晚上等待時的單價/分鐘 1元uintdistance=0;//行使的距離uintzong_jia;//總的價bitflag_300ms=0;bitflag_1s;bitflag_time_en=0;#include"lcd1602.h"/***********************1ms延時函數*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}#include"iic.h"voidwrite_iic_data(){ write_24c02(0,flag_bai_hei); write_24c02(1,bai_3l_price%256);//保存數據 write_24c02(2,bai_3l_price/256);//保存數據 write_24c02(3,bai_3w_price%256);//保存數據 write_24c02(4,bai_3w_price/256);//保存數據 write_24c02(5,bai_wait_price%256);//保存數據 write_24c02(6,bai_wait_price/256);//保存數據 write_24c02(7,wan_3l_price%256);//保存數據 write_24c02(8,wan_3l_price/256);//保存數據 write_24c02(9,wan_3w_price%256);//保存數據 write_24c02(10,wan_3w_price/256);//保存數據 write_24c02(11,wan_wait_price%256);//保存數據 write_24c02(12,wan_wait_price/256);//保存數據}/****************自動初始化保存的數據*******************/ voidzidong_chushifa_iic(){ value=read_24c02(200); value=read_24c02(200); if(value!=0x91) //新的單片機初始單片機內問EEPOM { value=0x91; write_iic_data(); write_24c02(200,value);//保存數據 } delay_1ms(300); }/****************讀出來保存的數據**********************/ voidread_iic_data(){ flag_bai_hei=read_24c02(0); bai_3l_price=read_24c02(2); bai_3l_price=bai_3l_price*256+read_24c02(1); bai_3w_price=read_24c02(4); bai_3w_price=bai_3w_price*256+read_24c02(3); bai_wait_price=read_24c02(6); bai_wait_price=bai_wait_price*256+read_24c02(5); wan_3l_price=read_24c02(8); wan_3l_price=wan_3l_price*256+read_24c02(7); wan_3w_price=read_24c02(10); wan_3w_price=wan_3w_price*256+read_24c02(9); wan_wait_price=read_24c02(12); wan_wait_price=wan_wait_price*256+read_24c02(11);}/****************獨立按鍵處理函數************************/ #definekey_ioP2ucharkey_can;voidkey(){ staticucharkey_new=0,key_old=0,key_value=0; key_io|=0x3f; if(key_new==0) //按鍵松開 { if((key_io&0x3f)==0x3f) key_value++; else key_value=0; if(key_value>=5) //按鍵松開松手檢測 { key_value=0; key_new=1; //按鍵松開后進入等待按鍵狀態 } } else { if((key_io&0x3f)!=0x3f) //按鍵按下 key_value++; else key_value=0; if(key_value>=5) //按鍵按下消抖 { key_value=0; key_new=0; //按鍵松開后進入等待松開按鍵狀態 } } key_can=20; if((key_new==0)&&(key_old==1)) { switch(key_io&0x3f) { case0x3e:key_can=1;break; //得到按鍵值 case0x3d:key_can=2;break; //得到按鍵值 case0x3b:key_can=3;break; //得到按鍵值 case0x37:key_can=4;break; //得到按鍵值 case0x1f:key_can=5;break; //得到按鍵值 case0x2f:key_can=6;break; //得到按鍵值 }// write_sfm2(2,0,key_can);//按鍵按下顯示按鍵值 } key_old=key_new; }#include"menu.h"/*********************對應菜單內的處理函數******************/voidmenu_dis(){ if(menu_1==0) { if(key_can==6) { distance++; write_sfm4(1,0,distance); } if(key_can==5) //清零從新計價 { flag_time_en=0; shi=0; fen=0; miao=0; zong_jia=0; distance=0; } if(key_can==2) { flag_time_en=~flag_time_en; } if(flag_300ms==1) { flag_300ms=0; if(distance<=30)//3公里內的價格 { if(flag_bai_hei==0) { if(fen<=3) zong_jia=bai_3l_price; else zong_jia=bai_3l_price+(shi*60+fen-3)*bai_wait_price; } else { if(fen<=3) zong_jia=wan_3l_price; else zong_jia=wan_3l_price+(shi*60+fen-3)*bai_wait_price; } }else //3公里外的價格 { if(flag_bai_hei==0) { if(fen<=3) zong_jia=bai_3l_price+bai_3w_price*(distance-30)/10; else zong_jia=bai_3l_price+bai_3w_price*(distance-30)/10+(shi*60+fen-3)*bai_wait_price; } else { if(fen<=3) zong_jia=wan_3l_pr

溫馨提示

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

評論

0/150

提交評論