【正文】
OP( ) 。 delayNOP( ) 。 delayNOP( )。 uchar temp。 temp=Data1。 Sda=1。0xfe。 Send(0xa0)。 } uchar RdFromROM(uchar Addresss) { uchar Data。 Ack()。 while(1) { WrToROM (0x01,table[3])。 //while(aa) if(aa) 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 41 { jshi=zongjine0/100。 wela=1。 P2=0x02。 P2=0x04。 wela=0。 dula=1。 dula=1。 P0=table[dge]amp。 P0=table[djiao]。 while(!key3)。 while(!key3)。 wela=0。 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 43 wela=0。 P2=0x20。 P2=0x10。 wela=1。 delay(4)。 delay(4)。 dge=danjia0/10。 } } */ void display( uint zongjine0,uint dengdai0,uint licheng0,uint danjia0) //數(shù)碼管 //顯示 { uint jshi,jge,jjiao,dengd,lshi,lge,dge,djiao。 I2C _init()。 start()。 stop()。 return(temp)。 temp=temp|0x01。 uchar temp1=0。 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 38 else Sda=0。 delayNOP( )。 delayNOP( )。 delayNOP( ) 。 delayNOP( ) 。 _nop_()。j0。 //uchar danjia1=11,danjia2=22,danjia3=33,qibu=44,danjiazc。 sbit dula=P1^5。 sbit key0=P1^0。 2. PCB 板中如果把鍵盤和顯示器放在芯片和其它電路的反面,這樣封裝成實(shí)際產(chǎn)品時(shí)可把人機(jī)接口留在外面,更人性化,也符合人們的習(xí)慣。 調(diào)試完成后在 Proteus 上仿真結(jié)果如圖 41, 42, 43, 44 所示。 { 按鍵處理程序 } } } 計(jì)算程序的分析與設(shè)計(jì) 由于里程和單價(jià)都精確的小數(shù)點(diǎn)后一位,而顯示時(shí)仍按整數(shù)顯示,只不過(guò)人為的加入 amp。首先是一定要對(duì) I2C 總線時(shí)序有較深刻了解后再嘗試編程,第二就是要注意向 AT24C02 寫一個(gè)字和讀一個(gè)字的區(qū)別,當(dāng)從 AT24C02 讀數(shù)據(jù)時(shí)一定要注意,當(dāng)讀完時(shí)從機(jī) AT24C02 一定要發(fā)送一個(gè)非應(yīng)答信號(hào)表示數(shù)據(jù)讀完。 在本次設(shè)計(jì)中顯示程序利用延時(shí)程序,每隔 5ms 刷新一次,相應(yīng)的數(shù)碼管點(diǎn)亮,顯示一位數(shù)據(jù),利用主函數(shù)內(nèi)的循環(huán),實(shí)現(xiàn)動(dòng)態(tài)掃描顯示,同時(shí)根據(jù)數(shù)碼管余輝和人眼暫留現(xiàn)象,給人看上去每個(gè)數(shù)碼管總是在亮,以實(shí)現(xiàn)動(dòng)態(tài)顯示。中途等待子程序流程圖如圖 33 所示。 金 額 計(jì) 算顯 示NYNY清 零夜 晚 單 價(jià)切 換開 始初 始 化按 鍵 掃 描 圖 31 主程序流程圖 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 15 里程計(jì)數(shù)中斷程序 每當(dāng)霍爾傳感器輸出一個(gè)低電平信號(hào),單片機(jī)定時(shí)器 0(工作在計(jì)數(shù)模式)就對(duì)其計(jì)數(shù)一次,相應(yīng)的變量設(shè)為 inter 就自加 1,當(dāng)里程計(jì)數(shù)器inter 對(duì)里程脈沖計(jì)滿 500 次時(shí),對(duì)其自身進(jìn)行清零操作,為 下一次計(jì)數(shù)做準(zhǔn)備,同時(shí)進(jìn)入里程計(jì)數(shù)中斷服務(wù)程序中,里程變量加 1,總金額根據(jù)此時(shí)所設(shè)單價(jià)做出相應(yīng)的變化。最后延時(shí) 5ms;依次循環(huán)掃描;利用數(shù)碼管點(diǎn)亮后的余暉和人眼視覺(jué)暫留效應(yīng)即可實(shí)現(xiàn)動(dòng)態(tài)顯示。 74HC573 所對(duì)應(yīng)真值表 21 如 表 。鍵盤去抖動(dòng)有專用的延時(shí)電路,也有專門的延時(shí)芯片,也可以用軟件去抖,考慮到電路的難易程度,從簡(jiǎn)化硬件的角度,本次設(shè)計(jì)采用軟件去抖動(dòng),用一個(gè) 短延時(shí)程序,進(jìn)行鍵盤去抖操作。 3. 要特別注意的是 SDA 和 SCL 都是雙向傳輸線,平時(shí)均處于高電平備用狀態(tài),只有當(dāng)需要關(guān)閉時(shí)才使其鉗制 在低電平,且僅在 SCL 為高電平時(shí)數(shù)據(jù)才能傳送,而當(dāng) SCL 為低電平時(shí)才允許數(shù)據(jù)發(fā)生變化。 A01A12A23GND4V C C 8WP 7S C L 6S D A 5U1A T 24 C 02GNDV C CGNDP 3. 6P 3. 7 圖 24 AT24C02 引腳配置圖 圖中 R R5 是上拉電阻,其作用是減少 AT24C02 的靜態(tài)功耗。 這樣兩次電壓變換,使霍爾開關(guān)完成了一次開關(guān)動(dòng)作。 對(duì)于單片機(jī)的 P0 口,可以作為地址 /數(shù)據(jù)總線使用,也可以作為一般的 I/O 口使用。系統(tǒng)結(jié)構(gòu)圖如圖 11 所示 。超過(guò) 3 公里后 ,實(shí)現(xiàn)每 1 公里單價(jià)收費(fèi),中間遇到暫停時(shí),計(jì)程數(shù)不再增加,開始計(jì)時(shí)收費(fèi),計(jì)程收費(fèi)和計(jì)時(shí)收費(fèi)的和便構(gòu)成了一位乘客 的車費(fèi)。也希望能在進(jìn)一步熟悉單片機(jī)控制的同時(shí),對(duì)數(shù)字電子技術(shù)、模擬電子技術(shù)、計(jì)算控制技術(shù)以及常用外圍芯片有更深層次的了洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 2 解,提高自己的綜合能力。為了進(jìn)一步豐富和鞏固單片機(jī)知識(shí),也為了能更好的聯(lián)系實(shí)際應(yīng)用,本次畢業(yè)設(shè)計(jì)選擇 了基于單片機(jī) STC89C52 控制的出租車計(jì)價(jià)器,并力求能做出實(shí)物。如數(shù)字示波器、數(shù)字信號(hào)源、感應(yīng)電流表等。里程檢測(cè)模塊由 A44E 構(gòu)成,控制模塊包括 STC89C52 單片機(jī)和 AT24C02,人機(jī)模 塊包括獨(dú)立鍵盤和 LED 動(dòng)態(tài)顯示。 現(xiàn)在各大中城市出租車行業(yè)都已普及自動(dòng)計(jì)價(jià)器,所以計(jì)價(jià)器技術(shù)的發(fā)展 有很好的前景。 關(guān)鍵詞 : STC89C52, 霍爾傳感器 A44E , I2C總線,動(dòng)態(tài)顯示 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) II Design of Taximeter Based on STC89C52 ABSTRACT With the rapid development of city constriction, the taxi industry which symbolizes the cityscape also has an accelerated progress. Nowadays the automatic taximeter has been widely used in taxi industry in many cites. Therefore, the development of automatic taximeter is doomed. Although automatic taximeter is not spread in some towns, there is no doubt that it would be popularized. Thus, in future the business of automatic taximeter is still potential. One typical application of single chip puter is automatic taximeter. The hardware of this design is posed of single chip puter and peripheral circuits which consist of Detection Unit, Processing Unit and Human Computer Interaction Unit. The Detection Unit is based on Halleffect sensor. The Processing Unit contains STC89C52 and AT24C02. Human Computer Interaction Unit is posed of keyboard and LED. The function of this system includes as follows: 1. Set the unit price。 4. 通信方面。 2. 寄存器分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)完全由編輯器自動(dòng)處理。 2. 要求單價(jià)可調(diào),里程精確到 公里,并要求對(duì)等待時(shí)間進(jìn)行計(jì)時(shí)。(默認(rèn)起步價(jià)為 5 元 /3 公里,里程單價(jià)白天為 元 /公里,夜晚為 元 /公里,等待計(jì)時(shí)單價(jià)為 1 元 /1 分鐘) 為提高計(jì)時(shí)、計(jì)價(jià)精度,確保乘客對(duì)自己消費(fèi)的知情權(quán),出租車計(jì)價(jià)器應(yīng)做到里程數(shù)精確到 公里,同時(shí)為減少司機(jī)朋友來(lái)回調(diào)整單價(jià)以及停車后需重設(shè)單價(jià)的麻煩,計(jì)價(jià)器應(yīng)具有掉電保持功能,即當(dāng)重新啟動(dòng)后維持原有數(shù)值(包括總金額、等待時(shí)間、行駛里程、單價(jià))不變,直至強(qiáng)制按下清零鍵,計(jì)價(jià)器顯示起步價(jià)(剛起 步時(shí)對(duì)應(yīng)總金額)、運(yùn)行單價(jià),為下一次計(jì)價(jià)做準(zhǔn)備。復(fù)位電路和晶振電路,以及 P0 口接入的 10K 的上拉電阻便構(gòu)成了 STC89C52 單片機(jī) 工作所需的最簡(jiǎn)外圍電路。本設(shè)計(jì)利用P0口的 I/O 功能 [2] 。 其原理如圖 23 所示 。 事實(shí)上 AT24C02 為典型的支持 I2C 總線的器件,對(duì)其進(jìn)行編程時(shí)需遵守 I2C 總線的時(shí)序要求,以及 I2C 委員會(huì) 對(duì)各種 I2C 芯片的地址分配規(guī)則。電路原理如圖 25 所示。由于溢出指示是采用發(fā)光二極管是否點(diǎn)亮表示,故必須選好參數(shù)以確保發(fā)光二極管正常工作。 由真值表可以看出,當(dāng) OE 為高電平時(shí),無(wú)論 LE與 D 端為何電平狀態(tài),其輸出均為高阻態(tài),此時(shí)芯片處于不可控狀態(tài)。另外,在主程序模塊中還需要設(shè)置啟動(dòng) /清除標(biāo)志寄存器、里程寄存器和價(jià)格寄存器,并對(duì)它們進(jìn)行初始化。計(jì)數(shù)初值可有以下公式獲得: X=(65536t)**10^6/12。程序流程圖如圖 34 所示。 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 19 K e y 3 = 0 ?白 天 單 價(jià) + 1返 回K e y 3 n u m 為 真K e y 3 n u m = 1 ?K e y n u m = 2 ?K e y 1 = 0 ?NYYNk e y 3 n u m = 0 ?K e y 2 = 0 ?YYN白 天 單 價(jià) 1Y顯 示k e y 3 n u m + +開 始N儲(chǔ) 存 白 天 單 價(jià)K e y 1 = 0 ?夜 晚 單 價(jià) + 1YK e y 2 = 0 ?YNNK e y 3 n u m = 3 ?N儲(chǔ) 存 夜 晚 單 價(jià)K e y 1 = 0 ?等 待 單 價(jià) + 1YK e y 2 = 0 ?夜 晚 單 價(jià) 1等 待 單 價(jià) 1K e y 3 n u m = 4 ??jī)?chǔ) 存 等 待 單 價(jià)K e y 1 = 0 ?起 步 單 價(jià) + 1K e y 2 = 0 ?起 步 單 價(jià) 1K e y 3 n u m = 5 ??jī)?chǔ) 存 起 步 單 價(jià)K e y 3 n u m = 0YYYNNNNYNYNNYNNK e y 4 = 0 ?白 天 、 夜 晚 單價(jià) 切 換YK e y 0 = 0 ?僅 顯 示 總 金 額與 起 步 價(jià) YNNY圖 35 鍵盤程序 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 20 按鍵檢測(cè)流程圖 36 所示。 按 鍵查詢功能的實(shí)現(xiàn) 洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 22 按鍵查詢比較容易實(shí)現(xiàn),只要注意 1. 按鍵結(jié)束后注意退出按鍵處理;,即避免顯示一個(gè)數(shù)據(jù)后退不出來(lái); 要注意按下去抖和釋放去抖。 改動(dòng)如下: 1. 當(dāng)里程值大于 30(實(shí)際對(duì)應(yīng)大于 3 公里)且無(wú)進(jìn)位時(shí),溢出指示燈不亮,總金額 =起步價(jià) +(里程十位數(shù)字 2) *運(yùn)行單價(jià) +等待單價(jià) *等待時(shí)間; 2. 當(dāng)里程值小于 30(實(shí)際對(duì)應(yīng)小于 3 公里),肯定無(wú)進(jìn) 位,溢出指示燈不亮,總金額 =起步價(jià) +等待單價(jià) *等待時(shí)間; 3. 有進(jìn)位,溢出指示燈點(diǎn)亮,表示里程一定大于三公里,只需執(zhí)行總金額 =起步價(jià) +7*運(yùn)行單價(jià) +(里程十位數(shù)字 +1) *運(yùn)行單價(jià) +等待單價(jià) *等待洛陽(yáng)理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 23 時(shí)間 即:總金額 =起步價(jià) +(里程十位數(shù)字 +8) *運(yùn)行單價(jià) +等待單價(jià) *等待時(shí)間; 結(jié)果分析與性能改進(jìn) 經(jīng)過(guò)反復(fù)調(diào)試驗(yàn)證,基于 STC89C52 單片機(jī)控制設(shè)計(jì)的出租車計(jì)價(jià)器滿足了所有預(yù)設(shè)性能指標(biāo),具有較好的抗干擾性,價(jià)