導航:首頁 > 編程語言 > 單片機數字電壓表代碼

單片機數字電壓表代碼

發布時間:2023-04-18 01:59:24

『壹』 能幫幫編寫個單片機數字電壓表模擬設計的程序代碼嗎用C語言。

數字電壓表模擬實例,可以參考一下。

『貳』 單片機設計製作數字電壓表

數字電壓表是諸多數字化儀表的核心與基礎,電壓表的數字化是將連續的模擬量如直流電壓轉換成不連續的離散的數字形式並加以顯示,這有別於傳統的以指針加刻度盤進行讀數的方法,避免了讀數的誤差和視覺疲勞。目前數字萬用表的內部核心部件是A/D轉換器,轉換器的精度很大程度上影響著數字萬用表的准確度,本設計—數字電壓表 A/D轉換器採用ADC0808對輸入模擬信號進行轉換,控制核心AT89S51在對轉換的結果進行運算和處理,最後驅動輸出裝置顯示數字電壓信號。數字電壓表是諸多數字化儀表的核心與基礎,電壓表的數字化是將連續的模擬量如直流電壓轉換成不連續的離散的數字形式並加以顯示,這有別於傳統的以指針加刻度盤進行讀數的方法,避免了讀數的誤差和視覺疲勞。目前數字萬用表的內部核心部件是A/D轉換器,轉換器的精度很大程度上影響著數字萬用表的准確度,本設計—數字電壓表 A/D轉換器採用ADC0808對輸入模擬信號進行轉換,控制核心AT89S51在對轉換的結果進行運算和處理,最後驅動輸出裝置顯示數字電壓信號。並可以在LED上進行顯示,可以顯示電壓值的小數點後兩位。
關鍵詞:單片機 數字電壓表 AT89S51 ADC0808
系統總體設計要求:利用單片機AT89S51和ADC0809對直流電壓0~5V進行採集,並在LED上進行顯示,可以顯示電壓值的小數點後兩位。

1. 實驗任務
利用單片機AT89S51與ADC0809設計一個數字電壓表,能夠測量0-5V之間的直流電壓值,四位數碼顯示,但要求使用的元器件數目最少。 2. 電路原理圖
圖1.28.1
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信號的方法就得用軟體來產生了。

『叄』 基於單片機的數字電壓表設計 (請不要完成抄襲)

我給你看看我以前做過的數字電壓表,匯編的
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

『肆』 單片機雙路數字電壓表,之前一哥們給的程序如下可以實現循環測量顯示IN0,IN1電壓,現要求如下

說好200分的……
#include "reg52.h"
const unsigned char LED7Code[]={ //共陰極7段顯示
0x3F, // 0
0x06, /桐謹/ 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
void delay(unsigned int i) /*延時1014i+13 機器周期*/
{ int j;
for(;i>0;i--)
for(j=0;j<125;j++);
}
void delayus(unsigned char i) /*延時8i+10 機器周期*/
{while(i>0)
i--;
}

sbit start=P3^0;
sbit clk=P3^3;
sbit eoc=P3^2;
sbit oe=P3^1;
sbit add1=P3^4;
sbit add2=P3^5;
sbit add3=P3^6;
sbit key1=P2^5;
sbit key2=P2^6;
main()
{
unsigned char i,j=0;
long U=0;
unsigned char flag=0; //循環與否標志
unsigned char key1_tmp=1,key2_tmp=1; //兩個按余輪鋒鍵狀態暫存
while(1)
{
add1=j%2;add2=0;add3=0; //通道地址
clk=1;
start=0;
start=1;
start=0; //啟動轉換

eoc=1;
clk=0; delayus(5); //clk信號下降沿對eoc信號線進行檢測
while(!eoc)
{
clk=1; delayus(5);
clk=0; delayus(5);
eoc=1;
}
oe=1; //0808輸出允許
P0=0xff; //單片機從P0口讀取數據
U=P0*5L*100/256;

for(i=0;i<100;i++)
{
P1=LED7Code[j%2]; P2=0xfe; delay(1); P1=0;
P1=LED7Code[U/100]|0x80; P2=0xfd; delay(1); P1=0; /豎晌/|0x80目的是加小數點
P1=LED7Code[U%100/10]; P2=0xfb; delay(1); P1=0;
P1=LED7Code[U%10]; P2=0xf7; delay(1); P1=0;

key1=1; //按鍵1
if(!key1&&key1_tmp)
{flag=!flag;key1_tmp=key1;break;} //當按鍵1檢測到下降沿時,循環標志置取反
key2=1; //按鍵2
if(!key2&&key2_tmp)
{j++;key2_tmp=key2;break;} //當按鍵2檢測到下降沿時,通道地址加一
key1_tmp=key1;
key2_tmp=key2;
}
if(flag)
j++; //通道地址加一
}
}

『伍』 用單片機設計一個自動切換量程的數字電壓表,做了出了一點問題

  1. 既然你設計有20V的量程,而你的運放電路那塊是正向放大,正向放大,最小的放大倍數都是1 ,如果你輸入20V電壓,運放飽和了, 並且也超過了ADC的輸入范圍,你的ADC的參考電壓是5V,則輸入到ADC的電壓最大就是5V。可以將運放設計成反向放大。數據由單片機處理再反向過來。還有,如果是反向放大的話,輸入信號20V,則超過了運放的電源電壓。差模輸入電壓范圍一般是低於運放的電源電壓的,共模輸入也是一樣,你可以看看運放手冊就知道了。所以如果要做到20V的輸入量程,要麼在輸入的地方做一級電阻分壓,降低輸入到運放的電壓到<10V以下。要麼就提高運放的電源電壓,建議正電壓>24V。但是做反向放大的注意輸入阻抗,一般電壓表的輸入阻抗越大越好。還有做好輸入端的保護,在負輸入端加一個22V的穩扮畝壓管比較妥當,防止過牙燒毀運放。在ADC的輸入的地方加一個5.6V的穩壓管,防止運放輸出過大損壞ADC

  2. 只看你的運放這個電路,放大倍數是1, 11, 101,是否有誤差出現?

  3. 你的量程切換這塊,考慮2個問題,

    1. 如果輸入電壓變化很快,你的切換將會很多,基本上輸入到數碼管上,你是看不清楚的,所以在軟體上加一個平均濾波演算法,使得顯示更穩定。當然如果只廳昌森是做電壓表的話,硬體上加一級有源低通濾波器的話就更好,1,可以濾除高頻干擾,2,可以使採集的信號變化緩慢,利於採集的穩定和顯示。在加上軟體濾波演算法。可以進一步穩定。

    2. 電子開關切換是需要時間的,如果檢測到信號過小,需要切換到大量程,先不要斷開當前量程開關,而是要先打開大量程開關,再來關閉小量程開關。可以防止切換的一瞬間,因運放處於開環狀態,輸出一個大尖峰電壓到ADC。在硬體上,可以在模擬電子開關和反饋電阻之間接入一個小電容,也可以防止進入開關狀態。還有,這個電容還可以起到濾迅乎除高頻干擾的作用。

  4. 代碼就不看了。累的很。。。。

好了,打字打的好累,哎,可惜沒有分!

『陸』 單片機雙路循環顯示數字電壓表設計(c語言)

你好!

你的這個可以實現,c語言編寫代碼嗎?

閱讀全文

與單片機數字電壓表代碼相關的資料

熱點內容
motoxt800刷機教程 瀏覽:591
有了中標文件單價該如何審計結算 瀏覽:57
港版蘋果616G多少錢最新報價 瀏覽:6
揭陽學編程哪個好 瀏覽:315
蘋果護眼壁紙 瀏覽:699
pcsx2按鍵配置文件 瀏覽:740
快賺鎖屏密碼忘了怎麼辦 瀏覽:849
後綴是acd是什麼文件 瀏覽:593
電腦無法打開視頻文件怎麼辦 瀏覽:904
如何簡化applewatch上的app 瀏覽:646
王者榮耀紫色字體代碼 瀏覽:186
surfacepro4系統版本 瀏覽:655
一加手機升級文件在哪個文件夾 瀏覽:537
u盤裝不了4g文件 瀏覽:740
豆神美育app怎麼退款 瀏覽:530
微信吃葯表情動態 瀏覽:425
網路廣播怎麼保存錄音 瀏覽:777
照片變漫畫ps教程 瀏覽:46
現在找不到王者cg文件 瀏覽:590
pdf文件怎麼編輯圖片要會員 瀏覽:303

友情鏈接