标题:
单片机使DAC0832输出锯齿波、三角波,并用示波器显示
[打印本页]
作者:
冉猫鱼
时间:
2020-6-12 20:50
标题:
单片机使DAC0832输出锯齿波、三角波,并用示波器显示
仿真电路:
51hei.png
(125.46 KB, 下载次数: 102)
下载附件
2020-6-12 22:16 上传
单片机源程序如下:
#include <reg52.h>
#include <math.h>
#define DAC_PORT P2 //如图,DAC0832连接端口
//两种波
#define W_TRI 0
#define W_SAW 1
#define PI 3.1415926f //圆周率
//简化类型符写法
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
sbit DAC_WR=P3^6; //DAC0832使能口
sbit DAC_CS=P1^7;
//全局变量
u8 mode;//模式:锯齿波,三角波
u16 freq;//频率
u8 time;//计次参数
u8 AM;//调幅
void Timer0Init(void);
void sys_init(void);
void tri_wave(u8 location);//三……
void saw_wave(u8 location);//锯……
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x02; //设置定时器模式
TL0 = 0x9C; //设置定时初值
TH0 = 0x9C; //设置定时重载值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1; //开总中断
ET0 = 1; //开定时器0中断
}
void sys_init(void)//系统初始化
{
time=0;
DAC_WR=0;
DAC_CS=0;
DAC_PORT=0;
mode=0;//默认输出三角波,mode=1;输出锯齿波
freq=100;//默认频率100Hz
AM=255;//最大幅度
}
void tri_wave(u8 location)//三……
{
//为了简化,在单周期输出V字形
u8 y;
if(location<50)
y=(50-location)*AM/50;
else
y=(location-50)*AM/50;
DAC_PORT=y;
}
void saw_wave(u8 location)//锯……
{
DAC_PORT=location*AM/100;
//用(100-location)也以变成反向锯齿
}
void Timer0Work() interrupt 1 //中断服务函数
{
switch(mode)
{
case W_TRI:tri_wave((u8)((time*freq/100)%100));break;
case W_SAW:saw_wave((u8)((time*freq/100)%100));break;
}
time++;
if(time>=100)//计数100次
time=0;
}
int main(void)
{
sys_init();
Timer0Init();
while(1)
{
;
}
}
复制代码
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
所有资料51hei提供下载:
DAC0832.rar
(52.33 KB, 下载次数: 19)
2020-6-12 20:47 上传
点击文件名下载附件
下载积分: 黑币 -5
其他波形参考:
http://www.51hei.com/bbs/dpj-100216-1.html
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1