【01】设计大致思路
一开始是使用按键进行频率输出数值的增加或者减少,后改进成使用EC11调节输出数值,使数值的输出更加顺滑流畅。
【02】参考资料
链接:https://pan.baidu.com/s/1gz9DuRynFkpIcYw1fGyf6A?pwd=1111
提取码:1111
【03】部分代码
AD9851.c
#include <AD9851.h>
//*******************************************************************/
//功能:AD9851复位
//形参:无
//返回:无
//详解:AD9851复位(并口模式)
//*******************************************************************/
void ad9851_reset()
{
ad9851_w_clk=0;
ad9851_fq_up=0;
//rest信号
ad9851_rest=0;
ad9851_rest=1;
ad9851_rest=0;
}
//*******************************************************************/
//功能:AD9851复位
//形参:无
//返回:无
//详解:AD9851复位(串口模式)
//*******************************************************************/
void ad9851_reset_serial()
{
ad9851_w_clk=0;
ad9851_fq_up=0;
//rest信号
ad9851_rest=0;
ad9851_rest=1;
ad9851_rest=0;
//w_clk信号
ad9851_w_clk=0;
ad9851_w_clk=1;
ad9851_w_clk=0;
//fq_up信号
ad9851_fq_up=0;
ad9851_fq_up=1;
ad9851_fq_up=0;
}
//*******************************************************************/
//功能:向AD9851中写命令与数据
//形参:转移数据变量-->> w0;频率变量-->> frequence
//返回:无
//详解:向AD9851中写命令与数据(并口)
//*******************************************************************/
void ad9851_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)
//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w0数据
w=w0;
P1=w; //w0
ad9851_w_clk=1;
ad9851_w_clk=0;
//写w1数据
w=(y>>24);
P1=w; //w1
ad9851_w_clk=1;
ad9851_w_clk=0;
//写w2数据
w=(y>>16);
P1=w; //w2
ad9851_w_clk=1;
ad9851_w_clk=0;
//写w3数据
w=(y>>8);
P1=w; //w3
ad9851_w_clk=1;
ad9851_w_clk=0;
//写w4数据
w=(y>>=0);
P1=w; //w4
ad9851_w_clk=1;
ad9851_w_clk=0;
//移入始能
ad9851_fq_up=1;
ad9851_fq_up=0;
}
//*******************************************************************/
//功能:向AD9851中写命令与数据
//形参:转移数据变量-->> w0;频率变量-->> frequence
//返回:无
//详解:向AD9851中写命令与数据(串口)
//*******************************************************************/
void ad9851_wr_serial(unsigned char w0,double frequence)
{
unsigned char i,w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)
//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w4数据
w=(y>>=0);
for(i=0;i<8;i++)
{
ad9851_bit_data=(w>>i)&0x01;
ad9851_w_clk=1;
ad9851_w_clk=0;
}
//写w3数据
w=(y>>8);
for(i=0;i<8;i++)
{
ad9851_bit_data=(w>>i)&0x01;
ad9851_w_clk=1;
ad9851_w_clk=0;
}
//写w2数据
w=(y>>16);
for(i=0;i<8;i++)
{
ad9851_bit_data=(w>>i)&0x01;
ad9851_w_clk=1;
ad9851_w_clk=0;
}
//写w1数据
w=(y>>24);
for(i=0;i<8;i++)
{
ad9851_bit_data=(w>>i)&0x01;
ad9851_w_clk=1;
ad9851_w_clk=0;
}
//写w0数据
w=w0;
for(i=0;i<8;i++)
{
ad9851_bit_data=(w>>i)&0x01;
ad9851_w_clk=1;
ad9851_w_clk=0;
}
//移入始能
ad9851_fq_up=1;
ad9851_fq_up=0;
}
AD9851.h
#ifndef __AD9851_H_
#define __AD9851_H_
//----------------AD9851 头文件----------------//
#include <stc8.h>
# include <intrins.h>
//----------------AD9851 IO口定义----------------//
sbit ad9851_w_clk =P2^2; //P2.2口接AD9851的w_clk脚/PIN7
sbit ad9851_fq_up =P2^4; //P2.1口接AD9851的fq_up脚/PIN8
sbit ad9851_rest =P2^3; //P2.0口接AD9851的rest脚/PIN12
sbit ad9851_bit_data =P2^2; //P1.7口接AD9851的D7脚/PIN25
//P1为8位数据口
//----------------函数快速调用(复制粘贴)列表----------------//
/*******************************************************************
void ad9851_reset(void); //ad9851复位(并口模式)
void ad9851_reset_serial(void); //ad9851复位(串口模式)
void ad9851_wr_parrel(unsigned char w0,double frequence); //向AD9851中写命令与数据(并口)
void ad9851_wr_serial(unsigned char w0,double frequence); //向AD9851中写命令与数据(串口)
******************************************************************/
//----------------函数声明列表----------------//
//
//*******************************************************************/
//功能:AD9851复位
//形参:无
//返回:无
//详解:AD9851复位(并口模式)
//*******************************************************************/
void ad9851_reset();
//*******************************************************************/
//功能:AD9851复位
//形参:无
//返回:无
//详解:AD9851复位(串口模式)
//*******************************************************************/
void ad9851_reset_serial();
//*******************************************************************/
//功能:向AD9851中写命令与数据
//形参:转移数据变量-->> w0;频率变量-->> frequence
//返回:无
//详解:向AD9851中写命令与数据(并口)
//*******************************************************************/
void ad9851_wr_parrel(unsigned char w0,double frequence);
//*******************************************************************/
//功能:向AD9851中写命令与数据
//形参:转移数据变量-->> w0;频率变量-->> frequence
//返回:无
//详解:向AD9851中写命令与数据(串口)
//*******************************************************************/
void ad9851_wr_serial(unsigned char w0,double frequence);
#endif
LCD12864.c
#include <LCD12864.h>
//*******************************************************************/
//功能:延时函数
//形参:无
//返回:无
//详解:LCD12864写数据、写命令与检测忙状态时提供延时
//*******************************************************************/
void delayNOP()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
//*******************************************************************/
//功能:延时函数
//形参:毫秒级延时-->> ms
//返回:无
//详解&#x