51单片机——ADC模数转换、DAC数模转换PWM C语言入门编程

2023-11-18

目录

ADC:

XPT2046:

1.ADC模数转换:数码管上显示AD模块采集电位器的阻值、热敏的温度值、光敏的光值

DAC:

PWM:

 1.DAC数模转换:DAC(PWM)模块上的指示灯DA1呈呼吸灯效果,由暗变亮再由亮变暗


ADC:

        ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号。单片机在采集模拟信号时,通常都需要在前端加上A/D芯片。AD转换器(ADC)将模拟量转换为数字量通常要经过4个步骤:采样、保持、量化和编码。

        ADC的分辨率是指对于允许范围内的模拟信号,它能输出离散数字信号值的个数。这些信号值通常用二进制数来存储,因此分辨率经常用比特作为单位,且 这些离散值的个数是 2 的幂指数。 例如:12位ADC的分辨率就是12位,或者说分辨率为满刻度的1/(2^12)。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V×1/(2^12 )=2.4mV。ADC的转换速率是能够重复进行数据转换的速度,即每秒转换的次数。而完成一次A/D转换所需的时间(包括稳定时间),则是转换速率的倒数。

XPT2046:

        XPT2046是一款4线制电阻式触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外, 还可以测量加在触摸屏上的压力。内部自带2.5V参考电压,可以作为辅助输入、 温度测量和电池监测之用,电池监测的电压范围可以从0V到6V。XPT2046内集成有一个温度传感器。在2.7V的典型工作状态下,关闭参考电压,功耗可小于0.75mW。

2190aa07c8d24510a68821d056c5c7f7.png

07b22da86e4b4fdf822fec071fdf8186.png05749f36b5b34afca2209250d48d7615.png

d0f7e393e82445ceaf68083c715152b5.png

        XPT2046数据接口是串行接口。前8个时钟用来通过DIN引脚输入控制字节。接着的12个时钟周期将完成真正的模数转换。第13个时钟将输出转换结果的最后一位。剩下的3个多时钟周期将用 来完成被转换器忽略的最后字节(DOUT 置低)。(接收发送先高位) 

        电位器对应的采集通道命令:0X94

        光敏电阻对应的采集通道命令:0XA4

        热敏电阻对应的采集通道命令:0XD4

        外部输入AIN3对应的采集通道命令:0XE4

c490611cf91c42f4b28e4d3f0bf515ba.png

f16f6949931f40a383769f9c009e9e4e.png

1.ADC模数转换:数码管上显示AD模块采集电位器的阻值、热敏的温度值、光敏的光值

        XPT2046函数

#include <REGX52.H>

sbit DIN=P3^4;
sbit DOUT=P3^7;
sbit DCLK=P3^6;
sbit CS=P3^5;

unsigned char XPT2046(unsigned char Command)//命令 返回数据
{
    unsigned int Data=0;
    unsigned char i;
    DCLK=0;
    CS=0;
    for(i=0;i<8;i++)
    {
        DIN=Command&(0x80>>i);
        DCLK=1;
        DCLK=0;
    }
    for(i=0;i<8;i++)
    {
        DCLK=1;
        DCLK=0;
        if(DOUT)
            Data|=(0x80>>i);
    }
    CS=1;
    return Data;
}

        主函数

#include <REGX52.H>
#include "XPT2046.h"
#include "shumaguan.h"

void main()
{
    unsigned char i,j,k;
    while(1)
    {
        i=XPT2046(0x94);//电位器阻值
        shumaguan(1,i/100);
        shumaguan(2,(i/10)%10);
        shumaguan(3,i%10);
        j=XPT2046(0xa4);//光敏
        shumaguan(4,j/10);
        shumaguan(5,j%10);
        k=XPT2046(0xd4);//热敏
        shumaguan(6,k/100);
        shumaguan(7,(k/10)%10);
        shumaguan(8,k%10);
    }
}

DAC:

        DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。

        DAC的分辨率是输入数字量的最低有效位(LSB)发生变化时,所对应的输出模拟量(电压或电流)的变化量。它反映了输出模拟量的最小变化值。分辨率与输入数字量的位数有确定的关系,可以表示成FS/(2^n)。FS表示满量程输入值,n为二进制位数。对于5V的满量程,采用8位的DAC时,分辨率为5V/256 =19.5mV;当采用12位的DAC时,分辨率则为5V/4096=1.22mV。显然,位数越多分辨率就越高。

PWM:

        出于成本考虑,在实际开发应用中,使用较多的是通过PWM来模拟DAC输出。PWM是Pulse Width Modulation的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。

382d611b3f4b45748c64d2a53a0ac07b.png

 1.DAC数模转换:DAC(PWM)模块上的指示灯DA1呈呼吸灯效果,由暗变亮再由亮变暗

        主函数1

#include <REGX52.H>
#include "DELAY.h"

void main()
{
    unsigned char i,time;
    while(1)
    {
        for(time=0;time<100;time++)
        {
            for(i=0;i<20;i++)
            {
                P2_1=0;
                delay10us(time);
                P2_1=1;
                delay10us(100-time);
            }
        }
        for(time=100;time>0;time--)
        {
            for(i=0;i<20;i++)
            {
                P2_1=0;
                delay10us(time);
                P2_1=1;
                delay10us(100-time);
            }
        }
    }
}

        主函数2

#include <REGX52.H>
#include "DELAY.h"
#include "timer0.h"

unsigned char Count,Compare,i;

void main()
{
    Timer0Init();
    while(1)
    {
        for(i=0;i<100;i++)
        {
            Compare=i;
            delay(10);
        } 
        for(i=100;i>0;i--)
        {
            Compare=i;
            delay(10);
        } 
    }
}

void Timer0_Routine() interrupt 1 //100微秒@11.0592MHz
{
    TL0 = 0xA4;		//设置定时初始值
    TH0 = 0xFF;		//设置定时初始值
    Count++;
    Count%=100;
    if(Count>Compare)
    {
        P2_1=0;
    }
    else
    {
        P2_1=1;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机——ADC模数转换、DAC数模转换PWM C语言入门编程 的相关文章

  • React 相关方法(API)介绍-元素与组件操作

    JSX可以减少定义组件的复杂性 但对于React来说JSX并不是必须的 JSX标签最终会被转换为原生的JavaScript 除使用JSX语法外 还可以使用React提供的API来创建组件 本文将介绍使用React创建元素 及一些React中
  • 类与对象基础

    1 面向对象概述 面向过程就是分析出解决问题所需要的步骤 然后用函数把这些步骤一一实现 使用的时候依次调用就可以了 面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象 然后通过调用对象的方法来解决问题 当然 一个应用程序会包含多个
  • JAVA构造方法与static 关键字

    JAVA的构造方法 什么是构造方法 构造方法用来生成一个实例化的对象并对对象实例中的成员变量进行初始化 采用new创建对象时 构造方法被执行 构造方法的方法名必须和类名保持一致 注意 构造方法没有返回值 不可以加void 只能用 publi

随机推荐

  • 设计模式之命令模式

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 【2021应用上架】超详细开发者账号申请&应用上架审核经验整理

    一 准备阶段需要注意的 1 上架前开发者账号申请 申请的主体确定 在公司有多个主体的情况下 用哪个公司主体认证开发者 上架APP时需要考虑到应用相关的各种材料申请在哪个公司名下 材料所属公司主体与开发者账号主体不一致的情况需要开发者花费时间
  • vue节流和防抖

    节流 节流是间隔执行 在定时器到时间后再清空定时器 函数将每个 n 秒执行一次 在内部定义一个定时器和一个开关变量 初始化变量为true 执行定期器前判断变量是否false 就return 为true 如果是继续执行 并且把变量赋值为fal
  • 使用JSON.toJSONString时,出现“$ref”怎么办?服务器返回对象显示$ref怎么解决?

    现象 代码 Map
  • nvm 和 nrm安装使用

    前端工具推荐 nvm Node 版本管理工具 和 nrm 管理npm源 一 nvm 如果直接将 node 安装到电脑上 通常只能安装某个特定的版本 如 v18 12 1 而某些老项目可能只支持老版本的 node 如 v14 19 3 这时候
  • UNIX网络编程卷一 学习笔记 第三十章 客户/服务器程序设计范式

    开发一个Unix服务器程序时 我们本书做过的进程控制 1 迭代服务器 iterative server 它的适用情形极为有限 因为这样的服务器在完成对当前客户的服务前无法处理已等待服务的新客户 2 并发服务器 concurrent serv
  • 解决win10升级到win11,打不开安全中心的问题(亲测有效,已修复)

    相信很多人也碰上过这种问题 升级到了win 11 但是安全中心打不开了 报错 需要使用新应用以打开此windowsdefender链接 但是微软的应用商店并没有这个软件 然后我实验了一种方法 1 去微软的应用商店 Microsoft Sto
  • mysql中如何操作varchar类型的日期进行比较、排序等操作

    在mysql使用过程中 日期一般都是以datetime timestamp等格式进行存储的 但有时会因为特殊的需求或历史原因 日期的存储格式是varchar 那么我们该如何处理这个varchar格式的日期数据呢 使用函数 STR TO DA
  • SSM框架基于JSP犬舍寄养系统

    项目介绍 SSM框架基于JSP犬舍寄养系统的设计与实现 高清视频演示 SSM框架基于JSP犬舍寄养系统的设计与实现 安装视频演示 SSM框架基于JSP犬舍寄养系统的设计与实现 系统说明 1 前台功能模块 首先注册会员 登录进平台 然后选择自
  • 【PyTorch学习】(三)自定义Datasets

    torchvision datasets源码地址 https github com pytorch vision blob master torchvision datasets 前两篇从搭建经典的ResNet DenseNet入手简单的了
  • 【LVGL 学习】样式(style)风格学习

    概述 在 LVGL 中 样式都是以对象的方式存在 一个对象可以描述一种样式 每个控件都可以独立添加样式 创建的样式之间互不影响 可以使用 lv style t 类型创建一个样式并初始化 static lv style t style lv
  • 数据结构算法:写一个递归算法来实现字符串的逆序存放

    题目要求 写一个递归算法来实现字符串的逆序存储 要求不另设存储空间 首先我们定一个一个存放字符串的结构体 typedef struct String ElemType data int length String PString 创建字符串
  • 解决IE浏览器报错,对象不支持“assign”属性或方法

    报错页面 报错代码 解决后 解决代码 function doTest if typeof Object assign function Object assign function target use strict if target n
  • 线性回归分析

    文章目录 一 高尔顿数据集进行线性回归分析 1 1 父母平均身高和儿子身高线性回归分析 1 2 父亲身高和儿子身高线性回归分析 1 3 母亲身高和儿子身高线性回归分析 二 Anscombe四重奏数据集进行线性回归分析 一 高尔顿数据集进行线
  • MFC读取Excel(一)

    软件 vs2013 程序功能 MFC读取Excel里的第一个单元格的值 步骤 第一步 创建基于对话框的MFC工程 第二步 添加库 添加Excel类库 在工程名上右键 选择 添加 类 或者点击菜单栏的 项目 gt 添加类 选择 TypeLib
  • Windows下常用的快捷方式

    罗列出windows下我最常用的快捷键 逐步补充 打开我的电脑 win e
  • Kubesphere部署三高商城组织架构说明

    KubeSphere部署三高商城组织架构说明 一 创建企业空间 1 使用ws manager用户登录KubeSphere web控制器 创建企业空间 2 登出控制台 然后以 ws admin 身份重新登录 在企业空间设置中 选择企业空间成员
  • uniapp开发支付宝小程序之上传小程序

    市面上很多关于微信小程序通过uinapp开发的文档 支付宝的文档较少 这里做一下补充 为后浪提供参考 一给窝里giaogiao 通过hbuilder编码小程序后不能直接在支付宝开发者工具中上传 应该先通过HBuilder编译一下在操作 步骤
  • ERP中HR模块的操作与设计--开源软件诞生26

    赤龙ERP的EHR功能讲解 第26篇 用日志记录 开源软件 的诞生 进入地址 点亮星星 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github
  • 51单片机——ADC模数转换、DAC数模转换PWM C语言入门编程

    目录 ADC XPT2046 1 ADC模数转换 数码管上显示AD模块采集电位器的阻值 热敏的温度值 光敏的光值 DAC PWM 1 DAC数模转换 DAC PWM 模块上的指示灯DA1呈呼吸灯效果 由暗变亮再由亮变暗 ADC ADC an