帮我看下我的单片机信号源程序对不对

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:15:09
#include<reg51.h>
#define DA0832 P1
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;

unsigned char a,b;

void delay()
{unsigned char i;
for(i=0;i<10;i++);
}

void SJ()//三角波///
{a=0;
if(a<128)DA0832=a;
else DA0832=255-a;
a++;
}

void FB()///方波////
{DA0832=0x00;
delay();
DA0832=0xff;
delay();
}

void JX()//矩形波///
{
for(b=0;b<255;b++)
{DA0832=b;}
}

void main(void)
{P2=0xff;
if(P2_4!=1)
{delay();
if(P2_4!=1)
P2_0=0;
while(1)
{
SJ();
};
}
if(P2_5!=1)
{
delay();
if(P2_5!=1)
P2_1=0;
while(1)
{FB();};
}
if(P2_6!=1)
{
delay();
if(P2_6!=1)
P2_2=0;
while(1)
{JX();
}
}
}

经过编译是没有错,但我的板不能用,希望高手帮看下有没有错,这是参考了一下网上

void JX()//矩形波///
{
for(b=0;b<255;b++)
{DA0832=b;}
}

这个好像不是矩形吧?锯齿波了。

程序思想是对的,但是频率不能控制。建议在硬件上调试,脱离硬件,学习的效果不好。

程序的主体结构就有问题,细节问题,都没有耐心看。
void main(void)
{
P2 = 0xff;
if(P2_4 != 1){ //有键按下
delay(); //消抖时间
if(P2_4 != 1) //依然按下
P2_0 = 0; //可能是外部的指示灯
//那么此处应该关闭其它两个
while(1) { //此处并未确认依然按下
SJ(); //输出三角
}; //死在里面了,再也没有检测按键
}
//……

void SJ()//三角波///
{a=0; //执行这个函数,a永远是0,谈何三角?
if(a<128)DA0832=a;
else DA0832=255-a;
a++;
}