基于单片机四种波形发生器仿真设计-毕设课设
【资源下载】下载地址如下:
https://docs.qq.com/doc/DTlRSd01BZXNpRUxl
电路的操作:
四个功能键:
1波形:依次在四种波形之间切换
2频率_幅值切换:在频率和幅值调节之间切换
3加:每按一次频率按10Hz的步长递增,或幅值按1V的步长递增
4减:每按一次频率按10Hz的步长递减,或幅值按1V的步长递减
电路设计原理:
利用两片DAC0832数模转换芯片,均工作在直通方式。
U1用来控制幅值,U2用来控制波形
U1的工作方式设置为直通,参考电压设置为-5V,则输出电压范围为0-----+5V
输入端接P0口,数字量与模拟量的关系为:
Vout1=-1*(VREF/256)*D
其中:VREF为参考电压等于-5V,D是P0口的数字量,取值为0---255
可以通过调节由P0口输入的数字量D来调节输出电压Vout1的数值。
如果要求输出电压Vout1为: 1,1.5,2,2.5,3,3.5,4,4.5,5
则由上述公式可以计算出与之相对应的数字量为:
amplitude[9]={51,77,102,128,154,179,205,230,255};
由P0口输入数字量D,就可以得到相应的电压值Vout1,从而实现了输出电压幅值的调节。
#include <reg52.h>
#include <stdio.h> //sprintf
#include <intrins.h> //nop
#include "lcd12864.h"
#define uchar unsigned char
#define uint unsigned int
sbit KEY1=P3^4; //波形
sbit KEY2=P3^5; //频率_幅值
sbit KEY3=P3^6; //+
sbit KEY4=P3^7; //-
sbit LE1=P3^0; //LCD锁存控制
//按键标志位,如果有键按下,置1
bit K_WAVE=0; //波形
bit K_FREQ_AMP=0; //频率——幅值
bit K_ADD=0; //加
bit K_REDUCE=0; //减
//用于存储与 20Hz----80Hz 频率相对应的定时器预装入值
uint idata freq[7];
//用来存储幅值数字量 1 1.5 2 2.5 3 3.5 4 4.5 5 0.5V一个步长
//这是第一级输出,第二级输出*2
uchar xdata amplitude[9]={51,77,102,128,154,179,205,230,255};
//用来选择freq[index]数组的频段
//freq 20 30 40 50 60 70 80 Hz
//index 0 1 2 3 4 5 6 freq[]数组下标
uchar data index_freq=0; //频率数组下标
uchar data index_amp=0; //幅值数组下标
uchar idata C_WAVE=0; //波形切换
uchar idata C_FREQ_AMP=0; //频率——幅值切换
//波形显示数据
uchar code disp_wave[4][9]={
"1方波 ",
"2锯齿波",
"3三角波",
"4正弦波"
};
/* uchar code wave_sin[256]=
{
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,