信号发生器c语言编程,51单片机+DAC0832的信号发生器Proteus仿真设计(附仿真文件+Word文档+C程序...

intmain(void)

{

uchar data i=0;

uchar idata strtemp[35];

SP=0xA0;

for(i=0; i<7; i++)

{

//从20Hz开始,到80Hz,步长为10Hz,共7个频率数据,最高只能做到80Hz,同时由于启动中断会占用一定时间,所以补偿25us。

freq=65535-(1000000/(20+i*10)/256)+25;

}

TMOD=0x11;

ET0=1;

ET1=0;

EA=1;

TL0=freq[index_freq]%256;

TH0=freq[index_freq]/256;

TR0=1;

IT0=0;

EX0=1;

LE1=0;

P2=amplitude[index_amp];

EA=0;

LE1=1;

LCDinit12864();

LCD_DispStrWide(0x00,"波形:1方波");

LCD_DispStrWide(0x10,"频率:20Hz");

LCD_DispStrWide(0x08,"幅值:2.0V");

LCD_DispStrWide(0x18,"波形 频率 +-");

LE1=0;

EA=1;

while(1)

{

if(K_WAVE==1)

{

K_WAVE=0;

C_WAVE++;

if(C_WAVE>=4) C_WAVE=0;  //0:方波1:锯齿波 2:三角波3:正弦波

sprintf(strtemp,"%s%s","波形:",disp_wave[C_WAVE]);

LE1=1;

EA=0;

LCD_DispStrWide(0x00,strtemp);

EA=1;

LE1=0;

}

else if(K_FREQ_AMP==1)

{

K_FREQ_AMP=0;

C_FREQ_AMP++;

if(C_FREQ_AMP >= 2) C_FREQ_AMP=0;

LE1=1;

EA=0;

if(C_FREQ_AMP == 0)

LCD_DispStrWide(0x18,"波形 频率 +-");  //0:频率

else

LCD_DispStrWide(0x18,"波形 幅值 +-");  //1:幅值

EA=1;

LE1=0;

}

else if(K_ADD == 1)

{

K_ADD=0;

if(C_FREQ_AMP == 0)

{//在7种频率之间切换 20Hz,30Hz,40Hz,50Hz,60Hz,70Hz,80Hz

index_freq++;

if(index_freq>=7) index_freq=0;

sprintf(strtemp,"%s%d%s","频率:",(int)(20+index_freq*10),"Hz");

LE1=1;

EA=0;

LCD_DispStrWide(0x10,strtemp);

EA=1;

LE1=0;

}

else

{

//在9种幅值之间切换  1V,2V,3V,4V,5V,6V,7V,8V,9V,10V

index_amp++;

if(index_amp > 8) index_amp=0;

sprintf(strtemp,"%s%.1f%s","幅值:",(float)(1+index_amp*0.5)*2,"V ");

LE1=1;

EA=0;

LCD_DispStrWide(0x08,strtemp);

LCD_DispStrWide(0x10,"频");

EA=1;

LE1=0;

P2=amplitude[index_amp];

}

}

else if(K_REDUCE==1)

{

K_REDUCE=0;

if(C_FREQ_AMP == 0)

{

if(index_freq > 0)

index_freq--;

sprintf(strtemp,"%s%d%s","频率:",(int)(20+index_freq*10),"Hz");

LE1=1;

EA=0;

LCD_DispStrWide(0x10,strtemp);

EA=1;

LE1=0;

}

else

{

if(index_amp > 0)

index_amp--;

sprintf(strtemp,"%s%.1f%s","幅值:",(float)(1+index_amp*0.5)*2,"V ");

LE1=1;

EA=0;

LCD_DispStrWide(0x08,strtemp);

LCD_DispStrWide(0x10,"频");

EA=1;

LE1=0;

P2=amplitude[index_amp];

}

}

} return 0;

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值