基于单片机多功能五种波形发生器-学习笔记
方波、三角波、正弦波、梯形波、锯齿波发生器,四个按键,波形选
择按键对波形选择,频率增加键,占空比调节只针对方波,当按下占
空比按键,则频率调节按键锁定失效,仅可以对占空比进行调节,当
按下波形选择键,频率按键激活。滑动变阻器对振幅进行调节。

/* 波形发生器 */
/* 2018.4.28 */
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/* #define Fosc 24000000/12000000 //12分频后的频率 */
#define DAdata P0 /* DA数据端口 */
sbit DA_S1 = P2 ^ 0; /* 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存 */
sbit DA_S2 = P2 ^ 1; /* 控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存 */
sbit key = P3 ^ 2;
uchar wavecount; /* '抽点'计数 */
uchar THtemp, TLtemp; /*传递频率的中间变量 */
/* uint T_temp; */
uchar judge = 1; /* 在方波输出函数中用于简单判别作用 */
uchar waveform; /* 当其为0、1、2时,分别代表三种波 */
uchar flag = 0;
uchar code freq_unit[3] = { 10, 10, 10 }; /* 增加或者减少10倍频 */
uchar idata wavefreq[3] = { 1, 1, 1 }; /* 给每种波定义一个数组单元,用于存放单位频率的个数 */
uchar code lcd_hang1[] = { "Saw Wave " "Ti Wave " "Sine Wave " "Triangle Wave " "Square Wave " "Select Wave: " "press No.1 key! " };
uchar idata lcd_hang2[16] = { "f= Hz " };
/*uchar code wave_freq_adjust[]={ //频率调整中间值
* 0xff,0xb8,0x76,0x56,0x43,0x37,0x2e,0x26,0x20,0x1c, //正弦波频率调整中间值
* 0xff,0x8e,0x5a,0x41,0x32,0x28,0x20,0x1b,0x17,0x0e, //三角波频率调整中间值
* 0xff,0x8e,0x5a,0x41,0x32,0x28,0x20,0x1b,0x17,0x0e};
* uint code wave_freq_adjust[]={ //频率调整中间值
* 380,184,118,86,67,55,46,28,38,32,
* 295,142, 90,65,50,40,32,27,23,14,
* 295,142, 90,65,50,40,32,27,23,14}; */

浙公网安备 33010602011771号