傳感器課程設(shè)計心得
1、C51編程:C語言在進入main函數(shù)前會有一個對單片機內(nèi)存單元的初始化,另外運用浮點乘除運算時程序龐大,使用循環(huán)加或者循環(huán)減時會大大的減少程序,對于浮點數(shù)的顯示可以將其乘以10的整數(shù)冪(這個乘是人編程時設(shè)定計算的參數(shù)是設(shè)好的,并不需要單片機去計算),這樣就可以將浮點運算轉(zhuǎn)化為整數(shù)運算,進一步簡化程序,對于它的顯示可以在固定位置設(shè)置小數(shù)點(利用或者||,由數(shù)碼管類型決定),這個方法同樣適用于匯編,且可以使匯編更簡單。在涉及到對硬件的控制時,可以使用C語言的賦值語句,根據(jù)外圍硬件的工作時序設(shè)定賦值的順序,不過由于C編譯后的具體指令組成并不清楚,很可能出現(xiàn)意想不到的情況(只是設(shè)想,還需證實),由于C語言對硬件的控制并不是很強,所以可以使用嵌套或調(diào)用匯編的方法,不過這種方法不夠好,可以根據(jù)C生成 SRC文件,對其進行改變,從而變成匯編。用C編程的時候注意不要受匯編的干擾,注意指針的使用(這次用C編寫出錯的一個最重要的原因)
2、AD的使用:一般單片機的時鐘輸出并不能滿足AD的時鐘頻率要求,通常需要進行分頻,利用計數(shù)器(例如74LS192)可以做出分頻器,首先計數(shù)器進制應(yīng)為分頻器分頻數(shù)的二倍,或門(或非門)的一段接分頻數(shù)的輸出端,另一端接計數(shù)器的清除端(MR),這樣門輸出即為分頻后的時鐘頻率。在鎖存通道、啟動AD 轉(zhuǎn)換、允許AD輸出轉(zhuǎn)換值時,在匯編中通常使用MOVX指令,但是由于使用MOVX時WR、RD變化時間是很短的,可能會在數(shù)據(jù)沒有準備好時就已經(jīng)操作了,從而造成數(shù)據(jù)錯誤,也有可能MOVX的電平維持時間不夠長,從而造成并不能使AD進入我們需要的狀態(tài)。解決的辦法是我們按照AD的工作時序,對特定的引腳進行電平變換,即可控制電平的時間,從而保證數(shù)據(jù)傳輸?shù)恼_性。在使用中斷(定時器或者其他)啟動AD轉(zhuǎn)換后,要在盡可能短的時間內(nèi)退出該中斷,因為為了保證對AD的操作不被中斷(中斷后可能不能再繼續(xù)),在對AD進行操作的中斷中不允許其他中斷,這樣我們必須盡快開啟中斷允許并退出中斷,當(dāng)然也可以在啟動AD后打開中斷允許,這樣也可以保證轉(zhuǎn)換值能夠及時被讀取,不過會出現(xiàn)中斷嵌套,可能對程序的運行不利。
3、Keil與proteus的聯(lián)調(diào):使用Keil和proteus聯(lián)調(diào),可以單步運行Keil,通過proteus即可觀察到每一條程序的運行結(jié)果,同樣可以了解到每一句C語言對應(yīng)的匯編以及運行的結(jié)果。
4、單片機控制數(shù)碼管的顯示時,尤其是多個時,要使用驅(qū)動電路,因為數(shù)碼管的驅(qū)動電流一般為10mA,單片機輸出驅(qū)動不夠,驅(qū)動電路可以是三極管,也可以使用專門的數(shù)碼管驅(qū)動芯片,可以減少對單片機資源的占用,例如LM8186,MAX7219等。
5、壓電蜂鳴器的信號輸出阻抗很高,使用一般的信號采集電路并不能將信號采集進來??梢允褂秒姾煞糯笃?,一是輸入阻抗大,二是靈敏度較高,不過由于電荷放大器的頻響較高,如果沒有好的屏蔽措施極容易引進干擾。另一個辦法是,可以使用高輸入阻抗運放接成電壓跟隨器形式,既可以作為前置放大器的輸入端提高輸入阻抗,又可以起到隔離電路的作用。運放可以選用LM102,輸入阻抗高達1012歐姆,不過供電電源為 正負12到15,并不是很好,不過可以選用其他運放,例如CA3130(高達1.5T)等。
6、氣壓表壓指示燈部分是無意中發(fā)現(xiàn)的現(xiàn)象,具體原理還需要進一步找答案
7、還有一點忘了,數(shù)碼管動態(tài)顯示的操作順序:關(guān)地址,賦段碼,打開地址,每個的刷新時間間隔為1ms左右,時間越長,數(shù)碼管亮度越高,不過使用延時時間較長的話,一是可能會閃爍,二是單片機灌電流較大,對單片機不利,這次使用的是400微秒的刷新時間,120歐姆的限流電阻,顯示穩(wěn)定,亮度也好,不過感覺限流電阻小了一些,耗電功率較大。
分頻器相關(guān)文章:分頻器原理 蜂鳴器相關(guān)文章:蜂鳴器原理
評論