【文章內(nèi)容簡(jiǎn)介】
T 115P 3. 6/ W R16P 3. 7/ R D17X T A L 218X T A L 119GND20US T C 89 C 52S?S W P BS?S W P BS?S W P BS?S W P BS?S W P BGND 洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 10 圖 25 鍵盤調(diào)整單元接線圖 圖中,鍵盤從上至下依次為: S0:接 口,對(duì)上一次的計(jì)費(fèi)進(jìn)行清零,為下次載客做準(zhǔn)備; S1:接 口,通過對(duì)功能鍵 S3 按下次數(shù)的計(jì)數(shù),實(shí)現(xiàn)單價(jià)數(shù)據(jù)的增大; S2:接 口,通過對(duì)功能鍵 S3 按下次數(shù)的計(jì)數(shù), 實(shí)現(xiàn)單價(jià)數(shù)據(jù)的減小; S3:接 口,按 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 次,返回。 S4: 實(shí)現(xiàn)白天單價(jià)和夜晚單價(jià)的切換。 需要注意的時(shí),當(dāng)按鍵按下和釋放的瞬間都有抖動(dòng)現(xiàn)象,一般來說,抖動(dòng)的時(shí)間長(zhǎng)短與鍵盤的機(jī)械特性有關(guān),大約為 510ms [5] 。 所以在實(shí)際編程時(shí)一定要注意鍵盤的去抖動(dòng)。鍵盤去抖動(dòng)有專用的延時(shí)電路,也有專門的延時(shí)芯片,也可以用軟件去抖,考慮到電路的難易程度,從簡(jiǎn)化硬件的角度,本次設(shè)計(jì)采用軟件去抖動(dòng),用一個(gè)短延時(shí)程序 ,進(jìn)行鍵盤去抖操作。 顯示單元 顯示單元由兩個(gè) 4 位 8 段共陽數(shù)碼管組成,電路連接時(shí),公共端接高電平,因此我們需要點(diǎn)亮哪個(gè)發(fā)光二極管只需給哪個(gè)二極管陰極送低電平,并采用動(dòng)態(tài)掃描進(jìn)行顯示 [6]。前三個(gè)數(shù)碼管分別接 、 和 ,用于顯示總金額;第四個(gè)接 ,顯示等待時(shí)間;第五個(gè)和第六個(gè)數(shù)碼管分別接 和 ,用于顯示里程 ,由于需精確到小數(shù)位,故最多只能顯示 公里,但經(jīng)過添加溢出指示,可計(jì)到 20 公里,在現(xiàn)實(shí)中已基本夠用;后面兩個(gè)數(shù)碼管分別接 和 ,用于顯示 單價(jià)。由于溢出指示是采用發(fā)光二極管是否點(diǎn)亮表示,故必須選好參數(shù)以確保發(fā)光二極管正常工作。洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 11 根據(jù)元件手冊(cè)(也可用萬用表測(cè)量)查得,發(fā)光二極管點(diǎn)亮?xí)r壓降為 ,點(diǎn)亮電流為 320mA,取導(dǎo)通電流為 5mA,所以限流電阻可選擇為()/5=660,故可選擇限流電阻值 510Ω。 由于數(shù)碼管內(nèi)部二極管點(diǎn)亮?xí)r需要 5mA 以上的電流,而單片機(jī)的輸出電流還不到 1mA,所以數(shù)碼管與單片機(jī)連接時(shí)需加驅(qū)動(dòng)電路,可以使用上拉電阻的方法,也可以使用專門的驅(qū)動(dòng)芯片,考慮到復(fù)用單片機(jī) I/O 接口,節(jié)省單片機(jī) I/O 資源,此次設(shè)計(jì)采用 74HC573 鎖存器,其輸出電流較大,電路接口簡(jiǎn)單且可直接驅(qū)動(dòng)數(shù)碼管顯示。 74HC573 的引腳分布圖 26如下。 OE11D22D33D44D55D66D77D88D9GND10 LE 118Q 127Q 136Q 145Q 154Q 163Q 172Q 181Q 19V C C 2074 H C 5 73GNDP 1. 6 圖 26 74HC573 的引腳分布 OE :為三態(tài)允許輸入端 (低電平有效 ),也可稱作輸出允許端; 1D8D 為數(shù)據(jù)輸入端; 1Q8Q 為數(shù)據(jù)輸出端; LE 為鎖存允許端。 74HC573 所對(duì)應(yīng)真值表 21 如 表 。 表 21 74HC573 真值表 INPUT OUTPUT OE LE D Q L H L L L X H Q0 洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 12 H X X Z 其中 : H— 高電平 。L— 低電平; X— 任意電平; Z— 高阻態(tài),既不是高電平也不是低電平,其電平狀態(tài)由與它相連接的其它電氣狀態(tài)決定; Q0—上次的電平狀態(tài)。 由真值表可以看出,當(dāng) OE 為高電平時(shí),無論 LE 與 D 端為何電平狀態(tài),其輸出均為高阻態(tài),此時(shí)芯片處于不可控狀態(tài)。做設(shè)計(jì)時(shí)必須使其處于可控狀態(tài),即 OE 應(yīng)該接低電平。當(dāng) OE 為低電平時(shí),若 LE 為 H,則 D 與 Q同時(shí)為 H 或者 L,數(shù)據(jù)實(shí)現(xiàn)直通傳送;而當(dāng) LE 為 L 時(shí),無論 D 為何狀態(tài)Q 都保持上一次的數(shù)據(jù)狀態(tài),數(shù)據(jù)被鎖存住,利用此特性即可實(shí)現(xiàn)對(duì)數(shù)碼管的控制。 本次設(shè)計(jì)中:段選信號(hào) LE 接 ,對(duì)應(yīng)圖中標(biāo)號(hào) ;位選信號(hào) LE接 ,對(duì)應(yīng)圖中標(biāo)號(hào) 。控制顯示時(shí)先給 高電平,使通道打開,接著送字碼,然后把 電平拉低,使字碼保持??;之后打開 (送高電平),緊接著送位碼,控制要顯示的位,然后把 拉低,數(shù)據(jù)被保持。最后延時(shí) 5ms;依次循環(huán)掃描;利用數(shù)碼管點(diǎn)亮后的余暉和人眼視覺暫留效應(yīng)即可實(shí)現(xiàn)動(dòng)態(tài)顯示。 數(shù)碼 管動(dòng)態(tài)顯示電路如圖 27 所示。 洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 13 OE11D22D33D44D55D66D77D88D9GND10LE118Q127Q136Q145Q154Q163Q172Q181Q19V C C20U274H C 57 3OE11D22D33D44D55D66D77D88D9GND10LE118Q127Q136Q145Q154Q163Q172Q181Q19VCC20U374H C 57 3V C C40P 39P 38P 37P 36P 35P 34P 33P 32EA31A L E30P S E N29P 21P 22P 23P 24P 25P 26P 27P 28P 1P 2P 3P 4P 5P 6P 7P 8R S T9P 10P 11P 12P 13P 14P 15P 16P 17X T A L 218X T A L 119GND20U1S T C 89C 5211 7 4 2 1 10 5 3129 8 6a b c d e f g d pc om 1 c om 2 c om 3 c om 4L E D ?7S E G ( 0 .36) X 411 7 4 2 1 10 5 3129 8 6a b c d e f g d pc om 1 c om 2 c om 3 c om 4L E D ?7S E G ( 0 .36) X 412345678161514131211109排阻R E S P A C K 4排阻R E S 8AGNDGND40 V C CV C CP P GNDGNDV C CV C C 圖 27 數(shù)碼管動(dòng) 態(tài)顯示電路 洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 14 第 3 章 軟件設(shè)計(jì) 系統(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)行后,就啟動(dòng)計(jì)價(jià)器,根據(jù)里程寄存器中的內(nèi)容計(jì)算和判斷行駛里程是否已超過起步價(jià)公里數(shù)。若已超過,則根據(jù)里程值、每公里的單價(jià)值和起步價(jià)來計(jì)算出當(dāng)前的總金額,并將結(jié) 果存于總金額寄存器中;中途等待時(shí),無脈沖輸入,不產(chǎn)生中斷,當(dāng)時(shí)間超過等待設(shè)定值時(shí),開始進(jìn)行計(jì)時(shí),并把等待金額加到總金額里,然后將總金額、里程、等待時(shí)間和單價(jià)送數(shù)碼管顯示出來。程序流程如圖 31 所示。 金 額 計(jì) 算顯 示NYNY清 零夜 晚 單 價(jià)切 換開 始初 始 化按 鍵 掃 描 圖 31 主程序流程圖 洛陽理工學(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)的變化。里程中斷子程序如圖 32 所示。 I N T 0計(jì) 數(shù) 達(dá) 到 5 0 0 ?增 加 1 公 里調(diào) 用 價(jià) 格 子 程 序達(dá) 到 最 大 里 程 ?返 回NNY開 始Y 圖 32 里程中斷服務(wù)子程序 中途等待中斷程序 在中途等待中斷程序中,定時(shí)器 1 每 50ms 計(jì)一次數(shù),每計(jì)夠 100 次(5sec),便將當(dāng)前里程值送入某個(gè)緩存變量,與前一個(gè) 5 秒的值進(jìn)行比較,如果兩者相同,則表明霍爾傳感器沒有輸出信號(hào),認(rèn)為出租車停了下來,洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 16 進(jìn)入等待計(jì)時(shí),計(jì)時(shí)中間變量 dd 自加 1,計(jì)夠 12 次為一分鐘, dd 自清零,同時(shí)根據(jù)所設(shè)的等待單價(jià)刷新總金額。計(jì)數(shù)初值可有以下公式獲得: X=(65536t)**10^6/12。 TH=X/256。 TL=X%256。 其中: X 表示計(jì)數(shù)初值, TH、 TL 分別為 16 位計(jì)數(shù)器高 8 位和低 8 位應(yīng)裝入的初值。 用定時(shí)器作為基準(zhǔn),可使測(cè)試的等待時(shí)間更為精確(可以精確到 uS級(jí));且每隔 5 秒比較一次,能有效減小誤判率,避免把汽車低速行駛誤認(rèn)為靜止等待處理。中途等待子程序流程圖如圖 33 所示。 C C = 1 0 0 ?二 者 相等 嗎 ?5 0 m s了 嗎 ?變 量 c c + +YYN與 前 一個(gè) 5 s 比 較變 量 d d + +YND D = 1 2 ?等 待 時(shí) 間 + +YN返 回T 1 計(jì) 時(shí) 開 始N開 始 圖 33 中途 等待中斷子程序流程圖 洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 17 計(jì)算程序 計(jì)算程序根據(jù)里程數(shù)分別進(jìn)入不同的計(jì)算公式。如果里程大于 3 公里,則執(zhí)行公式:總金額 =起步價(jià) +(里程 3) *單價(jià) +等待時(shí)間 *等待單價(jià);否則,執(zhí)行公式:總金額 =起步價(jià) +等待時(shí)間 *等待單價(jià)。程序流程圖如圖 34所示。 開 始里 程 3總 金 額 = 起 步 價(jià)總 金 額 + = ( 里 程 3 )* 起 步 價(jià)總 金 額 + = 等 待 時(shí) 間 *等 待 單 價(jià)總 金 額 = 起 步 價(jià)總 金 額 + = 等 待 時(shí) 間 *等 待 單 價(jià)返 回NY 圖 34 計(jì)算程序流程圖 洛陽理工學(xué)院畢業(yè)設(shè)計(jì)(論文) 18 顯示程序 由于 8 位數(shù)碼管所有段選皆有 8 位的 P0 口進(jìn)行控制,因此,在每一瞬間, 8 位 LED 會(huì)顯示同一個(gè)數(shù)字。要想每位顯示不同的字符,就必須采用動(dòng)態(tài)掃描的 方法輪流點(diǎn)亮各位 LED,即在每一時(shí)刻只使某一位顯示字符。在此瞬間,段選控制 I/O 口輸出相應(yīng)字符段選碼(字符碼),而位選則控制 I/O 口在該顯示的位送入選通電平,以保證該位顯示顯示相應(yīng)字符。如此循環(huán)操作,使每位分時(shí)顯示該位應(yīng)該顯示的字符 [7] 。 在本次設(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)顯示。 鍵盤程序 鍵盤采用查詢的方式,放在主程序中,當(dāng)有 按鍵按下的時(shí)候,在相應(yīng) I/O口產(chǎn)生一次低電平,當(dāng)單片機(jī)查詢出該低電平后便轉(zhuǎn)入進(jìn)行處理,處理結(jié)束返回。鍵盤程序流程圖如圖 35。 洛陽理工學(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