51单片机——DAC数模转换实验(LED呼吸灯)

目录

一、功能描述

二、DAC介绍

2.1 T型电阻网咯DAC

2.2 PWM模拟DAC输出

三、测试文件test.c

四、实验现象


一、功能描述

        通过单片机 IO口生成 PWM波来模拟 DAC输出。本次实验要实现的功能是:系统运行时,DAC(PWM)模块上的指示灯 DA1呈呼吸灯效果,由暗变亮再由亮变暗。

二、DAC介绍

        DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

2.1 T型电阻网咯DAC

  •  分析图中运算放大器:由“虚短”和“虚断”可知V0=-l0×Rfb。
  • 分析可知:I1=2I0、I2=4I0、I3=8I0....I7=128I0。Vref=I7×2R,所以I0=Vref/256R。
  • 所以V0=-\frac{Vref\cdot Rfb}{256R}

2.2 PWM模拟DAC输出

        出于成本考虑,在实际开发应用中,使用较多的是通过 PWM来模拟 DAC输出。

391224c47dd94f03a32681abd84e8175.jpeg

  • 设置一个比较值。
  • 定时器产生一个定时自增的数,如果小于比较数就是低电平0,大于比较数就是高电平1。

三、测试文件test.c

#include <REGX52.H>
#include"Timer0_Init.h"
#include"Delay.h"
sbit DA=P2^1;
unsigned char counter,setnum; 
int main()
{
	unsigned char i=0;
	Timer0_Init();
	while(1)
	{		 
		for(i=0;i<100;i++)
		{
			setnum=i;
			Delay(10);
		}
		 for(i=100;i>0;i--)
		{
			setnum=i;
			Delay(10);
		}
	}

}
void Timer0_ISR() interrupt 1
{	
	TH0=0xFF; //100us
	TL0=0xA4;
	counter++;
	if(counter>=100){counter=0;}
	if(counter>=setnum)
	{
		 DA=1;
	}
	else
	{
		 DA=0;
	}
}

四、实验现象

        开发板上DA1这个LED灯以呼吸灯的方式闪烁。

猜你喜欢

转载自blog.csdn.net/ssssshhbh/article/details/129319022