欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      出租車智能計(jì)價(jià)器的設(shè)計(jì)與實(shí)現(xiàn)探討論文(范文大全)

      時(shí)間:2019-11-19 16:44:09下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《出租車智能計(jì)價(jià)器的設(shè)計(jì)與實(shí)現(xiàn)探討論文》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《出租車智能計(jì)價(jià)器的設(shè)計(jì)與實(shí)現(xiàn)探討論文》。

      第一篇:出租車智能計(jì)價(jià)器的設(shè)計(jì)與實(shí)現(xiàn)探討論文

      0 引言

      出租車作為城市交通中獨(dú)特的交通工具,在城市交通運(yùn)營中具有不可替代的重要作用。出租車司機(jī)最關(guān)心計(jì)價(jià)器的營運(yùn)數(shù)據(jù)管理是否方便,而乘客往往最在意出租車計(jì)價(jià)計(jì)費(fèi)是否合理。為了減少出租車司機(jī)和乘客間不必要的誤會(huì),設(shè)計(jì)既能準(zhǔn)確計(jì)價(jià)又能方便使用的計(jì)價(jià)器顯得非常重要。

      科技在不斷發(fā)展,社會(huì)在快速進(jìn)步,出租車計(jì)價(jià)系統(tǒng)也需不斷地得到優(yōu)化。文中以嵌入式單片機(jī)AT89C51為主控MCU,設(shè)計(jì)多功能出租車智能計(jì)價(jià)器。此計(jì)價(jià)器能夠按實(shí)際情況綜合計(jì)價(jià),并將乘車用時(shí)、行駛里程和乘車費(fèi)用等重要信息顯示出來,具有功能更齊全、系統(tǒng)更穩(wěn)定、使用更方便等優(yōu)勢(shì)。出租車智能計(jì)價(jià)系統(tǒng)總體設(shè)計(jì)

      利用AT89C51作為單片機(jī)核心器件設(shè)計(jì)的智能計(jì)價(jià)系統(tǒng),使用方便、靈敏性好,其強(qiáng)大的控制處理功能和可擴(kuò)展功能為設(shè)計(jì)電路提供了很好的選擇。利用其I/O端口及其控制的多功能特點(diǎn),采用按鍵控制進(jìn)行分屏顯示,實(shí)現(xiàn)基本乘車計(jì)價(jià)和信息顯示功能。

      在系統(tǒng)硬件設(shè)計(jì)中,以AT89C51單片機(jī)為控制中心,外接A44E霍爾傳感器信號(hào)采集模塊、時(shí)鐘模塊、按鍵模塊、顯示模塊以及掉電保護(hù)存儲(chǔ)模塊。其中,選用A44E霍爾傳感器信號(hào)采集模塊可將磁感應(yīng)轉(zhuǎn)換為脈沖信號(hào),從而計(jì)測(cè)出行車?yán)锍?;時(shí)鐘模塊采用DS1302芯片,設(shè)置標(biāo)準(zhǔn)時(shí)鐘;掉電存儲(chǔ)模塊采用AT24C02芯片,以確保掉電時(shí)數(shù)據(jù)自動(dòng)保存在存儲(chǔ)單元;當(dāng)系統(tǒng)重新上電時(shí),能自動(dòng)讀取數(shù)據(jù);按鍵模塊采用四個(gè)按鍵控制,可實(shí)現(xiàn)分屏顯示功能;顯示模塊采用8位LED數(shù)碼管進(jìn)行顯示。系統(tǒng)軟件設(shè)計(jì)

      2.1 系統(tǒng)主程序

      在主程序模塊中,不僅需要完成參量和接口的初始化設(shè)計(jì)、出租車起步價(jià)和單價(jià)的設(shè)置以及中斷、計(jì)算等操作,還應(yīng)設(shè)置啟動(dòng)/清除標(biāo)志、里程以及價(jià)格寄存器,并對(duì)其進(jìn)行初始化。最后,為實(shí)現(xiàn)寄存器中內(nèi)容的完整性及精確性,主程序應(yīng)能分別完成啟動(dòng)、清除、計(jì)程及計(jì)費(fèi)等操作。

      當(dāng)出租車起步運(yùn)行時(shí),計(jì)價(jià)器同時(shí)啟動(dòng)開始計(jì)價(jià),根據(jù)里程寄存器中的存儲(chǔ)數(shù)據(jù)進(jìn)行運(yùn)算并判別行駛路程是否超過起步價(jià)的里程。若已超過起步價(jià)里程,則根據(jù)里程值、單價(jià)數(shù)和起步價(jià)等來綜合計(jì)算當(dāng)前的乘車費(fèi)用;當(dāng)處于等待時(shí)段時(shí),若無脈沖輸入,不產(chǎn)生中斷,一旦等待時(shí)間超過預(yù)設(shè)時(shí)間則會(huì)把等待超標(biāo)費(fèi)用另加到乘車總費(fèi)用中,并顯示相關(guān)信息。

      2.2 系統(tǒng)模塊程序

      系統(tǒng)模塊程序主要包括五個(gè)服務(wù)程序:顯示子程序、里程計(jì)數(shù)中斷、定時(shí)中斷、中途等待中斷和按鍵服務(wù)程序。各服務(wù)程序介紹如下:

      (1)顯示子程序。由于采取的是分屏數(shù)據(jù)顯示方式,因此需要用到4 款顯示子程序:時(shí)、分、秒的顯示,金額單價(jià)的顯示,路程單價(jià)的顯示以及標(biāo)準(zhǔn)時(shí)間的顯示。

      (2)里程計(jì)數(shù)中斷?;舳鷤鞲衅髅枯敵鲆粋€(gè)低電平信號(hào)便中斷一次,當(dāng)里程計(jì)數(shù)器計(jì)滿1000個(gè)里程脈沖時(shí),便將當(dāng)前計(jì)數(shù)送至里程計(jì)數(shù)中斷服務(wù)程序,并將當(dāng)前行車?yán)锍碳跋嚓P(guān)數(shù)據(jù)傳至行車?yán)锍膛c乘車費(fèi)用寄存器中。

      (3)定時(shí)中斷。在定時(shí)中斷服務(wù)程序中,設(shè)置一次中斷時(shí)間為50ms,20 次中斷時(shí)間為1s,計(jì)滿1s后將數(shù)據(jù)送到相應(yīng)顯示單元實(shí)時(shí)顯示。

      (4)中途等待中斷。在計(jì)數(shù)狀態(tài)下霍耳開關(guān)無信號(hào)輸出時(shí),片內(nèi)定時(shí)器啟動(dòng)。等待計(jì)時(shí)每達(dá)到5分鐘,就會(huì)在當(dāng)前金額基礎(chǔ)上自動(dòng)加上中途等待費(fèi)用。等待結(jié)束后計(jì)價(jià)系統(tǒng)自動(dòng)轉(zhuǎn)換到正常計(jì)價(jià)程序。

      (5)按鍵服務(wù)程序。按鍵服務(wù)采取查詢模式,設(shè)置在主程序中。當(dāng)無按鍵按下時(shí),單片機(jī)循環(huán)運(yùn)行主程序;按鍵被按下,則轉(zhuǎn)向運(yùn)行相應(yīng)子程序,并進(jìn)行其他操作處理。系統(tǒng)仿真與功能實(shí)現(xiàn)

      3.1 仿真軟件Proteus簡(jiǎn)介

      Proteus仿真軟件是英國Labcenter Electronics公司設(shè)計(jì)開發(fā)的EDA工具,它不但擁有其它工具軟件的仿真功能,而且可仿真微處理器和相關(guān)外圍設(shè)備。Proteus軟件功能強(qiáng)大:擁有Proteus電子設(shè)計(jì)工具,就等同搭建了一個(gè)電子設(shè)計(jì)和分析平臺(tái)。利用功能強(qiáng)大的Proteus仿真軟件,我們可以實(shí)現(xiàn)對(duì)電路的仿真,以確定方案是否可行,并且可使設(shè)計(jì)過程流暢。

      3.2 電路功能仿真

      首先通過Proteus平臺(tái)搭建電路,然后在KEIL中編寫相應(yīng)代碼,并將生成的HEX文件在Proteus平臺(tái)單片機(jī)模型中加載,便可看到仿真效果。系統(tǒng)實(shí)驗(yàn)及結(jié)果分析

      按原理圖進(jìn)行焊接,確保接線無誤后。對(duì)實(shí)物進(jìn)行調(diào)試與實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,利用AT89C51主控,霍爾傳感器進(jìn)行采集,AT24C02進(jìn)行掉電存儲(chǔ)保護(hù),配以程序,就能較好地實(shí)現(xiàn)出租車智能計(jì)價(jià)功能。結(jié)論

      文中設(shè)計(jì)的出租車智能計(jì)價(jià)系統(tǒng)能夠?qū)崟r(shí)存儲(chǔ)相關(guān)數(shù)據(jù),并通過8位LED數(shù)碼管分屏顯示存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)基本的計(jì)價(jià)功能。本系統(tǒng)對(duì)乘車中可能出現(xiàn)的情況考慮較全面,能根據(jù)白天、夜晚、中途等待等不同情況來調(diào)節(jié)單價(jià),從而達(dá)到出租車智能計(jì)價(jià)的目的。當(dāng)然,要達(dá)到大規(guī)模的實(shí)際應(yīng)用要求,還需不斷改進(jìn)和完善系統(tǒng)綜合性能指標(biāo),以達(dá)到實(shí)際應(yīng)用要求。

      第二篇:出租車計(jì)價(jià)器設(shè)計(jì)范文

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      目錄

      目錄......................................................................................................................................................1 前言......................................................................................................................................................2 第一章 系統(tǒng)工作原理........................................................................................................................2 1.1 功能說明..............................................................................................................................2 1.2 基本原理..............................................................................................................................2 第二章 硬件設(shè)計(jì)...............................................................................................................................3 2.1 單片機(jī)最小系統(tǒng)單元..........................................................................................................3 2.2 A44E霍爾傳感器檢測(cè)單元................................................................................................4 2.3 AT24C01存儲(chǔ)單元..............................................................................................................6 2.4 鍵盤調(diào)整單元......................................................................................................................7 2.5 顯示單元..............................................................................................................................8 第三章 軟件設(shè)計(jì)...............................................................................................................................8 3.1 系統(tǒng)主程序..........................................................................................................................8 3.2 中斷程序..............................................................................................................................9 3.2.1 里程計(jì)數(shù)中斷程序...................................................................................................9 3.2.2 中途等待中斷程序.................................................................................................10 3.3 計(jì)算程序............................................................................................................................10 3.4 顯示程序............................................................................................................................10 3.5 鍵盤程序............................................................................................................................10 第四章 總結(jié).....................................................................................................................................11 參考文獻(xiàn)............................................................................................................................................12

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      算出行駛公里數(shù),再根據(jù)從EEPROM中讀取的價(jià)格等相關(guān)數(shù)據(jù)進(jìn)行金額的計(jì)算,計(jì)算好的金額、里程和單價(jià)都實(shí)時(shí)地顯示在數(shù)碼管上。獨(dú)立鍵盤可以調(diào)節(jié)價(jià)格等相關(guān)數(shù)據(jù),按下相應(yīng)的按鈕,產(chǎn)生信號(hào)交由單片機(jī)處理并實(shí)時(shí)顯示出來,調(diào)節(jié)好的數(shù)據(jù)存儲(chǔ)到EEPROM中,掉電后可以使調(diào)好的數(shù)據(jù)不丟失,下次得電后直接從EEPROM讀到單片機(jī),系統(tǒng)結(jié)構(gòu)圖如圖1。

      圖1 系統(tǒng)結(jié)構(gòu)圖

      第二章 硬件設(shè)計(jì)

      2.1 單片機(jī)最小系統(tǒng)單元

      主控機(jī)系統(tǒng)采用了Atmel 公司生產(chǎn)的 AT89S52單片機(jī),它含有256 字節(jié)數(shù)據(jù)存儲(chǔ)器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機(jī)軟件系統(tǒng)設(shè)計(jì),所以不必再擴(kuò)展程序存儲(chǔ)器。復(fù)位電路和晶振電路是AT89S52 工作所需

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院 的最簡(jiǎn)外圍電路。單片機(jī)最小系統(tǒng)電路圖如圖2所示。

      圖2 單片機(jī)最小系統(tǒng)圖

      AT89S52 的復(fù)位端是一個(gè)史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個(gè)周期,系統(tǒng)將實(shí)現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開關(guān)就使在RST端出現(xiàn)一段時(shí)間的高電平,外接11.0592M 晶振和兩個(gè)30pF 電容組成系統(tǒng)的內(nèi)部時(shí)鐘電路。

      2.2 A44E霍爾傳感器檢測(cè)單元

      A44E 屬于開關(guān)型的霍爾器件,其工作電壓范圍比較寬(4.5~18V),其輸出的信號(hào)符合TTL電平標(biāo)準(zhǔn),可以直接接到單片機(jī)的IO 端口上,而且其最高檢測(cè)頻率可達(dá)到1MHZ。

      A44E 集成霍耳開關(guān)由穩(wěn)壓器A、霍耳電勢(shì)發(fā)生器(即硅霍耳片)B、差分放大器C、施密特觸發(fā)器D和OC門輸出E五個(gè)基本部分組成。

      在輸入端輸入電壓Vcc,經(jīng)穩(wěn)壓器穩(wěn)壓后加在霍爾電勢(shì)發(fā)生器的兩端,根據(jù)霍爾效應(yīng)原理,當(dāng)霍爾片處在磁場(chǎng)中時(shí),在垂直于磁場(chǎng)的方向通以電流,則與這二者相垂直的方向上將會(huì)產(chǎn)生霍爾電勢(shì)差VH輸出,該VH信號(hào)經(jīng)放大器放大后送至施密特觸發(fā)器整形,使其成為方波輸送到OC門輸出。當(dāng)施加的磁場(chǎng)達(dá)到工作點(diǎn)(即Bop)時(shí),觸發(fā)器輸出高電壓(相對(duì)于地電位),使三極管導(dǎo)通,此時(shí)OC門輸出端輸出低電壓,三極管截止,使OC門輸出高電壓,這種狀態(tài)為關(guān)。這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動(dòng)作。A44E霍爾傳感器原理如圖3所示。

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      圖3 A44E霍爾傳感器原理

      里程計(jì)算是通過安裝在車輪上的霍爾傳感器檢測(cè)到的脈沖信號(hào),送到單片機(jī)產(chǎn)生中斷,單片機(jī)再根據(jù)程序設(shè)定,計(jì)算出里程。其原理如圖4所示。

      圖4 傳感器測(cè)距示意圖

      本系統(tǒng)選擇了將A44E的脈沖輸出口接到P3.3口外部中斷1作為信號(hào)的輸入端(這樣可以減少程序設(shè)計(jì)的麻煩),車輪每轉(zhuǎn)一圈(設(shè)車輪的周長是1米),霍爾開關(guān)就檢測(cè)并輸出信號(hào),引起單片機(jī)的中斷,對(duì)脈沖計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到1000次時(shí),即1公里,單片機(jī)就控制將金額自動(dòng)增加,如圖5。

      圖5 A44E霍爾元件接線圖

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      2.3 AT24C01存儲(chǔ)單元

      存儲(chǔ)單元的作用是在電源斷開的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的單價(jià)信息。AT24C01 是Ateml公司的1KB的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10uA(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8 腳的DIP 封裝,使用方便。AT24C02芯片引腳配置如圖6所示。

      存儲(chǔ)單元電路連接如圖7所示。

      圖 7 存儲(chǔ)單元電路原理圖

      圖中R4、R5 是上拉電阻,其作用是減少AT24C01 的靜態(tài)功耗。由于AT24C01的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(時(shí)鐘脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)P2.2和P2.3口連接,進(jìn)行傳送數(shù)據(jù)。

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      每當(dāng)設(shè)定一次單價(jià),系統(tǒng)就自動(dòng)調(diào)用存儲(chǔ)程序,將單價(jià)信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時(shí)候,自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)器內(nèi)的單價(jià)等信息,讀到緩存單元中,供主程序使用。

      2.4 鍵盤調(diào)整單元

      當(dāng)單價(jià)等信息需要進(jìn)行修改時(shí),就要用到鍵盤進(jìn)行修改。由于調(diào)節(jié)信息不多,故采用4個(gè)獨(dú)立鍵盤即可,分別實(shí)現(xiàn)清零、切換、增大、減小和功能等作用。電路原理如圖8所示。

      圖8 鍵盤調(diào)整單元接線圖

      S1:接P1.0口,對(duì)上一次的計(jì)費(fèi)進(jìn)行清零,為下次載客準(zhǔn)備

      S2:接P1.1口,實(shí)現(xiàn)白天和夜晚單價(jià)的切換;當(dāng)功能鍵S4按下時(shí),S2可對(duì)數(shù)據(jù)進(jìn)行增大。

      S3:接P1.2口,當(dāng)功能鍵S4按下時(shí),S3可對(duì)數(shù)據(jù)進(jìn)行減小。

      S4:接P1.3口,按1次,進(jìn)入調(diào)整白天單價(jià);按2次,進(jìn)入調(diào)整夜晚單價(jià);按3次,進(jìn)入調(diào)整等待單價(jià);按4次,進(jìn)入調(diào)整起步價(jià);按5次,返回。

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      2.5 顯示單元

      顯示單元由7個(gè)8段共陽數(shù)碼管組成,采用動(dòng)態(tài)掃描進(jìn)行顯示。前三個(gè)數(shù)碼管分別接P3.0、P3.1和P3.2,用于顯示總金額;中間兩個(gè)分別接P3.4和P3.5,用于顯示里程;后邊兩個(gè)分別接P3.6和P3.7,用于顯示單價(jià)。電路如圖9所示。

      圖9 數(shù)碼管顯示圖

      第三章 軟件設(shè)計(jì)

      3.1 系統(tǒng)主程序

      在主程序模塊中,需要完成對(duì)各參量和接口的初始化、出租車起價(jià)和單價(jià)的初始化以及中斷、計(jì)算、循環(huán)等工作。另外,在主程序模塊中還需要設(shè)置啟動(dòng)/清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。然后,主程序?qū)⒏鶕?jù)各標(biāo)志寄存器的內(nèi)容,分別完成啟動(dòng)、清除、計(jì)程和計(jì)價(jià)等不同的操作。當(dāng)汽車運(yùn)行起來時(shí),就啟動(dòng)計(jì)價(jià),根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷行駛里程是否已超過起步價(jià)公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價(jià)數(shù)和起步價(jià)數(shù)來計(jì)算出當(dāng)前的總金額,并將結(jié)果存于總金額寄存器中;中途等待時(shí),無脈沖輸入,不產(chǎn)生中斷,當(dāng)時(shí)間超過等待設(shè)定值時(shí),開始進(jìn)行計(jì)時(shí),并把等待價(jià)格加到總金額里,然后將總金額、里程和單價(jià)送數(shù)碼管顯示出來。程序流程如圖10所示。

      平頂山工業(yè)職業(yè)技術(shù)學(xué)院

      圖10 主程序流程圖

      圖11 計(jì)算程序流程圖

      3.2 中斷程序

      3.2.1 里程計(jì)數(shù)中斷程序

      每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào)就使單片機(jī)中斷一次,當(dāng)里程計(jì)數(shù)器對(duì)里程脈沖計(jì)滿1000次時(shí),進(jìn)入里程計(jì)數(shù)中斷服務(wù)程序中,里程變量加一。主函數(shù)中總金額也相應(yīng)地變化。

      101112-

      第三篇:出租車計(jì)價(jià)器

      基于單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)

      摘要

      出租車計(jì)價(jià)器的數(shù)字系統(tǒng)的設(shè)計(jì)正是基于一些專用的芯片,才發(fā)揮其有效特性,從而實(shí)現(xiàn)出租車的計(jì)價(jià)功能。此數(shù)字系統(tǒng)主要分為三個(gè)單元,即里程計(jì)數(shù)及顯示單元、價(jià)格計(jì)數(shù)及顯示單元、脈沖產(chǎn)生。本設(shè)計(jì)是一個(gè)基于單片機(jī)AT89C51的出租車自動(dòng)計(jì)費(fèi)設(shè)計(jì),附有復(fù)位電路,時(shí)鐘電路等。關(guān)鍵詞:出租車計(jì)費(fèi)器;單片機(jī);控制

      Abstract Taximeter design digital system is based on some special chip, to play their effective characteristics, thus realizing the taxi valuation function.This system is mainly divided into there modules, namely the mileage counting and display unit, and display unit price counting, pulsing.The design is based on a single chip AT89C51taxis design, a reset circuit, clock circuit.Keywords:taximeter,a single-chip microcomputer,control

      1引言

      1.1 設(shè)計(jì)目的

      近幾年來,出租汽車行業(yè)在各地得以蓬勃發(fā)展,但采用模擬電路和數(shù)字電路設(shè)計(jì)的計(jì)價(jià)器整體電路的規(guī)模較大,用到的器件多,造成故障率高,難調(diào)試。而采用單片機(jī)進(jìn)行的設(shè)計(jì),相對(duì)來說功能強(qiáng)大,用較少的硬件和適當(dāng)?shù)能浖嗷ヅ浜峡梢院苋菀椎貙?shí)現(xiàn)設(shè)計(jì)要求,且靈活性強(qiáng)。

      1.2 功能要求

      (1)用前4位數(shù)碼管實(shí)時(shí)顯示里程數(shù),單位為千米,最后一位為小數(shù)位;用后4位數(shù)碼管時(shí)時(shí)顯示金額數(shù),單位為元,最后一位為小數(shù)位。

      (2)規(guī)定出租車?yán)锍绦∮?千米收費(fèi)5元,超過2千米收費(fèi)為8*(way-20)/5。

      1.3 設(shè)計(jì)方法

      本設(shè)計(jì)采用AT89C51單片機(jī)為主控器,并用頻率信號(hào)發(fā)生器模擬車速,利用AT89C51的定時(shí)器工作在方式1下定時(shí)實(shí)現(xiàn)對(duì)出租車的計(jì)價(jià)設(shè)計(jì),輸出采用共陰極的集成8位7段數(shù)碼顯示管。設(shè)計(jì)方案及原理

      2.1 設(shè)計(jì)方案

      采用AT89C51單片機(jī)為主控器,并用頻率信號(hào)發(fā)生器模擬車速,利用AT89C51的定時(shí)器/定時(shí)器T1工作在方式1下定時(shí)實(shí)現(xiàn)對(duì)出租車的計(jì)價(jià)設(shè)計(jì),輸出采用共陰極的集成8位7段數(shù)碼顯示管。本電路設(shè)計(jì)的計(jì)價(jià)器不但能實(shí)現(xiàn)基本的計(jì)價(jià),而且

      單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告

      還能根據(jù)里程來調(diào)節(jié)單價(jià)。

      2.2 設(shè)計(jì)原理

      出租車計(jì)價(jià)是根據(jù)車所行駛的路程以及乘客乘車的里程綜合決定的。出租車行駛總路程可以通過車輪的周長乘車輪旋轉(zhuǎn)圈數(shù)得到。即可計(jì)算得到車輪旋轉(zhuǎn)幾周出租車能行駛一公里的路程。通過計(jì)數(shù)接收到的脈沖個(gè)數(shù),計(jì)算出當(dāng)前所行駛的路程。同時(shí),通過數(shù)碼管顯示當(dāng)前的行駛里程和需支付的車費(fèi)。出租車計(jì)價(jià)器用于記錄里程、起步公里數(shù)與價(jià)格的關(guān)系。模擬出租車計(jì)價(jià)器能根據(jù)總里程數(shù)、起步公里數(shù)的情況作出相應(yīng)報(bào)價(jià)等。這個(gè)系統(tǒng)以AT89C51單片機(jī)為主控器,單片機(jī)的計(jì)數(shù)器/定時(shí)器T1工作在方式1下來對(duì)外部脈沖計(jì)數(shù),最后通過集成的8位7段LED數(shù)碼管顯示里程數(shù)和價(jià)錢。總體模塊框圖如圖1所示。

      總金額顯示單價(jià)顯示AT89C51脈沖產(chǎn)生動(dòng)態(tài)掃描數(shù)碼管顯示

      圖1 總體框圖 硬件設(shè)計(jì)

      對(duì)于AT89C51的計(jì)數(shù)器/定時(shí)器T1,通過對(duì)寄存器TCON的設(shè)置,即使它的M1M0=01,計(jì)數(shù)器/定時(shí)器T1工作在方式1下,構(gòu)成16位計(jì)數(shù)器/定時(shí)器。此時(shí)TH0、TL0都是8位加法計(jì)數(shù)器。此設(shè)計(jì)中,T1為計(jì)數(shù)工作方式,計(jì)數(shù)范圍為1~2^16=1~65536(個(gè)外部脈沖)。當(dāng)計(jì)數(shù)溢出時(shí)則置位并申請(qǐng)中斷,進(jìn)入中斷服務(wù) 執(zhí)行中斷程序。

      通過74HC138接P20、P21、P22輸出來對(duì)8位7段的智能掃描LED進(jìn)行段選,并且通過P1口對(duì)LED進(jìn)行位選,最后將結(jié)果顯示在LED上。硬件設(shè)計(jì)圖如圖2所示。

      74HC138是三八譯碼器,在工作之前,使74HC138的使能端有效,再使74HC138的A、B、C接P20、P21、P22的輸出達(dá)到對(duì)LED位選線的控制,使相應(yīng)的位顯示相應(yīng)的結(jié)果。硬件總設(shè)計(jì)圖如圖2所示。

      第四篇:出租車計(jì)價(jià)器調(diào)試報(bào)告

      出租車計(jì)價(jià)器調(diào)試報(bào)告

      本設(shè)計(jì)可分為單片機(jī)主控模塊、鍵盤、顯示器、溫度檢測(cè)、狀態(tài)指示、時(shí)鐘日歷、語音收錄播報(bào)、分頻器電路、脈沖信號(hào)發(fā)生器等9部分。仔細(xì)分析系統(tǒng)的工作原理,分別按照模塊在系統(tǒng)中的作用,對(duì)各個(gè)模塊分別單獨(dú)調(diào)試,最后形成該系統(tǒng)的用戶程序,實(shí)現(xiàn)功能要求。

      一、接通電源

      調(diào)試要求:1.首先仔細(xì)檢查該系統(tǒng)板的電源和地是否有短路問題,在未接入電源輕快下,使用萬用表檢驗(yàn)電源和地檢查是否短路,如果沒有短路,再仔細(xì)核查電源極性后予以通電,觀察電源指示燈D1是否點(diǎn)亮。如果電源指示的燈不亮應(yīng)立即關(guān)閉電源,并用手觸摸各個(gè)芯片,檢查是否用某芯片發(fā)熱。如果沒有發(fā)熱的器件,很可能是電源指示二極管極性安裝錯(cuò)誤,或者是該發(fā)光二極管的串聯(lián)電阻阻值偏大。

      2.黑板上調(diào)試要求:(1)焊接好電路板加電前,用萬用表測(cè)量板上Vcc 和

      GND之間的電阻,應(yīng)大于1KΩ

      (2)加電后測(cè)量電路板上各電壓,應(yīng)大于4.2V 調(diào)試結(jié)果:1.經(jīng)萬用表檢驗(yàn),電路板無短路問題。

      2.通電后,D1指示燈點(diǎn)亮。

      3.測(cè)量Vcc 與 地之間的電阻,1.14KΩ > 1KΩ

      4.測(cè)量Vcc與 地之間的電壓:4.28V > 4.20V

      二、測(cè)試狀態(tài)指示

      本系統(tǒng)中狀態(tài)指示二極管共有3個(gè),它們分別是D1、D2、D3。D1是指示電源的,可以在電源接通時(shí)直接看到,D2用于指示語音芯片的工作狀態(tài),留作語音模塊調(diào)試時(shí)觀察。D3是可以由單片機(jī)的引腳控制的。

      編寫測(cè)試D3的程序: #include #include

      sbit a_c=P1^0;extern serial_initial();

      main(){ serial_initial();a_c=0;while(1);}

      測(cè)試結(jié)果: 1.2.三、脈沖信號(hào)發(fā)生器測(cè)試

      測(cè)試要求:該模塊由5G555芯片構(gòu)成一個(gè)多諧振蕩器,使用示波器觀察該芯片的第3引腳的波形,并調(diào)節(jié)電位器W1,觀察輸出波形及頻率變化。

      測(cè)試結(jié)果:

      調(diào)整W1前,f=147.1Hz

      調(diào)整W1后,f=130.5Hz

      四、分頻電路測(cè)試

      測(cè)試要求:該模塊由一個(gè)4位二進(jìn)制計(jì)數(shù)器74HC161和一個(gè)多路選擇器74HC153構(gòu)成。調(diào)試時(shí)可以利用由5G555芯片構(gòu)成一個(gè)多諧振蕩器的輸出,或信號(hào)發(fā)生器作為計(jì)數(shù)器74HC161的計(jì)數(shù)輸入信號(hào)。值得注意的是控制多路選擇器74HC153的S0、S1與單片機(jī)調(diào)試時(shí)所使用的引腳復(fù)用,要采取特殊措施才能正確試驗(yàn)檢測(cè)。

      測(cè)試結(jié)果:利用函數(shù)信號(hào)發(fā)生器生成一個(gè)方波,周期/頻率如圖:

      其在輸出端輸出的波形為:

      f1=3.881kHz

      f2 =1.235kHz 分頻功能無誤。

      五、鍵盤測(cè)試

      測(cè)試要求:本系統(tǒng)相對(duì)比較簡(jiǎn)單,僅有5個(gè)按鍵,其中4個(gè)為系統(tǒng)功能鍵,它們分別是S1、S2、S3、S4,另一個(gè)是系統(tǒng)復(fù)位按鍵S6。對(duì)于系統(tǒng)復(fù)位按鍵S6可以在上電之后,使用萬用表予以檢查,按下該按鍵,單片機(jī)的第9腳應(yīng)該為高電平,釋放后應(yīng)該為點(diǎn)電平。

      對(duì)于系統(tǒng)功能鍵,編寫如下程序予以測(cè)試檢查:

      #include #include #include #include #define SEGMENT XBYTE[0x0c000]

      #define BIT_LED XBYTE[0x0a000] void display();sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;unsigned char a;unsigned

      char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x63,0x39,};void delay(unsigned int i);main(){ while(1){ if(k1==0)a=0x06;if(k2==0)a=0x5b;if(k3==0)a=0x4f;if(k4==0)a=0x66;display();} } 測(cè)試結(jié)果:對(duì)于復(fù)位鍵S6,按下前應(yīng)為低電平,按下后應(yīng)為高電平

      按下前

      按下后

      對(duì)于S1—S4,按下前為高電平,按下后為低電平。其測(cè)試結(jié)果均符合預(yù)期。

      六、動(dòng)態(tài)數(shù)碼管測(cè)試

      測(cè)試要求:本系統(tǒng)中的數(shù)碼管的原理采用的是動(dòng)態(tài)掃描方式,即某一時(shí)刻只用一個(gè)數(shù)碼管在顯示,利用人的視覺暫留特性,讓數(shù)碼管高速輪流顯示,達(dá)到完整顯示的目的。

      編寫如下程序進(jìn)行測(cè)試: #include #include #include #include #define SEGMENT XBYTE[0x0c000]

      #define BIT_LED XBYTE[0x0a000] void displayhello();sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;unsigned char a;unsigned char table[]={0x06,0x06,0x3f,0x3e,0x79,0x6e,0x3f,0x3e,0x7f,0x67,0x40,0x00,0x63,0x39,};void delayms(unsigned int i);main(){ while(1){ displayhello();} }

      void displayhello(){

      unsigned char BIT=1;

      unsigned int i;

      BIT_LED=1;

      for(i=0;i<=7;i++)

      {

      SEGMENT=table[i];

      BIT_LED=BIT;

      BIT=BIT<<1;

      delayms(1);

      }

      } void delayms(unsigned int i){ unsigned int n;while(i--){

      for(n=0;n<125;n++);

      } }

      測(cè)試結(jié)果:顯示“I love you”

      由于是動(dòng)態(tài)顯示,所以按下復(fù)位鍵后,只有一個(gè)數(shù)碼管點(diǎn)亮

      七、溫度傳感器測(cè)試

      測(cè)試要求:本系統(tǒng)使用的是一款單線溫度傳感器(DS18B20),可將溫度穿換成12的數(shù)字量,以表示溫度。

      編寫如下程序予以測(cè)試檢查: #include #include #include #include #define SEGMENT XBYTE[0x0c000]

      //段碼寄存器地址 #define BIT_LED XBYTE[0x0a000]

      //位碼寄存器地址 #define fosc 11.0592

      unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x63,0x39,};//分別顯示0 1 2 3 4 5 6 7 8 9-o C

      unsigned char table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//分別顯示0.1.2.3.4.5.6.7.8.9.unsigned char table2[]={0x76,0x79,0x38,0x38,0x3f};sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;unsigned char data display_buffer[13];unsigned char bdata data_ds1302;

      unsigned char disbuf[]={0,0,0,0};sbit k4=P1^3;

      sbit TMDAT=P3^4;

      //溫度入口

      void dmsec(unsigned int count);void tmreset(void);

      //ds18b20 reset void tmstart(void);

      // void tmrtemp(void);void Disbuf(unsigned int temper);void displaytemper();void delay(unsigned int);main(){ display_buffer[0]=0x01;

      display_buffer[1]=0x00;

      display_buffer[2]=0x00;display_buffer[3]=0x08;

      display_buffer[4]=0x05;

      display_buffer[5]=0x00;display_buffer[6]=0x01;

      display_buffer[7]=0x04;

      display_buffer[8]=0x00;display_buffer[9]=0x05;

      display_buffer[10]=0x00;

      display_buffer[11]=0x01;

      display_buffer[12]=0x04;while(1){ tmstart();

      tmrtemp();

      displaytemper();} }

      void tmreset(void){

      unsigned int i;

      TMDAT = 0;

      i = 103;while(i>0)i--;

      TMDAT = 1;

      i = 4;while(i>0)i--;}

      void tmpre(void){

      unsigned int i;

      while(TMDAT);

      while(~TMDAT);

      i = 4;while(i>0)i--;}

      bit tmrbit(void){

      // ds1820

      // Reset TX

      unsigned int i;

      bit dat;

      TMDAT = 0;i++;

      TMDAT = 1;i++;i++;

      dat = TMDAT;

      i = 8;while(i>0)i--;

      return(dat);}

      unsigned char tmrbyte(void){

      unsigned char i,j,dat;

      dat = 0;

      for(i=1;i<=8;i++){

      j = tmrbit();

      dat =(j << 7)|(dat >> 1);

      }

      return(dat);}

      void tmwbyte(unsigned char dat){

      unsigned int i;

      unsigned char j;

      bit testb;

      for(j=1;j<=8;j++){

      testb = dat & 0x01;

      dat = dat >> 1;

      if(testb){

      TMDAT = 0;

      i++;i++;

      TMDAT = 1;

      i = 8;while(i>0)i--;

      }

      else {

      TMDAT = 0;

      i = 8;while(i>0)i--;

      TMDAT = 1;

      i++;i++;

      }

      } }

      void tmstart(void){

      tmreset();

      tmpre();

      // ds1820

      displaytemper();//delay(100);

      tmwbyte(0xcc);

      tmwbyte(0x44);

      }

      void tmrtemp(void){

      unsigned char a,xiao,b,y1,y2,y3;

      tmreset();

      tmpre();

      delay(1);

      tmwbyte(0xcc);

      tmwbyte(0xbe);

      a = tmrbyte();

      b = tmrbyte();

      xiao=a&0x0f;//小數(shù)部分

      y1=a>>4;

      y2=b<<4;

      y3=y1|y2;if((b&0x0f8)==0x0f8)

      {y3=~y3+1;

      disbuf[0]=10;//顯示符號(hào)

      disbuf[1]=y3/10;

      disbuf[2]=y3%10;

      disbuf[3]=xiao*10*0.0625;} else

      disbuf[0]=11;//不顯示

      disbuf[1]=y3/10;

      disbuf[2]=y3%10;

      disbuf[3]=xiao*10*0.0625;}

      void displaytemper()

      //溫度顯示函數(shù)

      { unsigned int i;unsigned char e=0x01;//<<1;for(i=1;i<6;i++)

      { switch(i)

      {

      case 1:{SEGMENT=table[disbuf[1]];BIT_LED=e;break;}

      case 2:{SEGMENT=table1[disbuf[2]];BIT_LED=e;break;}

      case 3:{SEGMENT=table[disbuf[3]];BIT_LED=e;break;}

      case 4:{SEGMENT=table[12];BIT_LED=e;break;}

      case 5:{SEGMENT=table[13];BIT_LED=e;break;}

      }

      e=e<<1;

      delay(80);

      }

      BIT_LED=0;

      }

      void delay(unsigned int i)

      //delay函數(shù) {

      while(i--);}

      測(cè)試結(jié)果:

      經(jīng)傳感器及數(shù)碼管延時(shí),溫度重新顯示

      八、時(shí)鐘日歷測(cè)試

      測(cè)試要求:本系統(tǒng)使用了時(shí)鐘日歷專用芯片,該芯片是以串行方式實(shí)現(xiàn)控制和數(shù)據(jù)傳輸?shù)摹?/p>

      編寫如下程序進(jìn)行測(cè)試: #include #include #include #include #define SEGMENT XBYTE[0x0c000]

      //段碼寄存器地址 #define BIT_LED XBYTE[0x0a000]

      //位碼寄存器地址 #define fosc 11.0592

      unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x63,0x39,};unsigned char table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};unsigned char table2[]={0x76,0x79,0x38,0x38,0x3f};sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;//利用開關(guān)量實(shí)現(xiàn)切換

      //頻率變量及子函數(shù)預(yù)定義 void displayfreq();void read_freq();unsigned char tcount=0,timecount=0;unsigned long freq=0.0;bit freqflag=0;unsigned char fr[6];unsigned int i=0,x=0;

      //日期變量及子函數(shù)預(yù)定義 sbit SCL_ds1302=P2^0;sbit IO_ds1302=P2^1;sbit RST_ds1302=P2^2;

      unsigned char data display_buffer[13];unsigned char bdata data_ds1302;

      //傳輸符

      unsigned char disbuf[]={0,0,0,0};void open_write_bit();void initial_ds1302();unsigned char read_ds1302(char command);void close_write_bit();void read_time();void set_time();void delay(unsigned int i);void delayms(unsigned int i);void displaytime();void displaydate();main(){ initial_ds1302();

      //上電走時(shí)

      read_time();

      //讀取當(dāng)前時(shí)間,放到數(shù)組中

      display_buffer[0]=0x01;

      display_buffer[1]=0x05;

      display_buffer[2]=0x01;display_buffer[3]=0x07;

      display_buffer[4]=0x04;

      display_buffer[5]=0x00;display_buffer[6]=0x01;

      display_buffer[7]=0x06;

      display_buffer[8]=0x00;display_buffer[9]=0x05;

      display_buffer[10]=0x00;

      display_buffer[11]=0x01;

      display_buffer[12]=0x04;

      set_time();

      //設(shè)置時(shí)間

      while(1){

      if(k1==0)

      {

      while(1){

      read_time();

      displaytime();

      if(k2==0)break;

      }

      }

      read_time();

      displaydate();} }

      void close_write_bit()//close write { unsigned int i;

      SCL_ds1302=0;

      _nop_();

      RST_ds1302=1;_nop_();_nop_();data_ds1302=0x8e;

      for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=(data_ds1302&0x01);

      _nop_();

      SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} data_ds1302=0x80;

      IO_ds1302=0;for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=(data_ds1302&0x01);

      _nop_();

      SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} }

      void open_write_bit()//open write { unsigned int i;SCL_ds1302=0;_nop_();

      //打開寫保護(hù)//關(guān)閉寫保護(hù)

      RST_ds1302=1;_nop_();_nop_();data_ds1302=0x8e;for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=data_ds1302&0x01;

      _nop_();SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} data_ds1302=0x00;

      //0x00,書上為0x80 IO_ds1302=0;for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=data_ds1302&0x01;

      _nop_();SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} }

      void initial_ds1302()

      //初始化函數(shù) { unsigned int i;SCL_ds1302=0;_nop_();RST_ds1302=1;_nop_();_nop_();data_ds1302=0x8e;

      for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=data_ds1302&0x01;

      _nop_();SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} IO_ds1302=0;data_ds1302=0x00;

      for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=data_ds1302&0x01;

      _nop_();SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} RST_ds1302=0;SCL_ds1302=0;_nop_();RST_ds1302=1;_nop_();_nop_();data_ds1302=0x90;

      for(i=1;i<=8;i++){ SCL_ds1302=0;IO_ds1302=data_ds1302&0x01;_nop_();SCL_ds1302=1;data_ds1302=data_ds1302>>1;}

      data_ds1302=0x0a4;

      for(i=1;i<=8;i++){ SCL_ds1302=0;IO_ds1302=data_ds1302&0x01;_nop_();SCL_ds1302=1;data_ds1302=data_ds1302>>1;} RST_ds1302=0;_nop_();SCL_ds1302=0;_nop_();RST_ds1302=1;

      data_ds1302=0x8e;

      for(i=1;i<=8;i++){ SCL_ds1302=0;IO_ds1302=data_ds1302&0x01;_nop_();SCL_ds1302=1;data_ds1302=data_ds1302>>1;}

      data_ds1302=0x80;

      for(i=1;i<=8;i++){ SCL_ds1302=0;IO_ds1302=data_ds1302&0x01;_nop_();SCL_ds1302=1;data_ds1302=data_ds1302>>1;} RST_ds1302=0;_nop_();SCL_ds1302=0;}

      unsigned char read_ds1302(char command)

      //read函數(shù) { unsigned int i;data_ds1302=command;SCL_ds1302=0;_nop_();RST_ds1302=1;for(i=1;i<=8;i++){

      SCL_ds1302=0;IO_ds1302=data_ds1302&0x01;_nop_();SCL_ds1302=1;data_ds1302=data_ds1302>>1;}

      SCL_ds1302=1;for(i=1;i<=8;i++){

      SCL_ds1302=0;

      if(IO_ds1302)data_ds1302=(data_ds1302>>1)|0x80;

      //送入到data_ds1302中,準(zhǔn)備送出

      else data_ds1302>>=1;SCL_ds1302=1;} RST_ds1302=0;_nop_();SCL_ds1302=0;return(data_ds1302);}

      void write_ds1302(unsigned char address,unsigned char numb){

      unsigned int i;

      SCL_ds1302=0;

      RST_ds1302=0;

      RST_ds1302=1;

      data_ds1302=address;for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=data_ds1302&0x01;

      //送入寫地址

      _nop_();SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} data_ds1302=numb;for(i=1;i<=8;i++){

      SCL_ds1302=0;

      IO_ds1302=data_ds1302&0x01;

      _nop_();SCL_ds1302=1;

      data_ds1302=data_ds1302>>1;} } void read_time(){ unsigned char second,minte,hour,d,date,month,year,zhou;second=0x81;

      //讀秒

      d=read_ds1302(second);display_buffer[5]=d&0x0f;display_buffer[4]=d>>4;minte=0x83;

      //讀分

      d=read_ds1302(minte);display_buffer[3]=d&0x0f;display_buffer[2]=d>>4;hour=0x85;

      //讀時(shí)

      d=read_ds1302(hour);display_buffer[1]=d&0x0f;display_buffer[0]=d>>4;year=0x8d;

      //讀年

      d=read_ds1302(year);display_buffer[7]=d&0x0f;display_buffer[6]=d>>4;month=0x89;

      //讀月

      d=read_ds1302(month);display_buffer[9]=d&0x0f;display_buffer[8]=d>>4;

      //送入寫的內(nèi)容

      zhou=0x8b;

      //讀周d=read_ds1302(zhou);display_buffer[12]=d;date=0x87;

      //讀日期

      d=read_ds1302(date);display_buffer[11]=d&0x0f;display_buffer[10]=d>>4;}

      void set_time(){ unsigned char data temp;unsigned char data hour_address=0x84,minte_address=0x82,second_address=0x80,date_address=0x86,month_address=0x88,zhou_address=0x8a,year_address=0x8c;//各個(gè)時(shí)間量的地址

      open_write_bit();

      temp=(display_buffer[0]<<4)|display_buffer[1];write_ds1302(hour_address,temp);

      //寫小時(shí)

      temp=(display_buffer[2]<<4)|display_buffer[3];write_ds1302(minte_address,temp);

      //寫分鐘

      temp=(display_buffer[4]<<4)|display_buffer[5];write_ds1302(second_address,temp);

      //寫秒

      temp=(display_buffer[6]<<4)|display_buffer[7];write_ds1302(year_address,temp);

      //寫年

      temp=(display_buffer[8]<<4)|display_buffer[9];write_ds1302(month_address,temp);

      //寫月

      temp=display_buffer[12];write_ds1302(zhou_address,temp);

      //寫周temp=(display_buffer[10]<<4)|display_buffer[11];write_ds1302(date_address,temp);

      //寫日期

      close_write_bit();

      }

      void delay(unsigned int i)

      //delay函數(shù) {

      while(i--);}

      void delayms(unsigned int i){ unsigned int n;while(i--){

      for(n=0;n<125;n++);

      } }

      void displaytime(){ unsigned char e=0x01;unsigned int i;BIT_LED=0;

      for(i=0;i<=5;i++){

      if(i==5||i%2==0||i==11)

      SEGMENT=table[display_buffer[i]];

      else

      SEGMENT=table1[display_buffer[i]];

      BIT_LED=e;

      e<<=1;

      delayms(1);

      }

      }

      void displaydate(){ unsigned char e=0x01;unsigned int i;BIT_LED=0;

      for(i=6;i<=13;i++){

      if(i==7||i==9)

      SEGMENT=table1[display_buffer[i]];

      else if(i==12)

      SEGMENT=table[10];

      else if(i==13)

      SEGMENT=table[display_buffer[i-1]];

      else

      SEGMENT=table[display_buffer[i]];

      BIT_LED=e;

      e<<=1;delayms(1);

      }

      }

      測(cè)試結(jié)果:

      S1,S2實(shí)現(xiàn)年月日周與時(shí)分秒的切換

      九、語音收錄播報(bào)測(cè)試:

      測(cè)試要求:本系統(tǒng)中使用的是語音專用芯片IDS1760芯片,該芯片是以串行方式實(shí)現(xiàn)控制和數(shù)據(jù)傳輸?shù)摹?/p>

      編寫如下程序進(jìn)行測(cè)試: #include #include #include #define uchar unsigned char #define uint unsigned int

      unsigned char bdata SR0_L;unsigned char bdata SR0_H;unsigned char bdata SR1;unsigned char APCL=0,APCH=0;unsigned char PlayAddL=0,PlayAddH=0;unsigned char RecAddL=0,RecAddH=0;

      sbit CMD=SR0_L^0;sbit FULL=SR0_L^1;sbit PU=SR0_L^2;sbit EOM=SR0_L^3;sbit INTT=SR0_L^4;sbit RDY=SR1^0;sbit ERASE=SR1^1;sbit PLAY=SR1^2;sbit REC=SR1^3;

      unsigned char ISD_SendData(unsigned char dat);void ISD_PU(void);void ISD_Rd_Status(void);void ISD_WR_APC2(unsigned char apcdatl,apcdath);void ISD_SET_PLAY(unsigned char Saddl,Saddh,Eaddl,Eaddh);void ISD_SET_Rec(unsigned char Saddl,Saddh,Eaddl,Eaddh);void ISD_SET_Erase(unsigned char Saddl,Saddh,Eaddl,Eaddh);

      sbit SS=P1^4;sbit SCK=P1^7;sbit MOSI=P1^5;sbit MISO=P1^6;

      void Cpu_Init(void);void ISD_Init(void);void delay(unsigned int t);

      void main(){ Cpu_Init();ISD_Init();

      while(1){ ISD_SET_Erase(0,0,9,0);ISD_SET_Rec(0,0,9,0);ISD_SET_PLAY(0,0,9,0);} }

      void Cpu_init(void){ P0=P1=P2=P3=0xff;TMOD=0x01;EA=0;} void ISD_Init(void){ uchar i=2;SS=1;SCK=1;MOSI=0;do { ISD_PU();//上電 delay(50);ISD_Rd_Status();//讀取狀態(tài)

      }while(CMD||(!PU));

      //if(CMD_Err==1||(PU!+1))則再次發(fā)送上電指令 ISD_WR_APC2(0x40,0x04);//將0x0440寫入APC寄存器

      do { ISD_Rd_Status();}while(RDY==0);do { delay(300);delay(300);i--;}while(i>0);}

      //向cpu讀回或發(fā)送數(shù)據(jù)

      unsigned char ISD_SendData(unsigned char dat){ unsigned char i,j,BUF_ISD=dat;SCK=1;SS=0;for(j=4;j>0;j--){;}

      for(i=0;i<8;i++){ SCK=0;for(j=2;j>0;j--){;} if(BUF_ISD&0x01)

      {MOSI=1;} else

      {MOSI=0;} BUF_ISD>>=1;if(MISO)

      {BUF_ISD|=0x80;} SCK=1;for(j=6;j>0;j--){;} } MOSI=0;return(BUF_ISD);} void ISD_PU(void){

      ISD_SendData(0x01);

      ISD_SendData(0x00);

      SS=1;} void ISD_Rd_Status(void){ unsigned char i;ISD_SendData(0x05);ISD_SendData(0x00);ISD_SendData(0x00);SS=1;for(i=2;i>0;i--){;} SR0_L=ISD_SendData(0x05);SR0_H=ISD_SendData(0x00);SR1=ISD_SendData(0x00);SS=1;}

      void ISD_WR_APC2(unsigned char apcdatl,apcdath){ ISD_SendData(0x65);ISD_SendData(apcdatl);ISD_SendData(apcdath);SS=1;}

      void ISD_SET_PLAY(unsigned char Saddl,Saddh,Eaddl,Eaddh){ ISD_SendData(0x80);ISD_SendData(0x00);ISD_SendData(Saddl);ISD_SendData(Saddh);ISD_SendData(Eaddl);ISD_SendData(Eaddh);ISD_SendData(0x00);SS=1;}

      void ISD_SET_Rec(unsigned char Saddl,Saddh,Eaddl,Eaddh){

      ISD_SendData(0x81);ISD_SendData(0x00);ISD_SendData(Saddl);ISD_SendData(Saddh);ISD_SendData(Eaddl);ISD_SendData(Eaddh);ISD_SendData(0x00);SS=1;}

      void ISD_SET_Erase(unsigned char Saddl,Saddh,Eaddl,Eaddh){ ISD_SendData(0x82);ISD_SendData(0x00);ISD_SendData(Saddl);ISD_SendData(Saddh);ISD_SendData(Eaddl);ISD_SendData(Eaddh);ISD_SendData(0x00);SS=1;} void delay(unsigned int t){ for(;t>0;t--){ TH0=0xfc;TL0=0x18;TR0=1;while(TF0!=1){;} TF0=0;TR0=0;} }

      測(cè)試結(jié)果:需要在程序中設(shè)置斷點(diǎn),完成錄音,放音再錄音放音的循環(huán)操作。

      測(cè)試功能正常。

      十、單片機(jī)模塊調(diào)試

      測(cè)試要求:該模塊的調(diào)試很復(fù)雜,牽扯面也很多。其實(shí)通過前面各個(gè)模塊的調(diào)試,已經(jīng)大部分得到了間接地驗(yàn)證。例如在“動(dòng)態(tài)數(shù)碼管測(cè)試”和“串行通訊測(cè)試”中就是用到了定時(shí)器。

      如有必要可以再編寫一些測(cè)試程序。例如檢測(cè)單片機(jī)的某一口線的功能是否正常、測(cè)試某段程序運(yùn)行時(shí)間,等等。

      測(cè)試結(jié)論:因單片機(jī)大部分功能在前調(diào)試方案中大部分已使用過,此處不再進(jìn)行其余調(diào)試。

      第五篇:?jiǎn)纹瑱C(jī)出租車計(jì)價(jià)器源程序

      出租車計(jì)價(jià)器設(shè)計(jì)與制作

      設(shè)計(jì)并制作一臺(tái)出租車計(jì)價(jià)器。調(diào)試時(shí)采用10Hz方波信號(hào)模擬,每個(gè)方波代表10m?;疽螅?/p>

      (1)不同情況具有不同的收費(fèi)標(biāo)準(zhǔn)

      白天 1元/公里 晚上 2元/ 公里 途中等待(30s)1元/30s

      (2)數(shù)據(jù)輸出(6位LED數(shù)碼管顯示)

      單價(jià)輸出2位 路途輸出2位 總金額輸出2位

      (3)按鍵(3個(gè))

      啟動(dòng)計(jì)價(jià)開關(guān) 數(shù)據(jù)復(fù)位(清零)白天/晚上轉(zhuǎn)換

      3.4.1模塊1:系統(tǒng)設(shè)計(jì)

      (1)分析任務(wù)要求,寫出系統(tǒng)整體設(shè)計(jì)思路

      通過分析,需要實(shí)現(xiàn)四個(gè)主要的功能模塊,分別為脈沖計(jì)數(shù)模塊、定時(shí)器計(jì)時(shí)模塊、按鍵的處理以及

      數(shù)碼管動(dòng)態(tài)掃描等功能。

      定時(shí)器計(jì)時(shí)模塊主要完成途中等待(即沒有脈沖來時(shí))30秒的計(jì)時(shí)。在啟動(dòng)鍵按下后,定時(shí)器就不停的計(jì)時(shí),只要有脈沖來就將計(jì)時(shí)的值清除為零。如果沒有脈沖來,當(dāng)計(jì)時(shí)超過30秒時(shí),相應(yīng)的總金額要

      按照收費(fèi)標(biāo)準(zhǔn)計(jì)價(jià)。

      中斷的管理:盡管中斷有嵌套以及優(yōu)先級(jí)的功能,但是由于定時(shí)器已經(jīng)使用一個(gè)了中斷資源,脈沖檢測(cè)不宜再采用中斷方式,而是采用查詢方式。由于需要不停的要清除30秒的計(jì)時(shí),因此,脈沖的計(jì)數(shù)不

      采用定時(shí)器的計(jì)數(shù)方式。

      啟動(dòng)鍵觸發(fā)定時(shí)器開始工作,而定時(shí)器的運(yùn)行可以作為脈沖計(jì)數(shù)的標(biāo)志,只要定時(shí)器計(jì)時(shí)在運(yùn)行,每來一個(gè)中斷都應(yīng)該計(jì)數(shù)。

      主程序完成鍵盤的掃描和按鍵的處理,查詢脈沖產(chǎn)生的中斷,并完成脈沖的計(jì)數(shù)。每個(gè)脈沖代表10米,則當(dāng)計(jì)數(shù)到100時(shí)表示1千米的距離,相應(yīng)的總金額要按照收費(fèi)標(biāo)準(zhǔn)計(jì)價(jià)

      (2)選擇單片機(jī)型號(hào)和所需外圍器件型號(hào),設(shè)計(jì)單片機(jī)硬件電路原理圖

      采用MCS51系列單片機(jī)At89S51作為主控制器,外圍電路器件包括數(shù)碼管驅(qū)動(dòng)、獨(dú)立式鍵盤、復(fù)位電

      路等。硬件電路原理圖如圖3-9所示。

      圖3-11 出租車計(jì)價(jià)器的硬件電路原理圖

      數(shù)碼管驅(qū)動(dòng)采用2個(gè)四聯(lián)共陰極數(shù)碼管顯示,由于單片機(jī)驅(qū)動(dòng)能力有限,采用74HC244作為數(shù)碼管的驅(qū)動(dòng)。在74HC244的7段碼輸出線上串聯(lián)100歐姆電阻起限流作用。

      獨(dú)立式按鍵使用上提拉電路連接,在沒有鍵按下時(shí),輸出高電平。P0口用于輸出7段LED共陰極顯示代碼,P2口用于輸出低電平有效的位選碼。0~9的7段LED共陰極顯示代碼:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。

      (3)分析軟件任務(wù)要求,寫出程序設(shè)計(jì)思路,分配單片機(jī)內(nèi)部資源,畫出程序流程圖

      軟件的任務(wù)要求包括定時(shí)器的設(shè)置、按鍵的掃描、按鍵的功能處理、脈沖的計(jì)數(shù)、路途等待超30秒的計(jì)

      時(shí)以及總金額的計(jì)算等。

      程序設(shè)計(jì)的思路:使用中斷方式對(duì)定時(shí)器的溢出進(jìn)行計(jì)數(shù)實(shí)現(xiàn)30秒的計(jì)時(shí)。主程序采用查詢外部中斷標(biāo)志實(shí)現(xiàn)脈沖的計(jì)數(shù),由于每個(gè)脈沖代表10m,因此,當(dāng)脈沖計(jì)數(shù)超過100時(shí),計(jì)價(jià)器按照收費(fèi)標(biāo)準(zhǔn)計(jì)價(jià)。主程序在初始化變量和定時(shí)器參數(shù)設(shè)置之后,進(jìn)入一個(gè)循環(huán)結(jié)構(gòu),循環(huán)掃描鍵盤、查詢脈沖的中斷、數(shù)碼管的動(dòng)態(tài)掃描等功能,當(dāng)脈沖的中斷標(biāo)志被查詢到,若路途等待時(shí)間未超30秒時(shí),要及時(shí)將路途等待時(shí)間的值清除為零。主程序的流程圖如圖3-12所示。

      圖3-12 出租車計(jì)價(jià)器的主程序流程圖

      中斷服務(wù)程序主要實(shí)現(xiàn)計(jì)時(shí)功能,當(dāng)啟動(dòng)鍵按下之后,定時(shí)器開始工作,用一個(gè)變量對(duì)定時(shí)器溢出中斷的次數(shù)進(jìn)行計(jì)數(shù),達(dá)到計(jì)時(shí)功能,該變量在每次脈沖到來時(shí)被清零(在主程序中清零),當(dāng)脈沖長時(shí)間沒有來,則當(dāng)該變量計(jì)數(shù)超過30秒時(shí),總金額按照途中等待計(jì)費(fèi)標(biāo)準(zhǔn)進(jìn)行計(jì)價(jià)。中斷程序的流程圖如圖

      3-13所示。

      圖3-13 出租車計(jì)價(jià)器的中斷服務(wù)程序流程圖

      (4)設(shè)計(jì)系統(tǒng)軟件調(diào)試方案、硬件調(diào)試方案及軟硬件聯(lián)合調(diào)試方案

      軟件調(diào)試方案:偉福軟件中,在“文件新建文件”中,新建C語言源程序文件,編寫相應(yīng)的程序。在“文件新建項(xiàng)目”的菜單中,新建項(xiàng)目并將C語言源程序文件包括在項(xiàng)目文件中。

      在 “項(xiàng)目編譯”菜單中將C源文件編譯,檢查語法錯(cuò)誤及邏輯錯(cuò)誤。在編譯成功后,產(chǎn)生以 “*.hex”和“*.bin” 后綴的目標(biāo)文件。

      硬件調(diào)試方案:在設(shè)計(jì)平臺(tái)中,將單片機(jī)的P1.0-P1.2分別與3個(gè)獨(dú)立式鍵盤通過插線連接起來,將P3.2與脈沖信號(hào)源連接起來。

      在偉福中將程序文件編譯成目標(biāo)文件后,將下載線安裝在實(shí)驗(yàn)平臺(tái)上,運(yùn)行“MCU下載程序”,選擇相應(yīng)的flash 數(shù)據(jù)文件,點(diǎn)擊“編程”按鈕,將程序文件下載到單片機(jī)的Flash中。

      然后,上電重新啟動(dòng)單片機(jī),檢查所編寫的程序是否達(dá)到題目的要求,是否全面完整地完成試題的內(nèi)容。3.4.2 程序設(shè)計(jì)

      /*晶振:11.0592M T1-250微秒溢出中斷一次;P3.2(int0)-中斷100次,查詢IE0置位,P1^0為啟動(dòng)鍵;P1^1為清除鍵;P1^2為白天/晚上的切換鍵 變量的定義: key_val: 返回按鍵的值 255-無鍵

      T1_cnt: 定時(shí)器溢出數(shù)計(jì)數(shù)

      cnt_30: 30秒鐘的計(jì)時(shí)

      cnt_distance: 計(jì)算路程

      cnt_cost: 總金額

      state_val: 狀態(tài):0-白天 1 夜晚

      cost_val[3]: 收費(fèi)標(biāo)準(zhǔn):白天單價(jià)cost_val[0]=1元/公里;晚上單價(jià)cost_val[1]=2元/公里; 等待單價(jià)cost_val[2]=1元/30s

      led_seg_code:數(shù)碼管7段碼 */ //-------------------#include “reg51.h” unsigned char data cnt_30,cnt_distance,cnt_cost;unsigned int data T1_cnt,D_cnt;unsigned char data key_val,key_val_old;unsigned char data state_val;char code cost_val[3]={1,2,1};char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//led_seg_code[0-9]代表0-9 //-------延時(shí)-----------------void delay(unsigned int i)//延時(shí) { while(--i);} //-------初始化變量------------------void init_variant()//初始化一些變量的內(nèi)容 {unsigned char i;cnt_30=0;//30秒的計(jì)時(shí) D_cnt=0;//脈沖的個(gè)數(shù) cnt_distance=0;//距離的計(jì)數(shù)

      cnt_cost=0;//保存總價(jià)格 } //-------掃描鍵盤-----------------unsigned char scan_key(){ unsigned char i,k;i=P1;if(i==0xff){ k=255;} //無鍵按下

      else //有鍵按下

      { delay(10);//延時(shí)去抖動(dòng)

      if(i!=P1){k=255;} else { switch(i){ case 0xfe: k=0;break;//P1.0按下,啟動(dòng)鍵

      case 0xfd: k=1;break;//P1.1按下,清除鍵

      case 0xfb: k=2;break;//P1.2按下,切換鍵

      } } } return k;} //-------數(shù)碼管動(dòng)態(tài)掃描-------------void led_show(){unsigned char i,k;

      //-----顯示單價(jià)----k=cost_val[state_val];i=k%10;//暫存?zhèn)€位 P0=led_seg_code[i];P2=0xbf;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0x7f;delay(10);//-----顯示距離------k=cnt_distance;i=k%10;//暫存?zhèn)€位 P0=led_seg_code[i];P2=0xf7;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xef;delay(10);//-----顯示總價(jià)格-----------k=cnt_cost;i=k%10;//暫存?zhèn)€位 P0=led_seg_code[i];P2=0xfe;delay(10);i=k%100/10;P0=led_seg_code[i];P2=0xfd;delay(10);} //-------計(jì)時(shí)----------------void timer1()interrupt 3 //T1中斷 { T1_cnt++;if(T1_cnt>3999)//如果計(jì)數(shù)>3999, 計(jì)時(shí)1s { T1_cnt=0;if(cnt_30<30)//沒有超過30秒,繼續(xù)計(jì)時(shí)

      {cnt_30++;} else //超過30秒,途中等待計(jì)價(jià)

      {cnt_30=0;cnt_cost=cnt_cost+cost_val[2];} } } //---------主程序----------------

      main(){//初始化各變量 T1_cnt=0;state_val=0;key_val_old=255;init_variant();//初始化51的寄存器

      TMOD=0x20;//用T1計(jì)時(shí) 8位自動(dòng)裝載定時(shí)模式,不用T0 TH1=0x19;//250微秒溢出一次;250=(256-x)*12/11.0592-> x= 230.4 TL1=0x19;EA=1;//開中斷 ET1=1;

      TR1=0;//定時(shí)器T0 TCON=0x01;//Int0中斷取邊沿觸發(fā)模式 while(1){ key_val=scan_key();// 255;// if(key_val!=key_val_old){ key_val_old=key_val;if(key_val!=255){ switch(key_val){ case 0: //啟動(dòng)鍵

      TR1=1;//啟動(dòng)計(jì)時(shí),TR1=1為啟動(dòng)了的標(biāo)志

      break;case 1: //清除鍵

      init_variant();//清除變量

      TR1=0;//關(guān)閉定時(shí)器

      break;case 2: //白天/黑夜的切換

      if(state_val==0){state_val=1;} else {state_val=0;} break;} } } if(IE0==1&& TR1==1)//每來1個(gè)脈沖,中斷一次

      { IE0=0;cnt_30=0;//30秒的計(jì)時(shí)清零

      if(D_cnt<100)

      {D_cnt++;} else //計(jì)數(shù)100次,每次10米,表示一公里

      {D_cnt=0;cnt_distance=cnt_distance+1;

      cnt_cost=cnt_cost+cost_val[state_val];} } led_show();} } //-----出租車計(jì)價(jià)器程序結(jié)束------------

      下載出租車智能計(jì)價(jià)器的設(shè)計(jì)與實(shí)現(xiàn)探討論文(范文大全)word格式文檔
      下載出租車智能計(jì)價(jià)器的設(shè)計(jì)與實(shí)現(xiàn)探討論文(范文大全).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        出租車計(jì)價(jià)器 硬件課程設(shè)計(jì)

        硬件課程設(shè)計(jì)報(bào)告 題目:出租車計(jì)價(jià)器 目錄 1. 引言 ........................................................................................................................

        出租車計(jì)價(jià)器課程設(shè)計(jì)2

        出租車計(jì)價(jià)器課程設(shè)計(jì) 目錄 前言 1、 系統(tǒng)工作原理 1.1 功能說明 1.2 基本原理 2、 硬件設(shè)計(jì) 2.1 單片機(jī)最小系統(tǒng)單元 2.2 A44E霍爾傳感器檢測(cè)單元 2.3 AT24C01存儲(chǔ)單元 2.......

        出租車計(jì)價(jià)器畢業(yè)論文附錄

        北京信息科技大學(xué) 畢業(yè)設(shè)計(jì)(論文)附錄 題 目:學(xué) 院: 專 業(yè):學(xué)生姓名: 班級(jí)/學(xué)號(hào) 指導(dǎo)老師/督導(dǎo)老師:起止時(shí)間:2012 年 月 日 至 2012 年 月 日 目錄 附件1 原理圖·······......

        基于單片機(jī)的出租車計(jì)價(jià)器設(shè)計(jì)報(bào)告(★)

        河南理工大學(xué) 《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計(jì)報(bào)告 出租車計(jì)價(jià)器設(shè)計(jì) 姓名學(xué)號(hào): 專業(yè)班級(jí): 指導(dǎo)老師: 所在學(xué)院: 2012年6月25日 摘要 本設(shè)計(jì)用直流電機(jī)轉(zhuǎn)動(dòng)模擬出租車車輪轉(zhuǎn)動(dòng),實(shí)現(xiàn)......

        出租車計(jì)價(jià)器設(shè)計(jì)方案(5篇范例)

        1 系統(tǒng)硬件組成 總體結(jié)構(gòu)如圖一所示。硬件上主要由HT46RU24單片機(jī),霍爾傳感器,空載開關(guān),鍵盤電路,數(shù)據(jù)存儲(chǔ)電路,時(shí)鐘電路,顯示電路,蜂鳴器,IC卡電路以及串口電路組成。1.1 HT46RU24......

        出租車計(jì)價(jià)器畢業(yè)設(shè)計(jì)外文資料

        ABSTRACT In this paper, a multi-channel taximeter that is able to deal with more than one passenger simultaneously is proposed. In order to demonstrate the theo......

        51單片機(jī) 出租車計(jì)價(jià)器課程設(shè)計(jì)

        第一章 出租車計(jì)價(jià)系統(tǒng)的設(shè)計(jì)要求與設(shè)計(jì)方案 1.1 出租車計(jì)價(jià)器設(shè)計(jì)要求 設(shè)計(jì)一個(gè)出租車自動(dòng)計(jì)費(fèi)器,計(jì)費(fèi)包括起步價(jià)、行車?yán)锍逃?jì)費(fèi)、等待時(shí)間計(jì)費(fèi)三部分,用七段數(shù)碼管顯示總金......

        出租車計(jì)價(jià)器畢業(yè)設(shè)計(jì)中英文翻譯

        ABSTRACT 1. INTRODUCTION Transporting people in the morning from their homes to their works and back in the afternoon has become a big problem in big cities esp......