📄 ad9851.c
字号:
/*************************************************
工程:直接数字频率合成
日期:07.09.01
*************************************************/
#include<reg52.h>
#include <intrins.h>
#include<max7219.h>
#include <keyscan.h>
#define uchar unsigned char
#define uint unsigned int
sbit ad9851_d7=P1^0;
sbit ad9851_clk=P1^1;
sbit ad9851_load=P1^2;
/*uchar c=0;
char count0=0;
char count1=0;
char count2=0;
char count3=0;
char count4=0;
char count5=0;
char count6=0;
char count7=0;*/
unsigned long temp=0;
/*****************************************
函数:void display(unsigned long tmp)
功能:显示
*****************************************/
void display(unsigned long tmp)
{
send_7219(k0,tmp/10000000);
send_7219(k1,tmp%10000000/1000000);
send_7219(k2,tmp%1000000/100000);
send_7219(k3,tmp%100000/10000);
send_7219(k4,tmp%10000/1000);
send_7219(k5,tmp%1000/100);
send_7219(k6,tmp%100/10);
send_7219(k7,tmp%10);
}
/************************************************
函数:void write_dds()
功能:向AD9851写需要的频率,暂时没有控制相位
*************************************************/
void write_dds(unsigned long dat)
{
uchar i=0;
uchar tt=0x00000011;
ad9851_load=0;
ad9851_clk=0;
for(i=32;i>0;i--)
{
ad9851_clk=0;
delay(5);
if(dat&0x00000001)ad9851_d7=1;
else ad9851_d7=0;
delay(2);
ad9851_clk=1;
delay(5);
dat=dat>>1;
}
for(i=8;i>0;i--)
{
ad9851_clk=0;
delay(5);
if(tt&0x00000001)ad9851_d7=1;
else ad9851_d7=0;
delay(2);
ad9851_clk=1;
delay(5);
tt=tt>>1;
}
ad9851_load=1;
ad9851_clk=0;
delay(2);
ad9851_load=0;
}
/*************************************************
工程:写进AD9851的真正数据
*************************************************/
void write_ad9851(unsigned long freq)
{
unsigned long dds;
dds=23.860929422*freq; //180M
//dds=23.860929922*freq;
write_dds(dds);
}
/*******************************************
中断函数
********************************************
void time_1(void) interrupt 3
{
TH1=0x3c;
TL1=0xb0;
c+=1;
if(c==8)c=0;
send_7219(k[c],0x7f);
TR1=0;
}
/*******************************************
主函数
********************************************/
void main()
{
TMOD=0x01;
TH1=0x3c;
TL1=0xb0;
ET1=1;
EA=1;
write_7219();
init_7219();
ad9851_load=0;
ad9851_clk=0;
delay(1);
ad9851_clk=1;
ad9851_load=1; //把AD9851设为串行输入法
while(1)
{
keyscan();
if(key_flag)
{
if(key_val<10)
{
temp=temp*10+key_val;
if(temp>=19999999)temp=90000000;
display(temp);
}
else
write_ad9851(temp);
}
/*if(key_val==9)
{
delay(100);
if(key_val==9)
TR1=1;
}
if(key_val==14)
{
switch (c)
{
case 0 : count0+=1;if(count0==10)count0=0;send_7219(k0,count0);break;
case 1 : count1+=1;if(count1==10)count1=0;send_7219(k1,count1);break;
case 2 : count2+=1;if(count2==10)count2=0;send_7219(k2,count2);break;
case 3 : count3+=1;if(count3==10)count3=0;send_7219(k3,count3);break;
case 4 : count4+=1;if(count4==10)count4=0;send_7219(k4,count4);break;
case 5 : count5+=1;if(count5==10)count5=0;send_7219(k5,count5);break;
case 6 : count6+=1;if(count6==10)count6=0;send_7219(k6,count6);break;
case 7 : count7+=1;if(count7==10)count7=0;send_7219(k7,count7);break;
}
}
if(key_val==12)
{
switch (c)
{
case 0 : count0-=1;if(count0<0)count0=0;send_7219(k0,count0);break;
case 1 : count1-=1;if(count1<0)count1=0;send_7219(k1,count1);break;
case 2 : count2-=1;if(count2<0)count2=0;send_7219(k2,count2);break;
case 3 : count3-=1;if(count3<0)count3=0;send_7219(k3,count3);break;
case 4 : count4-=1;if(count4<0)count4=0;send_7219(k4,count4);break;
case 5 : count5-=1;if(count5<0)count5=0;send_7219(k5,count5);break;
case 6 : count6-=1;if(count6<0)count6=0;send_7219(k6,count6);break;
case 7 : count7-=1;if(count7<0)count7=0;send_7219(k7,count7);break;
}
}
temp=count0*10000000+count1*1000000+count2*100000+
count3*10000+count4*1000+count5*100+count6*10+count7;
display(temp);
if(key_val==15)
{
TR1=0;
write_ad9851(temp);
}
}*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -