2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  X X X X 大 學(xué)</p><p>  本 科 生 畢 業(yè) 論 文</p><p>  題目:出租車計費系統(tǒng)設(shè)計</p><p>  姓 名: </p><p>  學(xué) 號: </p><p>  專 業(yè):

2、 </p><p>  年 級: </p><p>  學(xué) 院: </p><p>  完成日期: </p><p>  指導(dǎo)教師: </p><p><b>  目

3、 錄</b></p><p><b>  引言</b></p><p><b>  課題背景</b></p><p><b>  設(shè)計要求</b></p><p><b>  里程計費</b></p><p><b

4、>  按鍵控制</b></p><p><b>  方案論證</b></p><p><b>  2.1整體方案優(yōu)選</b></p><p><b>  2.2 傳感器優(yōu)選</b></p><p>  3. 相關(guān)硬件資料的介紹</p><p

5、>  3.1 STC89C52單片機(jī)的介紹</p><p>  3.2霍爾傳感器A44E的介紹</p><p>  4.電路模塊設(shè)計與實現(xiàn)</p><p>  4.1電源模塊的電路設(shè)計與實現(xiàn)</p><p>  4.2霍爾傳感器A44E的電路設(shè)計與實現(xiàn)</p><p>  4.3掉電存儲數(shù)據(jù)電路設(shè)計與實現(xiàn)<

6、/p><p>  4.4顯示電路的設(shè)計與實現(xiàn)</p><p>  5.系統(tǒng)軟件設(shè)計與實現(xiàn)</p><p>  5.1里程計價中斷服務(wù)程序模塊</p><p>  5.2里程、計費程序模塊設(shè)計</p><p>  5.3等待計費程序模塊設(shè)計</p><p><b>  6.系統(tǒng)的模擬測試&l

7、t;/b></p><p><b>  參考文獻(xiàn):</b></p><p>  附錄A硬件電路實物圖</p><p><b>  附錄B 程序清單</b></p><p><b>  出租車計費系統(tǒng)設(shè)計</b></p><p>  作者: 指導(dǎo)教

8、師: </p><p><b> ?。?, , )</b></p><p>  摘 要: 計費器是出租車營運收費的專用智能儀表,良好性能的出租車計費器對加強行業(yè)管理以及減少司機(jī)與乘客的糾紛都是很有必要的。本設(shè)計采用STC89C52單片機(jī)進(jìn)行的設(shè)計,相對來說功能強大,只需用較少的硬件A44E、AT24C02和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙崿F(xiàn)很多附加功能。

9、 </p><p>  關(guān)鍵詞: STC89C52單片機(jī);A44E;AT24C02</p><p>  Taxi Billing System Design</p><p>  Abstract: The meter is the taxi operation fee

10、s of special intelligent, good performance of taxi meters in strengthening enterprise management and reduce the driver and passengers in the disputes are necessary. this design adopts stc89c52 monolithic integrated circu

11、its design of, powerful functions, only a relatively small hardware a44e, at24c02 and proper in the software can easily achieve a lot of additional features.</p><p>  Keywords: STC89C52 monolithic integrated

12、 circuits; A44E ;AT24c02</p><p><b>  引言</b></p><p><b>  1.1 課題背景</b></p><p>  如今出租車在我國的交通運輸中承擔(dān)著重要的角色,出租車計價器是出租車上必不可少的重要儀器,它是負(fù)責(zé)出租車營運收費的專用智能化儀表。隨著城市旅游業(yè)的發(fā)展,出租車行

13、業(yè)已成為城市的窗口,象征著一個城市的文明程度。功能完備、簡單易用、計費準(zhǔn)確的出租車計費器是加強出租車行業(yè)管理、提高服務(wù)質(zhì)量的必備品。隨著出租車行業(yè)的發(fā)展,對出租車計費器的需要也越來越高,用戶不但需要計費器性能穩(wěn)定,計費準(zhǔn)確;同時還需要其具備應(yīng)對不同種情況的收費計算功能等。本文,采用單片機(jī)和霍爾傳感器來來實現(xiàn)出租車?yán)锍逃嬃抗δ埽褂肁T24C02串行E2PROM實現(xiàn)掉電儲存功能,不僅設(shè)計簡單,成本低,而且計算準(zhǔn)確,功能強,實現(xiàn)了出租車的計

14、費模擬。</p><p><b>  1.2 設(shè)計要求</b></p><p>  1.2.1 里程計費</p><p>  (1) 每一個脈沖代表輪胎旋轉(zhuǎn)一周,輪胎周長是具體情況而定;</p><p>  (2) 單片機(jī)對傳感器輸出脈沖進(jìn)行計數(shù),N脈沖為0.5公里;</p><p> ?。?)起

15、步價為10元三公里后每行駛0.5公里,計數(shù)count達(dá)到額定值,總金額Total_price加次單價Unit_price;停車等待時間消費Wait_consume是等待分鐘數(shù)Wait_time_min*系數(shù);</p><p>  1.2.2 按鍵控制</p><p>  (1) Start_k1(P1^0口)計費關(guān)閉/開啟控制鍵,未開始計費Start_k1=0 ;開始計費Start_k1=

16、1;</p><p>  (2) Daytime_k2 ( P1^1口)模式白天/晚上控制鍵,白天Daytime_k2 = 0;晚上Daytime_k2 = 1;</p><p><b>  圖1.2.2-1</b></p><p> ?。?)Setting_k5 ( P1^4口)單價設(shè)置鍵,復(fù)位開關(guān)在K1計費關(guān)閉時按下一次進(jìn)入白天單價設(shè)置,按

17、下兩次進(jìn)入晚上單價設(shè)置,按下三次退出設(shè)置返回原界面;</p><p> ?。?)Add_k3 (P1^2口)單價調(diào)整鍵,復(fù)位開關(guān)在(3)情況下單價從0到9遞增;</p><p> ?。?)Wait_time_k4 (P1^3口)停車等候計費切換鍵,復(fù)位開關(guān)按下一次進(jìn)入等候模式,按下兩次返回;</p><p><b>  圖1.2.2-2</b>

18、</p><p>  (6)K6復(fù)位清零鍵</p><p><b>  2 方案設(shè)計論證</b></p><p>  2.1 整體方案優(yōu)選</p><p>  方案一:采用數(shù)字電路控制。其原理方框圖如圖 2-1所示。采用傳感器件,輸出脈沖信號,經(jīng)過放大整形作為移位寄存器的脈沖,實現(xiàn)計價,而考慮到這種電路過于簡單,性能不夠

19、穩(wěn)定,也不能調(diào)整單價,也不能根據(jù)外部因素調(diào)節(jié)計費標(biāo)準(zhǔn),電路不夠?qū)嵱谩?lt;/p><p>  圖2-1 數(shù)字電路方案</p><p>  方案二:采用單片機(jī)控制。利用單片機(jī)豐富的 I O端口,分配簡易,實現(xiàn)基本的里程計價功能和價格調(diào)節(jié)、白天晚上切換等功能。其原理如圖 2.2 所示。</p><p>  圖2-2 單片機(jī)控制方案圖</p><p>

20、  綜上分析,方案二有較大的活動空間,不但能實現(xiàn)所要求的功能而且能在很大的程度上擴(kuò)展功能, 而且還可以方便的對程序進(jìn)行升級, 所以我們采用第二種方案。</p><p><b>  2.2 傳感器優(yōu)選</b></p><p>  方案一:光電傳感器安裝在轉(zhuǎn)軸上,當(dāng)扇葉經(jīng)過時 ,可產(chǎn)生脈沖信號,但是光電傳感器 對灰塵、油污等比較敏感。</p><p&

21、gt;  方案二:霍爾傳感器不怕灰塵和油污 ,且廣泛應(yīng)用于工業(yè)現(xiàn)場,霍爾傳感器 價格便宜且具有體積小、靈敏度高 、響應(yīng)速度快 、溫度性能好 、精確度高 、可靠性高等特點 ,能很好地滿足車輪測速 系統(tǒng)設(shè)計的需要。</p><p>  基于以上分析,我們選擇方案二。</p><p>  3.相關(guān)硬件資料的介紹</p><p>  3.1 STC89C52單片機(jī)的介紹

22、</p><p>  STC89C52是宏晶科技推出的一種帶8K字節(jié)閃爍可編程可檫除只讀存儲器(FPEROM-Flash Programable and Erasable Read Only Memory )的高速、高可靠、低功耗、超低價、強抗靜電、強抗干擾的單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。其管腳圖如圖1所示。STC89C52單片機(jī)的主要

23、功能如表1所示。</p><p>  圖3-1 STC89C52單片機(jī)管腳圖</p><p>  表3-1 寄存器的復(fù)位狀態(tài)</p><p>  3.2 霍爾傳感器A44E的介紹</p><p>  霍爾器件是一種磁傳感器。用它們可以檢測磁場及其變化,可在各種與磁場有關(guān)的場合中使用?;魻柶骷曰魻栃?yīng)為其工作基礎(chǔ)。</p>&

24、lt;p>  霍爾器件具有許多優(yōu)點,它們的結(jié)構(gòu)牢固,體積小,重量輕,壽命長,安裝方便,功耗小,頻率高(可達(dá)1MHZ),耐震動,不怕灰塵、油污、水汽及鹽霧等的污染或腐蝕。</p><p>  霍爾器件分為:霍爾元件和霍爾集成電路兩大類,前者是一個簡單的霍爾片,使用時常常需要將獲得的霍爾電壓進(jìn)行放大。后者將霍爾片和它的信號處理電路集成在同一個芯片上。本次設(shè)計選取了霍爾集成電路來測量里程。</p>

25、<p>  里程測量是通過將霍爾傳感器的集成電路安裝在車輪上方的鐵板上,將磁鐵安裝在車輪上,旋轉(zhuǎn)的車輪將磁鐵對準(zhǔn)集成電路時,霍爾傳感器會輸出一個脈沖信號,送到單片機(jī),經(jīng)過單片機(jī)的計算處理,將行駛的里程送到顯示單元并顯示出來。</p><p><b>  其原理示意圖如下:</b></p><p>  圖3-2 傳感器測距示意圖</p><

26、;p>  由于A44E屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測頻率可達(dá)到1MHZ。</p><p>  A44E集成霍耳開關(guān)由穩(wěn)壓器A 、霍耳電勢發(fā)生器(即硅霍耳片)B 、差分放大器C 、施密特觸發(fā)器D 和OC 門輸出E 五個基本部分組成。</p><p>  在輸入端輸入電壓VCC

27、,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍耳電勢發(fā)生器的兩端,根據(jù)霍耳效應(yīng)原理,當(dāng)霍耳片處在磁場中時,在垂直于磁場的方向通以電流,則與這二者相垂直的方向上將會產(chǎn)生霍耳電勢差VH 輸出,該VH 信號經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到 OC 門輸出。當(dāng)施加的磁場達(dá)到“工作點”(即 OPB )時,觸發(fā)器輸出高電壓(相對于地電位),使三極管導(dǎo)通,此時 OC 門輸出端輸出低電壓,通常稱這種狀態(tài)為“開”。當(dāng)施加的磁場達(dá)到“釋放點”(即 rPB )時

28、,觸發(fā)器輸出低電壓,三極管截止,使OC 門輸出高電壓,這種狀態(tài)為“關(guān)”。這樣兩次電壓變換,使霍耳開關(guān)完成了一次開關(guān)動作。</p><p>  A44E 只對磁鐵的S 級有響應(yīng)而對N級沒有絲毫響應(yīng)。安裝時一定要讓磁鐵的S 級對準(zhǔn)A44E的反應(yīng)傳感區(qū),如圖</p><p>  圖3-3 A44E 判別磁鐵極性</p><p>  我們選取的A44E霍爾傳感器是一個霍爾

29、傳感器制品,里面有霍爾集成電路。我們選取的霍爾傳感器有3個外接口,2個是電源的正負(fù)極接口,最后一個是脈沖信號輸出口,只要將霍爾傳感器的信號輸出端接到單片機(jī)的端口上便可以實現(xiàn)距離檢測。</p><p>  其中,我們選取了單片機(jī)的P3.2(INT0)引腳作為信號的輸入端,采用外部中斷0進(jìn)行計數(shù)。車輪每轉(zhuǎn)一圈,霍爾傳感器就產(chǎn)生一個脈沖信號,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場中時,霍爾傳感器的輸出端輸出低電平。當(dāng)車輪轉(zhuǎn)

30、動一圈時小磁鐵提供一個磁場,則霍爾傳感器輸出一次低電平完成一次數(shù)據(jù)采集,從而產(chǎn)生信號?;魻杺鞲衅鳈z測并輸出信號到單片機(jī)的INT0或INT1計算脈沖輸入端,引起單片機(jī)的中斷,對脈沖計數(shù),當(dāng)計數(shù)達(dá)到特定的次數(shù)時,里程就會增加,單片機(jī)對里程進(jìn)行計算后,通過接口電路將計算好的結(jié)果傳送到數(shù)碼管并顯示出來。</p><p>  4.電路模塊設(shè)計與實現(xiàn)</p><p>  4.1電源模塊的電路設(shè)計與實現(xiàn)

31、</p><p>  由于計價器的工作環(huán)境比較差,它要求有抗振動、抗高低溫、抗潮濕、抗電磁干擾等能力,特別是電源方面的干擾,如出租車啟動時,發(fā)動機(jī)打火、電瓶充電等造成輸入計價器的+12 V 電源不穩(wěn)定。因此采用+l2 v電瓶電源經(jīng)過濾波和電源穩(wěn)壓管理芯片7805后得到+5 V的穩(wěn)定電壓輸出,保證整個系統(tǒng)能夠正常工作。如圖所示:</p><p>  圖4-1 7805電源電路</

32、p><p>  4.2霍爾傳感器A44E的電路設(shè)計與實現(xiàn)</p><p>  用霍爾傳感器集成芯片A44E檢測并輸出脈沖,其工作原理下圖所示,霍爾傳感器集成芯片A44E有信號轉(zhuǎn)換、電壓放大、整形輸出等功能,為增加其抗干擾的能力,在A44E轉(zhuǎn)換、放大、整形后再通過光偶送入P3.2引腳。</p><p>  圖4-2 A44E引腳及電路圖</p><

33、p>  4.3掉電存儲數(shù)據(jù)電路設(shè)計與實現(xiàn)</p><p>  采用掉電保護(hù)的E2PROM存儲器AT24C02。它是是ATMEL公司的2KB字節(jié)的電可擦除存儲芯片,采用兩線串行的總線和單片機(jī)通訊,工作電壓寬(2.5~5.5V),額定電流為1mA,靜態(tài)電流10Ua(5.5V),具有擦寫次數(shù)多(大于1000次)、寫入速度快(小于10ms)、高可靠性和低成本等特點。芯片內(nèi)的資料可以在斷電的情況下保存40 年以上,而

34、且采用8 腳的DIP封裝,其電路如圖所示。</p><p>  圖4-3 掉電存儲電路原理圖</p><p>  圖中 R8、R10 是上拉電阻,其作用是減少 AT24C02的靜態(tài)功耗,由于 AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線 SCL(移位脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)傳送數(shù)據(jù)。每當(dāng)設(shè)定一次單價,系統(tǒng)就自動調(diào)用存儲程序,將單價信息保存在芯片

35、內(nèi);當(dāng)系統(tǒng)重新上電的時候,自動調(diào)用讀存儲器程序,將存儲器內(nèi)的單價等信息,讀到緩存單元中,供主程序使用。</p><p>  4.4顯示電路的設(shè)計與實現(xiàn)</p><p>  本次設(shè)計的顯示單元是使用數(shù)碼管顯示數(shù)據(jù)。數(shù)碼管是一種半導(dǎo)體放光器件,其基本單元是發(fā)光二極管,常使用的是8段式LED數(shù)碼管顯示器,采用共陽極數(shù)碼管,顯示電路如圖所示。</p><p>  圖4-4

36、 顯示電路</p><p>  從a~g管腳輸入不同的8位二進(jìn)制編碼,可顯示不同的數(shù)字或字符,共陰極和共陽極的字段碼互為反碼。</p><p>  表4-4 顯示字符與共陽共陰段碼</p><p>  5.系統(tǒng)軟件設(shè)計與實現(xiàn)</p><p>  5.1里程計價中斷服務(wù)程序模塊</p><p>  本設(shè)計是用外部中斷IN

37、T0測量從A44E的3.0引腳輸出的負(fù)跳變信號累計數(shù),要使用外部中斷,必須對中斷允許控制寄存器IE和定時器/計數(shù)器控制寄存器TCON進(jìn)行如下設(shè)計:</p><p>  EA=1; //開總中斷</p><p>  EX0=1; //允許使用外部中斷</p><p>  IT0=1;//選擇負(fù)跳變來觸發(fā)外部中斷(即為低電平觸發(fā)方式)</p

38、><p>  每當(dāng)車輪轉(zhuǎn)動一圈,車輪的磁鐵與霍爾傳感器感相遇時,霍爾傳感器就會產(chǎn)生一個下降沿的脈沖信號。脈沖信號傳到P3.2引腳,外部中斷請求源INT0,單片機(jī)就會產(chǎn)生一次中斷。根據(jù)源代碼:</p><p>  void int0() interrupt 0 using 1</p><p>  count++; //每觸發(fā)一次外中斷,計數(shù)變量累加1</p&g

39、t;<p>  count為車輪轉(zhuǎn)動圈數(shù),總路程等于圈數(shù)乘以車輪周長,把總路程的數(shù)據(jù)送到里程相識單元顯示。再按照里程收費標(biāo)準(zhǔn),將價格數(shù)據(jù)送到計費顯示單元。</p><p>  行車計費的外部中斷流程圖如下:</p><p>  圖5-1 外部中斷流程圖</p><p>  5.2里程、計費程序模塊設(shè)計</p><p>  里程

40、、計費程序模塊源代碼如下:</p><p>  void int0() interrupt 0 using 1</p><p><b>  {</b></p><p>  if(Guesttime_sign==1&&Waittime_sign==0) //有乘客并等客標(biāo)志位為0</p><p>&

41、lt;b>  {</b></p><p>  Total_run++; //總里程加1</p><p>  if(Total_run>999)</p><p>  Total_run=0; //超過最大范圍清零</p><p>  if(Total_run>30) //判斷是否超過3公里</p

42、><p><b>  {</b></p><p>  count++; //每觸發(fā)一次外中斷,計數(shù)變量累加1</p><p>  if(count==5) //0.5公里到</p><p><b>  {</b></p><p>  Total_price=Total_

43、price+Unit_price; //總金額加上單價</p><p><b>  count=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  5.3等待計費程序模塊設(shè)計</p><p>

44、;  等待程序模塊源代碼如下:</p><p>  void timer0() interrupt 1</p><p>  // 定時器0中斷服務(wù)程序, 用于數(shù)碼管的動態(tài)掃描</p><p>  // dis_index --- 顯示索引, 用于標(biāo)識當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量</p><p>  // dis_digit --- 位選通

45、值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, 如等于0xfe時,</p><p>  //選通P2.0口數(shù)碼管</p><p>  // dis_buf --- 顯于緩沖區(qū)基地址</p><p><b>  {</b></p><p>  TH0 = 0xFC;</p><p>  

46、TL0 = 0x17;</p><p>  P2 = 0xff;// 先關(guān)閉所有數(shù)碼管</p><p>  P0 = dis_buf[dis_index];// 顯示代碼傳送到P0口</p><p>  P2 = dis_digit;// </p><p>  dis_digit = _crol_(dis_di

47、git,1);// 位選通值左移, 下次中斷時選通下一位數(shù)碼管</p><p>  dis_index++;// </p><p>  dis_index &= 0x07;// 8個數(shù)碼管全部掃描完一遍之后,再回到第一個開始下一次掃描</p><p><b>  } </b></p><p&

48、gt;  void timer1() interrupt 3</p><p><b>  {</b></p><p>  TH1 = 0xdc; //定時器裝初值</p><p>  if(Guesttime_sign==1&&Waittime_sign==1)</p><p><b&g

49、t;  {</b></p><p><b>  sec100++;</b></p><p>  if(sec100 >= 100)</p><p><b>  {</b></p><p>  sec100 = 0;</p><p>  inc_sec();&

50、lt;/p><p><b>  }</b></p><p>  Wait_consume=Wait_time_min; </p><p>  dis_buf[0] = dis_code[Wait_consume/ 10];</p><p>  dis_buf[1] = dis_code[Wait_c

51、onsume% 10]; //等待消費金額</p><p><b>  }</b></p><p>  if(Guesttime_sign==0&&(Set_times==1||Set_times==2))</p><p><b>  {</b></p><p>  glimp

52、se_sign++;</p><p>  if(glimpse_sign >= 30)</p><p><b>  {</b></p><p>  glimpse_sign=0;</p><p>  proc_glimpse();</p><p><b>  }</b>

53、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  6.系統(tǒng)的模擬測試</b></p><p>  第一步:模擬過程使用雙頭USB連接線,有筆記本供給系統(tǒng)穩(wěn)定的直流5V電源;</p><p>  

54、第二步:置Start_k1(P1^0口)計費關(guān)閉,按下Setting_k5 ( P1^4口)單價設(shè)置鍵,然后按下Add_k3 (P1^2口)單價調(diào)整鍵,設(shè)置好價格;</p><p>  第三步:假設(shè)有乘客上車,置Start_k1(P1^0口)計費開啟,傳感器模塊每接觸磁條一次向單片機(jī)發(fā)出一次中斷信號(即輪胎每周行駛距離,假定為 X Km)</p><p>  第四步:按下Wait_time

55、_k4 (P1^3口)停車等候計費鍵,系統(tǒng)開始計算停車N分鐘等待時間消費。</p><p><b>  參考文獻(xiàn):</b></p><p>  [1]霍爾傳感器A44E 在車輪測速中的應(yīng)用研究 楊繼生 劉芬編 電子測量技術(shù).2009.10</p><p>  [2] MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計 何立民 [M].北京航空航天大學(xué)出版社.

56、1988</p><p>  [3]萬頻.串行E2PROM與87C51單片機(jī)接口技術(shù)的實現(xiàn)[J].微小型機(jī)開發(fā)與應(yīng)用.1998.1</p><p>  [4]《電子技術(shù)基礎(chǔ)》模擬部分 康華光 高等教育出版社</p><p>  [5] 《單片微機(jī)實題集與實驗指導(dǎo)書》丁元杰、吳大偉.機(jī)械工業(yè)出版社.2004.</p><p>  [6]、《

57、單片機(jī)典型外圍器件及應(yīng)用實例》 求是科技 人民郵電出版社</p><p>  附錄A硬件電路實物圖</p><p><b>  附錄B 程序清單</b></p><p>  #include <reg51.h></p><p>  #include <intrins.h></p>

58、<p>  unsigned char data dis_digit;</p><p>  unsigned char key_s, key_v;</p><p>  unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,// 0, 1, 2, 3</p><p>  0x99,0x92,0x82,0

59、xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off </p><p>  unsigned char data dis_buf[8];</p><p>  unsigned char data dis_index;</p><p>  unsigned char Set_times,Total_price,Total_run,

60、Unit_price,Wait_time_min,Wait_time_sec,Wait_consume,Daytime_price,Nighttime_price;</p><p>  //設(shè)置次數(shù)標(biāo)志,總價格,總里程,單價,等待時間,等待消費,白天單價,晚上單價</p><p>  unsigned char sec100; </p><p>  unsigned

61、 char glimpse_sign;</p><p>  unsigned char LED_glimpse_day;</p><p>  unsigned char LED_glimpse_night;</p><p>  unsigned char count;</p><p>  unsigned char Total;</p&

62、gt;<p>  unsigned char i,j;</p><p>  sbitStart_k1 = P1^0;</p><p>  sbitDaytime_k2 = P1^1;</p><p>  sbitAdd_k3 = P1^2;</p><p>  sbitWait_time_k4 = P1^3;</p

63、><p>  sbitSetting_k5 = P1^4;</p><p>  sbit LED = P1^5;</p><p>  #defineOP_READ0xa1// 器件地址以及讀取操作</p><p>  #defineOP_WRITE 0xa0// 器件地址以及寫入操作</p><p>

64、  #defineMAX_ADDR 0x7f// AT24C02最大地址</p><p>  sbit SDA = P1^7;</p><p>  sbit SCL = P1^6;</p><p>  void start();</p><p>  void stop();</p><p>  unsigned

65、char shin();</p><p>  bit shout(unsigned char write_data);</p><p>  unsigned char read_random(unsigned char random_addr);</p><p>  void write_byte( unsigned char addr, unsigned char

66、 write_data);</p><p>  void fill_byte(unsigned char fill_data);</p><p>  bit Guesttime_sign,Waittime_sign;</p><p>  unsigned char scan_key();</p><p>  void proc_glimpse

67、();</p><p>  void proc_key();</p><p>  void inc_sec();</p><p>  void inc_min();</p><p>  void inc_hour();</p><p>  void display();</p><p>  vo

68、id delayms(unsigned char ms);</p><p>  void main(void)</p><p><b>  {</b></p><p>  P0 = 0xff;</p><p>  P2 = 0xff;</p><p><b>  SDA = 1;<

69、/b></p><p><b>  SCL = 1;</b></p><p>  TMOD = 0x11;// 定時器0, 1工作模式1, 16位定時方式</p><p>  TH1 = 0xdc;</p><p><b>  TL1 = 0;</b></p><p&g

70、t;  TH0 = 0xFC;</p><p>  TL0 = 0x17;</p><p>  Total_price = 00;</p><p>  Total_run = 000;</p><p>  Wait_time_min =00 ;</p><p>  Wait_time_sec =00 ;</p&g

71、t;<p>  Wait_consume = 00 ;</p><p>  Daytime_price=read_random(0); //讀取白天價格</p><p>  Nighttime_price=read_random(1); //讀取晚上價格</p><p>  Waittime_sign=0;</p><p

72、>  Set_times=0;</p><p>  Guesttime_sign=0;</p><p>  glimpse_sign=0;</p><p>  LED_glimpse_day=0;</p><p>  LED_glimpse_night=0;</p><p><b>  count=0;

73、</b></p><p><b>  j=0;</b></p><p>  sec100 = 0;</p><p>  if(Daytime_k2==0) //判斷白天</p><p><b>  {</b></p><p>  Unit_price=

74、Daytime_price;</p><p><b>  }</b></p><p>  if(Daytime_k2==1) //判斷晚上</p><p><b>  {</b></p><p>  Unit_price=Nighttime_price;</p>&l

75、t;p><b>  }</b></p><p>  dis_buf[0] = dis_code[Total_price/ 10];</p><p>  dis_buf[1] = dis_code[Total_price % 10];</p><p>  dis_buf[2] = 0xff;</p><p>  d

76、is_buf[3] = dis_code[Total_run/ 100];</p><p>  dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p>  dis_buf[5] = dis_code[(Total_run % 100)%10];</p><p>  dis_buf[6] =

77、0xff;</p><p>  dis_buf[7] = dis_code[Unit_price];</p><p>  dis_digit = 0xfe;</p><p>  dis_index = 0;</p><p>  TCON = 0x01;</p><p>  IE = 0x8b;

78、// 使能timer0,1 中斷</p><p><b>  IT0=1;</b></p><p><b>  TR0 = 1;</b></p><p><b>  TR1 = 0;</b></p><p>  key_v = 0x07;</p><p

79、><b>  while(1)</b></p><p><b>  {</b></p><p>  if(Guesttime_sign!=1&&Set_times==0)</p><p><b>  {</b></p><p>  if(Daytime

80、_k2==0)</p><p><b>  {</b></p><p>  Unit_price=Daytime_price;</p><p><b>  }</b></p><p>  if(Daytime_k2==1)</p><p><b>  {</b

81、></p><p>  Unit_price=Nighttime_price;</p><p><b>  }</b></p><p>  dis_buf[7] = dis_code[Unit_price];</p><p><b>  }</b></p><p> 

82、 if(Start_k1==0)</p><p><b>  {</b></p><p>  if(Guesttime_sign==0&&Set_times==0)</p><p><b>  {</b></p><p>  Total_price=10;</p>&l

83、t;p>  Guesttime_sign=1;</p><p><b>  LED=0;</b></p><p>  dis_buf[0] = dis_code[Total_price/ 10];</p><p><b>  }</b></p><p><b>  }</b&g

84、t;</p><p>  if(Start_k1==1)</p><p><b>  {</b></p><p>  if(Guesttime_sign==1)</p><p><b>  {</b></p><p><b>  TR1=0;</b>&l

85、t;/p><p>  Total=Total_price+Wait_consume;</p><p>  dis_buf[0] = dis_code[Total/ 10];</p><p>  dis_buf[1] = dis_code[Total % 10];</p><p>  dis_buf[2] = 0xff;</p>&

86、lt;p>  dis_buf[3] = dis_code[Total_run/ 100];</p><p>  dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p>  dis_buf[5] = dis_code[(Total_run % 100)%10];</p><p>  di

87、s_buf[6] = 0xff;</p><p>  dis_buf[7] = dis_code[Unit_price];</p><p>  for(i=0;i<250;i++)</p><p><b>  {</b></p><p>  delayms(50000);</p><

88、p><b>  j++;</b></p><p><b>  if(j==5)</b></p><p><b>  {</b></p><p><b>  LED=~LED;</b></p><p><b>  j=0;</b>

89、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  LED=1;</b></p><p>  Total_price=0;</p><p>  Total_run=0;</p>&l

90、t;p>  Waittime_sign=0;</p><p>  Guesttime_sign=0;</p><p>  Wait_time_min =00 ;</p><p>  Wait_time_sec =00 ;</p><p>  Wait_consume = 00 ;</p><p>  dis_bu

91、f[0] = dis_code[Total_price/ 10];</p><p>  dis_buf[1] = dis_code[Total_price % 10];</p><p>  dis_buf[2] = 0xff;</p><p>  dis_buf[3] = dis_code[Total_run/ 100];</p><p&g

92、t;  dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p>  dis_buf[5] = dis_code[(Total_run % 100)%10];</p><p>  dis_buf[6] = 0xff;</p><p>  dis_buf[7] = dis_code[U

93、nit_price];</p><p><b>  }</b></p><p><b>  }</b></p><p>  key_s=scan_key();</p><p>  if(key_s != key_v)</p><p><b>  {</b>

94、;</p><p>  delayms(10);</p><p>  if(key_s != key_v)</p><p><b>  {</b></p><p>  key_v = key_s;</p><p>  proc_key();</p><p><b>

95、;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  unsigned char scan_key()</p><p><b>

96、  {</b></p><p>  key_s = 0x00;</p><p>  key_s |= Add_k3;</p><p>  key_s <<= 1;</p><p>  key_s |= Wait_time_k4;</p><p>  key_s <<= 1;</

97、p><p>  key_s |=Setting_k5;</p><p>  return key_s ;</p><p><b>  }</b></p><p>  void proc_key()</p><p><b>  {</b></p><p>

98、  if((key_v & 0x02) == 0)// K4</p><p><b>  {</b></p><p>  if(Guesttime_sign==1) //判斷有沒有乘客</p><p><b>  {</b></p><p>  Waittime_sign=~Wait

99、time_sign;//等客標(biāo)志位取反</p><p>  if(Waittime_sign==1)</p><p><b>  {</b></p><p>  dis_buf[0] = dis_code[Wait_consume/ 10];</p><p>  dis_buf[1] = dis_code[Wait_

100、consume% 10]; //等待消費金額</p><p>  dis_buf[2] = 0xff;</p><p>  dis_buf[3] = dis_code[Wait_time_min/10];</p><p>  dis_buf[4] = dis_code[Wait_time_min%10];</p><p>  dis_

101、buf[5] = 0xbf;</p><p>  dis_buf[6] = dis_code[Wait_time_sec/10];</p><p>  dis_buf[7] = dis_code[Wait_time_sec%10]; //等客時間</p><p>  TR1=1; //開啟定時器1</p><p&g

102、t;<b>  }</b></p><p>  if(Waittime_sign==0)</p><p><b>  {</b></p><p>  dis_buf[0] = dis_code[Total_price/ 10];</p><p>  dis_buf[1] = dis_code[To

103、tal_price % 10]; //總金額</p><p>  dis_buf[2] = 0xff;</p><p>  dis_buf[3] = dis_code[Total_run/ 100];</p><p>  dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><

104、p>  dis_buf[5] = dis_code[(Total_run % 100)%10]; //總里程</p><p>  dis_buf[6] = 0xff;</p><p>  dis_buf[7] = dis_code[Unit_price]; //單價</p><p>  TR1=0;//關(guān)閉定時器1</p&g

105、t;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if((key_v & 0x04) == 0)// K3</p><p><b>  {</b>

106、</p><p>  if(Guesttime_sign==0) //判斷有沒有顧客</p><p><b>  {</b></p><p>  Set_times++; //調(diào)價計數(shù)器加1</p><p>  if(Set_times==1||Set_times==2)</p><p&

107、gt;  TR1=1; //開啟定時器1</p><p>  if(Set_times==3)</p><p><b>  {</b></p><p>  if(Daytime_k2==0) //判斷白天</p><p><b>  {</b></p><p&g

108、t;  Unit_price=Daytime_price; //白天,存白天單價</p><p><b>  }</b></p><p>  if(Daytime_k2==1) //判斷夜晚</p><p><b>  {</b></p><p>  Unit_price=Nighttim

109、e_price;//夜晚,存夜晚單價</p><p><b>  }</b></p><p>  dis_buf[0] = dis_code[Total_price/ 10];</p><p>  dis_buf[1] = dis_code[Total_price % 10];//總金額</p><p>  di

110、s_buf[2] = 0xff;</p><p>  dis_buf[3] = dis_code[Total_run/ 100];</p><p>  dis_buf[4] = dis_code[(Total_run % 100)/10]& 0x7f;</p><p>  dis_buf[5] = dis_code[(Total_run % 100)%

111、10];//總里程</p><p>  dis_buf[6] = 0xff;</p><p>  dis_buf[7] = dis_code[Unit_price]; //單價</p><p>  TR1=0; //關(guān)閉定時器1</p><p>  write_byte(0, Daytime_price)

112、; //存儲白天單價</p><p>  write_byte(1,Nighttime_price); //存儲晚上單價</p><p>  Set_times=0; //退出調(diào)節(jié)狀態(tài)</p><p><b>  }</b></p><p><b>  }</b></p

113、><p><b>  }</b></p><p>  if((key_v & 0x01) == 0)// K5</p><p><b>  {</b></p><p>  if(Set_times==1)</p><p><b>  {</b>&l

114、t;/p><p>  Daytime_price++;//白天單價加1</p><p>  if(Daytime_price>9)</p><p>  Daytime_price=0;//單價超過范圍,清零</p><p>  dis_buf[3] = dis_code[Daytime_price];//調(diào)整白天單價</p&

115、gt;<p><b>  }</b></p><p>  if(Set_times==2)</p><p><b>  {</b></p><p>  Nighttime_price++; //晚上單價加1</p><p>  if(Nighttime_price>9)

116、 //單價超過范圍,清零</p><p>  Nighttime_price=0;</p><p>  dis_buf[7] = dis_code[Nighttime_price]; //調(diào)整晚上天單價</p><p><b>  }</b></p><p><b>  }</b></p

117、><p><b>  }</b></p><p>  void timer0() interrupt 1</p><p>  // 定時器0中斷服務(wù)程序, 用于數(shù)碼管的動態(tài)掃描</p><p>  // dis_index --- 顯示索引, 用于標(biāo)識當(dāng)前顯示的數(shù)碼管和緩沖區(qū)的偏移量</p><p>

118、  // dis_digit --- 位選通值, 傳送到P2口用于選通當(dāng)前數(shù)碼管的數(shù)值, 如等于0xfe時,</p><p>  //選通P2.0口數(shù)碼管</p><p>  // dis_buf --- 顯于緩沖區(qū)基地址</p><p><b>  {</b></p><p>  TH0 = 0xFC;&

119、lt;/p><p>  TL0 = 0x17;</p><p>  P2 = 0xff;// 先關(guān)閉所有數(shù)碼管</p><p>  P0 = dis_buf[dis_index];// 顯示代碼傳送到P0口</p><p>  P2 = dis_digit;// </p><p>  dis

120、_digit = _crol_(dis_digit,1);// 位選通值左移, 下次中斷時選通下一位數(shù)碼管</p><p>  dis_index++;// </p><p>  dis_index &= 0x07;// 8個數(shù)碼管全部掃描完一遍之后,再回到第一個開始下一次掃描</p><p><b>  } </b

121、></p><p>  void timer1() interrupt 3</p><p><b>  {</b></p><p>  TH1 = 0xdc; //定時器裝初值</p><p>  if(Guesttime_sign==1&&Waittime_sign==1)</p

122、><p><b>  {</b></p><p><b>  sec100++;</b></p><p>  if(sec100 >= 100)</p><p><b>  {</b></p><p>  sec100 = 0;</p>

123、<p>  inc_sec();</p><p><b>  }</b></p><p>  Wait_consume=Wait_time_min; </p><p>  dis_buf[0] = dis_code[Wait_consume/ 10];</p><p>  dis_bu

124、f[1] = dis_code[Wait_consume% 10]; //等待消費金額</p><p><b>  }</b></p><p>  if(Guesttime_sign==0&&(Set_times==1||Set_times==2))</p><p><b>  {</b></p

125、><p>  glimpse_sign++;</p><p>  if(glimpse_sign >= 30)</p><p><b>  {</b></p><p>  glimpse_sign=0;</p><p>  proc_glimpse();</p><p>

126、<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void inc_sec()</p><p><b>  {</b></p><p>  Wait_time

127、_sec++;</p><p>  if(Wait_time_sec > 59)</p><p><b>  {</b></p><p>  Wait_time_sec = 0;</p><p>  inc_min();</p><p><b>  }</b></

128、p><p>  dis_buf[6] = dis_code[Wait_time_sec/10];</p><p>  dis_buf[7] = dis_code[Wait_time_sec%10];</p><p><b>  }</b></p><p>  void inc_min()</p>&

129、lt;p><b>  {</b></p><p>  Wait_time_min++;</p><p>  if(Wait_time_min > 59)</p><p><b>  {</b></p><p>  Wait_time_min = 0;</p><p&g

溫馨提示

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

評論

0/150

提交評論