裝配圖出租車?yán)锍田@示系統(tǒng)的設(shè)計(jì)
裝配圖出租車?yán)锍田@示系統(tǒng)的設(shè)計(jì),裝配,出租車,里程,顯示,系統(tǒng),設(shè)計(jì)
參考必讀
下列資料與各個(gè)論文題目均有所出入,相關(guān)內(nèi)容僅供參考,不可雷同。
錯(cuò)誤更改:(陳廷廷、胡大亮、呂帥、陳遲、許彪)
步進(jìn)電機(jī)式濕度表的設(shè)計(jì) 改為 步進(jìn)電機(jī)式溫度表的設(shè)計(jì)
格式要求
內(nèi)容分為:引言、正文、結(jié)論與展望、致謝、參考文獻(xiàn)等幾個(gè)部分。
各部分均要分頁。各章亦要分頁顯示。圖表格式要正確,必須用黑色筆書寫,字體要端正,不可潦草。
- 44 -
出租車?yán)锍田@示系統(tǒng)的設(shè)計(jì)
第1章 概 述
1.1 國(guó)內(nèi)外研究現(xiàn)狀
自今汽車走過了100多年的發(fā)展歷程,汽車儀表也在不斷開發(fā)和發(fā)展之中。汽車儀表發(fā)展,按其工作原理上取得的重大技術(shù)創(chuàng)新來分經(jīng)過四代:第一代汽車儀表是基于機(jī)械作用力而工作的機(jī)械式儀表,即機(jī)械機(jī)芯表;第二代汽車儀表的工作原理基于電子測(cè)量原理,即通過各類傳感器將被測(cè)的非電量變換成電信號(hào)加以測(cè)量,稱之為電氣式儀表;第三代為模擬電路電子式;第四代為步進(jìn)電機(jī)式全數(shù)字汽車儀表。
目前,汽車儀表正在經(jīng)歷第三代向第四代轉(zhuǎn)型時(shí)期。第三代汽車用儀表工作原理與電氣式儀表基本相同,只是用電子器件取代原來的電氣器件。隨著集成電路技術(shù)突飛猛進(jìn)的發(fā)展,這種儀表現(xiàn)在均采用汽車儀表專用集成電路,是國(guó)內(nèi)汽車儀表目前的主流產(chǎn)品,經(jīng)過多年的發(fā)展,其結(jié)構(gòu)形式經(jīng)歷了動(dòng)圈式機(jī)芯和動(dòng)磁式機(jī)芯階段。電子器件經(jīng)歷了分立器件和專用集成電路階段。發(fā)展到今天以塑料件為主;圍繞提高指示精度和指針平穩(wěn)性,有動(dòng)圈式、動(dòng)磁式等。第四代步進(jìn)電機(jī)式全數(shù)字式汽車儀表從其應(yīng)用的技術(shù)手段上看,還是電子技術(shù)范疇,也屬于電子式儀表,但信號(hào)處理方式己從模擬變成數(shù)字。其最顯著的特征是工作原理與第三代汽車儀表完全不同。本系統(tǒng)研制的步進(jìn)電機(jī)式車速里程表就是在這第三代和第四代轉(zhuǎn)型時(shí)期開發(fā)研制的第四代新型儀表。該表屬于第四代步進(jìn)電機(jī)式全數(shù)字式汽車儀表,本系統(tǒng)開發(fā)的儀表的優(yōu)點(diǎn)是指示精度高,響應(yīng)速度快、無抖動(dòng),指示范圍分度均勻等。
1.2 方案比較
根據(jù)設(shè)計(jì)任務(wù),車速里程表機(jī)芯的研制主要設(shè)計(jì)出車速的指示和里程的顯示,具有小計(jì)里程和總里程的雙顯示功能,車速具有回零功能。因此根據(jù)總體設(shè)計(jì)要求,經(jīng)過分析研究設(shè)計(jì)出方案如下。
1.2.1 方案一:動(dòng)磁式車速里程表
電子車速里程表是由步進(jìn)電機(jī)M驅(qū)動(dòng)機(jī)械式里程記錄機(jī)構(gòu)(計(jì)數(shù)器),裝在變速箱內(nèi)霍爾傳感器的輸出信號(hào)控制步進(jìn)電機(jī)。步進(jìn)電機(jī)M由專門集成電路BL2115驅(qū)動(dòng),步進(jìn)電機(jī)M轉(zhuǎn)動(dòng)量與變速箱輸出軸轉(zhuǎn)動(dòng)量成一定速比關(guān)系,從而取消了傳統(tǒng)的軟軸驅(qū)動(dòng)。
指示瞬時(shí)車速的指針用十字交叉動(dòng)磁式機(jī)芯驅(qū)動(dòng),該機(jī)芯上有一個(gè)專門集成電路LM1819同時(shí)接受霍爾傳感器輸出信號(hào),并輸出兩路驅(qū)動(dòng)十字交叉線包的電流信號(hào)。這兩路電流信號(hào)決定十字交叉線包的合成磁場(chǎng)方向,合成磁場(chǎng)驅(qū)動(dòng)瞬時(shí)車速的指針偏轉(zhuǎn),用以指示車速。綜上所述,累計(jì)里程計(jì)數(shù)和瞬時(shí)車速指示都受控于同一個(gè)信號(hào)源(霍爾速度傳感器)。圖1-1是動(dòng)磁式車速里程表工作原理框圖。
圖1-1 動(dòng)磁式車速里程表工作原理框圖
這種結(jié)構(gòu)的車速里程表結(jié)構(gòu)復(fù)雜,但它具有較好的優(yōu)點(diǎn):用指針指示速度,指針的轉(zhuǎn)速連續(xù)、穩(wěn)定,駕駛員不易產(chǎn)生視覺疲勞。
1.2.2 方案二:雙線圈式車速里程表
本方案是通過單片機(jī)來實(shí)現(xiàn)里程累計(jì)、清零及存儲(chǔ),存儲(chǔ)由E2PROM芯片AT24C02組成,并以LM1819集成電路驅(qū)動(dòng)十字線圈表頭,從而實(shí)現(xiàn)車速的指示。原理框圖見圖1-2所示。該設(shè)計(jì)方案成本低廉、指針穩(wěn)定性好、響應(yīng)速度快、抗震性強(qiáng)、可靠性和性價(jià)比都很高。該里程表完全取代了傳統(tǒng)的以軟軸驅(qū)動(dòng)的車速里程表。當(dāng)然,這只是一種實(shí)現(xiàn)方案,也可以由單片機(jī)通過軟件來驅(qū)動(dòng)十字線圈表頭, 即由單片機(jī)分別控制表頭的正弦線圈和余弦線圈而省去LM1819 集成電路。對(duì)此,本文不再贅述。
圖1-2 雙線圈式車速里程表原理框圖
1.2.3 方案三:步進(jìn)電機(jī)式車速里程表
本方案的步進(jìn)電機(jī)式車速里程表是一種用指針指示速度、用液晶顯示里程的電子式車速里程表。車速表不再采用十字交叉動(dòng)磁式機(jī)芯,而改用步進(jìn)電機(jī)式機(jī)芯。該步進(jìn)電機(jī)式機(jī)芯由單片機(jī)控制,再由步進(jìn)電機(jī)帶動(dòng)指針指示行駛車速,從而實(shí)現(xiàn)車速的瞬時(shí)指示,因而稱作單片機(jī)控制步進(jìn)電機(jī)式機(jī)芯車速表。里程累計(jì)和小計(jì)不再使用機(jī)械計(jì)數(shù)器,而是改用E2PROM芯片存儲(chǔ)顯示數(shù)值,由顯示屏LCD(液晶顯示屏)顯示累計(jì)和小計(jì)里程。采用液晶顯示后,克服了字輪顯示故障率高、受命短等缺點(diǎn),還增加了短距離計(jì)程等功能。本方案中的步進(jìn)電機(jī)式車速里程表原理框圖如圖1-3所示。
步進(jìn)電機(jī)式車速里程表是一種以單片機(jī)來實(shí)現(xiàn)里程累計(jì)、小計(jì)、清零及存儲(chǔ),并以步進(jìn)電機(jī)來實(shí)現(xiàn)車速的指示。該方案成本低廉、指針穩(wěn)定性好、響應(yīng)速度快、抗震性強(qiáng)、可靠性和性價(jià)比都很高。
圖1-3 步進(jìn)電機(jī)式車速里程表原理框圖
1.2.4 方案論證
實(shí)現(xiàn)以上方案都可以達(dá)到車速和里程顯示的目的,但采用動(dòng)磁式車速里程表在裝配過程中易發(fā)生針軸與軸承間間隙不一致、阻尼油阻尼不合適等問題。而采用雙線圈式車速里程表速度指示在低速區(qū)的線性差和精度不高。對(duì)于第三種方案采用步進(jìn)電機(jī)式車速里程表,其工作原理上的技術(shù)創(chuàng)新以及指針精度較。故確定采用此方案來實(shí)現(xiàn)高精度的車速和里程。
步進(jìn)電機(jī)式車速里程表車速對(duì)應(yīng)指示區(qū)間為0~200km/h;里程表由總里程和小計(jì)里程組成,總里程顯示范圍為0~999999km,小計(jì)里程顯示范圍為0~999.9km。在這第三種方案中,車速和里程信號(hào)都是由霍爾傳感器送入到單片機(jī)的T0和T2端口,T2記錄霍爾傳感器送入信號(hào)的周期,在單片機(jī)中做相應(yīng)處理后,送給步進(jìn)電機(jī)用于車速的測(cè)量。T0記錄霍爾傳感器送入信號(hào)的個(gè)數(shù),記錄到一定的數(shù)值送給LCD顯示里程。并把顯示的總里程保存在E2PROM 中。
第二章 步進(jìn)電機(jī)式車速里程表的硬件構(gòu)成
在上一章中我們論證了車速里程表的設(shè)計(jì)方案,步進(jìn)電機(jī)式車速里程表是本文選取的最優(yōu)方案。本章將重點(diǎn)介紹該方案的具體實(shí)施內(nèi)容,其中包括車速、里程信號(hào)模塊、控制模塊、LCD顯示模塊、步進(jìn)電機(jī)指示模塊和掉電保護(hù)模塊等。下面我們分別對(duì)各個(gè)模塊進(jìn)行一一介紹。
2.1 總體結(jié)構(gòu)的設(shè)計(jì)和原理概述
步進(jìn)電機(jī)式車速里程表機(jī)芯研制的硬件原理框圖如圖2-1所示。其中車速、里程信號(hào)部分是由霍爾傳感器組成?;魻杺鞲衅靼惭b在變速箱輸出軸上,霍爾傳感器采集到的信號(hào)送是給單片機(jī)的定時(shí)器/計(jì)數(shù)器T0和定時(shí)器/計(jì)數(shù)器T2中。單片機(jī)構(gòu)成了控制部分,單片機(jī)把霍爾傳感器送來的信號(hào),通過單片機(jī)的計(jì)數(shù)器T0做相應(yīng)編程,記錄下汽車行駛0.1km時(shí)霍爾傳感器所產(chǎn)生的信號(hào)脈沖個(gè)數(shù),通過單片機(jī)轉(zhuǎn)換為BCD碼送給LCD顯示,也就實(shí)現(xiàn)了最小顯示為0.1km ,如果累計(jì)到1km,就把1km累加到總里程并送入E2PROM保存,再從E2PROM中調(diào)入LCD中進(jìn)行總里程顯示。在LCD顯示中分為小計(jì)里程顯示和總里程顯示,小計(jì)里程可實(shí)現(xiàn)單次行駛路程,總里程記錄汽車總行駛路程。在E2PROM中只保存總里程值,以備單片機(jī)掉電時(shí)總里程數(shù)據(jù)丟失。定時(shí)器/計(jì)數(shù)器T2用于記錄單個(gè)脈沖的周期,把這個(gè)周期值通過軟件編譯轉(zhuǎn)化為車速值,再由單片機(jī)的P0口送給步進(jìn)電機(jī)指示瞬時(shí)車速值。
圖2-1 步進(jìn)電機(jī)式車速里程表機(jī)芯的原理框圖
顯示模塊由驅(qū)動(dòng)芯片PCF8566和LCD顯示屏組成。在顯示模塊中,顯示里程的信號(hào)是由P2口送入的,P2輸出的信號(hào)要先經(jīng)過驅(qū)動(dòng)芯片PCF8566再送給LCD顯示。步進(jìn)電機(jī)模塊同樣也由驅(qū)動(dòng)芯片組成,本系統(tǒng)選擇的驅(qū)動(dòng)芯片是ULN2003,速度信號(hào)經(jīng)由單片機(jī)P0口送給驅(qū)動(dòng)芯片,再由驅(qū)動(dòng)芯片送給步進(jìn)電機(jī)指示相應(yīng)車速值。
2.2 車速、里程信號(hào)電路的設(shè)計(jì)
第四代汽車儀表對(duì)于傳感器的選擇,一般常用的是霍爾式和干簧管式轉(zhuǎn)速傳感器,也比較少的用到磁電式轉(zhuǎn)速傳感器。因?yàn)殡S著車速的提高,用軟軸驅(qū)動(dòng)的傳統(tǒng)車速里程表受到前所未有的挑戰(zhàn),這是因?yàn)檐涊S在高速旋轉(zhuǎn)時(shí),由于受鋼絲交變應(yīng)力極限的限制而容易斷裂,同時(shí),軟軸布置過長(zhǎng)會(huì)出現(xiàn)形變過大或運(yùn)動(dòng)遲滯等現(xiàn)象。
第四代車速里程表無論選擇哪種傳感器它們輸出的信號(hào)都要是脈沖信號(hào),從而使得非接觸式轉(zhuǎn)速傳感器得以迅速發(fā)展。也只有選擇產(chǎn)生脈沖信號(hào)的傳感器才能滿足本課題的要求。故本系統(tǒng)選用霍爾式轉(zhuǎn)速傳感器。
霍爾探頭組件安裝在變速箱輸出軸上,里程計(jì)數(shù)、車速計(jì)時(shí)脈沖產(chǎn)生的工作原理如圖2-2所示。八個(gè)磁鋼與變速箱輸出軸同步旋轉(zhuǎn)?;魻柼筋^固定在變速箱殼體上靜止不動(dòng),當(dāng)輸出軸上某只磁鋼轉(zhuǎn)動(dòng)到霍爾探頭對(duì)應(yīng)位置時(shí),霍爾探頭中的霍爾敏感器件受到磁鋼磁場(chǎng)作用,霍爾探頭輸出一個(gè)低電平,當(dāng)沒有磁鋼與霍爾探頭對(duì)準(zhǔn)時(shí),霍爾探頭不再受到磁場(chǎng)作用,輸出高電平。輸出軸轉(zhuǎn)動(dòng)一周,霍爾探頭有八個(gè)方波輸出。如果以速比為1:624的車型為例,汽車行駛一公里,則霍爾傳感器發(fā)出的脈沖數(shù)共為8×624=4992個(gè)。步進(jìn)電機(jī)式車速里程表機(jī)芯的轉(zhuǎn)動(dòng)和LCD中里程的顯示都是受控于霍爾探頭輸出的方波個(gè)數(shù)。記錄4992個(gè)脈沖表示汽車行駛1公里,記錄單個(gè)脈沖的周期算出汽車行駛的速度,具體應(yīng)用將在相應(yīng)章節(jié)中介紹。
圖2-2 霍爾傳感器組件
2.3 控制模塊電路的設(shè)計(jì)
控制模塊由單片機(jī)構(gòu)成,單片機(jī)的復(fù)位電路和振蕩電路的連接如圖2-3所示,復(fù)位選用自動(dòng)上電復(fù)位方式,晶振選用典型值11.0592MHz。電容C01和C02的作用是幫助起振。由于AT89S52有8k字節(jié)的ROM,對(duì)于本系統(tǒng)來說存儲(chǔ)器能夠滿足要求,因此,=1。
圖2-3 開關(guān)按鈕復(fù)位和晶振連接圖
P0口的低四位承擔(dān)著傳送步進(jìn)電機(jī)時(shí)序信號(hào)的任務(wù),這個(gè)時(shí)序信號(hào)用來指示相對(duì)應(yīng)的速度,因此P0口的低四位接ULN2003。由于P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。故需要接上拉電阻來實(shí)現(xiàn)“1”的輸出。P2口中的P2.0和P2.1接E2PROM芯片AT24C02的SDA和SCL管腳,P2.2和P2.3接PCF8566的SDA和SCL管腳。連線之間均接上拉電阻。
2.4 里程顯示電路的設(shè)計(jì)
里程顯示可由LED和LCD來顯示。由于LCD顯示屏具有零輻射、低功耗、散熱小、體積小、顯示清晰等優(yōu)點(diǎn),并且顯示視覺效果較好,可有效地緩解駕駛員的眼疲勞。對(duì)于功耗要求越低越好的汽車儀表來說,優(yōu)先選用LCD來顯示里程是它最終的選擇。本文選擇的是PCF8566驅(qū)動(dòng)器和專用LCD組成LCD顯示模塊。之所以如此選擇,是因?yàn)镻CF8566芯片是低功耗的LCD驅(qū)動(dòng)器。
圖2-4為L(zhǎng)CD顯示模塊連線圖。PCF8566的SDA和SCL管腳分別接單片機(jī)的P2.0和P2.1,在這兩者的連線之間接上拉電阻。PCF8566的四個(gè)背極輸出BP0-BP3分別直接與LCD的背極輸入BP0-BP3相連,PCF8566的24個(gè)段輸出也同樣直接與LCD相連。PCF8566器件地址和控制命令字要通過I2C總線發(fā)送進(jìn)來,它們發(fā)送的順序?yàn)椋浩骷刂贰绞皆O(shè)置——數(shù)據(jù)指針——器件選擇——閃爍控制。但本系統(tǒng)只用到一個(gè)PCF85 66器件,器件的默認(rèn)子地址為00H,不需要再進(jìn)行器件選擇,故可省去器件選擇這個(gè)控制命令字。那么控制命令字的發(fā)送順序改為:器件地址——方式設(shè)置——數(shù)據(jù)指針——閃爍控制。PCF8566的VDD腳接+5V,OSC、A0、A1、A2、VSS和VLCD接地。
圖2-4 LCD顯示模塊連線圖
車速里程表的速比表示的是:車輪轉(zhuǎn)軸在汽車行駛一公里時(shí)所轉(zhuǎn)過的轉(zhuǎn)數(shù)。步進(jìn)電機(jī)式車速里程表采用的是霍爾式轉(zhuǎn)速傳感器。這種車速里程表轉(zhuǎn)軸每轉(zhuǎn)一圈,霍爾傳感器將感應(yīng)發(fā)出八個(gè)脈沖?,F(xiàn)在以速比為1:624的車型為例,汽車行駛一公里,則霍爾傳感器發(fā)出的脈沖數(shù)共為8×624=4992個(gè),也就是說,每個(gè)脈沖代表了1/4992公里的路程。將這些脈沖信號(hào)輸入給單片機(jī)的定時(shí)器/計(jì)數(shù)器T0,利用T0的計(jì)數(shù)功能,使之計(jì)到499個(gè)脈沖產(chǎn)生一個(gè)中斷,中斷后進(jìn)入計(jì)數(shù)器T0中斷子程序,在這個(gè)中斷子程序中,實(shí)現(xiàn)對(duì)小計(jì)里程的累計(jì)和總里程的累加。若累加了總里程則把累加的總里程數(shù)送到E2PROM芯片AT24C02中保存,并從芯片AT24C02中調(diào)出送給LCD顯示。
從以上章節(jié),我們已經(jīng)知道LCD分別顯示出小計(jì)里程和總里程,其中小計(jì)里程進(jìn)位時(shí),也同時(shí)累計(jì)至總計(jì)里程。小計(jì)里程顯示為000.0~999.9km,總里程液晶顯示為000000~999999km。液晶里程顯示屏見圖2-5所示,其中上一排6位顯示總里程,下一排4位顯示小計(jì)里程,且小計(jì)里程的最后一位為小數(shù)。器件子地址的傳送順序是從上排左首至右結(jié)束,接著再從下排右首開始,至左首結(jié)束,上下兩排都是左首為高位。
小計(jì)里程顯示的復(fù)位是通過外部中斷INT0來實(shí)現(xiàn)的,小計(jì)里程以0.1km為最低顯示數(shù)字,停車關(guān)掉電門后不保存,總里程顯示數(shù)值保存在E2PROM中,從而掉電不會(huì)丟失總里程數(shù)值,當(dāng)打開電門,即刻顯示上次總里程累計(jì)數(shù)。下次行車總里程繼續(xù)累計(jì)相加,總里程累計(jì)超過顯示范圍999999km時(shí),不再響應(yīng)里程數(shù)的變化,而一直顯示999999 km。小計(jì)里程超過顯示范圍999.9km時(shí)即刻清零,并從000.0開始重新計(jì)數(shù)。
圖2-5 液晶里程顯示屏
2.6 掉電保護(hù)電路的設(shè)計(jì)
由于需要保存總里程,但單片機(jī)在掉電模式下數(shù)據(jù)會(huì)丟失。因此應(yīng)該選擇E2PROM存儲(chǔ)器,本文選擇的E2PROM存儲(chǔ)器是AT24C02,它的主要特點(diǎn)在于I2C總線的應(yīng)用,16字節(jié)頁寫緩沖區(qū)、100萬次擦寫周期、數(shù)據(jù)存儲(chǔ)長(zhǎng)達(dá)100年和溫度范圍大等優(yōu)點(diǎn)。
該存儲(chǔ)芯片和單片機(jī)的P2.0、P2.1相連,在計(jì)數(shù)時(shí)只要總里程有進(jìn)位,單片機(jī)就把總里程送入AT24C02中保存,同樣每次顯示的總里程都是從該存儲(chǔ)器件中調(diào)入的。該器件支持I2C總線數(shù)據(jù)傳送協(xié)議。
I2C總線協(xié)議規(guī)定,任何將數(shù)據(jù)傳送到總線的作為發(fā)送器,任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送由主器件控制,總線的串行時(shí)鐘、起始停止條件均由主控制器產(chǎn)生。主器件和從器件都可以作為發(fā)送器或者接收器,但數(shù)據(jù)轉(zhuǎn)送(接收或發(fā)送)模式由主器件控制。I2C總線協(xié)議定義如下:
1. 只有在總線非忙時(shí)才被允許進(jìn)行數(shù)據(jù)傳送。
2. 在數(shù)據(jù)傳送時(shí),當(dāng)時(shí)鐘線為高電平,數(shù)據(jù)線必須為固定狀態(tài),不允許有跳變。時(shí)鐘線為高電平時(shí),數(shù)據(jù)線的任何電平變化將被當(dāng)作總線的啟動(dòng)或停止條件。
I2C總線的具體應(yīng)用,請(qǐng)參考相關(guān)書籍,本文不再驁述??傊?,通過開始信號(hào)、寫或讀命令、應(yīng)答信號(hào)、傳送字節(jié)、結(jié)束信號(hào)等依次順序送入即可實(shí)現(xiàn)數(shù)據(jù)的傳送。電路連線如圖2-8所示。
圖2-8 E2PROM連線圖
里程顯示的程序設(shè)計(jì)
AT89S52和一般單片機(jī)一樣,支持C51高級(jí)語言和asm51匯編語言兩種語言編程。但我們?cè)诖髮W(xué)的學(xué)習(xí)中用的是asm51匯編語言,為了更好的對(duì)大學(xué)所學(xué)課程知識(shí)的一次再認(rèn)識(shí)和連貫性總結(jié),故本論文仍然選用匯編語言。且本程序在設(shè)計(jì)上主要具有以下特點(diǎn):
1) 在軟件結(jié)構(gòu)上,各功能程序?qū)崿F(xiàn)模塊化、子程序化;
2) 在顯示方式上,采用循環(huán)顯示隊(duì)列;
3) 速度信號(hào)采用脈沖周期測(cè)量法,根據(jù)車輪周長(zhǎng)推算出速度值;
4) 里程計(jì)數(shù)由脈沖個(gè)數(shù)換算成公里數(shù)。
圖3-1 主程序流程圖
主程序流程圖如圖3-1所示。在主程序中用來對(duì)系統(tǒng)進(jìn)行初始化,將系統(tǒng)中所有的命令狀態(tài)以及有關(guān)的存儲(chǔ)單元置位成初始狀態(tài),設(shè)置AT89S52的堆棧指針、讀E2PROM中的總里程并轉(zhuǎn)化為BCD碼,初始化LCD顯示,初始化步進(jìn)電機(jī)并使之逆時(shí)針旋轉(zhuǎn)280度進(jìn)行回零,然后判斷20H.0是否為1,如為1則保存里程信號(hào)到E2PROM中,否則調(diào)用里程顯示模塊,再判斷20H.3是否為1,如為1則調(diào)用速度顯示模塊,否則返回繼續(xù)判斷20H.0。中斷實(shí)現(xiàn)了對(duì)采集的信號(hào)處理、置判斷標(biāo)志、存儲(chǔ)、送顯示、指示等。
3.1.1 里程的累加
T0中斷里程計(jì)數(shù)子程序中,計(jì)499個(gè)脈沖表示行走了0.1公里,并產(chǎn)生中斷進(jìn)入T0中斷子程序。在這里首先關(guān)閉中斷,小計(jì)里程單元加一,并送備調(diào)用顯示單元。如果進(jìn)位達(dá)到一公里,則總里程單元也加一,并把總里程單元送入E2PROM芯片保存。其中寫里程子程序如圖3-2所示。起始地址SLA24賦值00H,發(fā)送數(shù)據(jù)緩沖區(qū)首址為50H,傳送字節(jié)數(shù)為06H,所以發(fā)送數(shù)據(jù)單元為50H、51H、52H、53H、54H、55H六個(gè)單元。尋址字節(jié)為0A0H,表示為寫字節(jié)。最終發(fā)送的六個(gè)數(shù)據(jù)保存在AT24C02的00H、01H、02H、03H、04H和05H中。
圖3-2 寫里程子程序 圖3-3 讀里程子程序
讀里程子程序如圖3-3所示,其中起始地址SLA24同樣賦值00H,接收數(shù)據(jù)緩沖區(qū)首址為40H,傳送字節(jié)數(shù)為06H,所以接受數(shù)據(jù)單元為40H、41H、42H、43H、44H和45H六個(gè)單元。尋址字節(jié)為0A0H時(shí)為寫字節(jié),為0A1H時(shí)為讀字節(jié)。同樣是從00H、01H、02H、03H、04H和05H這六個(gè)地址中讀出的。
里程的設(shè)計(jì)關(guān)鍵是在中斷里的設(shè)置,計(jì)數(shù)器T0初值的計(jì)算為:
216表示計(jì)數(shù)器T0選擇方式1的最大計(jì)數(shù)值,499為汽車行駛0.1公里的脈沖個(gè)數(shù),65037化為十六進(jìn)制為0FE0DH。當(dāng)T0計(jì)到499個(gè)脈沖時(shí),就跳轉(zhuǎn)到T0中斷。在中斷中首先關(guān)閉中斷允許EA,接著就是做加法處理,并置標(biāo)志位20H.0以便是否要送E2PROM 保存。圖3-4為具體流程圖。
小計(jì)里程在36H、37H、38H、39H中做加法,并送46H、47H、48H、49H單元,以便轉(zhuǎn)化為BCD碼送入LCD顯示。標(biāo)志位20H.0為1時(shí),就把總里程加法處理過的30H、31H、32H、33H、34H、35H單元內(nèi)容送50H、51H、52H、53H、54H、55H單元,以便寫入E2PROM 保存。如果標(biāo)志位20H.0為0,則中斷返回。從而實(shí)現(xiàn)了里程的處理。
圖3-4 T0中斷子程序
下面我們給出T0中斷的子程序:
INTT0: PUSH ACC
PUSH PSW
CLR EA
MOV TH0,#0FEh
MOV TL0,#0Dh
INC 36H
;小計(jì)里程顯示
MOV A,36H
CJNE A,#10,LT03
MOV 36H,#00H
CLR 20H.0
LCALL LT06
;小計(jì)里程進(jìn)位送總里程
INC 37H
MOV A,37H
CJNE A,#10,LT03
MOV 37H,#00H
INC 38H
MOV A,38H
CJNE A,#10,LT03
MOV 38H,#00H
INC 39H
MOV A,39H
CJNE A,#10,LT03
MOV 39H,#00H
LT03: MOV A,36H
;小計(jì)里程送46-49以備送顯示
MOV 46H,A
MOV A,37H
MOV 47H,A
MOV A,38H
MOV 48H,A
MOV A,39H
MOV 49H,A
POP PSW
POP ACC
SETB EA
RETI
LT06: INC 35H
;插入總里程
MOV A,35H
CJNE A,#10,LT04
;45H不等于10,則跳轉(zhuǎn)
MOV 35H,#00H
INC 34H
MOV A,34H
CJNE A,#10,LT04
;44H不等于10,則跳轉(zhuǎn)
MOV 34H,#00H
INC 33H
MOV A,33H
CJNE A,#10,LT04
MOV 33H,#00H
INC 32H
MOV A,32H
CJNE A,#10,LT04
MOV 32H,#00H
INC 31H
MOV A,31H
CJNE A,#10,LT04
;41H不等于10,則跳轉(zhuǎn)
MOV 31H,#00H
INC 30H
MOV A,30H
CJNE A,#10,LT04
MOV 30H,#09H
MOV 31H,#09H
MOV 32H,#09H
MOV 33H,#09H
MOV 34H,#09H
MOV 35H,#09H
LT04: SETB 20H.0
RET
3.1.2 里程的顯示
LCD顯示子程序是里程顯示中的難點(diǎn),其關(guān)鍵在于PCF8566的應(yīng)用。其中也用到I2C總線,這一點(diǎn)和讀、寫子程序一樣,但比它要復(fù)雜一些。見圖3-5所示。
圖3-5 LCD顯示子程序
在LCD顯示子程序中,先送器件地址接著送器件的控制命令,根據(jù)“里程顯示電路的設(shè)計(jì)”這一小節(jié)我們知道,控制命令有四個(gè)字節(jié),但因?yàn)槲覀冎挥幸粋€(gè)LCD顯示芯片,故省去了器件選擇控制命令這一字節(jié)。這個(gè)子程序在主程序中循環(huán)調(diào)用,具體應(yīng)用見附錄E。
基于紅外線的電燈亮度遙控器的設(shè)計(jì)
原理簡(jiǎn)介:
一、編碼格式
紅外遙控輸出40KHz的載波編碼,改變R3大小可以改變發(fā)射距離。遙控器采用脈沖個(gè)數(shù)編碼,不同的脈沖個(gè)數(shù)代表不同的碼。電燈的亮度可分別用不同的脈沖個(gè)數(shù)來控制。為了使接收可靠,第一位碼寬為3ms,其余為1ms,遙控碼幀間隔大于10ms。
二、遙控碼發(fā)射
當(dāng)某一個(gè)按鍵按下時(shí),單片機(jī)先讀出鍵值,然后根據(jù)鍵值設(shè)定遙控碼的脈沖個(gè)數(shù),再調(diào)制成40KHz方波由紅外線發(fā)射出去。輸出調(diào)制波如圖3所示。
一、 數(shù)據(jù)幀的接收處理
當(dāng)紅外線接收器輸出脈沖幀數(shù)據(jù)時(shí),第一位碼的低電平將啟動(dòng)中斷程序,實(shí)時(shí)接收數(shù)據(jù)幀。在數(shù)據(jù)幀接收時(shí),將對(duì)第一位起始碼的碼寬進(jìn)行驗(yàn)證,若第一位低電平碼的脈寬小于2ms,將作為錯(cuò)誤碼處理,當(dāng)間隔位的高電平脈沖寬度大于3ms時(shí),結(jié)束接收,然后根據(jù)累加器A中的脈沖個(gè)數(shù),執(zhí)行相應(yīng)輸出口的操作。圖4為紅外線接收器輸出的一幀遙控碼波形。
圖1 紅外發(fā)射電路
圖2 紅外接收電路
10ms
10ms 停止位
1ms
第一位
3ms
1ms
3ms
1ms
幀間隙
10ms
圖3 輸出編碼波形圖 圖4 一幀遙控碼波形
過零檢測(cè)電路
過零檢測(cè)電路由變壓器、橋式整流和兩個(gè)9013三極管組成。原理自行分析。。。
電燈開關(guān)及亮度控制電路
電燈的開關(guān)受P1.7口控制,也可由可控硅的導(dǎo)通角控制,
單片機(jī)產(chǎn)生可控硅控制的移相脈沖,移相角的改變實(shí)現(xiàn)導(dǎo)通角的改變,即當(dāng)移相角較大時(shí),可控硅的導(dǎo)通角較小,輸出電壓較低,電燈較暗;當(dāng)移相角較小時(shí),可控硅的導(dǎo)通角較大,輸出電壓較高,電燈較亮。當(dāng)P1.6口為低電平時(shí),9012三極管導(dǎo)通,三極管集電極電流驅(qū)動(dòng)光耦合器導(dǎo)通,使可控硅的G極產(chǎn)生導(dǎo)通電流,觸發(fā)可控硅導(dǎo)通,當(dāng)P1.6口為高電平時(shí),9012三極管、光電耦合器、可控硅都處于截止?fàn)顟B(tài)。
IC卡簡(jiǎn)易收費(fèi)裝置的設(shè)計(jì)
在本設(shè)計(jì)中,研究的是IC卡的收費(fèi)裝置,簡(jiǎn)單的說就是對(duì)IC卡進(jìn)行讀和寫的裝置的研究。這種收費(fèi)裝置也可稱為“讀寫設(shè)備、讀寫器或讀寫終端”。IC卡讀寫裝置的種類很多,功能上也由于不同的需要差別也很大,但就其對(duì)卡的操作功能來說,都應(yīng)該具備以下幾個(gè)基本功能:
(1)IC卡的識(shí)別和控制。
(2)向IC卡提供其所需的穩(wěn)定的電源與時(shí)鐘信號(hào)。
(3)實(shí)現(xiàn)與卡的數(shù)據(jù)交換,并提供相應(yīng)的控制信號(hào)。(對(duì)于加密數(shù)據(jù)系統(tǒng),應(yīng)提供相應(yīng)的加密解密處理及密鑰管理機(jī)制。提供相應(yīng)的外部控制信息及其它設(shè)備的信息交換)。
2.2 IC卡讀寫器硬件電路設(shè)計(jì)
2.2.1 功能要求
本課題設(shè)計(jì)實(shí)現(xiàn)的通用型接觸式IC卡讀寫器需要實(shí)現(xiàn)以下具體的功能:
(1)能夠?qū)C卡進(jìn)行識(shí)別。
(2)為IC提供穩(wěn)定的時(shí)鐘信號(hào)。
(3)有顯示裝置顯示對(duì)IC卡操作前后,IC卡中的數(shù)據(jù)。
(4)有鍵盤用于對(duì)IC卡進(jìn)行具體的操作(數(shù)據(jù)的讀出和寫入)。
2.2.2 模塊框圖
微控制器
微控制器
鍵盤和接口電路
IC卡插座
復(fù)位電路
顯示電路
晶振電路
圖2-1 IC卡讀寫器模塊框圖
2.2.4 IC卡的選擇及讀寫操作
本設(shè)計(jì)中采用的是一種ATMEL公司生產(chǎn)的AT24C02存儲(chǔ)式IC卡。它的存儲(chǔ)容量為2K,2.5~5V低電壓供電,雙線串行接口,雙向數(shù)據(jù)傳輸,它的擦/寫次數(shù)可以達(dá)到10萬次以上,其中保存數(shù)據(jù)的時(shí)間可以達(dá)到100年以上。它是目前國(guó)內(nèi)使用最多的IC卡之一。
?AT24C02中帶有片內(nèi)地址寄存器。每寫入或讀出一個(gè)數(shù)據(jù)字節(jié)后,該地址寄存器自動(dòng)加1,以實(shí)現(xiàn)對(duì)下一個(gè)存儲(chǔ)單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時(shí)間,一次操作可寫入多達(dá)8個(gè)字節(jié)的數(shù)據(jù)。下面是其引腳圖。
圖2-3 AT24C02的引腳圖
圖2-4 AT24C02的設(shè)計(jì)連接圖
上圖2-4是本設(shè)計(jì)中AT24C02的電路連接圖,其中AT24C02的1,2,3腳是三條地址線,用于確定芯片的硬件地址,它們和4號(hào)引腳都接地。第8和第4引腳分別接正負(fù)電源。第5腳SDA為串行數(shù)據(jù)的輸入輸出端,數(shù)據(jù)通過這條I2C總線進(jìn)行串行傳輸,它和AT89C52的P1.1口相連接。第6腳是SCL,它是串行時(shí)鐘輸入線,它和AT89C52的P1.0口相連接,SDA和SCL和正電源的之間都要加上一個(gè)上拉電阻,電阻的大小為5.1K。第7腳需要接地,它是用來寫保護(hù)的。
AT24C02中帶有片內(nèi)地址寄存器,每寫入或讀出一個(gè)數(shù)據(jù)字節(jié)后,該地址寄存器自動(dòng)加1,以實(shí)現(xiàn)對(duì)下一個(gè)存儲(chǔ)單元的讀寫。下面對(duì)AT24C02的讀寫方式進(jìn)行說明。
SDA和SCL:
在AT24C02中與邏輯控制有關(guān)的引出端線只有兩條:SCL和SDA,所有的地址、數(shù)據(jù)及讀/寫控制命令等信號(hào)都從SDA端輸入/輸出。為了區(qū)分SDA線上的數(shù)據(jù)、地址、操作命令以及各種狀態(tài)的“開始”與“結(jié)束”,卡片中設(shè)計(jì)了多個(gè)邏輯控制單元。其中啟動(dòng)和停止邏輯單元產(chǎn)生控制讀/寫操作的“開始”和“停止”標(biāo)志信號(hào)。
“開始”狀態(tài):當(dāng)SCL處于高電平時(shí),SDA從高電平轉(zhuǎn)向低電平,即產(chǎn)生“開始”標(biāo)志信號(hào)。
“停止”狀態(tài):當(dāng)SCL處于高電平時(shí),SDA從低電平轉(zhuǎn)向高電平,即產(chǎn)生一個(gè)“停止”標(biāo)志信號(hào),如下圖所示。
圖2-5 讀/寫操作的啟動(dòng)與停止時(shí)序圖
由圖2-5可以看出SDA和SCL各自通過一個(gè)上拉電阻拉到高電平。當(dāng)SCL為高電平時(shí)對(duì)應(yīng)的SDA上的數(shù)據(jù)有效;而當(dāng)SCL為低電平時(shí),允許SDA上的數(shù)據(jù)變化。
數(shù)據(jù)輸入/輸出應(yīng)答邏輯單元產(chǎn)生數(shù)據(jù)輸入/輸出操作應(yīng)答信號(hào)。操作是所有的地址和數(shù)據(jù)字都以8位碼串行輸入/輸出于卡片??ㄆ渴盏揭粋€(gè)8位碼長(zhǎng)的地址碼或數(shù)據(jù)字后,都以置SDA線為低電平方式“確認(rèn)”應(yīng)答信號(hào)。其波形如下圖所示。
圖2-6 輸入/輸出的確認(rèn)時(shí)序圖
IC卡的寫操作:
在器件地址碼之后,緊跟著的是字節(jié)地址碼。地址碼長(zhǎng)度為八位。時(shí)序中的數(shù)據(jù)為寫字節(jié)時(shí),由IC卡讀/寫器中的單片機(jī)在SDA發(fā)送一個(gè)八位碼長(zhǎng)的數(shù)據(jù);卡片每收到一個(gè)數(shù)據(jù)字節(jié)后,都要通過SDA回送一個(gè)“確認(rèn)”信號(hào)(ACK)。寫操作時(shí)序圖如下所示。
圖2-7 寫操作時(shí)序圖
IC卡的讀操作:
讀操作有三種:現(xiàn)行地址讀、隨機(jī)地址讀及順序讀。
(1)現(xiàn)行地址讀:如果最后一次操作的地址在N,則現(xiàn)行地址為N+1。
(2)隨機(jī)地址讀:從選定的地址單元開始讀,時(shí)序中器件地址和字地址概念同寫操作,不同的是,IC卡讀/寫器中的單片機(jī)在給出數(shù)據(jù)字地址碼之后,不發(fā)生任何數(shù)據(jù)字,而是在卡片發(fā)出“確認(rèn)”應(yīng)答之后,又發(fā)出一個(gè)“開始”狀態(tài),進(jìn)入“現(xiàn)行地址讀”操作。單片機(jī)讀如1個(gè)數(shù)據(jù)字后,使SDA處于高電平,隨后產(chǎn)生一個(gè)“停止”狀態(tài),結(jié)束。
圖2-8 讀操作時(shí)序圖
(3)順序讀:可以從“現(xiàn)行地址讀”和“隨機(jī)地址讀”開始。當(dāng)IC卡讀/寫器中的單片機(jī)收到第一個(gè)數(shù)據(jù)字后,不發(fā)“停止”狀態(tài),而是回答一個(gè)“確認(rèn)”信號(hào)。一旦卡片收到單片機(jī)發(fā)出的“確認(rèn)”信號(hào),則將卡片內(nèi)地址計(jì)數(shù)器的地址自動(dòng)加1,并將此地址單元中的數(shù)據(jù)從SDA線上串行輸出。只要單片機(jī)收到數(shù)據(jù)字后回答“確認(rèn)”信號(hào),順序讀操作就繼續(xù)進(jìn)行,直到單片機(jī)發(fā)出“停止”信號(hào)為止。
IC卡的芯片操作地址(器件地址)
表2-1 AT24C02的操作地址
1
0
1
0
A2
A0
A1
R/W
2.2.6 讀寫器的鍵盤電路
在本設(shè)計(jì)中要求IC卡讀/寫終端除了完成基本的IC卡數(shù)據(jù)讀寫功能,還要提供其他功能。脫機(jī)型讀寫器要求可以脫離上位機(jī)獨(dú)立工作,所以要求IC卡讀/寫器要有鍵盤和顯示功能作為用戶的操作界面。
操作界面是用戶是對(duì)設(shè)備進(jìn)行操作和控制的接口,一般包括鍵盤和顯示。用戶根據(jù)顯示的提示,使用鍵盤輸入命令,從顯示得到設(shè)備輸出的結(jié)果。這一部分是人機(jī)對(duì)話的部分,是人在使用機(jī)器時(shí)和機(jī)器對(duì)話的窗口。
鍵盤實(shí)質(zhì)上是一組按鍵開關(guān)的集合,控制CPU通過按鍵來識(shí)別特定的用戶命令 從而轉(zhuǎn)入相應(yīng)的程序來執(zhí)行用戶命令。鍵盤的軟硬件設(shè)計(jì)涉及下面幾個(gè)方面的問題。
(1)按鍵的確認(rèn):
鍵的閉合與否反應(yīng)在電壓上就是呈現(xiàn)出高電平或低電平,如果高電平表示斷開,那么低電平則表示閉合,通過電平的高低狀態(tài)的檢測(cè)便可確認(rèn)鍵按下與否。
圖2-10 按鍵的抖動(dòng)示意圖
常見的鍵盤都是機(jī)械開關(guān)式的,由于機(jī)械咬合的特性以及操作人員手部的不穩(wěn)定,在按鍵閉合和松開的瞬間會(huì)產(chǎn)生抖動(dòng)的現(xiàn)象,如上圖2-10所示。抖動(dòng)現(xiàn)象一般持續(xù)10ms左右的時(shí)間。如果不采取措施消除抖動(dòng)干擾,在程序中就會(huì)出現(xiàn)一個(gè)按鍵被反復(fù)按下的錯(cuò)誤。這個(gè)時(shí)候我們就要想辦法消除鍵盤的抖動(dòng),常用的消除抖動(dòng)的方法有硬件和軟件消除兩種方法。
在硬件上通常采用的是雙D觸發(fā)器構(gòu)成RS觸發(fā)器,通過分析RS觸發(fā)器的特性可以知道,輸入端有微小的抖動(dòng)對(duì)輸出的影響是非常小的,這種電路也常使用在單按鍵電路中,在本設(shè)計(jì)中采用的鍵盤的按鍵有16個(gè)用硬件消除抖動(dòng)的方法就顯得太麻煩了,因此在設(shè)計(jì)中采用的是軟件消除的辦法,軟件消除的方法很多,最常用的方法是延遲操作,其原理就是在讀取第一個(gè)鍵值后,延遲一段時(shí)間后,再次讀取鍵值,判斷和前一次讀取的鍵值是否相同,如果相同就認(rèn)為讀取了正確的鍵值。
(2)按鍵接口設(shè)計(jì)和按鍵識(shí)別方法:
按鍵接口設(shè)計(jì)有兩種方法,獨(dú)立式按鍵和矩陣式鍵盤。
獨(dú)立式按鍵是各鍵互相獨(dú)立,每個(gè)按鍵各接一根輸入線,在沒有鍵按下的時(shí)候,P1口的電平是高電平,當(dāng)有其中有鍵被按下的時(shí)候,和那個(gè)被按下的鍵相對(duì)應(yīng)的P1口的就接地,這時(shí)其電平就會(huì)變成低電平,所以判斷獨(dú)立式鍵盤的哪個(gè)鍵被按下很簡(jiǎn)單,只要檢測(cè)輸入線的電平就可以來識(shí)別按鍵的狀態(tài)。這種方法電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵需占用一根輸入口線,I/O資源浪費(fèi)大。故此方法只適用于按鍵少,或其他控制功能很簡(jiǎn)單的場(chǎng)合。矩陣式鍵盤適用于按鍵數(shù)量較多的場(chǎng)合,它把鍵盤輸入線分為行線和列線,按鍵位于行、列的交叉點(diǎn)上。按鍵的識(shí)別需要軟件分別掃描行線和列線,根據(jù)掃描結(jié)果判斷具體按下的按鍵。下圖2-11是獨(dú)立式按鍵的硬件設(shè)計(jì)圖。
圖2-11 獨(dú)立式按鍵硬件設(shè)計(jì)圖
由上圖可看出,獨(dú)立式鍵盤的每一個(gè)按鍵都要占用一根輸入口線,I/O資源的浪費(fèi)很厲害,因此它只適用于一些按鍵的數(shù)量較少的,或者是控制功能的要求很簡(jiǎn)單的設(shè)計(jì),本設(shè)計(jì)的鍵盤的按鍵的數(shù)量有16個(gè)之多,這種獨(dú)立式的按鍵設(shè)計(jì)方法很顯然不適合本設(shè)計(jì)。所以在本設(shè)計(jì)中采用的是4乘4的16個(gè)按鍵的鍵盤,下圖是其硬件電路示意圖。
圖2-12 矩陣式按鍵硬件設(shè)計(jì)圖
由上面兩副圖比較就可以看出,矩陣式結(jié)構(gòu)的鍵盤顯然比獨(dú)立式要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖2-12中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過單片機(jī)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。
確定矩陣式鍵盤上何鍵被按下有幾種方法,下面介紹的掃描法就是一種“行掃描
法”。行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,如上圖所示鍵盤,下面我們和具體的分析。
(1) 判斷有無鍵按下:
首先將全部列線置低電平,然后檢測(cè)行線的狀態(tài)。只要有一行的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有行線均為高電平,則鍵盤中無鍵按下。
(2)判斷閉合鍵所在的位置:
在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將列線置為低電平,即在置某根列線為低電平時(shí),其它線為高電平。在確定某根列線位置為低電平后,再逐行檢測(cè)各行線的電平狀態(tài)。若某行為低,則該行線與置為低電平的列線交叉處的按鍵就是閉合的按鍵。
鍵盤掃描只是CPU的工作內(nèi)容之一,CPU在忙于各項(xiàng)工作時(shí),如何處理鍵盤的輸入取決于鍵盤的工作方式,鍵盤工作方式的選擇應(yīng)根據(jù)應(yīng)用系統(tǒng)中CPU工作的忙、閑情況而定。通常鍵盤工作方式有三種:編程掃描、定時(shí)掃描和中斷掃描。
(1)編程掃描:
CPU反復(fù)地掃描鍵盤,等待用戶的輸入命令,而執(zhí)行鍵入命令或處理輸入數(shù)據(jù)時(shí),CPU不再響應(yīng)輸入要求,直到CPU返回重新掃描鍵盤為止。
(2)定時(shí)掃描:
它的工作方式是利用單片機(jī)內(nèi)部定時(shí)器產(chǎn)生定時(shí)中斷,CPU響應(yīng)定時(shí)器中斷后對(duì)鍵盤進(jìn)行掃描,在有鍵按下時(shí)識(shí)別出該鍵并執(zhí)行相應(yīng)功能程序。
(3)中斷方式:
在沒有鍵按下時(shí),不占用CPU處理時(shí)間,只有當(dāng)有鍵按下時(shí)產(chǎn)生鍵盤中斷,由中斷程序識(shí)別鍵并執(zhí)行功能程序,這種方式對(duì)CPU的資源的使用非常的節(jié)省,因?yàn)樗跊]有按鍵按下的時(shí)候,并不需要CPU對(duì)其進(jìn)行掃描,所以這種方法是使用最多的一種。
本設(shè)計(jì)中鍵盤的各個(gè)按鍵和功能。
1
2
3
E
4
7
A
5
8
0
6
9
C
D
B
F
圖2-13 鍵盤的按鍵圖
可以看到鍵盤有0~9十個(gè)數(shù)字鍵,A,B,C,D,E,F(xiàn)是五個(gè)不同的功能鍵,用于實(shí)現(xiàn)一些功能的操作。
(1)0~9是十個(gè)數(shù)字鍵,用于向卡中輸入具體的數(shù)值。
(2)A:取消鍵。
(3)B:確認(rèn)鍵。進(jìn)行一步操作后進(jìn)行確認(rèn)時(shí)按下。
(4)C:存款鍵,按下后,可以向卡中寫入一定數(shù)額的錢數(shù),然后確認(rèn)。
(5)D:繳費(fèi)鍵,按下后,再輸入要花費(fèi)的數(shù)額,然后確認(rèn)。
(6)E:查詢鍵,用于查詢卡中錢數(shù)。
(7)F:退格鍵,操作錯(cuò)誤時(shí)恢復(fù)。
2.2.7 顯示電路的設(shè)計(jì)
應(yīng)用系統(tǒng)中常用的顯示器有發(fā)光二極管顯示器,簡(jiǎn)稱LED;液晶顯示器,簡(jiǎn)稱LCD;熒光顯示器。前面兩種顯示器使用最多,本設(shè)計(jì)中采用的是LED,下面就對(duì)其顯示原理和使用方法做簡(jiǎn)單的說明。
LED顯示器由發(fā)光二極管顯示字段組成,在本設(shè)計(jì)中采用的是7段數(shù)碼管作為顯示裝置7段數(shù)碼管分為8段:A,B,C,D,E,F(xiàn),G,DP其中DP是小數(shù)點(diǎn),數(shù)碼管常用的有10根管腳,其中有兩個(gè)管腳作為公共端,相互之間是連通的。如圖2-15所示,1號(hào)腳和6號(hào)腳是公共端,因?yàn)檫@是個(gè)共陰極的數(shù)碼管,所以它們與地相連。下圖2-14是LED的管腳圖,2-15是其內(nèi)部電路圖。
圖2-14 LED的管腳圖
圖2-15 LED的內(nèi)部電路圖
LED顯示方式分靜態(tài)顯示和動(dòng)態(tài)顯示。靜態(tài)顯示時(shí)顯示器中的各位相互獨(dú)立,而且各位顯示字符一經(jīng)確定,相應(yīng)鎖存器的輸出將維持不變,直到單片機(jī)將另一個(gè)要顯示的字符送到為止。這種顯示方式接口編程容易,管理簡(jiǎn)單,數(shù)據(jù)穩(wěn)定占用的CPU的時(shí)間少,顯示的時(shí)候每一個(gè)顯示器都要占用一個(gè)I/O口。
靜態(tài)顯示的優(yōu)點(diǎn)在于,靜態(tài)顯示數(shù)據(jù)顯示穩(wěn)定,占用很少的CPU時(shí)間,但是每個(gè)顯示單元都需要單獨(dú)的顯示驅(qū)動(dòng)電路,使用的電路硬件較多,有幾個(gè)數(shù)碼管就需要幾個(gè)I/O鎖存器,這樣對(duì)資源的浪費(fèi)比較嚴(yán)重,在顯示的位數(shù)比較多時(shí),就不適合。
在顯示位較多時(shí),一般都采用動(dòng)態(tài)顯示方式。LED動(dòng)態(tài)顯示時(shí),動(dòng)態(tài)顯示只需要一個(gè)顯示驅(qū)動(dòng)電路,形成段選線的多路復(fù)用。而各位的共陽極或共陰極分別由相應(yīng)的I/O口線控制,實(shí)現(xiàn)各位的分時(shí)選通。若要各位LED能夠顯示出與本位相應(yīng)的顯示字符,就必須采用掃描顯示方式,即在某一時(shí)刻只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時(shí),段選線上輸出相應(yīng)位要顯示字符的字形碼,這樣同一時(shí)刻只有一位顯示出字符。在下一時(shí)刻,只讓下一位的位選線處于選通狀態(tài),同時(shí),在段選線上輸出相應(yīng)位將要顯示字符的字符碼。只要每位顯示間隔足夠短,如此循環(huán)就可以使各位顯示出將要顯示的字符,達(dá)到顯示目的。
動(dòng)態(tài)顯示會(huì)存在閃爍現(xiàn)象,但是如果LED不同位顯示的時(shí)間間隔選擇的好的話,由于人眼的暫留作用,人眼是無法分辨的,感覺就像是一組穩(wěn)定的數(shù)據(jù)。
上面所敘是LED顯示的基本原理,根據(jù)這些基本原理,選擇不同的軟硬件方法都可以實(shí)現(xiàn)LED顯示。在本設(shè)計(jì)中選用的就是LED的動(dòng)態(tài)顯示,其中段選線占用一個(gè)8位I/O口,由74LS164擴(kuò)展得到,如下圖2-16所示。在設(shè)計(jì)中單片機(jī)AT89C52的P0.0口和P0.1口用于和74L164相連接,它門分別與74L164的A,B和CLK相連接,剩下的P0口的6個(gè)I/O口作為位選。74L164的作用是用于驅(qū)動(dòng)數(shù)碼管。
圖2-16 驅(qū)動(dòng)顯示的連接圖
由圖可以看出,由于各位的段選線并聯(lián),段碼的輸出對(duì)各位來說都是相同的。因此,同一時(shí)刻,如果各位位選線都處于選通的話,6位LED將顯示相同的字符。所以若要各位LED能夠顯示出我們想要的字符,就必須采用掃描顯示方式,即在同一時(shí)刻,只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時(shí),段選線上輸出相應(yīng)位要顯示字符的段碼。這樣同一時(shí)刻,6位LED中只有選通的那一位顯示出字符,而其他三位則是熄滅的。同樣,在下一時(shí)刻,只讓下一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài),同時(shí),在段選線上輸出相應(yīng)位要顯示字符的段碼,則同一時(shí)刻,只有選通位顯示出相應(yīng)的字符,而其他各位則是熄滅的。如此循環(huán)下去,就可以使各位顯示出將要顯示的字符,雖然這些字符是在不同時(shí)刻出現(xiàn)的,而且同一時(shí)刻,只有一位顯示,其他各位熄滅,但由于LED顯示器的余輝和人眼的視覺暫留作用,只要每位顯示間隔時(shí)間足夠短,則可造成多位同時(shí)亮的假象,達(dá)到同時(shí)顯示的目的。
設(shè)定LED不同位顯示的時(shí)間間隔也同樣很重要,因?yàn)榘l(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時(shí)導(dǎo)通時(shí)間,如果時(shí)間間隔太短的話,由于發(fā)光太弱,人眼根本就看不清楚。但是發(fā)光的時(shí)間也不能太長(zhǎng),因?yàn)長(zhǎng)ED顯示有一定的臨界閃爍頻率,而且時(shí)間越長(zhǎng),占用的CPU時(shí)間也越多。本設(shè)計(jì)中設(shè)定的時(shí)間間隔為1ms。
LCD顯示:
LCD是一種極低功耗顯示器,目前,高分辨率的LCD點(diǎn)陣式顯示器有顯示靈活,顯示圖型字符美觀等優(yōu)點(diǎn),在很多系統(tǒng)中應(yīng)用非常廣泛。但是LCD的顯示控制比較復(fù)雜,所以在設(shè)計(jì)中沒有選用,在這里就不具體的介紹了。
第3章 軟件設(shè)計(jì)
3.1 系統(tǒng)主程序流程圖
為實(shí)現(xiàn)對(duì)IC卡的卡識(shí)別及讀/寫操作、數(shù)碼動(dòng)態(tài)顯示及按鍵識(shí)別處理。本設(shè)計(jì)系統(tǒng)軟件包括主程序、IC卡識(shí)別程,IC卡讀/寫操作子程序、各功能按鍵子程序、動(dòng)態(tài)顯示及按鍵檢測(cè)子程序等。其中IC卡識(shí)別子程序用于自動(dòng)識(shí)別插入卡的類型。確定相應(yīng)的讀/寫操作時(shí)序。并確認(rèn)該卡的有效性。
系統(tǒng)的主程序框圖
開始
初始化
顯示程序
有卡插入?
循環(huán)掃描鍵盤顯示
完成一次操作后返回
對(duì)IC卡讀/寫
圖3-1 系統(tǒng)主程序流程圖
開機(jī)后,系統(tǒng)處于待機(jī)的狀態(tài),不斷的查詢P3.2腳的電平,當(dāng)有卡插入讀寫器卡座的時(shí)候,P3.2腳變?yōu)楦唠娖剑@時(shí),單片機(jī)檢測(cè)到P3.2腳高電平信號(hào)時(shí),說明有卡擦入,在判斷插入的卡為有效卡后,就開始對(duì)IC卡進(jìn)行操作。完成一次操作后返回。
3.2 各部分程序設(shè)計(jì)
3.2.1 LED顯示器程序設(shè)計(jì)
本設(shè)計(jì)用到的是動(dòng)態(tài)顯示,發(fā)送數(shù)據(jù)的方式是移位發(fā)送的。系統(tǒng)給R3單元附數(shù)字8,代表要發(fā)送8位數(shù)字,然后移位發(fā)送,發(fā)送完畢后,由COM口進(jìn)行片選,最后顯示出來,程序流程圖如圖3-2所示。
R3→8
移位發(fā)送
R3=0?
片選
返 回
圖3-2 顯示器程序流程圖
3.2.2 鍵盤程序設(shè)計(jì)
鍵盤一共有0~9十個(gè)數(shù)字鍵,還有6個(gè)功能鍵分別是確認(rèn)鍵,取消鍵,查詢鍵,繳費(fèi)鍵,存款鍵,退格鍵。
確認(rèn)子程序:確定繳費(fèi)和存款操作(用B判斷)并寫入顯示緩沖區(qū)和IC卡中。
取消子程序:清除輸入數(shù)據(jù)緩沖區(qū),并返回INT0。
查詢子程序:查詢IC卡中的數(shù)據(jù),然后將IC卡中數(shù)據(jù)賦給顯示緩沖區(qū),并返回INT0。
退格子程序:緩沖區(qū)數(shù)據(jù)向后移一位(采用寄存器RX實(shí)現(xiàn))。
下圖3-3是鍵盤程序的流程圖。
確認(rèn)子程序
取消子程序
查詢子程序
繳費(fèi)子程序
存款子程序
退格子程序
確認(rèn)鍵
取消鍵
查詢鍵
繳費(fèi)鍵
存款鍵
退格鍵
有按鍵
讀卡并顯示
圖3-3 鍵盤程序流程圖
3.3 系統(tǒng)總體程序設(shè)計(jì)
在單片機(jī)開始工作之后,它不停的檢測(cè)P3.2口,P3.2口為高電平的時(shí)候說明沒有卡插入,當(dāng)卡插入后,P3.2口被置為低電平,這時(shí)首先檢查插入的卡是否是有效的卡,
如果是無效的卡程序返回上一級(jí)狀態(tài),插入的卡為有效卡時(shí),首先讀取卡中的信息,并在顯示器上顯示出來,用戶這時(shí)就可以通過鍵盤和顯示器對(duì)卡進(jìn)行操作。
在有按鍵按下后系統(tǒng)將掃描具體是哪個(gè)按鍵,然后調(diào)用出此按鍵的子程序,對(duì)卡進(jìn)行操作,想要對(duì)卡進(jìn)行哪種操作,就按下與其相對(duì)應(yīng)的功能鍵,當(dāng)對(duì)IC卡進(jìn)行繳費(fèi)或存款的操作時(shí),在輸入想要繳費(fèi)的數(shù)值或存款的數(shù)值后需要按下確認(rèn)鍵進(jìn)行確認(rèn)此次操作,顯示器顯示出操作的結(jié)果,就完成了一次操作。然后程序?qū)?huì)到上一級(jí),等待下一次對(duì)卡將要進(jìn)行的操作,如果沒有鍵按下,系統(tǒng)將繼續(xù)掃描,顯示器這時(shí)顯示的是一開始就卡中讀取的信息。下面是系統(tǒng)程序的流程圖。
開始
初始化
有插卡?
卡有效?
顯示卡號(hào)并提示PIN
讀卡上信息并傳送和顯示
有卡?
有按鍵?
取消子程序
查詢子程序
退格子程序
繳費(fèi)子程序
存款子程序
有按鍵?
取消鍵
查詢鍵
退格鍵
繳費(fèi)鍵
存款鍵
確認(rèn)鍵
確認(rèn)子程序
圖3-4 系統(tǒng)總體程序流程圖
步進(jìn)電機(jī)式溫度表的設(shè)計(jì)
本方案設(shè)計(jì)出的步進(jìn)電機(jī)式溫度表其溫度傳感電路、顯示系統(tǒng)均與方案一相同,唯一不同的便是單片機(jī)控制步進(jìn)電機(jī)系統(tǒng)的設(shè)計(jì),下面對(duì)此系統(tǒng)做重點(diǎn)介紹。
圖2-6 單片機(jī)控制步進(jìn)電機(jī)系統(tǒng)
圖2-6便是本方案中的單片機(jī)控制步進(jìn)電機(jī)系統(tǒng)原理框圖,從圖可見,本系統(tǒng)采用同頻PWM驅(qū)動(dòng)器來驅(qū)動(dòng)步進(jìn)電機(jī)運(yùn)轉(zhuǎn),PWM控制技術(shù)是利用半導(dǎo)體開關(guān)器件的導(dǎo)通與關(guān)斷把直流電壓變成電壓脈沖列,并通過控制電壓脈沖寬度或周期以達(dá)到變壓目的,或者控制電壓脈沖寬度和脈沖列的周期以達(dá)到變壓變頻目的的一種控制技術(shù)。為了實(shí)現(xiàn)高頻運(yùn)行,PWM驅(qū)動(dòng)電路工作于斬波控制狀態(tài)。斬波驅(qū)動(dòng)可使繞組電流僅在給定值的極小范圍內(nèi)變化,電流波形近似于矩形波,使電機(jī)高頻輸出力矩增大。
單片機(jī)的輸出接口與驅(qū)動(dòng)器的CP相連,采用定時(shí)器/計(jì)數(shù)器T0編制程序產(chǎn)生高頻方波脈沖作為電機(jī)高頻運(yùn)行時(shí)驅(qū)動(dòng)器的時(shí)鐘斬波信號(hào);編制程序產(chǎn)生低頻方波脈沖,作為電機(jī)低頻運(yùn)行時(shí)驅(qū)動(dòng)器的控制信號(hào),突破了以往用硬件產(chǎn)生方波脈沖的方法,充分利用了單片機(jī)軟件資源。
本方案用軟件設(shè)置各鍵功能,每個(gè)鍵代表電機(jī)的某種狀態(tài),通過不同的鍵實(shí)現(xiàn)電機(jī)各種運(yùn)行狀態(tài)的控制。
本設(shè)計(jì)方案的最大特點(diǎn)是同頻PWM驅(qū)動(dòng)器的使用,使得電源效率提高,但由于采用斬波驅(qū)動(dòng),控制精度不高。
3.1溫度傳感模塊設(shè)計(jì)
3.1.1 芯片的選取及在本設(shè)計(jì)中的應(yīng)用
傳統(tǒng)的車載步進(jìn)電機(jī)式溫度表系統(tǒng)中,對(duì)溫度信號(hào)的感應(yīng)、轉(zhuǎn)換一般采用溫度傳感器和A/D轉(zhuǎn)換器相結(jié)合的方法,這種方法所設(shè)計(jì)出的溫度傳感電路精度不高,無法滿足現(xiàn)代工業(yè)的需要。隨著科學(xué)技術(shù)的發(fā)展,出現(xiàn)了大量集成芯片,這些芯片的使用,使得硬件電路變的相對(duì)簡(jiǎn)單,且易編程,逐漸代替了傳統(tǒng)所使用的溫度傳感電路。本設(shè)計(jì)考慮到現(xiàn)代工業(yè)的需求,選用新型傳感芯片DS18B20用于溫度的感應(yīng)、轉(zhuǎn)換,構(gòu)成溫度傳感模塊。以下便對(duì)本次所設(shè)計(jì)的溫度傳感模塊做詳細(xì)介紹。
在介紹溫度傳感模塊之前,先對(duì)此模塊的核心:DS18B20做一些介紹。
DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度傳感器,具有3引腳TO-92小體積封裝形式;溫度測(cè)量范圍為-55℃~+125℃,本設(shè)計(jì)中的溫度測(cè)量范圍為0~120℃??删幊虨?位~12位A/D轉(zhuǎn)換精度,測(cè)溫分辨率可達(dá)0.0625℃,被測(cè)溫度用符號(hào)擴(kuò)展的16位數(shù)字量方式串行輸出;其工作電源既可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生。
DS18B20內(nèi)部結(jié)構(gòu)如圖3-1所示,主要由4部分組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。
其中,DS18B20中的溫度傳感器完成對(duì)溫度的測(cè)量,用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。
圖3-1 DS18B20的內(nèi)部結(jié)構(gòu)
高低溫報(bào)警觸發(fā)器TH和TL、配置寄存器均由一個(gè)字節(jié)的EEPROM組成,使用一個(gè)存儲(chǔ)器功能命令可對(duì)TH、TL或配置寄存器寫入。其中配置寄存器的格式如下: 0、 R1 、R0、MSBLSB,R1、R0決定溫度轉(zhuǎn)換的精度位數(shù):R1R0=“00”,9位精度,最大轉(zhuǎn)換時(shí)間為93.75ms;R1R0=“01”,10位精度,最大轉(zhuǎn)換時(shí)間為187.5ms;R1R0=“10”,11位精度,最大轉(zhuǎn)換時(shí)間為375ms;R1R0=“11”,12位精度,最大轉(zhuǎn)換時(shí)間為750ms;未編程時(shí)默認(rèn)為12位精度。
高速暫存器是一個(gè)9字節(jié)的存儲(chǔ)器。開始兩個(gè)字節(jié)包含被測(cè)溫度的數(shù)字量信息;第3、4、5字節(jié)分別是TH、TL、配置寄存器的臨時(shí)拷貝,每一次上電復(fù)位時(shí)被刷新;第6、7、8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個(gè)字節(jié)的CRC碼,可用來保證通信正確。
3.1.2電路設(shè)計(jì)
DS18B20與微處理器的接口設(shè)計(jì)有兩種:寄生電源工作方式和外接電源工作方式,在本設(shè)計(jì)中,采用外接電源工作方式,其連接圖如下圖所示。
圖3-2 DS18B20與單片機(jī)接口電路
在本設(shè)計(jì)中,DS18B20作為溫度傳感模塊的核心,實(shí)時(shí)感應(yīng)、轉(zhuǎn)換溫度,供給單片機(jī)控制模塊數(shù)字量,選用單片機(jī)的P3.0口用于同DS18B20進(jìn)行數(shù)據(jù)傳輸。P3.0口為單片機(jī)的串行數(shù)據(jù)接收口,從DS18B20輸出的數(shù)字信號(hào)通過此引腳進(jìn)入單片機(jī),進(jìn)而通過兩次輸入值的差值大小控制步進(jìn)電機(jī)正轉(zhuǎn)、反轉(zhuǎn)。
3.3 步進(jìn)電機(jī)驅(qū)動(dòng)模塊設(shè)計(jì)
3.3.1 步進(jìn)電機(jī)的選型及在本設(shè)計(jì)中的應(yīng)用
步進(jìn)電機(jī)是微特電機(jī)的一種,它是將電脈沖信號(hào)轉(zhuǎn)換成相應(yīng)的角位
收藏