?? ad9850.c
字號(hào):
#include<math.h>
#include<reg52.h>
#include"12864_serial.h"
#include"AD9850.H"
#include "intrins.h"
//unsigned char CON_word[5];
//Word data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
//W0 Phase b Phase b3 Phase b2 Phase b1 Phase b0 Power Down Control Control
//W1 Freq-b31 Freq-b30 Freq-b29 Freq-b28 Freq-b27 Freq-b26 Freq-b25 Freq-b24
//W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16
//W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9 Freq-b8
//W4 Freq-b7 Freq-b6 Freq-b5 Freq-b4 Freq-b3 Freq-b2
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: delay
// 入口參數(shù): N
// 函數(shù)功能:延時(shí)子程序,實(shí)現(xiàn)(16*N+24)us的延時(shí)
// 系統(tǒng)采用12MHz的時(shí)鐘時(shí),延時(shí)滿足要求,其它情況需要改動(dòng)
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函數(shù)名稱: WRITE_AD9850
// 函數(shù)功能: 將控制字寫(xiě)入AD9850
//--------------------------------------------------------------------------------------------------
void WRITE_AD9850(unsigned char CON_word[5])
{
unsigned char i;
FQ_UD=0;
W_CLK=0;
delay(0);
CON_word[0]=CON_word[0]&0xFC; //置工作方式選擇位為00
for(i=0;i<5;i++)
{
data_OUT=CON_word[i]; //送控制字
W_CLK=0;
delay(0);
W_CLK=1; //上升延
delay(0);
}
FQ_UD=1; //上升延要求AD9850改變輸出
}
/*
void AD9850_init(void)
{
reset=0;
reset=1;
fq_ud=0;
w_clk=0;
reset=0;
WriteLCD(0x80," (AD9850) ");
WriteLCD(0x90,"頻率:000.000 HZ");
WriteLCD(0x88,"相位: 0 度");
WriteLCD(0x98," Just Do It... ");
}*/
/*
void send_fivewords(unsigned char DATA[5])//順序?yàn)镕0_31,三位控制,P0_4)
{ unsigned char i;
for(i=0;i<5;i++)
{
control_words=DATA[i];
w_clk=1;
_nop_ ();
//for(i=0;i<100;i++);
w_clk=0;
}
fq_ud=1;
fq_ud=0;
} */
void AD9850_DISPLAY(float F,float P)
{ unsigned char decimal_code[10]={'0','1','2','3','4','5','6','7','8','9'} ;
unsigned char display_tmp[8]={'0','0','0','.','0','0','0','\0'};
unsigned char phasic[6]={'0','0','0','.','0','0'};
unsigned int bufh,bufl;
unsigned char i;
if(F>=1000000)
{ F/=1000;
bufh=(unsigned int)(F/1000);
bufl=(unsigned int)(F-bufh*1000);
display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
display_tmp[2]=decimal_code[bufh] ;
display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
display_tmp[5]=decimal_code[bufl/10] ; bufl%=10 ;
display_tmp[6]=decimal_code[bufl] ;
for(i=0;i<2;i++)
if(display_tmp[i]=='0')
display_tmp[i]=' ';
else break;
for(i=6;i>=4;i--)
if(display_tmp[i]=='0')
{
display_tmp[i]=' ';
if(i==4)display_tmp[3]=' ';
else;
}
else break;
WriteLCD(0x93,display_tmp);
WriteLCD(0x97,"M ");
}
else if(F>=1000)
{ bufh=(unsigned int) (F/1000);
bufl=(unsigned int)(F-bufh*1000);
display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
display_tmp[2]=decimal_code[bufh] ;
display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
display_tmp[5]=decimal_code[bufl/10] ; bufl%=10 ;
display_tmp[6]=decimal_code[bufl] ;
for(i=0;i<2;i++)
if(display_tmp[i]=='0')
display_tmp[i]=' ';
else break;
for(i=6;i>=4;i--)
if(display_tmp[i]=='0')
{display_tmp[i]=' ';
if(i==4)display_tmp[3]=' ';
else; }
else break;
WriteLCD(0x93,display_tmp);
WriteLCD(0x97,"K ");
}
else if(F>0)
{ bufh=(unsigned int )F;
bufl=(unsigned int)(F*1000-bufh*1000);
display_tmp[0]=decimal_code[bufh/100]; bufh%=100;
display_tmp[1]=decimal_code[bufh/10] ; bufh%=10 ;
display_tmp[2]=decimal_code[bufh] ;
display_tmp[4]=decimal_code[bufl/100] ; bufl%=100 ;
display_tmp[5]=decimal_code[bufl/10] ; bufl%=10 ;
display_tmp[6]=decimal_code[bufl] ;
for(i=0;i<2;i++)
if(display_tmp[i]=='0')
display_tmp[i]=' ';
else break;
for(i=6;i>=4;i--)
if(display_tmp[i]=='0')
{display_tmp[i]=' ';
if(i==4)display_tmp[3]=' ';
else; }
else break;
WriteLCD(0x93,display_tmp);
WriteLCD(0x97,"HZ");
}
if((unsigned int)(P*100)%100==0 )
phasic[3]=0;
bufh=(unsigned int )P;
bufl=(unsigned int)(F*100-bufh*100);
phasic[0]=decimal_code[bufh/100] ;bufh%=100 ;
phasic[1]=decimal_code[bufh/10] ;bufh%=10 ;
phasic[2]=decimal_code[bufh] ;
phasic[4]=decimal_code[bufl/10] ;bufl%=10 ;
phasic[5]=decimal_code[bufl];
for(i=0;i<2;i++)
if(phasic[i]=='0')
phasic[i]=' ';
else break;
for(i=5;i>=4;i--)
if(phasic[i]=='0')
{phasic[i]=' ';
if(i==4)display_tmp[3]=' ';
else; }
else break;
WriteLCD(0x8B,phasic);
}
void frequency_to_phase(unsigned long F,unsigned char DATA[5])//轉(zhuǎn)換為DATA[1]-----DATA[4]
{ unsigned long phase;
phase=F/125.0/1000*1024.0/1000*1024.0*4096;
DATA[1]=phase/16777216;
DATA[2]=phase/65536;
DATA[3]=phase/256;
DATA[4]=phase;
}
void phasic_to_phase(float P ,unsigned char DATA[5]) //轉(zhuǎn)換為DATA[0]的高5位
{
DATA[0]=(unsigned char)(P/11.25+0.5)<<3;
}
/***************串行程序*********************/
/*
void DDS_set_freq (void)
{
unsigned char byte_temp;
unsigned long freq_word =0x0505AAFF ;//頻率控制字
float fTemp;
fTemp=mulFreq;
fTemp=fTemp*65536/DDS_CLK_IN*65536;
freq_word =fTemp;
//freq_word =(float)mulFreq*65536/DDS_CLK_IN*65536;
_nop_(); _nop_(); _nop_(); _nop_();
DDS_UPDATE = 0;
_nop_(); _nop_(); _nop_(); _nop_();
DDS_CLK = 0;
_nop_(); _nop_(); _nop_(); _nop_();
for ( byte_temp = 0; byte_temp < 32; byte_temp++ )
{
freq_word = freq_word >> 1;
DDS_DATA = CY;
DDS_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_(); //實(shí)際應(yīng)用應(yīng)在延遲
DDS_CLK = 0;
}
for ( byte_temp = 0; byte_temp < 8; byte_temp++ )
{
DDS_DATA = 0;
DDS_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_();
DDS_CLK = 0;
}
DDS_UPDATE = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
DDS_UPDATE = 0;
} */
void init_dds(void)
{
DDS_RESET=0;
delay(2);
DDS_RESET=1;
delay(2);
DDS_RESET=0;
WriteLCD(0x80," (AD9850) ");
WriteLCD(0x90,"頻率:000.000 HZ");
WriteLCD(0x88,"相位: 0 度");
WriteLCD(0x98," Just Do It... ");
/***************串行初始化程序*****************/
/*
DDS_DATA=0;
DDS_CLK=0;
DDS_UPDATE=0;
DDS_UPDATE=1;
DDS_UPDATE=0;
DDS_CLK=1;
DDS_CLK=0;
DDS_UPDATE=1;
DDS_UPDATE=0;
mulFreq=0;
DDS_set_freq(); */
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -