㈠ 單片機(型號89C52)之簡易數字電壓表的設計
這個是最基本的,你首先要把他分開,AD采樣,和數值顯示兩部分,其實你可以先讀懂C的程序,用Keil編譯器編譯,然後在Keil編譯器里就可以看到匯編了,下面給你個參看,運行條件為8051單片機,12M晶振,ADC0808,共陰數碼管。
;********************************************************
;########################################################
OE BIT P3.0 ;ADC0808的OE端
EOC BIT P3.1 ;ADC0808的EOC端
ST BIT P3.2 ;ADC0808的START和ALE端
ADD0 BIT P3.4 ;ADC0808的模擬輸入選擇端
ADD1 BIT P3.5
ADD2 BIT P3.6
LED_0 DATA 30H ;顯示緩沖區
LED_1 DATA 31H
LED_2 DATA 32H
LED_3 DATA 33H
ADC DATA 34H ;存放轉換後的數據
;//////主程序開始////////////////////////////////////////
ORG 0000H
AJMP START
ORG 0030H
;------初始化-----------------------------------
START: MOV SP,#60H ;設置堆棧
MOV LED_0,#00H ;清空顯示緩沖區
MOV LED_1,#00H
MOV LED_2,#00H
MOV LED_3,#00H
MOV DPTR,#TABLE ;送字型碼表首地址
SETB ADD0
SETB ADD1
CLR ADD2 ;選擇ADC0808的通道3
;------ADC0808轉換------------------------------
WAIT: CLR ST
SETB ST
CLR ST ;啟動轉換
JNB EOC,$ ;等待轉換結束
SETB OE ;允許輸出
MOV ADC,P1 ;暫存轉換結果
CLR OE ;關閉輸出
;------數據處理,已備顯示------------------------
MOV A,ADC ;將AD轉換結果轉換成BCD碼
MOV B,#0C3H ;乘以19.5MV
MUL AB
MOV R7,A
MOV R6,B
HB2: CLR A ;BCD碼初始化
CLR C
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉換雙位元組十六進制整數
HB3: MOV A,R7 ;從高端移出待轉換數的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD碼帶進位自身相加,相當於乘2
ADDC A,R5
DA A ;十進制調整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙位元組十六進制數的萬位數不超過6,不用調整
DJNZ R2,HB3
MOV A,R5
SWAP A
ANL A,#0FH
MOV LED_0,A
MOV A,R4
ANL A,#0FH
MOV LED_1,A
MOV A,R4
SWAP A
ANL A,#0FH
MOV LED_2,A
MOV A,R3
ANL A,#0FH
MOV LED_3,A
LCALL DISP ;調用顯示子程序
AJMP WAIT
;//////數碼管顯示子程序///////////////////////////////////////////////
DISP: MOV A,LED_0 ;數碼顯示子程序
MOVC A,@A+DPTR
CLR P2.3
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,LED_1
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY
SETB P2.2
MOV A,LED_2
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
LCALL DELAY
SETB P2.1
MOV A,LED_3
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A
SETB P0.7
LCALL DELAY
SETB P2.0
RET
;//////延時子程序////////////////////////////////////
DELAY: MOV R6,#0AH ;延時5毫秒
D1: MOV R7,#0FAH
DJNZ R7,$
DJNZ R6,D1
RET
;//////數碼管字形碼表/////////////////////////////////
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
;/////程序結束////////////////////////////////////////
END
㈡ 畢設:基於單片機的數字電壓表的設計
2路3相應該算6路
0.5%的話只要8bit就夠了
找一個帶ad的51
max232
串口通信
c8051f320也可以
奢侈了點
輸入用電阻分壓
加運放
就可以了
還有幾個按鍵和數碼管顯示電路
不是很復雜
㈢ 怎樣用單片機設計多路數字電壓表
單片機設計多路數字電壓表,主要是設計採集,將輸入的電壓量(模擬信號)轉換成數字量(二進制),通常老的方案都是用51單片機+AD轉換晶元。AD轉換晶元的位數就決定了你的解析度,你的是5V/0.019=263,轉換成為二進制數8位AD晶元可能精度不夠,要選用10位AD晶元,最小解析度可以達到0.0048V,如果按照經典老方案來做,你的成本會比較高51單片機6元+10位AD晶元20元。建議你採用帶有51內核並自帶AD功能的單片機,如STC5412AD,價格只要13-14元就可以了,而且編程方便,不需要增加外圍電路。因為STC5412AD晶元IO口比較少,只有23個IO口,我數碼管顯示和鍵盤掃描用的ZLG7289,我自己做出來一個,效果很好,電壓能精確到0.001V顯示。我只了1路顯示,STC5412AD單片機還有其他AD口可以用,一塊晶元可以做出4路電壓採集來。多路的話建議用多路開關進行切換就好了,否則成本太高。
㈣ 單片機設計製作數字電壓表
3.系統板上硬體連線
a)把「單片機系統」區域中的P1.0-P1.7與「動態數碼顯示」區域中的ABCDEFGH埠用8芯排線連接。
b)把「單片機系統」區域中的P2.0-P2.7與「動態數碼顯示」區域中的S1S2S3S4S5S6S7S8埠用8芯排線連接。
c)把「單片機系統」區域中的P3.0與「模數轉換模塊」區域中的ST端子用導線相連接。
d)把「單片機系統」區域中的P3.1與「模數轉換模塊」區域中的OE端子用導線相連接。
e)把「單片機系統」區域中的P3.2與「模數轉換模塊」區域中的EOC端子用導線相連接。
f)把「單片機系統」區域中的P3.3與「模數轉換模塊」區域中的CLK端子用導線相連接。
g)把「模數轉換模塊」區域中的A2A1A0端子用導線連接到「把其他形式的能轉換成電能的裝置叫做電源">電源模塊」區域中的GND端子上。
h)把「模數轉換模塊」區域中的IN0端子用導線連接到「三路可調電壓">電壓模塊」區域中的VR1端子上。
i)把「單片機系統」區域中的P0.0-P0.7用8芯排線連接到「模數轉換模塊」區域中的D0D1D2D3D4D5D6D7端子上。
4.程序設計內容
i.由於ADC0809在進行轉換為相應的數宇量的電路">A/D轉換時需要有CLK信號,而此時的ADC0809的CLK是接在AT89S51單片機的P3.3埠上,也就是要求從P3.3輸出CLK信號供ADC0809使用。因此產生CLK信號的方法就得用軟體來產生了。
ii.由於ADC0809的參考電壓VREF=VCC">CC,所以轉換之後的數據要經過數據處理,在數碼管">數碼管上顯示出電壓值。實際顯示的電壓值(D/256*VREF)
5.匯編源程序
(略)
6.C語言源程序
#include<AT89X52.H>
unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};
unsignedchardispcount;
unsignedchargetdata;
unsignedinttemp;
unsignedchari;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
voidmain(void)
{
ST=0;
OE=0;
ET0=1;
ET1=1;
EA=1;
TMOD=0x12;
TH0=216;
TL0=216;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ST=1;
ST=0;
while(1)
{
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*235;
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf=10;
dispbuf=10;
dispbuf=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf[i]=temp%10;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
ST=1;
ST=0;
}
}
}
voidt0(void)interrupt1using0
{
CLK=~CLK;
}
voidt1(void)interrupt3using0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
{
P1=P1|0x80;
}
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
㈤ 用單片機設計一個量程自動切換的數字電壓表
參考資料: 摘要電學參數測量技術涉及范圍廣,特別是微電壓、微電流、高電壓以及待測信號強弱相差極大的情況下,既要保證弱信號的測量精度又要兼顧強信號的測量范圍,在技術上有一定的難度。傳統的低成本儀表在測量電壓、電阻時都採用手動選擇檔位的方法來轉換量程。在使用中,當忘記轉換檔位時,會造成儀表測量精度下降或損壞。 現代電子測量對系統的精度要求越來越高且智能化程度也越來越高。全量程無檔自動量程轉換電壓表和電阻表是在保證測量精度不下降的前提條件下省去手動轉換量程的工作,得到了廣泛應用。本文介紹了一種基於AT89S52單片機的智能多用表。該表能在單片機的控制下完成直流電壓、電阻和直流電流的測量。測量電流部分採用了簡單的I/V轉換電路完成測試;測量電壓部分結合模擬開關CD4051和運算放大器OP07構成程式控制放大器,實現了自動量程轉換;測量電阻部分也由模擬開關CD4051和運算放大器OP07相結合,在單片機控制下完成了自動量程轉換。電流、電壓和電阻的最終測量信號都在單片機的控制下由12位A/D轉換器TLC2543進行採集,採集的信號經單片機數據處理後通過LCD(12864)顯示出來,測量結果還可以由帶有串列EEPROM的CPU存儲器和監控器的X25045進行多個數據保存。關鍵詞:TLC2543 自動量程轉換 程式控制增益放大器 電壓電阻電流目錄摘要1Abstract 2第一章緒論 51. 1概述 51. 2智能儀器/儀表國內外發展概況 51. 3課題研究目的及意義 6第二章系統結構及功能介紹 82. 1系統功能和性能指標 82. 1. 1儀表功能 82. 1. 2性能指標 82. 1. 3本機特色 82. 1. 4系統使用說明 92. 2系統工作原理概述 9第三章方案設計與論證 113. 1量程選擇的設計與論證 11
㈥ 基於單片機的數字電壓表設計 (請不要完成抄襲)
我給你看看我以前做過的數字電壓表,匯編的
COM EQU 50H ;指令寄存器
DAT EQU 51H ;數據寄存器
RS EQU P2.1 ;LCD寄存器選擇信號
RW EQU P2.2 ;LCD讀/寫選擇信號
E EQU P2.3 ;LCD使能信號
ORG 0000H
LJMP MAIN ;主程序入口地址
ORG 000BH
LJMP BT0 ;T0中斷入口
ORG 0030H ;主程序,初始化
MAIN:
MOV SP,#60H
LCALL INT
MOV 30H,#30H ;電壓整數位
MOV 31H,#02EH ;小數點位
MOV 32H,#30H ;小數個位
MOV 33H,#30H ;小數十位
MOV 34H,#30H ;小數百位
MOV 35H,#56H ;字元"V"
MOV R7,#30H
LCALL STR0 ;顯示字元串0
LCALL DELAY
LCALL STR1 ;顯示字元串1
LCALL DELAY
LCALL N2 ;顯示Voltage=0.000V
;***********定時器初始化程序***********
MOV TMOD,#00H ;定時器T0設為方式0
MOV TH0,#00H ;裝入定時常數定時100us
MOV TL0,#00H
SETB TR0 ;啟動T0
MOV 24H,#08H;裝入T0中斷次數
MOV IE,#82H ;開中斷
LP:
MOV R7,#30H ;顯示緩沖區首地址
LCALL DISPLY
SJMP LP ;循環顯示
LED1:CLR P3.0
RET
DISPLY: ;LCD顯示子程序
MOV COM,#0CAH
LCALL PR1
MOV DAT,30H
LCALL PR2
MOV DAT,31H
LCALL PR2
MOV DAT,32H
LCALL PR2
MOV DAT,33H
LCALL PR2
MOV DAT,34H
LCALL PR2
MOV DAT,35H
LCALL PR2
RET
STR0:
MOV COM,#01H
LCALL PR1
MOV COM,#06H
LCALL PR1
MOV COM,#090H ;設置DDRAM地址
LCALL PR1 ;調寫指令代碼子程序
MOV DPTR,#TAB4
MOV R2,#16
MOV R3,#00H
WRIN0:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN0
MOV COM,#0D0H
LCALL PR1
MOV DPTR,#TAB5
MOV R2,#16
MOV R3,#00H
WRIN1:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN1
MOV R3,#10H
ZUOYI:
MOV COM,#18H
LCALL PRX
DJNZ R3,ZUOYI
LCALL DELAY00
LCALL DELAY00
LCALL DELAY00
LCALL DELAY00
RET
RET
STR1:
MOV COM,#01H ;LCD清0命令
LCALL PR1 ;調寫指令代碼子程序
MOV COM,#06H ;輸入方式命令,游標右移
LCALL PR1 ;調寫指令代碼子程序
MOV COM,#40H
LCALL PR1
MOV R5,#20H
MOV DPTR,#ZI
MOV R4,#0
LOOP1:MOV A,R4
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R4
DJNZ R5,LOOP1
MOV COM,#80H
LCALL PR1
MOV DPTR,#TAB2
MOV A,#00H
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#01H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#02H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV A,#03H
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
MOV R1,#00H
MOV R0,#0dH
MOV DPTR,#TAB3
LOOP2:MOV A,R1
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R1
DJNZ R0,LOOP2
RET
N2: MOV COM,#0C0H
LCALL PR1
MOV DPTR,#TAB1
MOV R2,#10
MOV R3,#00H
WRIN:
MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R3
DJNZ R2,WRIN
RET
TAB1: DB "VOLTAGE = "
TAB2: DB 00H
DB 01H
DB 02H
DB 03H
DB 04H
DB 05H
TAB3:DB "10701 tcw "
ZI: DB 009H,00AH,00CH,01FH,00CH,00AH,00CH,009H
DB 004H,004H,01FH,004H,00AH,00AH,011H,000H
DB 004H,004H,01FH,01FH,01FH,004H,007H,000H
DB 004H,00EH,010H,00EH,000H,00EH,003H,000H
TAB4:DB " welcome ! "
TAB5:DB "DESIGN BY tcw"
TAB6:DB "123456"
;********************************************************************
;定時器T0中斷服務子程序,讀取ADC0809第0通道的A/D轉換結果並化為顯示值*
;********************************************************************
BT0:
PUSH ACC
PUSH PSW
MOV PSW,#08H
CLR TR0
MOV TH0,#00H ;重新裝入初值
MOV TL0,#00H
DEC 24H
MOV A,24H
JNZ RTN1
MOV 24H,#08H
LCALL ADC
RTN1: SETB TR0
POP PSW
POP ACC
RETI
ADC:
MOV DPTR,#0F6FFH
MOV A,#0 ;選擇通道0
MOVX @DPTR,A ;啟動AD轉換
MOV A,#40H
DJNZ ACC,$
MOVX A,@DPTR
MOV 22H,A
MOV 21H,#0CCH
CJNE A,21H,BJ0
BJ0:JNC LED
SJMP LL0
LL0:SETB P3.0
SJMP LL
LED:LCALL LED1
LL: MOV A,22H
MOV B,#05H ;A/D轉換結果化為顯示值
MUL AB ;(AD*5)/256
MOV 30H,B ;AD*5的高位元組為整數部分
MOV B,#0AH
MUL AB ;AD*5的低位元組為/256的結果,為小數部分
MOV 32H,B ;二進制小數換為10進制數
MOV B,#0AH
MUL AB
MOV 33H,B
MOV B,#0AH
MUL AB
MOV 34H,B
MOV A,30H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 30H,A
MOV A,32H
MOVC A,@A+DPTR
MOV 32H,A
MOV A,33H
MOVC A,@A+DPTR
MOV 33H,A
MOV A,34H
MOVC A,@A+DPTR
MOV 34H,A
RET
TAB: DB "0123456789"
;*****************************************
;****LCD間接控制方式下的初始化子程序******
;*****************************************
INT:
LCALL DELAY
MOV COM,#38H ;設置工作方式
LCALL PR1
MOV COM,#01H
LCALL PR1
MOV COM,#06H
LCALL PR1
MOV COM,#0CH
LCALL PR1
RET
DELAY: ;延時子程序
MOV R6,#0FH
MOV R7,#00H
DELAY1:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
DELAY00: ;延時子程序
MOV R6,#0FFH
MOV R7,#0FFH
DELAY0:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;*********************************************
;*******LCD間接控制方式下的驅動子程序*********
;*********************************************
;2 寫指令代碼子程序
PRX:
PUSH ACC
CLR RS
SETB RW
PR110:
MOV P0,#0FFH
SETB E
LCALL DELAY00
NOP
MOV A,P0
CLR E
JB ACC.7,PR11
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
PR1:
PUSH ACC
CLR RS
SETB RW
PR11:
MOV P0,#0FFH
SETB E
LCALL DELAY
NOP
MOV A,P0
CLR E
JB ACC.7,PR11
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
;3 寫顯示數據子程序
PR2:
PUSH ACC
CLR RS
SETB RW
PR21:
MOV P0,#0FFH
SETB E
LCALL DELAY
MOV A,P0
CLR E
JB ACC.7,PR21
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
END
㈦ 利用單片機AT89C51與ADC0808設計一個數字電壓表,能夠測量0~5V的直流電壓值,精度越高越好
本文介紹了用ADC0808集成電壓轉換晶元和AT89C51單片機設計製作的數字直流電壓表。在測量儀器中,電壓表是必須的,而且電壓表的好壞直接影響到測量精度。具有一個精度高、轉換速度快、性能穩定的電壓表才能符合測量的要求。為此,我們設計了數字電壓表,此作品主要由A/D0808轉換器和單片機AT89C51構成,A/D轉換器在單片機的控制下完成對模擬信號的採集和轉換功能,最後由數碼管顯示採集的電壓值。此設計通過調試完全滿足設計的指標要求。電路設計簡單,設計製作方便有較強的實用性。
關鍵詞:
ADC0808;單片機AT89C51;數字電壓表
Abstract:
In this paper, with ADC0808 voltage converter integrated chips and microcontroller designed AT89C51 the number of DC voltage table. In measuring instruments, voltage meter is necessary, and voltage meter will have a direct impact on measurement accuracy. With a high precision, the conversion speed and stable performance of the voltage meter to conform to the requirements of measurement. To this end, we design a digital voltage meter, this works mainly by A/D0808 converter and a microcontroller AT89C51, A / D converter under the control of the MCU to complete the acquisition and analog signal conversion functions, from the final Acquisition of the digital display voltage value. This design through debugging to fully meet the design requirements of the target. Circuit design simple, designed to facilitate a more practical.
Key words:
ADC0808; SCM AT89C51; Digital Voltmeter
目 錄
1.設計方案……………………………………………………………………………………1
2. 系統硬體設計……………………………………………………………………………2
2.1單片機晶元……………………………………………………………………………2
2.1.1.單片機晶元選擇……………………………………………………………2
2.1.2.單片機管腳說明……………………………………………………………3
2.2.A/D轉換器……………………………………………………………………………5
2.2.1.A/D轉換器晶元選擇………………………………………………………5
2.2.2.A/D轉換器管腳說明………………………………………………………6
2.3.電壓顯示電路…………………………………………………………………………7
3.系統程序設計……………………………………………………………………………………8
3.1.軟體總體框架設計……………………………………………………………………8
4.系統總圖及程序…………………………………………………………………………………9
5.參考文獻………………………………………………………………………………………………12
6.結束語……………………………………………………………………………………………………13
1.設計方案
在電量的測量中,電壓、電流和頻率是最基本的三個被測量,其中電壓量的測量最為經常。而且隨著電子技術的發展,更是經常需要測量高精度的電壓,所以數字電壓表就成為一種必不可少的測量儀器。數字電壓表(Digital Voltmeter)簡稱DVM,它是採用數字化測量技術,把連續的模擬量(直流或交流輸入電壓)轉換成不連續、離散的數字形式並加以顯示的儀表。由於數字式儀器具有讀數准確方便、精度高、誤差小、靈敏度高和解析度高、測量速度快等特點而倍受青睞。本設計從各個角度分析了由單片機組成的數字電壓表的設計過程及各部分電路的組成及其原理,並且分析了程序如何驅動單片機進而使系統運行起來的原理及方法。框圖如下:
本設計主要分為兩部分:硬體電路及軟體程序。而硬體電路又大體可分為A/D轉換電路、LED顯示電路,各部分電路的設計及原理將會在硬體電路設計部分詳細介紹;程序的設計使用匯編語言編程,利用WAVE和PROTEUS 軟體對其編譯和模擬,詳細的設計演算法將會在程序設計部分詳細介紹。
2.系統硬體電路設計
2.1 單片機晶元
2.1.1.單片機晶元選擇
AT89C51簡介
AT89C51是一種帶4K位元組閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。由於將多功能8位CPU和閃爍存儲器組合在單個晶元中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示
圖2.1_1 AT89C51引腳圖
2.1.2.單片機管腳說明
主要特性:
?與MCS-51 兼容
?4K位元組可編程閃爍存儲器
?壽命:1000寫/擦循環
?數據保留時間:10年
?全靜態工作:0Hz-24Hz
?三級程序存儲器鎖定
?128×8位內部RAM
?32可編程I/O線
?兩個16位定時器/計數器
?5個中斷源
?可編程串列通道
?低功耗的閑置和掉電模式
?片內振盪器和時鍾電路
管腳接法說明:
VCC:供電電壓我們接+5V。
GND:接地。
P0口:在這個設計中我們將AT89C51做為BCD碼的輸出口與LED顯示器相連。由於P0口輸出驅動電路中沒有上拉電阻,所以我們在外接電路上接上拉電阻。
P1口:把AT89C51中的P1口與ADC0808的輸出端相連,做為數字信號的接收端。
P2口:我們把P2口做為位碼輸出口,以P2.0—2.3輸出位控線與LED顯示器相連.
P3口:利用P3.0,P3.1,P3.2,P3.4,P3.5,P3.6分別與ADC0808的OE,EOC,START/ALE,A,B,C端相連。
XTAL1 ,XTAL2:外接一振盪電路。
圖2.1.2 振盪電路
RST:在此端接一復位電路。
圖2.1.3 復位電路
2.2 A/D轉換器與單片機介面電路
2.2.1.A/D轉換器晶元選擇
A/D轉換器是模擬量輸入通道中的一個環節,單片機通過A/D轉換器把輸入模擬量變成數字量再處理。
隨著大規模集成電路的發展,目前不同廠家已經生產出了多種型號的A/D轉換器,以滿足不同應用場合的需要。如果按照轉換原理劃分,主要有3種類型,即雙積分式A/D轉換器、逐次逼近式A/D轉換器和並行式A/D轉換器。目前最常用的是雙積分和逐次逼近式。
雙積分式A/D轉換器具有抗干擾能力強、轉換精度高、價格便宜等優點,比如ICL71XX系列等,它們通常帶有自動較零、七段碼輸出等功能。與雙積分相比,逐次逼近式A/D轉換的轉換速度更快,而且精度更高,比如ADC0808、ADC0809等,它們通常具有8路模擬選通開關及地址解碼、鎖存電路等,它們可以與單片機系統連接,將數字量送入單片機進行分析和顯示。
本設計中,由於對精度沒做很大要求,我們採用逐次逼近式A/D轉換ADC0808,精度為0.02,所以四位LED顯示中的最後一位我們設置為V。
圖2.2.1 ADC0808引腳圖
2.2.2.A/D轉換器ADC0808的管腳說明:
IN0~IN7:為模擬量的輸入口,我們選取IN3口為入口,外接可變電阻,通過改變阻值來控制模擬量的輸入。
A、B、C:3位地址輸入,2個地址輸入端的不同組合選擇八路模擬量輸入。這里我們將A,B接高電平,C為低電平。
ALE:地址鎖存啟動信號,在ALE的上升沿,將A、B、C上的通道地址鎖存到內部的地址鎖存器。
D0~D7:八位數據輸出線,A/D轉換結果由這8根線傳送給單片機。
OE:允許輸出信號。當OE=1時,即為高電平,允許輸出鎖存器輸出數據。
START:啟動信號輸入端,START為正脈沖,其上升沿清除ADC0808的內部的各寄存器,其下降沿啟動A/D開始轉換。
EOC:轉換完成信號,當EOC上升為高電平時,表明內部A/D轉換已完成。
CLK:時鍾輸入信號,選用頻率500KHZ。
圖2.2.2 時鍾信號
2.3 電壓顯示電路:
設計中採用的是4段LED數碼管來顯示電壓值。LED具有耗電低、亮度高、視角大、線路簡單、耐震及壽命長等優點,它由4個發光二極體組成,其中3個按『8』字型排列,另一個發光二極體為圓點形狀,位於右下角,常用於顯示小數點。把4個發光二極體連在一起,公共端接高電平,叫共陽極接法,相反,公共端接低電平的叫共陰極接法,我們採用共陰極接法。當發光二極體導通時,相應的一段筆畫或點就發亮,從而形成不同的發光字元。其8段分別命名為dp g f e d c b a。例如,要顯示「0」,則dp g f e d c b a分別為:00111111B;若要顯示多個數字,只要讓若干個數碼管的位碼循環為高電平就可以了。
根據設計要求,顯示電路需要至少4位LED數碼管來顯示電壓值,我們再多加一位用來顯示電壓單位「V」,則有7位LED循環顯示。利用單片機的I/O口驅動LED數碼管的亮滅,設計中由P0口驅動LED的段碼顯示,即顯示字元,由P2口選擇LED位碼,即選擇點
亮哪位LED來顯示。
圖2.3 LED管
另外,一般I/O介面晶元的驅動能力是很有限的,在LED顯示器介面電路中,輸出口所能提供的驅動電流一般是不夠的尤其是設計中需要用到多位LED,此時就需要增加LED驅動電路。驅動電路有多種,常用的是TTL或MOS集成電路驅動器,在本設計中採用了ADC0808晶元驅動電路。
3.系統程序設計
3.1軟體總體框架設計
在編寫匯編語言時,先存放數碼管的段碼,再存放轉換後的數據,選取通道並設值.再將AD轉換結果轉換成BCD碼,通過換算LED上顯示.
再換算中,利用關系得到LED上個位,十位,百位的顯示,然後設置小數點:
開始
預設初值
選取通道3
啟動A/D轉換
否
是
數碼顯示子程序
延時顯示結果
結束
在系統上電開始測量前,要用萬用表的電壓檔對被測電壓進行估測,然後再測。
4.系統總圖及程序
LED_0 EQU 30H;
LED_1 EQU 31H;
LED_2 EQU 32H;
LED_3 EQU 33H;
ADC EQU 35H;
ST BIT P3.2;
OE BIT P3.0;
EOC BIT P3.1;
ORG 00H;
START: MOV LED_0,#00H;
MOV LED_1,#00H;
MOV LED_2,#00H;
MOV LED_3,#00H;
MOV DPTR,#TABLE;
SETB P3.4;
SETB P3.5;
CLR P3.6;
WAIT: CLR ST;
SETB ST;
CLR ST;
JNB EOC,$;
SETB OE;
MOV ADC,P1;
CLR OE;
MOV A,ADC;
MOV B,#51;
DIV AB;
MOV LED_3,A;
MOV A,B;
MOV B,#5;
DIV AB;
MOV LED_2,A;
MOV LED_1,B;
LCALL DISP;
SJMP WAIT;
DISP: MOV A,#3EH;
CLR P2.3;
MOV P0,A;
LCALL DELAY;
SETB P2.3;
MOV A,LED_1;
MOVC A,@A+DPTR;
CLR P2.2;
MOV P0,A;
LCALL DELAY;
SETB P2.2;
MOV A,LED_2;
MOVC A,@A+DPTR;
CLR P2.1;
MOV P0,A;
LCALL DELAY;
SETB P2.1;
MOV A,LED_3;
MOVC A,@A+DPTR;
ORL A,#80H;
CLR P2.0;
MOV P0,A;
LCALL DELAY;
SETB P2.0;
RET;
DELAY: MOV R6,#10;
D1: MOV R7,#250;
DJNZ R7,$;
DJNZ R6,D1;
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
END
數字直流電壓表的總圖
㈧ 基於AT89C51單片機的數字電壓表的設計,不能使用AD轉換晶元,AD轉換電路只能自己搭。
AT89C51單片機內部沒有AD轉換模塊,可以通過IO口擴展AD轉換晶元現在市面上很多這種晶元比如TLC2543、ads1204就是,如果電壓表精度要求不高,用後出來的單片機內部就集成了AD轉換晶元比如avr、PIC等。