标题:
模数转换芯片DAC0832产生锯齿波 三角波发生器 proteus仿真及源码
[打印本页]
作者:
51黑ff
时间:
2016-10-10 16:16
标题:
模数转换芯片DAC0832产生锯齿波 三角波发生器 proteus仿真及源码
51单片机驱动模数转换芯片DAC0832产生锯齿波 三角波的proteus仿真原理图:
0.png
(31.08 KB, 下载次数: 107)
下载附件
2016-10-10 16:13 上传
单片机源程序:
/********************************************************************
51黑电子论坛
*********************************************************************/
#include<reg52.h> //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
/********************************************************************
初始定义
*********************************************************************/
sbit P3_2=P3^2;
sbit P3_3=P3^3;
unsigned char keycnt=0;
unsigned char tcnt=0; //键值判断
bit sjz=0; //产生三角波时用到的标志
void delayl() //延时子程序
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void KEY() //按键扫描程序
{
if(P3_2==0)
{
delayl(); //延时跳过按下时的抖动
if(P3_2==0)
{
keycnt=0; //定时器产生锯齿波标志
TR0=0; //暂时停止波形输出
TH0=0x256-40; //对TH0 TL0 赋值
TL0=0x256-40;
TR0=1; //开始定时,产生锯齿波
while(P3_2==0); //如果一直按着键,则等待松键开
delayl(); //延时跳过松开后的抖动
}
}
if(P3_3==0)
{
delayl(); //延时跳过按下时的抖动
if(P3_3==0)
{
keycnt=1; //定时器产生三角波标志
TR0=0; //暂时停止波形输出
TH0=0x256-40; //对TH0 TL0 赋值
TL0=0x256-40;
TR0=1; //开始定时 产生三角波
}
while(P3_2==0); //如果一直按着键,则等待松键开
delayl(); //延时跳过松开后的抖动
}
}
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
if(keycnt==0) //产生锯齿波
{
P0=tcnt;
tcnt=+0x0a; //步进0.2V/一次中断
if(tcnt==0xfb)
tcnt=0;
}
if(keycnt==1) //产生三角波
{
if(sjz==0)
{
P0=tcnt;
tcnt=+0x0a;//步进0.2V/一次中断
if(tcnt==0xfa)
sjz=1;
}
if(sjz==1)
{
P0=tcnt;
tcnt=-0x0a;
if(tcnt==0)
sjz=0;
}
}
}
void main(void)
{
TMOD=0x02; //定时器工作在方式2
ET0=1;
EA=1;
while(1)
KEY();
}
复制代码
0.png
(63.64 KB, 下载次数: 97)
下载附件
2016-10-10 16:16 上传
仿真工程文件及所有完整程序等资料下载地址(压缩包一共有45个单片机仿真,全部下载后找到第013个项目即可):
http://www.51hei.com/bbs/dpj-56298-1.html
作者:
亘黑鹿
时间:
2016-11-2 22:44
示波器呢?
作者:
stt980516
时间:
2018-11-12 23:00
可以使用吗
作者:
MyWifeKotori
时间:
2020-3-13 13:58
示波器呢。。?
作者:
hh002
时间:
2023-5-28 01:22
示波器:没我也可以有波?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1