⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9833.c

📁 基于51单片机的DDS正弦波发生程序
💻 C
字号:
#include "reg51.h"
sbit	dds_en=P1^5;
sbit	dds_clk=P1^6;
sbit	dds_dat=P1^7;
unsigned	char	control;
void delay(unsigned 	int	T)
{
	while(T){
	T--;
	}
}
void	write_2byte(unsigned	int a){		//write 2 byte to dds
	unsigned char  	i	;
	dds_clk=1;
	dds_dat=1;
	dds_en=1;
	control=0;
	delay(1000);
	dds_clk=1;
	delay(2);
	dds_en=0;
	for(i=0;i<16;i++){
		if(a&0x8000){dds_dat=1;}
		else	dds_dat=0;
		dds_clk=0;
		delay(5);
		dds_clk=1;
		a=a<<1;
	}
	delay(2);
	dds_en=1;
	dds_clk=0;
	delay(1000);
	control=1;
	}

	void	init_dds(void){
		write_2byte(0x2100);
		write_2byte(0x2000);
		write_2byte(0x4000);
		write_2byte(0x403F);
		write_2byte(0x8000);
		write_2byte(0x803F);
		write_2byte(0xC000);
		write_2byte(0xF000);
		write_2byte(0x2000);
		}
	void	output(unsigned long freq_value){			
		unsigned long dds;
		unsigned int dds1,dds2;
		dds=freq_value*11.18481067;
		dds=dds<<2;
		dds1=dds;
		dds2=dds>>16;
		dds1=dds1>>2;
		dds2=dds2&0x7FFF;
		dds2=dds2|0x4000;
		dds1=dds1&0x7FFF;
		dds1=dds1|0x4000;
		write_2byte(0x2000);
		write_2byte(dds1);
		write_2byte(dds2);
		}
		void	scan(unsigned	long	first,unsigned	long	step,unsigned	long	end){
			unsigned	long	temp,jj;
			for(temp=first;temp<end;temp=temp+step){
				output(temp);
					for(jj=0;jj<100;jj++){ 
						delay(1000);
				}
		}
}			
	void main(){
																								 //
		init_dds();
	//	output(50) ;
		while(1){
		scan(1000,10000,1000000);
		
		
	}	
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -