ad9833.c
来自「基于51单片机的DDS正弦波发生程序」· C语言 代码 · 共 82 行
C
82 行
#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 + =
减小字号Ctrl + -
显示快捷键?