基于单片机多功能五种波形发生器-学习笔记

方波、三角波、正弦波、梯形波、锯齿波发生器,四个按键,波形选

择按键对波形选择,频率增加键,占空比调节只针对方波,当按下占
空比按键,则频率调节按键锁定失效,仅可以对占空比进行调节,当
按下波形选择键,频率按键激活。滑动变阻器对振幅进行调节。

 

/* 波形发生器 */

/* 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}; */

 

 

posted @ 2021-03-11 19:12  MCU创新DIY  阅读(117)  评论(0)    收藏  举报