将采样值转换为电压值的程序,为什么计算出来,电压值AD

将采样值转换为电压值的程序,为什么计算出来,电压值AD,第1张

嘿嘿俺来帮助你吧1单片机采集某一电压值,即经过AD转换,将电压值转换成二进制数的数字量。2经过标度变换,将AD转换成二进制数的数字量变换成带有单位(伏特)的实际电压值。3将计算出的实际电压值送人lcd上显示即可。呵呵只给出程序的算法程序自己写吧满意就选满意回答啊

for语句从AdcRegsADCRESULT0采集512个数据(电压模拟值),存于取样表SampleTable数组,同时将采样数据转换成实际电压数值,存放于dianya数组。将512个电压值求平均值,作为当时的电压值(sum先累加再平均)

然后显示出来并且延时。

整个过程无限循环(while(1){})。

A/D转换后,输出的数字信号可以有8位、10位、12位、14位和16位等。

A/D转换器的工作原理

逐次逼近法

逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。

双积分法

采用双积分法的A/D转换器由电子开关、积分器、比较器和控制逻辑等部件组成。

电压频率转换法

采用电压频率转换法的A/D转换器,由计数器、控制门及一个具有恒定时间的时钟门控制信号组成,如

它的工作原理是V/F转换电路把输入的模拟电压转换成与模拟电压成正比的脉冲信号。电压频率转换法。

扩展资料:

AD转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。

A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。

参考资料:

百度百科-AD转换

查起来太麻烦了。把我的给你 你参考着来吧。

#include <reg51h>

#include "ADC0809h"

//短延时函数:ShortDelay()

void nNop(uchar i)

{

for(;i>0;i--) ;

}

//长延时函数:LongDelay()

void LongDelay(uint i)

{

uint j;

for(;i>0;i--)

{ for(j=1000;j>0;j--);}

}

//启动A/D转换函数:StartADC()

void StartADC(uchar Address)

{

PinC = (bit) (Address & 0x04);

PinB = (bit) (Address & 0x02); //写入地址 选着输入路

PinA = (bit) (Address & 0x01);

PinALE=1; //地址所存

nNop(2);

PinSTART = 1; //上降沿 复位A/D转换

nNop(2);

PinALE=0; //地址所存

nNop(2);

PinSTART = 0; //下降沿 启动A/D转换

}

//位A/D提供时钟信号

void ADCClk(void)

{

PinCLK=1;

nNop(2);

PinCLK=0;

}

//等待A/D转换结束函数:WaitADCEnd()

void WaitADCEnd(void)

{

uchar tt=0x05;

while(!PinEOC)

{

void ADCClk();

}

while(tt--)

{

void ADCClk();

}

}

//读取A/D转换后的数据函数:ReadData()

uint ReadData(void)

{

uint temp;

nNop(10);

WaitADCEnd();//等待A/D转换结束

PinOE = 1;

nNop(2);

temp = PinData & 0xff;

PinOE = 0;

return(temp);

}

接线:p36接srd

p37接swr

p30接pin

p31接clk

ad0809的clk接脉冲

cs接8000h的译码电路程序:ad0809 xdata 8000h

org 0000h

ajmp main

org 0030h

main:mov dptr,#8000h

mov a,#01h

movx @dptr,a

call delay

movx a,@dptr

mov r0,a

call disp

call delay

call delay

call delay

ajmp maindisp:mov a,r0

anl a,#00001111b

acall dsend

mov a,r0

swap a

anl a,#00001111b

acall dsend

ret

dsend:mov dptr,#tab

movc a,@a+dptr

mov sbuf,a

jnb ti,$

clr ti

ret delay:mov r4,#250

delay1:mov r5,#250

djnz r5,$

djnz r4,delay1

ret

tab:db 03h ;0

db 9fh ;1

db 25h ;2

db 0dh ;3

db 99h ;4

db 49h ;5

db 41h ;6

db 1fh ;7

db 01h ;8

db 09h ;9

db 11h ;灭

db 11h

db 0c1h

db 63h

db 85h

db 61h

db 71h

db 00h

end

这是吴鉴鹰单片机开发板配套的例程。

/-----------------------------------------------

名称:IIC协议 PCF8591 AD/DA转换

内容:使用4路AD中的4路检测外部模拟量输入 使用液晶显示

------------------------------------------------/

#include <reg52h>

#include "i2ch"

#include "delayh"

#include "1602h"

#include <stdioh>

#define AddWr 0x90   //写数据地址

#define AddRd 0x91   //读数据地址

extern bit ack;

unsigned char ReadADC(unsigned char Chl);

bit WriteDAC(unsigned char dat);

/------------------------------------------------

主程序

------------------------------------------------/

main()

{

unsigned char num=0,i;

unsigned char temp[7];//定义显示区域临时存储数组

float Voltage;        //定义浮点变量

LCD_Init();           //初始化液晶

DelayMs(20);          //延时有助于稳定

LCD_Clear();          //清屏

while (1)             //主循环

{

for(i=0;i<5;i++)                  //连续读5次,取最后一次,以便读取稳定值

num=ReadADC(0);                //读取第1路电压值,范围是0-255

Voltage=(float)num5/256;         //根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型

sprintf(temp,"V0 %32f ",Voltage);//格式输出电压值,%32f 表示浮点输出,共3位数,小数点后2位

LCD_Write_String(0,0,temp);

for(i=0;i<5;i++)

num=ReadADC(1);

Voltage=(float)num5/256;

sprintf(temp,"V1 %32f ",Voltage);

LCD_Write_String(8,0,temp);

for(i=0;i<5;i++)

num=ReadADC(2);

Voltage=(float)num5/256;

sprintf(temp,"V2 %32f ",Voltage);

LCD_Write_String(0,1,temp);

for(i=0;i<5;i++)

num=ReadADC(3);

Voltage=(float)num5/256;

sprintf(temp,"V3 %32f ",Voltage);

LCD_Write_String(8,1,temp);

//主循环中添加其他需要一直工作的程序

DelayMs(200);

}

}

/------------------------------------------------

读AD转值程序

输入参数 Chl 表示需要转换的通道,范围从0-3

返回值范围0-255

*** 作分四步:

(1)、发送地址字节,选择该器件。

(2)、发送控制字节,选择相应通道。

(3)、重新发送地址字节,选择该器件的读写。

(4)、接收目标通道的数据。

------------------------------------------------/

unsigned char ReadADC(unsigned char Chl)

{

unsigned char Val;

Start_I2c();                 //启动总线

SendByte(AddWr);             //发送器件地址

if(ack==0)return(0);

SendByte(0x40|Chl);          //发送器件子地址

if(ack==0)return(0);

Start_I2c();

SendByte(AddWr+1);           //1001 0001 是读命令

if(ack==0)return(0);

Val=RcvByte();

NoAck_I2c();                 //发送非应位

Stop_I2c();                  //结束总线

return(Val);

}

以上就是关于将采样值转换为电压值的程序,为什么计算出来,电压值AD全部的内容,包括:将采样值转换为电压值的程序,为什么计算出来,电压值AD、这段程序什么意思,怎么实现AD转换。在线等、AD转换原理是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10112757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存