51单片机DA转化及简易波形发生器!

该知识点来源于B站知弦本章便是对其DA(数字信号转模拟信号)应用的简单总结!!!

一、DA转化

        DIA转换一般由电阻解码网络、模拟电子开关、基准电压、运算放大器等组成。按电阻解码网络的组成形式,将D/A转换器分成有权电阻解码网络DIA转换器、T型电阻解码网络D/A转换器、倒T型电阻解码网络D/A转换器和开关树型电阻解码网络D/A转换器等。
        倒T型电阻解码网络D/A转换器只用到两种电阻,精度较高,容易集成化,在实际中使用最频繁。倒T型电阻解码网络DIA转换器介绍D/A转换器的工作原理如下图。


 

 二、DAC0832芯片
        DAC0832是采用CMOS工艺制成的电流型8位T型电阻解码网络D/A转换器芯片,是DAC0830系列的一种。它的分辨率为8位,满刻度误差+1LSB,线性误差+0.1%,建立时间为1μs,功耗20mW。其数字输入端具有双重缓冲功能,可以双缓冲、单缓冲或直通方式输入。由于DAC0832与单片机接口方便,转换控制容易,价格便宜,所以在实际工作中广泛使用。其接口介绍如下图:


 

 三、仿真与程序

1、仿真:button、AT89C51、tl082(运算放大器)、DAc0832(DA转化芯片)

 

 

 2、程序

根据仿真可以看出程序的功能:

功能1:根据按键调PWM占空比

功能2:显示三角波

功能三:显示正弦波

#include "reg51.h"
#define uint unsigned int 
sbit key1=P1^0;
sbit key2=P1^2;
uint flat=0,m=0;

//code:不占用单片机内存空间
code unsigned char sin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,
0xab,0xae,0xb1 ,0xb4,0xb7 ,0xba,0xbc,0xbf,0xc2,0xc5,0xc7 ,0xca,0xcc,0xcf,0xd1 ,0xd4,0xd6,
0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7 ,0xe9,0xea,0xec,0xee,0xef,0xf1 ,0xf2,0xf4,0xf5,
0xf6, 0xf7 ,0xf8,0xf9,0xfa,0xfb ,0xfc ,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7 ,0xf6,0xf5,0xf4,0xf2,0xf1 ,0xef,0xee,
0xec,0xea,0xe9,0xe7 ,0xe5,0xe3,0xe1,0xde ,0xdd,0xda,0xd8,0xd6,0xd4 ,0xd1 ,0xcf,0xcc,
0xca,0xc7 ,0xc5,0xc2,0xbf,0xbc,0xba,0xb7 ,0xb4,0xb1 ,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,
0x69,0x66,0x63,0x60,0x5d,0x5a,0x57 ,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,
0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b, 0x0a,0x09,0x08,0x07 ,0x06 ,0x05,0x04,0x03,
0x02,0x02,0x01 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 ,0x02,
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,
0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,
0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51 ,0x55,0x57 ,0x5a,0x5d,0x60,0x63,0x66,
0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80}; //正弦表

void delay(uint n)
{
	uint i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);	
	}
}

void PWM()
{
	P2=0;
	delay(100);
	P2=255;
	delay(m);
}

void key()
{
	if(key1==0&&flat==0)
	{
		flat=1;
	}
	if(key1==1&&flat==1)
	{	
		m=m+10;
		flat=0;
	}
	if(key2==0&&flat==0)
	{
		flat=1;
	}
	if(key2==1&&flat==1)
	{	
		m=m-10;
		flat=0;
	}
}

void stair()
{
	uint i=0;
	for(i=0;i<255;i++)
	{
		P2=i;
		delay(5) ;
	}
}


void stair1()
{
	uint i=0;
	for(i=0;i<255;i++)
	{
		P2=sin[i];
//		delay(5) ;
	}
}

void main()
{
	while(1)
	{
		stair1();
//		key();
//		PWM();
	}
}

四、总结

学会DAC0832的使用,

PWM占空比通过延时来调整

需要显示三角波只需要使用一个for循环

正弦波的显示分为256个十六进制,但是实验结果可知细分下去还是方波,说明越细分,显示效果越好!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值