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;
}