?? 06_7_12_12_30_main.c
字號(hào):
/*
*Author hejun
*Date 2006_7_12
*/
/*
*按鍵功能說明
P1_5 設(shè)置步進(jìn) 100Hz 1KHz 10KHz 100KHz 1MHz 10Mhz
P1_6 步進(jìn)加1
P1_7 步進(jìn)減1
*
*/
/*SystemClock=180MHz*/
//F_out=10MHz FrqDWord=238609294; W1=0x0e; W2=0x38; W3=0xe3; W4=0x83;//(W1=Freq–b31__Freq–b3Freq–b24)
//F_out=1MHz FrqDWord=23860929; W1=0x01; W2=0x6c; W3=0x16; W4=0xc1;//(W1=Freq–b31__Freq–b3Freq–b24)
//F_out=100kHz FrqDWord=2386093; W1=0x00; W2=0x24; W3=0x68; W4=0xad;//(W1=Freq–b31__Freq–b3Freq–b24)
//F_out=10kHz FrqDWord=238609; W1=0x00; W2=0x03; W3=0xa4; W4=0x11;//(W1=Freq–b31__Freq–b3Freq–b24)
//F_out=1kHz FrqDWord=23861; W1=0x00; W2=0x00; W3=0x5d; W4=0x35;//(W1=Freq–b31__Freq–b3Freq–b24)
//F_out=100Hz FrqDWord=2386; W1=0x00; W2=0x00; W3=0x09; W4=0x52;//(W1=Freq–b31__Freq–b3Freq–b24)
#include <at89X52.h>
#define uchar unsigned char
#define uint unsigned int
#define RESET P1_0
#define W_CLK P1_1
#define FQ_UD P1_2
#define DDSData P2
#define CLR_WCLK() W_CLK = 0
#define CLR_FQUD() FQ_UD = 0
#define CLR_RESET() RESET = 0
#define SET_WCLK() W_CLK = 1
#define SET_FQUD() FQ_UD = 1
#define SET_RESET() RESET = 1
/*聲明全局變量*/
//extern unsigned long FrqLCD;
unsigned long FrqDWord; //32-bit frequency tuning word
unsigned char W0,W1,W2,W3,W4; //
unsigned long Step; //步進(jìn)
unsigned char KeyCode;
unsigned char key_flag=1;
/*聲明子程序*/
void F_Init_ParallelMode(); //初始化DDS
void F_ParallelLoad_AD9851(); //并行置數(shù)
void F_S2P_AD9851(); //串行數(shù)據(jù)向并行數(shù)據(jù)轉(zhuǎn)換
void F_StepSet_AD9851();
void F_StepUp_AD9851();
void F_StepDown_AD9851();
void KeyScan(void);
void KeyHandle(void);
void delay();
/*定義子程序*/
void F_Init_ParallelMode()
{
/*P_IOA_Dir |= 0xff00;
*P_IOA_Attrib |= 0xff00; //A口高八位同相輸出
*P_IOB_Dir |= 0x00ff+W_CLK+FQ_UD+RESET;
*P_IOB_Attrib |= 0x00ff+W_CLK+FQ_UD+RESET; //B口低八位同相輸出
//*P_IOB_Dir |= W_CLK+FQ_UD+RESET;
//*P_IOB_Attrib |= W_CLK+FQ_UD+RESET; //3位控制口屬性設(shè)置*/
W0 = 0x01; //6′ REFCLK Multiplier Enable
FrqDWord = 23860929; //set initial F_out=10Mhz
CLR_RESET();
delay();
SET_RESET();
delay();
delay();
delay();
delay();
delay();
CLR_RESET(); //AD9851復(fù)位
}
void F_S2P_AD9851()
{
unsigned long frqTmp;
frqTmp = FrqDWord;
W4 = frqTmp;
W4 &= ~0xff00;
frqTmp >>= 8;
W3 = frqTmp;
W3 &= ~0xff00;
frqTmp >>= 8;
W2 = frqTmp;
W2 &= ~0xff00;
frqTmp >>= 8;
W1 = frqTmp;
}
void F_ParallelLoad_AD9851()
{
CLR_WCLK();
CLR_FQUD();
CLR_WCLK();
//Frq_Byte0,相位值輸入
DDSData= W0;
delay();
SET_WCLK();
CLR_WCLK(); //Frq_Byte1
DDSData= W1;
SET_WCLK();
delay();
CLR_WCLK(); //Frq_Byte2
DDSData= W2;
SET_WCLK();
delay();
CLR_WCLK(); //Frq_Byte3
DDSData= W3;
SET_WCLK();
delay();
CLR_WCLK(); //Frq_Byte4
DDSData= W4;
SET_WCLK();
delay();
CLR_WCLK();
delay();
SET_FQUD();
delay();
CLR_FQUD(); //鎖存頻率相位值
}
void F_StepSet_AD9851()
{
switch(Step)
{
case 2386 : Step = 23861; break; //100Hz trun_to 1kHz
case 23861 : Step = 238609; break; //1kHz trun_to 10KHz
case 238609 : Step = 2386093; break; //10KHz trun_to 100KHz
case 2386093 : Step = 23860929; break; //100KHz trun_to 1MHz
case 23860929 : Step = 238609294; break; //1MHz trun_to 10MHz
case 238609294 : Step = 2386; break; //10MHz trun_to 100Hz
default : break;
}
}
void F_StepUp_AD9851()
{
if(FrqDWord>=238609294) //頻率達(dá)到目10M,應(yīng)退出
return;
FrqDWord += Step;
F_S2P_AD9851();
F_ParallelLoad_AD9851();
// FrqLCD += 0x01; //LCD上頻率更新
}
void F_StepDown_AD9851()
{
if(FrqDWord<Step) //頻率小于步進(jìn)值,應(yīng)退出
return;
FrqDWord -= Step;
F_S2P_AD9851();
F_ParallelLoad_AD9851();
// FrqLCD -= 0x01; //LCD上頻率更新
}
void KeyScan(void)
{
uchar key_P1_5;
uchar key_P1_6;
uchar key_P1_7;
P1_5=1;
P1_6=1;
P1_7=1;
/*using the led to test if the keycode is ok*/
key_P1_5=P1_5;
key_P1_6=P1_6;
key_P1_7=P1_7;
if(!key_P1_5) {KeyCode=1;key_flag=1;P0_5= !P0_5;}
if(!key_P1_6) {KeyCode=2;key_flag=1;P0_6= !P0_6;}
if(!key_P1_7) {KeyCode=3;key_flag=1;P0_7= !P0_6;}
}
void KeyHandle(void)
{
switch(KeyCode)
{
case 1: F_StepSet_AD9851();break;
case 2: F_StepUp_AD9851();break;
case 3: F_StepDown_AD9851();break;
default : break;
}
}
void delay()
{
unsigned char i;
for (i=1;i<=0xff;i++);
}
/*主函數(shù)*/
void main()
{
F_Init_ParallelMode();
while(1){
KeyScan();
if(key_flag)
{
KeyHandle();
F_ParallelLoad_AD9851();
key_flag=0;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -