基于51单片机的电压采集(ADC0804)

这篇具有很好参考价值的文章主要介绍了基于51单片机的电压采集(ADC0804)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.ADC0804简介
工作电压:+5V,即VCC=+5V。
模拟转换电压范围:0~+5V,即0≤Vin≤+5V。
分辨率:8位,即分辨率为1/(2^8)=1/256,转换值介于0~255之间。
转换时间:100us(fCK=640KHz时)。
转换误差:±1LSB。
参考电压:2.5V,即Vref/2=2.5V。
Vin(+)、Vin(-):两个模拟信号输入端,可以接收单极性、双极性和差模输入信号。
DB0-DB7:具有三态特性数字信号输出端,输出结果为八位二进制结果。
CLKIN:时钟信号输入端。
CLKR:内部时钟发生器的外接电阻端,与CLK端配合可由芯片自身产生时钟脉冲,其频率计算方式是:fck=1/(1.1RC)。
CS:片选信号输入端,低电平有效。
WR:写信号输入端,低电平启动AD转换。
RD:读信号输入端,低电平输出端有效。
INTR:转换完毕中断提供端,AD转换结束后,低电平表示本次转换已完成。
VREF/2:参考电平输入,决定量化单位。
VCC:芯片电源5V输入。
AGND:模拟电源地线。
DGND:数字电源地线。
2.程序代码
delay.h

#ifndef __DELAY_H__
#define __DELAY_H__

//延时1us
void Delay_1us(void);   
//延时xus
void Delay_xus(unsigned int x); 

#endif

delay.c

#include "delay.h"
#include <intrins.h>

void Delay_1us(void)
{
	_nop_();
}

void Delay_xus(unsigned int x)
{
	unsigned int i,j;
	for(i=x;i>0;i--)
	    Delay_1us();
}

adc.h

#ifndef __ADC_H__
#define __ADC_H__

#include <reg51.h>
#include "delay.h"

#define ADC0804_Port P1

sbit ADC0804_CS  = P3^5;//ADC_CS低电平有效
sbit ADC0804_WR  = P3^6;//ADC_WR低电平有效
sbit ADC0804_RD  = P3^7;//ADC_RD低电平有效

unsigned char ADC0804_Read(void);//ADC0804读取数据0-255
unsigned int ADC0804_Convert(void);//将0-255转换为0-5V

#endif

adc.c

unsigned char ADC0804_Read(void)
{
	unsigned char dat;
	ADC0804_Port = 0xff;
	ADC0804_CS = 1;
	ADC0804_WR = 1;
	ADC0804_CS = 0;
	ADC0804_WR = 0;
	//Delay_xus(100);
	ADC0804_CS = 1;
	ADC0804_WR = 1;
	//Delay_xus(500);
	ADC0804_CS = 0;
	ADC0804_RD = 0;
	//Delay_xus(50);
	dat = ADC0804_Port;
	ADC0804_RD = 1;
	ADC0804_CS = 1;
	return dat;
}
unsigned int ADC0804_Convert(void)
{
	unsigned char n;
	unsigned int sum = 0;
	unsigned int temp;
	for(n = 0;n < 3;n++)
	{
	  sum = sum + ADC0804_Read(); 
		Seg_dis(temp);
	}
	temp = sum / 3;
	//temp = temp * 19.60784;  //5/255=0.01960784313
	return temp;
}

seg.h

#ifndef __SEG_H__
#define __SEG_H__

#include "delay.h"

void Seg_dis(unsigned int dat);

#endif

seg.c

#include <reg51.h>
#include "seg.h"
#include "delay.h"

#define Duan_Port    P0
#define Wei_Port     P2

sbit wei1=P2^0;
sbit wei2=P2^1;
sbit wei3=P2^2;
sbit wei4=P2^3;

unsigned char code Seg_Duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0xf1};//显示0~F的值

void Seg_dis(unsigned int dat)
{	
	wei1 = 0;//选通高位数码管(左边第1位)
	Duan_Port = Seg_Duan[dat/1000%10];//赋段码
	Delay_xus(50);
	wei1 = 1;
	Duan_Port = 0xff;//关闭消影
	
	wei2 = 0;
	Duan_Port = Seg_Duan[dat/100%10];
	Delay_xus(50);
	wei2 = 1;
	Duan_Port = 0xff;
	
	wei3 = 0;
	Duan_Port = Seg_Duan[dat/10%10];
	Delay_xus(50);
	wei3 = 1;
	Duan_Port = 0xff;
	
	wei4 = 0;
	Duan_Port = Seg_Duan[dat%10];
	Delay_xus(50);
	wei4 = 1;
	Duan_Port = 0xff;	
}

main.c

#include <reg51.h>

#include "seg.h"
#include "delay.h"
#include "adc.h"

int main(void)
{
	unsigned int Vo;
	while(1)
	{
		Vo = ADC0804_Convert();
		Seg_dis(Vo);	
	}
}

3.仿真电路
基于51单片机的电压采集(ADC0804)文章来源地址https://www.toymoban.com/news/detail-405368.html

到了这里,关于基于51单片机的电压采集(ADC0804)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 基于51单片机的数字电压表设计

    基于51单片机的数字电压表设计

    简介 1、数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。因此AD转换是此次设计的核心元件。输入

    2024年02月05日
    浏览(9)
  • 毕设--基于51单片机数字电压表的设计

    毕设--基于51单片机数字电压表的设计

    注:本毕设资源可在微信公众号:“Kevin的学习站” 中获取! 3.1、基本功能 利用51单片机作为主控芯片,模拟量输入范围直流0v-5v。模拟量经A/D(ADC0809)模数转换芯片,把模拟量转换为数字量输入到单片机的P0口,再由单片机控制LCD1602液晶显示模拟量输入的电压值。 3.2、主

    2023年04月08日
    浏览(7)
  • 基于51单片机的数字电压表(PCF8591)(Proteus仿真+程序)

    基于51单片机的数字电压表(PCF8591)(Proteus仿真+程序)

            本设计由51单片机最小系统+PCF8591模块+四路模拟量输入模块+一路DA输出+液晶1602显示模块 1、主控制器是89C82单片机。 2、PCF8591模数转换器进行A/D转换,读取四路电压数据,电压检测范围0-5V 精度(8位);实现一路数模转换(D/A)输出电压范围0-5V(8位)。 3、利用四个

    2024年02月05日
    浏览(9)
  • 基于51单片机和proteus的电流采集系统

    基于51单片机和proteus的电流采集系统

    此系统是基于51单片机和proteus的仿真设计,功能如下: 1. LCD1602实时显示获取到电流值及设定值。 2. 按键可调整电流设定值。 3. 电流值过高则蜂鸣器报警。 4. 指示灯指示电流及系统状态。 5. 系统信息可通过串口实时更新。 功能框图如下: Proteus仿真界面如下: 下面就各个模

    2024年02月16日
    浏览(12)
  • 基于GD32单片机的12位ADC压力采集(50kg压力),附源码和原理图

    基于GD32单片机的12位ADC压力采集(50kg压力),附源码和原理图

    上位机监测到的ADC采集到的数据,该处采集的电压值是3.287mv,电压及压力值如下图:  示波器采集的电压值:3.26V,与上述单片机采集的数值基本一致 上位机监测到的ADC采集到的数据,该处采集的电压值是2.454mv,电压及压力值如下图:  示波器采集的电压值:2.50V,与上述单

    2024年04月22日
    浏览(19)
  • 122、仿真-基于51单片机的电量监测电压电流和温度报警系统设计(Proteus仿真+程序+流程图+配套资料等)

    122、仿真-基于51单片机的电量监测电压电流和温度报警系统设计(Proteus仿真+程序+流程图+配套资料等)

    方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节的闪存程序存储器,也就是说代码量可以写到128k字

    2024年02月16日
    浏览(12)
  • 51单片机制作简易数字电压表

    51单片机制作简易数字电压表

    首先打开proteus软件导入各个元器件,并连线。  接下来介绍下adc0808的导入方法  频率发生器的导入方法:  接下来就要编写c程序了,代码都是经过测试的,可以方型复制使用。 最后就是编译成hex文件并导入proteus中仿真了,然后调节滑动变阻器,就可以发现电压表的值和l

    2024年02月11日
    浏览(12)
  • 【单片机】51单片机,TLC2543,驱动程序,读取adc

    【单片机】51单片机,TLC2543,驱动程序,读取adc

    TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。) 19——EOC为转换结束端

    2024年02月14日
    浏览(12)
  • 单片机】51单片机,TLC2543,驱动程序,读取adc

    单片机】51单片机,TLC2543,驱动程序,读取adc

    TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。) 19——EOC为转换结束端

    2024年02月14日
    浏览(11)
  • 51单片机——ADC模数转换实验

    51单片机——ADC模数转换实验

    目录 一、功能描述 二、ADC介绍 2.1 逐次逼近型ADC转换原理 2.2 ADC的主要技术指标 三、XPT2046芯片介绍 3.1 XPT2046外部引脚 3.2 XPT2046的命令字 3.3 XPT2046时序图 四、测试文件test.c 五、实验现象         我们使用的 STC89C51单片机内部不含 ADC 接口,所以需要外接一个 ADC 转换芯片将

    2024年02月06日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包