IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机——ADC模数转换、DAC数模转换 C语言入门编程 -> 正文阅读

[嵌入式]51单片机——ADC模数转换、DAC数模转换 C语言入门编程

目录

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;
    }
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:22:29  更:2022-08-19 19:24:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:32:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码