DAC0832联合51单片机生成锯齿波、三角波、梯形波

1、描述

1、仿真

3、C代码 

描述

通过51单片机的P3口输出8位的数据给DAC0832,通过P1口作为波形切换按钮,采用中断检测按键是否按下。

仿真

C代码

#include <REGX51.H>
#include <intrins.H>


void Delay_1us(int j)        //延时函数
{
 while(j)
 {
    _nop_();
     j--;
 }
}
 int in=0;
void main()
{    
    int a=0,b=0;
    TMOD &= 0xF0;            //设置定时器模式
    TL0 = 0x66;                //设置定时初始值
    TH0 = 0xFC;                //设置定时初始值
    TF0 = 0;                //清除TF0标志
    TR0 = 1;                //定时器0开始计时
    ET0=1;
    EA=1;

  while(1)
    {
while(in==1)
{
    //锯齿波
P3+=1;
Delay_1us(1);
if(P3==255)
P3=0;
}

    //三角波
while(in==2)
{
while(a!=255)
{
        a++;
P3+=1;
Delay_1us(1);
}
while(a!=0)
{
P3-=1;
Delay_1us(1);        
a--;
}
P3=0;
}

//梯形波
while(in==3)
{
while(b!=255)
{
        b++;
P3+=1;
Delay_1us(1);
}
Delay_1us(600);
while(b!=0)
{
P3-=1;
Delay_1us(1);        
b--;
}
P3=0;
}
}

}

void zhongduan(void) interrupt 1    //中断控制程序,每1ms中断一次

    TL0 = 0x66;                //设置定时初始值
    TH0 = 0xFC;                //设置定时初始值
    if(P1_0==0)
        in=1;
    else if(P1_1==0)
        in=2;
  else if(P1_2==0)
        in=3;
    else 
        in=0;
}

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值