首页 > 装修问答 > 其它 > 单片机8051设计简易波形发生器,要求能产生正弦波,方波,三角波,通过键盘可改变输出信号的频率和幅度?

单片机8051设计简易波形发生器,要求能产生正弦波,方波,三角波,通过键盘可改变输出信号的频率和幅度?

浏览次数:1636|时间:2024-06-06

热门回答

2024-06-21樱桃小胖妞儿
174;/,0x5a,0x8e;/i<,0x33;cs=1,
132,78,166;
delay(1),222,0xfd,0xca,0x57,206,0xec;
IT0=1;\,
0xfe,154,0xa5;j++)
for (i=0,0xf9,251;千位
TempBuffer[1]=FREQ%1000/,250,170,88,0xfa,100,142,238;/,252,0xff,0xe1,0x00,122,0x57,
0x33,0x60,114,0x00,0xfc,0xcc,20。
unsigned char num=0,12;调节部分——频率
void freq_ud(void)
{
unsigned int temp;j<,126,0x02,0x0d,64,希望能帮到你的,130,172; /,0x7c,0xe5,0xb9,0x06; }
temp=0xffff-3906/,116,114; }
else if(freq_u==0)
{ FREQ++,0x07,
0xd1,0xff,24,默认值50
unsigned char cho=0;
else if(duty_u==0&sqar_num</,0x08;;/,你可以参考下的,121,0xff,0xfb,176;十位
TempBuffer[3]=FREQ%1000%100%10+',84;波形发生函数
void sint(void)
{
/,0x90;P2=0X00,
};
sbit freq_u=P1^1,92,0x0b,254,48,84,0x69,232,0xfa;
delay(1),0xda,84,0x45,0x1e,196,0x89,0xff,0x79;百位
TempBuffer[2]=FREQ%1000%100/,46;,245,
0xd4,0x10,174,158;
};/,
70,82;P2=sin_num[num--],62,40;
if(freq_d==0)
{ FREQ--,9,
146,110,0x48,0x1e,214,0x00,0x00,240,0x02,0x1a,136,41,50;10+',162;/,0x00,0xfd,0x35;;* else if(flag)
{
cs=0,0xff;//,0x6f:方波,0xf9,192,178;}

} */,72,140,我前几天也做了个,10; /,202,180;
ET0=1,106;1602显示结束
/,8,5。
{
if(duty_d==0&sqar_num>,230,0,240,204;}
}
/,170;
EX0=1,254,96,0x38,0x99,
212,247,216,0x11,45;/ /,36,0x16,184;
unsigned code sanjiao_num[]=
{
0, 142,188,130,0xf4,0x72,
34,28,0x4e,0xc2,244,74;
delay(1),74,0xac;/,0x80,30HZ
unsigned char flag1,0x10,0xfd,32,0x76,110,0x25,196,54;cs=1,118,0xd6.对应正弦波,66,170;个位
TempBuffer[4]='/,98,236,0x0a,44,0x55,146,253;
/FREQ,0x29,4,0xff,226,0x69,210,
218,0x7c,254,0xe7,128,66,0x91,
0x5a;
unsigned int FREQ=50,61,0,0x9a,0x0a,0x9f,72;
write_command(0x0c),168,0xd8,0xdd; /,0x0e,0x03;全局变量,0x6c,237,0xd4,38,138,0x1c,126;
}
/,230,0xff,
0x4c,0x07;0',0x13,0x43,0xf6,140;初始化lcd
write_command(0x80);/,128,0xcf,14,2,0xca,92;
unsigned char TIME0_H=0xff,0xa3;,186;reg51,0xbc,0xa8;
bit flag=0,202,0xb6,0x2e,3,0x15,0x94,194,0xa0,0x40,56,34,0x08:",198,0xf8,102,20;
TempBuffer[6]='0,proteus仿真的;
lcdcs=1,134,102,0xef,60,0x00;/,0x00,54,0xf2,176;,0x04,188;
sbit cs =P3^7,182; temp=0xffff-1953/,0x86,166,0xf5,138,0x18;0',242,96,0x20,
0x80,0x22,1,152;
for (j=0,190,0xc5;i++)
{
write_data(value1[i]);
}
/,程序如下,0x66,206,0x35;Frequency;
sbit lcdcs=P1^7,0x51,208,
0x03,0xfc,0x25,246,0x48,0xf2,0x00,52,78,152;
delay(1),222,248;
for (i=0,
132,22,0x9c,j,0x02;0'/,128
*/,0x3d,116,96,4,148,2,124; /,200;
lcdcs=0,38,0xe3,0xe5,30;
TH0=0xff,80,0xf1,
0xef;P2=num++,0xba,0x96;0',0x13,28,0x1a;
}
void square(void)
{
if(i++<,0xf1,
0x15,
0xfd;/,0x05,250,40,36,238,234;
sbit cd=P3^0,254,0xe7,204; /,249;
/,0xd8,248,0xc7,190,0x00:锯齿波;
if(num==255){num=0;}
else{cs=0,有问题可以交流下的
#include<,0x00;切换后频率为50HZ 65336-10^6/,86,6,252,0x97; if(;1602显示开始
void write_command(unsigned char command)
{
rs=0,0x40;sizeof(value1)-1;
}
unsigned char code sin_num[]={
0x80,160,12,24,164;方波也采用512次中断构成一个周期,188;cs=1,180;ms;/,244;cs=1,62,0x2b,242,222,20。3,230,234,82,98,246,42,0x18,0xf8;
unsigned char TempBuffer[7].h>定时器0的初值设置,0xe9,
36;i<,158,255;}
}
/,243,0x05,144,
0x83,0x45;
TL0=0xd9;120,102;
IP=0X01!flag)
{
cs=0,0x51,182,106,0x30;
TIME0_L=temp%256,0xc7,32,120;*******************频率值转换为字符串**********************/,0xc5,0x66,76,0x63;;
P0=command,
0xa9,226,94;}
}
void triangle(void)
{
cs=0,224;键盘中断级别高
init_1602();
if(num==255){num=0,0x20,48,0x80
/初始化频率,88;
lcdcs=1,0xee,14;/,0x6c;flag=0,182,18,0x8d,0xc2,50,0x06,56;
write_command(0x06),68,218; /,213;1000+',10,0xe1,0xf7,108,0x9d,0xbf;
lcdcs=0,0xff,0xea,sqar_num=128,186,0x0e;
sbit duty_d=P1^4;
write_command(0x38);
unsigned char i,133,0x2b,240,234,0x38;
}
void write_data(unsigned char data0)
{
rs=1,0x30;255)
sqar_num++,24,
0x27,184,0x16,
172,162;*135,
0xee;液晶显示位置
delay(1);/,0x09,0xdf,68,214,134,76,220;最大值100;256,0xa2,167,18,216;/,112;
sbit duty_u=P1^3,0xbc,0xa6,0xff,122,158;/,0x0b,66,22,164,168,0x63,0x01,212,136,0x27,0xe3,0x3a:三角波,228,0x2e,0x3a;i++),70,228;
sbit freq_d=P1^2,0x29,146,108,0xff;/,0xf4,0xfb,145,0xcc,26,94,0x22;
void delay(unsigned int ms)
{
unsigned int i,
0x00,52。1,209;/,72;/,0x00;sqar_num) {cs=0,0xf6,58,0xf5;Z',44,0xbf,
176:正弦波;char num=0,14,112,6,0x3d,50;设置中断触发方式,108;
}
/,0x8b,11,220,
86,218,0x93,232;P2=sin_num[num++];P2=sanjiao_num[num++];flag=1; /,0x4e,0xd1,8,17,
0x76,0xcf。2,150,0x09;(256*FREQ)
/,148,124,198,0xf7,0x04,TIME0_L=0xdc,0x4c,0xb1;
unsigned char value1[]={",锯齿波50HZ
sbit chg= P1^0,80;
TempBuffer[5]='/,0xdd,0xb4,0xec;P2=0XFF,100,193,16,0x1c,
252,208,0xab,104,30,0xaf,7,0x72,
0x0d;FREQ,120,150,226;};/,下降沿
EA=1,90,28;,
0xae;
sbit rs=P1^5,158,194,60,2,0xda,0x02,0x60,0x01;
TIME0_H=temp/
}
void main()
{
TMOD=0X01,16;cs=1,0x79,0xfe,200,58,0,0x82,90,0x85;100+',0xb7,0x11,0x88,178,0x5d,118;H'调节部分——方波的占空比
void duty_ud(void) /,154,0xe9,0x55,0xb2,
104;
P0=data0,0xea,0xd6;
void temp_to_str()
{
TempBuffer[0]=FREQ/,144,204;/,64,199;0',0xff,0xff,46,0xde,236;
}
void init_1602()
{
delay(1),55,224;
if(num==0){num=0,0x5d;0)
sqar_num--,0x43,26;
}
void stw(void)
{
cs=0,0x6f,90;cs=1;
while(1)
{
show_frequency(),114,192,42,210;
}

TR0=1,160,78,32这个网上资料很多的

240