查看: 1273|回复: 0
打印 上一主题 下一主题

模数转换 DAC0832的应用--输出0~5V的锯齿波或三角波

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-14 21:31: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(); }
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表