目录
资料下载地址:基于51单片机的信号发生器
一、项目功能
1. 输出矩形波、梯形波、三角波、锯齿波、正弦波五种波形;
2. 每种波形的频率可更改;
3. 采用lcd12864中文显示屏显示波形和相关信息;
二、仿真
正弦波
三角波
方波
锯齿波
三、程序
部分程序
#include <reg52.h>
#include <math.h>
#include <intrins.h>
#include <lcd12864.h>
#define DAC_OUT P2
sbit change_wave=P3^2; //改变波形按键
sbit change_rate=P3^3; //改变频率按键
uchar mode=0,rate=0,delay_time=0,k,p; //为波形发生模块提供中间变量
uchar *which_wave,*which_wave2;
uint rate_num;
void main()
{
lcd_init();
clr_screen();
which_wave=&Sine_wave[0];
disp_chinese();
disp_function(chinese_sine);
disp_rate(400);
disp_xy();
disp_wave(which_wave);
wave_init();
while(1)
{
delay_time=rate; //rate=0时,12mhz下,为400hz的波形。循环一次的时间为0.00025ms
DAC_OUT=*(which_wave+k);
k++;
if(k==64)
k=0;
while(delay_time)
delay_time--;
}
}
void int0() interrupt 0 //波形选择中断服务程序
{
EX0=0;
wave_delay();
mode++;
if(mode==4)
mode=0;
switch(mode)
{
case 0 : //显示正弦波
which_wave=&Sine_wave[0];
which_wave2=&chinese_sine[0];
break;
case 1 : //显示三角波
which_wave=&Triangular_Wave[0];
which_wave2=&chinese_triangular[0];
break;
case 2 : //显示方波
which_wave=&Square_wave[0];
which_wave2=&chinese_square[0];
break;
case 3 : //显示锯齿波
which_wave=&Sawtooth_Wave[0];
which_wave2=&chinese_sawtooth[0];
break;
}
wave_delay();
clr_screen();
disp_chinese();
disp_rate(400/rate);
disp_function(which_wave2);
disp_xy();
disp_wave(which_wave);
while(!change_wave);
EX0=1;
}