5.1 模擬量與數(shù)字量概述
????????模擬量 數(shù)字量 模/數(shù)轉(zhuǎn)換(A/D, Analog to Digital)數(shù)/模轉(zhuǎn)換(D / A, Digital to Analog)
5.2 A/D轉(zhuǎn)換原理及參數(shù)指標
????????在A/D轉(zhuǎn)換器中,由于輸入的模擬信號在時間上是連續(xù)的,而輸出的數(shù)字信號是離散的,因此在A/D轉(zhuǎn)換器轉(zhuǎn)換時必須在一系列選定的瞬間(時間坐標軸上一點)對輸入的模擬信號采樣,然后再將這些采樣值轉(zhuǎn)換為數(shù)字量。因此一般的A/D轉(zhuǎn)換過程通過采樣、量化和編碼三個步驟完成的,即首先對輸入的模擬電壓信號采樣,采樣結(jié)束后進入保持時間,在這段時間將采樣的電壓量轉(zhuǎn)化為數(shù)字量,并按一定的編碼形式給出轉(zhuǎn)換結(jié)果,然后開始下一次采樣。如框圖所示:
1. 采樣定理
?????? 為正確無誤地用采樣信號vs表示模擬信號vI,必須滿足采樣定理:
式中, 為采樣頻率, 為輸入信號vI的最高頻率分量的頻率。
????????在滿足采樣定理的條件下,可以用一個低通濾波器將信號vs還原為vI,這個低通濾波器的電壓傳輸系數(shù) 在低于 的范圍內(nèi)應保持不變,而在 以前應迅速下降為零。因此,采樣定理規(guī)定了AD 轉(zhuǎn)換的頻率下限。
?
因此,AD轉(zhuǎn)換器工作時的采樣頻率至少滿足 。采樣頻率提高以后,留給 AD 轉(zhuǎn)換器每次進行轉(zhuǎn)換的時間也相應縮短了,則要求轉(zhuǎn)換電路必須具備更快的工作速度。因此,不能無限制地提高采樣頻率,通常取 已經(jīng)能夠滿足要求。因為每次把采樣電壓轉(zhuǎn)換為相應的數(shù)字量都需要一定的時間,所以在每次采樣以后,必須把采樣電壓保持一段時間。可見,進行 AD 轉(zhuǎn)換時所用的輸入電壓,實際上是每次采樣結(jié)束時的vI值。
????????有關信號采樣相關的理論分析詳見《信號與系統(tǒng)》一書第七章內(nèi)容()?
2. 量化與編碼
?????????量化 量化誤差 用不同的劃分方法可以得到不同的量化誤差
?補充知識:采樣電路
(1)電路組成及工作原理:(N溝道MOS管T作為采樣開關)
(2)改進電路及工作原理(LE198)
3. 直接A/D轉(zhuǎn)換器
????????直接A/D轉(zhuǎn)換器能把輸入的模擬電壓直接轉(zhuǎn)換成輸出的數(shù)字量而不需要經(jīng)過中間變量,常用的電路主要有并行比較型和反饋比較型。
(1)并行比較型A/D轉(zhuǎn)換器
????????三位并行比較型 A/D 轉(zhuǎn)換原理電路如圖所示,它由電壓比較器、寄存器和代碼轉(zhuǎn)換器三部分組成。電壓比較器中量化電平的劃分采用之前所述的方式,用電阻鏈把參考電壓 VREF分壓,得到從1/15VREF~13/15VREF之間7個比較電平,量化單位△=2/15VREF。然后,把這7個比較電平分別接到7個比較器~C,的輸入端作為比較基準。同時將要輸入的模擬電壓同時加到每個比較器的另一個輸入端上,與這7個比較基準進行比較。
????????單片集成并行比較型 AD轉(zhuǎn)換器的產(chǎn)品較多,如AD公司的AD9012(8位)、AD9002(8位)AD9020(10位)等。
并行 AD 轉(zhuǎn)換器特點:
① 由于轉(zhuǎn)換是并行的,其轉(zhuǎn)換時間只受比較器、觸發(fā)器和編碼電路延遲時間限制,因此轉(zhuǎn)換速度快;
② 隨著分辨率的提高,元件數(shù)目(電壓比較器和觸發(fā)器等)要按幾何級數(shù)增加。一個n位轉(zhuǎn)換器,所用的比較器個數(shù)為 2n-1,如8位的并行 AD 轉(zhuǎn)換器就需要 28-1=255 個比較器。由于位數(shù)愈多,電路愈復雜,因此制成分辨率較高的集成并行 AD 轉(zhuǎn)換器是比較困難的;
③ 使用這種含有寄存器的并行 A/D 轉(zhuǎn)換電路時,可以不用附加采樣-保持電路,因為比較器和寄存器這兩部分也兼有采樣-保持功能,這也是該電路的一個優(yōu)點。
(2)反饋比較型A/D轉(zhuǎn)換器
????????原理:取一個數(shù)字量加到 D/A 轉(zhuǎn)換器上,得到一個對應的輸出模擬電壓,將這個模擬電壓和輸入的模擬電壓信號比較,如果兩者不相等,則調(diào)整所取的數(shù)字量,直到兩個模擬電壓相等為止,最后所取的這個數(shù)字量就是所求的轉(zhuǎn)換結(jié)果。
????????在反饋比較型 A/D 轉(zhuǎn)換器中經(jīng)常采用的有計數(shù)型和逐次比較型兩種方案。
(a)計數(shù)型 A/D 轉(zhuǎn)換器
????????下圖為計數(shù)型 A/D 轉(zhuǎn)換器原理框圖。轉(zhuǎn)換電路由比較器C、D/A 轉(zhuǎn)換器、計數(shù)器、脈沖源、控制門G 以及輸出寄存器等幾部分組成:
????????轉(zhuǎn)換開始前先用復位信號將計數(shù)器置0,而且轉(zhuǎn)換控制信號應停留在vL=0的狀態(tài),這時門G被封鎖,計數(shù)器不工作。計數(shù)器加給 D/A 轉(zhuǎn)換器的是全0信號,所以 D/A 轉(zhuǎn)換器輸出的模擬電壓vo=0。如果為正電壓信號,轉(zhuǎn)換控制信號vL=1,比較器的輸出電壓為1,則計數(shù)器開始計數(shù)工作,DAC輸出的逐漸升高直至等于(或大于)vI,比較器的輸出電壓為0,比較完成D/A的全部位數(shù)。
????????因為在轉(zhuǎn)換過程中計數(shù)器中的數(shù)字不停地變化,所以不宜將計數(shù)器的狀態(tài)直接作為輸出信號,為此在輸出端設置了輸出寄存器,在每次轉(zhuǎn)換完成以后,用轉(zhuǎn)換控制信號的下降沿將計數(shù)器輸出的數(shù)字置入輸出寄存器中,而以寄存器的狀態(tài)作為最終的輸出信號。這個方案的明顯問題是轉(zhuǎn)換時間長,當輸出為n位二進制數(shù)碼時,最長的轉(zhuǎn)換時間可達到2n-1倍的時鐘信號周期,因此這種方法只能用在對轉(zhuǎn)換速度要求不高的場合。然而由于它的電路非常簡單,所以在對轉(zhuǎn)換速度沒有嚴格要求時仍是一種可取的方案。
(b)逐次比較型A/D轉(zhuǎn)換器
????????逐次逼近型A/D轉(zhuǎn)換器的工作原理可以用如下所示的框圖來說明。這種轉(zhuǎn)換器的電路包含比較器C、D/A轉(zhuǎn)換器、寄存器、時鐘脈沖源和控制邏輯等5個組成部分。
????????轉(zhuǎn)換開始前先將寄存器清零,所以加給D/A轉(zhuǎn)換器的數(shù)字量也是全0。轉(zhuǎn)換控制信號變?yōu)楦唠娖綍r開始轉(zhuǎn)換,時鐘信號首先將寄存器的最高位置成1,使寄存器的輸出為100…00。這個數(shù)字量被D/A轉(zhuǎn)換器轉(zhuǎn)換成相應的模擬電壓vo,并送到比較器與輸入信號,進行比較。如果vo>vI,說明數(shù)字過大了,則這個1應去掉;如果vo<vI,說明數(shù)字還不夠大,這個1應予保留。然后,再按同樣的方法將次高位置1,并比較“與”的大小以確定這一位的1是否應當保留這樣逐位比較下去,直到最低位比較完為止。這時寄存器里所存的數(shù)碼就是所求的輸出數(shù)字量。
????????三位逐次比較型A/D轉(zhuǎn)換器的邏輯電路:
????????對于n位輸出的A/D轉(zhuǎn)換器,完成一次轉(zhuǎn)換所需時間為n+2個時鐘信號周期。因此其轉(zhuǎn)換速度要比并聯(lián)比較型A/D轉(zhuǎn)換器低,然而在輸出位數(shù)較多時,逐次逼近型A/D轉(zhuǎn)換器的電路規(guī)模要比并聯(lián)比較型小很多。
????????目前逐次逼近型A/D轉(zhuǎn)換器產(chǎn)品的輸出多為8至12位,轉(zhuǎn)換時間多在幾至幾十微秒的范圍內(nèi)。個別高速產(chǎn)品的轉(zhuǎn)換時間甚至能縮短至1ms以內(nèi)。例如,12位逐次逼近型A/D轉(zhuǎn)換器AD7472的最高取樣速率可達1.75MSPS,完成一次轉(zhuǎn)換的時間不到1s。
????????其他集成逐次比較型 AD 轉(zhuǎn)換器有 ADC0804/0808/0809系列(8)位、AD575(10位)、AD574A(12位)等。
(3)間接A/D轉(zhuǎn)換器
????????目前使用的間接 AD轉(zhuǎn)換器多半都屬于電壓-時間變換型(V-T 變換型)和電壓-頻率變換型(V-F 變換型)兩類。
????????在 V-T變換型 AD 轉(zhuǎn)換器中,首先把輸入的模擬電壓信號轉(zhuǎn)換成與之成正比的時間寬度信號,然后在這個時間寬度里對固定頻率的時鐘脈沖計數(shù),計數(shù)的結(jié)果就是正比于輸入模擬電壓的數(shù)字信號。
????????在 V-F 變換型 AD 轉(zhuǎn)換器中,則首先把輸入的模擬電壓信號轉(zhuǎn)換成與之成正比的頻率信號,然后在一個固定的時間間隔里對得到的頻率信號計數(shù),所得到的結(jié)果就是正比于輸入模擬電壓的數(shù)字量。
????????下面首先展示的是V-T變換型 A/D轉(zhuǎn)換器結(jié)構(gòu)框圖:
????????下面首先展示的是V-F變換型 A/D轉(zhuǎn)換器結(jié)構(gòu)框圖:
(4)A/D轉(zhuǎn)換器的參數(shù)指標
①分辨率——說明A/D轉(zhuǎn)換器對輸入信號的分辨能力
????????AD 轉(zhuǎn)換器的分辨率以輸出二進制數(shù)的位數(shù)表示。從理論上講,n位輸出的 AD 轉(zhuǎn)換器能區(qū)分 2n個不同等級的輸入模擬電壓,能區(qū)分輸入電壓的最小值為滿量程輸入的1/2n。在最大輸入電壓一定時,輸出位數(shù)愈多,量化單位愈小,分辨率愈高。常用的有8、10、12、16、24、32 位等。假設第一位用來表示正負號,則其余位數(shù)表示信號的幅值。
②轉(zhuǎn)換誤差——表示A/D轉(zhuǎn)換器實際輸出的數(shù)字量與理論輸出數(shù)字量之間的差別
????????在理想情況下,輸入模擬信號所有轉(zhuǎn)換點應當在一條直線上,但實際的特性不能做到輸入模擬信號所有轉(zhuǎn)換點在一條直線上。轉(zhuǎn)換誤差是指實際的轉(zhuǎn)換點偏離理想特性的誤差,般用最低有效位來表示。例如,給出相對誤差≤±LSB/2,這就表明實際輸出的數(shù)字量和理論上應得到的輸出數(shù)字量之間的誤差小于最低位的一半。注意,在實際使用中當使用環(huán)境發(fā)生變化時,轉(zhuǎn)換誤差也將發(fā)生變化。
③轉(zhuǎn)換精度——A/D轉(zhuǎn)換的最大量化誤差和模擬部分精度的共同體現(xiàn)
????????具有某種分辨率的轉(zhuǎn)換器在量化過程中由于采用了四舍五入的方法,因此最大量化誤差應為分辨率數(shù)值的一半AD 轉(zhuǎn)換器數(shù)字轉(zhuǎn)換的精度由最大量化誤差決定。實際上,許多轉(zhuǎn)換器末位數(shù)字并不可靠,實際精度還要低一些。
????????由于含有 AD 轉(zhuǎn)換器的模/數(shù)轉(zhuǎn)換模塊通常包括有模擬處理和數(shù)字轉(zhuǎn)換兩部分,因此整個轉(zhuǎn)換器的精度還應考慮模擬處理部分(如積分器、比較器等)的誤差。一般轉(zhuǎn)換器的模擬處理誤差與數(shù)字轉(zhuǎn)換誤差應盡量處在同一數(shù)量級,總誤差則是這些誤差的累加和。
④轉(zhuǎn)換時間——指A/D轉(zhuǎn)換器從轉(zhuǎn)換控制信號到來開始,到輸出端得到穩(wěn)定的數(shù)字信號所經(jīng)過的時間
????????不同類型的轉(zhuǎn)換器轉(zhuǎn)換速度相差甚遠。其中并行比較A/D轉(zhuǎn)換器轉(zhuǎn)換速度最高,8位二進制輸出的單片集成 A/D 轉(zhuǎn)換器轉(zhuǎn)換時間可達 50ns 以內(nèi)。逐次比較型 A/D 轉(zhuǎn)換器次之,它們多數(shù)轉(zhuǎn)換時間在 10~50us之間,也有達幾百納秒的。間接 A/D 轉(zhuǎn)換器的速度最慢,如雙積分 A/D轉(zhuǎn)換器的轉(zhuǎn)換時間大都在幾十毫秒至幾百毫秒之間。
????????在實際應用中,應從系統(tǒng)數(shù)據(jù)總的位數(shù)、精度要求、輸入模擬信號的范圍及輸入信號極性等方面綜合考慮 A/D 轉(zhuǎn)換器的選用。
小結(jié):
① 不同的 AD 轉(zhuǎn)換方式具有各自的特點,在要求轉(zhuǎn)換速度高的場合,選用并行 AD 轉(zhuǎn)換器;在要求精度高的情況下,可采用雙積分AD 轉(zhuǎn)換器,當然也可選高分辨率的其他形式A/D 轉(zhuǎn)換器,但會增加成本。由于逐次比較型 AD 轉(zhuǎn)換器在一定程度上兼有以上兩種轉(zhuǎn)換器的優(yōu)點,因此得到普遍應用。
②AD 轉(zhuǎn)換器和 D/A 轉(zhuǎn)換器的主要技術(shù)參數(shù)是轉(zhuǎn)換精度和轉(zhuǎn)換速度,在與系統(tǒng)連接后轉(zhuǎn)換器的這兩項指標決定了系統(tǒng)的精度與速度。
5.3 ADC0804工作原理及其實現(xiàn)方法
????????集成 A/D 轉(zhuǎn)換器品種繁多,選用時應綜合考慮各種因素選取集成芯片。一般逐次比較型AD 轉(zhuǎn)換器用得較多,ADC0804 就是這類單片集成 AD 轉(zhuǎn)換器。它采用 CMOS 工藝 20 引腳集成芯片,分辨率為8位,轉(zhuǎn)換時間為100μs,輸入電壓范圍為0~5V。芯片內(nèi)具有三態(tài)輸出數(shù)據(jù)鎖存器,可直接連接在數(shù)據(jù)總線上。下圖左圖為 ADC0804 雙列直插式封裝引腳分布圖,右兩圖為ADC0804 芯片實物圖:
1. 引腳說明:
????????(1)VIN(+)、VIN(-)—兩模擬信號輸入端,用以接收單極性。雙極性和差模輸入信號;
????????(2)DB7~DB0—具有三態(tài)特性數(shù)字信號輸出口;
????????(3)AGBD—模擬信號地;
????????(4)DGND—數(shù)字信號地;
????????注:在用到 A/D和 D/A時,一般這些芯片都提供獨立的模擬地(AGND)和數(shù)字地(DGND)引腳,為了達到精度高,穩(wěn)定性好的目的,最好將所有器件的模擬地和數(shù)字地分別連接,最后將模擬地與數(shù)字地僅在一點相連!
????????(5)CLK—時鐘信號輸入端;
????????(6)CLKR—內(nèi)部時鐘發(fā)生器外接電阻端,與CLK端裝配可由芯片自身產(chǎn)生時鐘脈沖,頻率為1/(1.1RC);
????????(7) —片選信號輸入端,低電平有效, 有效表示A/D轉(zhuǎn)換器被選中,啟動工作;
????????(8) —寫信號輸入,低電平啟動A/D轉(zhuǎn)換;
????????(9) —讀信號輸入,低電平輸出端有效;
????????(10) —A/D轉(zhuǎn)換結(jié)束信號,低電平表示本次轉(zhuǎn)換已經(jīng)完成;
????????(11)VREF/2—參考電平輸入,決定量化單位;
????????(12)VCC—芯片電源5V輸入。
2. 電路分析
????????在ADC0804的芯片手冊中,其典型的接法如下圖所示:
????????TX-1C 實驗板上 ADC0804 外圍電路及與單片機的連接是參照上圖設計的,如下圖所示:
????????TX-1C上A/D外圍電路如下圖所示:
????????A/D 右邊的電位器 Re2 就是用來給 A/D 輸入模擬電壓的。做實驗時,首先要將 AD 左邊的插針 ADIN 用短路帽短路,這樣電位器才與 AD 芯片連接上。設計這個插針的目的是,考慮可能會用 AD 采集實驗板外面的模擬信號,這時直接與該插針連接就可以。編譯代碼下載程序后,可看到數(shù)碼管前三位顯示一個十進制數(shù)字,當擰動電位器時數(shù)字也跟著變化,變化范圍為0~255。
3. 時序分析
????????數(shù)字芯片在操作時首先要分析它的操作時序圖,下圖是ADC0804的啟動轉(zhuǎn)換時序圖:
?????????分析上圖可知, 先為低電平, 隨后置低,經(jīng)過至少tW( )L時間后,拉高,隨后 A/D 轉(zhuǎn)換器被啟動,并且在經(jīng)過(1~8個A/D 時鐘周期+內(nèi)部TC)時間后,模/數(shù)完成轉(zhuǎn)換,轉(zhuǎn)換結(jié)果存入數(shù)據(jù)鎖存器,同時 自動變?yōu)榈碗娖剑ㄖ獑纹瑱C本次轉(zhuǎn)換已結(jié)束。關于幾個時間的大小在芯片手冊中都有說明。
????????對于TX-1C,下圖是ADC0804 讀取數(shù)據(jù)時序圖:
?
????????寫單片機程序啟動 AD 轉(zhuǎn)換時就要遵循上面的時序,由于 TX-1C 實驗板未用中斷讀取 AD 數(shù)據(jù),因此在啟動 AD 轉(zhuǎn)換后,稍等一會時間,然后直接讀取 AD 的數(shù)字輸出口即可。讀取結(jié)束后再啟動一次 A/D 轉(zhuǎn)換,如此循環(huán)下去。
????????分析上圖可知,當變?yōu)榈碗娖胶螅瑢?先置低,接著再將置低,在 置低至少經(jīng)過 tAcc 時間后,數(shù)字輸出口上的數(shù)據(jù)達到穩(wěn)定狀態(tài),此時直接讀取數(shù)字輸出端口數(shù)據(jù)便可得到轉(zhuǎn)換后的數(shù)字信號,讀走數(shù)據(jù)后,馬上將 拉高,然后再將 拉高, 是自動變化的,當RD 置低時間后, 自動拉高,我們不必人為去干涉。上兩圖分別是啟動一次和讀取一次數(shù)據(jù)的時序圖,當我們要連續(xù)轉(zhuǎn)換并且連續(xù)讀取數(shù)據(jù)時,就沒有必要每次都把 置低再拉高因為 是片選信號,置低表示該芯片可被操作或處于能夠正常工作狀態(tài),所以在寫程序時只要一開始將 置低,以后當要啟動轉(zhuǎn)換和讀取數(shù)據(jù)時只需操作 和即可。
4. 程序中面臨的實際問題若干:
(1)根據(jù)A/D轉(zhuǎn)換器的時序圖,在程序中需要用到機器周期延時函數(shù)_nop_(),需要引用#include<intrins.h>庫函數(shù):
?????? 應用舉例:
(2)進入主程序后,首先將 U2鎖存器的輸出口的最高位置低電平,目的是將與之相連的 ADC0804 的CS片選端置低選中,因為本例程專門操作 AD芯片,所以一次選中,以后再不用管它:
????????同時要注意,以后凡是操作U2鎖存器的地方都不要再改變 AD 的CS端,在數(shù)碼管顯示程序中,送出位選信號時,我們始終保持U2鎖存器的最高位為低電平,于是將數(shù)碼管顯示段選部分修改為:
uchar code wela_table[]= //片選數(shù)碼庫
{
0xdf/*最低位*/,0xef,0xf7,0x7b,0x7d,0x7e/*最高位*/ //從右向左數(shù)第一到六位
/*特別地,這里最高位為0x7bde而非0xfbde是由于段選公用U2鎖存器,而AD的CS端需要一直保持低電平不變*/
};
否則,即使后續(xù)程序正確數(shù)碼管將始終顯示255鎖死不會變!
(3)主程序分析:注意分為三次采樣P1口的數(shù)值以保證穩(wěn)定
5. 示例?
????????用單片機控制 ADC0804 進行模數(shù)轉(zhuǎn)換,當擰動實驗板上 A/D 旁邊的電位器Re2 時,在數(shù)碼管的前三位以十進制方式動態(tài)顯示出 AD 轉(zhuǎn)換后的數(shù)字量(8位 AD 轉(zhuǎn)換后數(shù)值在 0~255 變化)。
? ? ? ? 自己改進后的代碼:
#include<reg52.h>
#include<intrins.h> //用到的機器周期延時函數(shù)_nop_()需要用到此庫
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //聲明鎖存器U1的鎖存端
sbit wela=P2^7; //聲明鎖存器U2的鎖存端
sbit adwr=P3^6; //定義A/D的WR端口
sbit adrd=P3^7; //定義A/D的RD端口
uchar code dula_table[]={ //段選數(shù)碼庫
0x3f,0x06,0x5b,0x4f, // 0,1,2,3
0x66,0x6d,0x7d,0x07, //4,5,6,7
0x7f,0x6f,0x77,0x7c, //8,9,10,11
0x39,0x5e,0x79,0x71 //12,13,14,15
};
uchar code wela_table[]= //片選數(shù)碼庫
{
0xdf/*最低位*/,0xef,0xf7,0x7b,0x7d,0x7e/*最高位*/ //從右向左數(shù)第一到六位
/*特別地,這里最高位為0x7bde而非0xfbde是由于段選公用U2鎖存器,而AD的CS端需要一直保持低電平不變*/
};
void main()
{
uchar ge,shi,bai,adval1,adval2,adval3; //a
void init_AD(); //AD轉(zhuǎn)換器初始化函數(shù)
void delayxms(uint xms); //延時函數(shù) ms為單位
void display(uchar num_bai,uchar num_shi,uchar num_ge); //數(shù)碼管顯示函數(shù)
init_AD(); //AD轉(zhuǎn)換器初始化
while(1)
{
P1=0Xff; //讀取P1口前先給其全寫1
adwr=1; //關閉A/D轉(zhuǎn)換
_nop_();
adwr=0; //啟動A/D轉(zhuǎn)換
_nop_();
adwr=1;
adrd=1; //選通ADCS
_nop_();
adrd=0; //AD讀使能
_nop_();
adval1=P1; //讀取賦予P1口的AD數(shù)據(jù)
delayxms(2);
adval2=P1;
delayxms(2);
adval3=P1;
adrd=1;
if((adval1==adval2)&&(adval2==adval3))
{ //計算數(shù)字
bai=adval3/100;//百位
shi=adval3%100/10;//十位
ge=adval3%10;//個位
display(bai,shi,ge);
}
}
}
void init_AD() //AD轉(zhuǎn)換器初始化
{
wela=1;
P0=0x7f; //置CSAD為0,選通ADCS以后不必再管ADCS
wela=0;
delayxms(50);
}
void delayxms(uint xms) //延時函數(shù) ms為單位
{
uint x,y;
for(x=xms;x>0;x--)
for(y=31;y>0;y--); //改進延時為0.5毫秒
}
void display(uchar num_bai,uchar num_shi,uchar num_ge) //數(shù)碼管顯示函數(shù)
{
uint wei; //位選數(shù)字
void wedu(uchar dula_num,uchar wela_num); //數(shù)碼管位選段選函數(shù)
for(wei=3;wei<6;wei++)
{
switch(wei)
{
case 3: wedu(num_ge,wei);break;
case 4: wedu(num_shi,wei);break;
case 5: wedu(num_bai,wei);break;
}
dula=1; //打開U1鎖存端
P0=0x00; //防止最高位數(shù)碼管過亮
dula=0; //關閉U1鎖存端
}
}
void wedu(uchar dula_num,uchar wela_num) //數(shù)碼管位選段選函數(shù)
{
wela=1; //打開U2鎖存端
P0=wela_table[wela_num]; //送入U2鎖存端
wela=0; //關閉U2鎖存端
P0=0xc0; //消影,防止P0殘留電位信號干擾段選
dula=1; //打開U1鎖存端
P0=dula_table[dula_num]; //送入段選信號
dula=0; //關閉U1鎖存端
P0=0xff; //消影,防止P0殘留電位信號干擾片選
delayxms(10);
}
? ? ? ? ?效果:
? ? ? ? ?原書程序主程序部分以及可能面臨的問題:
?
文章來源:http://www.zghlxwxcb.cn/news/detail-837537.html
參考資料:?
[1]?郭天祥. 新概念51單片機C語言教程:入門、提高、開發(fā)、拓展全攻略[M]. 北京: 電子工業(yè)出版社, 2009.文章來源地址http://www.zghlxwxcb.cn/news/detail-837537.html
到了這里,關于(51單片機)第五章-A/D和D/A工作原理-A/D的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!