• 大小: 6KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: AD9834  

资源简介

51单片机控制AD9834的信号发生器。通过按键可以设置输出方式及输出频率,并通过1602液晶显示

资源截图

代码片段和文件信息


/*****************************************************  
AD9834波形产生程序  
*****************************************************/   
  
#include 
#include     
#define uchar unsigned char   
#define uint  unsigned int   
#define ulong unsigned long   
#define FCLK        50000000
#define FREQ_0      0
#define FREQ_1      1 
sbit FSYNC = P3^4;   
sbit SCLK  = P3^5;
sbit SDATA = P3^6;   
sbit RESET = P3^7;
sbit CHANGE = P3^2;
//液晶接口
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;

uchar i=0jkkey10num;
uchar sintrisqu;
ulong freq=0.0;
ulong m;

uchar code tab1[]={0xf70xfb0xfd0xfc}; //键盘
uchar code tab2[]=“frequency:“;    //初始化液晶显示
uchar  tab[6];   //存储设置值    
   
/**************************  
发送控制字  
**************************/   
void Send_Con(uint Con_word)   
{   
   uchar i;    
   FSYNC =0;       //低电平使数据有效
   for(i=0;i<16;i++)       //传输16位控制字
   {   
      SDATA =Con_word&0x8000;   //最高位不变,最高位赋给SDATA 
      Con_word<<=1;    //控制字左移一位,准备下一次
      SCLK =0;    //产生下降沿,传输SDATA
      SCLK =1;   
   }    
   FSYNC =1;     //高电平,无效
}   
   
/****************************  
发送频率字  
****************************/   
void Send_Freq(uint Freq_word)   
{   
   uchar i;     
   FSYNC =0;       //低电平使数据有效
   for(i=0;i<16;i++)       //传输16位频率字
   {   
      SDATA =Freq_word&0x8000;  //最高位不变,最高位赋给SDATA 
      Freq_word<<=1;    //频率字左移一位,准备下一次
      SCLK =0;    //产生下降沿,传输SDATA
      SCLK =1;   
   }    
   FSYNC =1;     //高电平,无效
}   
   
/*****************************  
发送相位字  
注:根据情况可设定入口参数,设置相位  
*****************************/   
void Send_Phase()   
{   
   Send_Con(0xC000);   //设置初相位为0   
}   
   
   
/*******************************************************  
设置频率值   
Freq_value(value)=Freq_data(data)*FCLK/2^28  
2^28=268435456=0x10000000  
*******************************************************/   
void writing_Freq(uchar freq_number ulong Freq_value)   
{  
    ulong FREQREG = (ulong)(268435456.0/FCLK*Freq_value);
    
    uint LSB_D = (uint)FREQREG;
    uint MSB_D = (uint)(FREQREG>>14);
    
    if(freq_number == FREQ_0)
    {
        LSB_D &= ~(1U<<15);
        LSB_D |= 1<<14;
        MSB_D &= ~(1U<<15);
        MSB_D |= 1<<14;
    }
    else
    {
        LSB_D &= ~(1<<14);
        LSB_D |= 1U<<15;
        MSB_D &= ~(1<<14);
        MSB_D |= 1U<<15;
    }
    
    Send_Freq(LSB_D);
    Send_Freq(MSB_D);
     
}   
 
 void delay(uint x) /*延时函数*/
{
uint ij;
for(i=x;i>0;i--)
   for(j=110;j>0;j--);
}

 void wri(uchar com) /*写指令函数*/
{
rs=0;
rw=0;
en=1;
P0=com;
delay(5);
en=0;
}
 
 
 void wrd(uchar dat)  /*写数据函数*/
{
rs=1;
rw=0;
en=1;
P0=dat;
delay(5);
en=0;
}
 
/**************************************
按键:     0       1       2        3
           4       5       6        7
   8       9      设置     确定
 正弦波   三角波  方波
每次按下设置键后,选择波形,正弦or三角or方波,按下后,再输入频率值,最后按确定键
**

评论

共有 条评论