|
程序可以正常運(yùn)行,大家可以拿去用了,呵呵
#include "reg52.h"
/****************51并行驅(qū)動(dòng)****************/
sbit clk =P1^0;
sbit fq_ud =P1^1;
sbit rst =P1^2;
#define dat P3
sbit key1 =P1^4;
sbit key2 =P1^5;
sbit key3 =P1^6;
sbit key4 =P1^7;
unsigned char phase_word=0x00; //相位控制字,使用低5位
unsigned char power_down=0x00; //低功耗模式
unsigned char mult=0x01; //6倍頻是否打開(kāi)
unsigned char ww[5]={0x09,0x0E,0x38,0xE3,0x8E};
unsigned long freq,set_value;
void delay_us(unsigned int i) //delay
{
while(i--);
}
//AD9851初始化,在此之前請(qǐng)確認(rèn)D0,D1和D2的電平狀態(tài)
void init_dds(void)
{
rst=1; //高電平復(fù)位
delay_us(10000); //延時(shí)10mS
rst=0;
delay_us(10000); //延時(shí)10mS
}
//往AD9851寫(xiě)數(shù)據(jù)
void write_dds(unsigned long dds)
{
unsigned char i;
ww[4]=dds&0xFF; //頻率字最低字節(jié)
ww[3]=(dds>>8)&0xFF;
ww[2]=(dds>>16)&0xFF;
ww[1]=dds>>24; //頻率字最高字節(jié)
ww[0]= (phase_word<<3)|| power_down<<2 || mult; //控制字
fq_ud=0; //FQ_UD置低
clk=0; //CLK置低
for(i=0;i<5;i++) //送入5個(gè)字節(jié)的控制字
{
dat=ww[i];
delay_us(2);
clk=1;
delay_us(2);
clk=0;
delay_us(2);
}
fq_ud=1; //使能信號(hào)
delay_us(3);
fq_ud=0;
}
//寫(xiě)入頻率
void write_freq(unsigned long freq)
{
unsigned long dds;
if(freq<=1000) dds=23.861*freq; // 23.861 freq<=1K
if((freq>1000)&&(freq<=10000)) dds=23.8615*freq; // 23.8615 1K<freq<=10K
if((freq>10000)&&(freq<=100000)) dds=23.8616*freq; // 23.8616 10K<freq<=100K
if((freq>100000)&&(freq<=35000000)) dds=23.8617*freq; // 23.8617 100K<freq<=35M
if((freq>35000000)&&(freq<=40000000)) dds=23.8619*freq; // 23.8619 35M<freq<=40M
write_dds(dds);
}
main()
{
init_dds();
while(1)
{
if(key1==0) {delay_us(10000);write_freq(0);while(!key3);write_freq(32768);}
if(key2==0) {delay_us(10000);write_freq(0);while(!key4);write_freq(11059200);}
if(key3==0) {delay_us(10000);write_freq(0);while(!key2);write_freq(40000000);}
if(key4==0) {delay_us(10000);write_freq(0);while(!key1);write_freq(45000000);}
};
}
|
|