📄 dac.c
字号:
#include"c8051f020.h"
#include"math.h"
sfr16 DAC0 = 0xd2; /*DAC0数据*/
sfr16 DAC1 = 0xd5; /*DAC1数据*/
void DAC0_Init(void)
{
REF0CN =0x03; /*内部偏压发生器和电压基准缓冲器工作,基准从VREF引脚输出*/
DAC0CN |=0x80; /*DAC0允许,DAC输出更新发生在写DAC0H时*/
}
void DAC1_Init(void)
{
REF0CN =0x03; /*内部偏压发生器和电压基准缓冲器工作,基准从VREF引脚输出*/
DAC1CN |=0x80; /*DAC1允许,DAC输出更新发生在写DAC1H时*/
}
void squrewave(bit flag)
{
uint i;
if(flag==0)
{
DAC0L=0xf0; /*设置待转换的值并启动D/A转换*/
DAC0H=0x0f;
for(i=0;i<=5000;i++); /*方波高电平宽度*/
DAC0L=0x0;
DAC0H=0x0;
for(i=0;i<=5000;i++); /*方波低电平宽度*/
}
else
{
DAC1L=0xf0; /*设置待转换的值并启动D/A转换*/
DAC1H=0x0f;
for(i=0;i<=5000;i++); /*方波高电平宽度*/
DAC1L=0x0;
DAC1H=0x0;
for(i=0;i<=5000;i++); /*方波低电平宽度*/
}
}
void sinwave(bit flag)
{
float y,x;
//uint i;
for(x=0;x<(2*3.14159);x+=0.01)
{
y=2048*(sin(x)+1); /*12位ADC的数字容量为4K(0--0FFFH)y的最大值为4096*/
if(flag==0) DAC0=y; /*设置待转换的值并启动D/A转换*/
// DAC0H=DAC0H ;
else DAC1=y;
//for(i=0;i<=1;i++); //延时可改变正弦波周期
}
}
void sawtooth(bit flag)
{
uint i;
if(flag==0)
{
DAC0L=DAC0L ; /*设置待转换的值并启动D/A转换*/
DAC0H=DAC0H ;
for(i=0;i<=100;i++); /*延时*/
DAC0=DAC0+1; /*DAC输出值递增*/
}
else
{
DAC1L=DAC1L ; /*设置待转换的值并启动D/A转换*/
DAC1H=DAC1H ;
for(i=0;i<=100;i++); /*延时*/
DAC1=DAC1+1; /*DAC输出值递增*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -