⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9851.c

📁 直接数字频率合成,我在全国电子设计大赛的时候所用的程序
💻 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 + -