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

📄 dds9954.c

📁 基于AD9954的扫频仪程序设计
💻 C
📖 第 1 页 / 共 2 页
字号:
//***********************************************************************
//						液晶控制芯片ST7920驱动源文件					*
//																		*
//硬件连接说明: 														*
//																		*
//				RS(CS)    -----------------------------  P3^1			*
//				R/W(STD)  -----------------------------  P3^4			*
//				E(SCLK)   -----------------------------  P3^5			*
//				PSB       -----------------------------  P0^1			*
//				RST       -----------------------------  P0^0			*
//				DB0       -----------------------------  P1^0			*
//				DB1       -----------------------------  P1^1			*
//				DB2       -----------------------------  P1^2			*
//				DB3       -----------------------------  P1^3			*
//				DB4       -----------------------------  P1^4			*
//				DB5       -----------------------------  P1^5			*
//				DB6       -----------------------------  P1^6			*
//				DB7(BUSY) -----------------------------  P1^7			*
//																		*
//***********************************************************************

#include <reg52.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint  unsigned int

#define  COUNT    0x10

//每行的首地址,基于RT12864-4M型液晶
#define LINE_ONE_ADDRESS   0x80
#define LINE_TWO_ADDRESS   0x90
#define LINE_THREE_ADDRESS 0x88
#define LINE_FOUR_ADDRESS  0x98

//基本指令集预定义
#define DATA               	1         	//数据位
#define COMMAND            	0		 	//命令位
#define	CLEAR_SCREEN       	0x01 	 	//清屏	
#define	ADDRESS_RESET      	0x02		//地址归零	 
#define	BASIC_FUNCTION	  	0x30		//基本指令集
#define	EXTEND_FUNCTION	   	0x34		//扩充指令集


//扩展指令集预定义
#define	AWAIT_MODE			0x01	 	//待命模式	
#define ROLLADDRESS_ON		0x03		//允许输入垂直卷动地址
#define IRAMADDRESS_ON		0x02		//允许输入IRAM地址	
#define	SLEEP_MODE			0x08	 	//进入睡眠模式
#define	NO_SLEEP_MODE		0x0c	 	//脱离睡眠模式
#define GRAPH_ON			0x36		//打开绘图模式
#define GRAPH_OFF			0x34		//关闭绘图模式


//并行位定义
sbit RS=P1^4;
sbit RW=P1^5;
sbit E= P1^6;

sbit BUSY=P2^7;

//控制位定义
sbit PSB = P1^7;	//串并选择信号
sbit RST = P3^0; 	//复位信号


uchar code Tab1[]="扫频仪";  //显示在第一行
uchar code Tab2[]="起始频率:  3KHz";//显示在第二行
uchar code Tab3[]="终止频率:  7KHz";//显示在第三行
uchar code Tab4[]="扫描时间:  4s";//显示在第四行
uchar code Tab5[]={0x54,0xf4};

unsigned long CFR1 ;                          
unsigned long CFR2 = 0;                    
unsigned long FTW0;                           
unsigned long FTW1;
unsigned long NLSCW;
unsigned long PLSCW;
unsigned long multfreq = 0xFFFFFFFF;    //计算频率控制字的系数





//51引脚定义
sbit  IO_UPDATE = P0^0;
sbit  PS1 		= P0^1;
sbit  PS0 		= P0^2;
sbit  IO_SYNC 	= P0^3;
sbit  SDIO 		= P0^4;
sbit  SCLK 		= P0^5;
sbit  CS 		= P0^6;
sbit  SDO		= P0^7;


sbit  CS2       = P1^0;
sbit  PWR       = P1^1;
sbit  CLKMS     = P1^2;
sbit  RET       = P1^3;



/***********************************************************************
** 函数名称: 	端口操作
** 功能描述: 	AD9954端口基本操作
** 输 入: 	无     
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
void SCLK_0(void)
{ 
  SCLK = 0;
}


void SCLK_1(void)
{
  SCLK = 1;
}


void SDIO_0(void)
{
  SDIO = 0;
}


void SDIO_1(void)
{
  SDIO = 1;
}
 



void IO_UPDATE_0(void)
{
  IO_UPDATE = 0;
}

void IO_UPDATE_1(void)
{
  IO_UPDATE = 1;
}




/***********************************************************************
** 函数名称: 	IO9954_Init
** 功能描述: 	IO_Init
** 输 入: 	    无      
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
void IO9954_Init()
{  	
	CS2= 0;
    PWR=0;
    CLKMS=0;
    RET=0;

   IO_UPDATE = 0;
 // PS1 		= 0;
//  PS0 		= 0;
  IO_SYNC 	= 0;
  SDIO 		= 0;
  SCLK 		= 0;
    CS 		= 0;
//  SDO		= 0;
}

/***********************************************************************
** 函数名称: 	nNop
** 功能描述: 	US级软件延时(不精确)
** 输 入: 	延时参数,值越大时延时越久      
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
void nNop(unsigned long nValue)
{
  unsigned long i;
  for(i=nValue;i>0;i--);
}

/***********************************************************************
** 函数名称: 	WriteByte
** 功能描述: 	向AD9954发送一字节数据 MSB FIRST
** 输 入: 	unsigned char data   发送的数据     
** 输 出:      无
** 全局变量:	无
** 调用模块: 	端口操作 nNop
***********************************************************************/
void WriteByte(unsigned char Data)
{
  unsigned char k;
  for(k=0;k<8;k++) 
  { 
   SCLK_0();
   nNop(4);	    //延时很重要
   if((Data&0x80) == 0x80)
     SDIO_1();
   else
     SDIO_0();
   Data = Data << 1;
   nNop(2);	   //延时很重要
   SCLK_1();
   nNop(4);	   //延时很重要
  }
}




/***********************************************************************
** 函数名称: 	更新寄存器操作
** 功能描述: 	每次更新寄存器的固定操作
** 输 入: 	无      
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/

void AD9954_Update(void)
{

 IO_UPDATE_0();
 
 nNop(40);
 IO_UPDATE_1(); 
}


void  AD9954_LinearSweep_Init(void)
{

WriteByte(0x00);

WriteByte(0x00);
WriteByte(0x20);
WriteByte(0x00);
WriteByte(0x44);
AD9954_Update();

}

void  AD9954_LinearSweep_Freq(void)
 {

 
 
  WriteByte(0x04);
  
  WriteByte(0x00);
  WriteByte(0x09);
  WriteByte(0xD4);
  WriteByte(0x95);

  WriteByte(0x06);
  
  WriteByte(0x00);
  WriteByte(0x16);
  WriteByte(0xF0);
  WriteByte(0x06);



  WriteByte(0x07);
  
  WriteByte(0xFF);
  WriteByte(0x00);
  WriteByte(0x00);
  WriteByte(0x00);
  WriteByte(0x0B);


  WriteByte(0x08);
  
  WriteByte(0xFF);
  WriteByte(0x00);
  WriteByte(0x00);
  WriteByte(0x00);
  WriteByte(0x0B);
  AD9954_Update();
}


//*******************************************
//*函数名称:void Parallel_Check_Busy(void)	*
//*函数功能:并行方式查忙					*
//*形式参数:无								*
//*形参说明:无								*
//*返回参数:无								*
//*使用说明:无								*
//*******************************************
void Parallel_Check_Busy(void)
{
	bit temp;
  	P2 = 0xff;	//输入前置1
  	RS = 0;		//指令
  	RW = 1;		//读模式
	do
	{	
	    E  = 1;	 //使能
		temp = BUSY;
  	    E  = 0;
	}
  	while(temp);//等待不忙
}


//************************************************************************************
//*函数名称:void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content ) *
//*函数功能:并行模式向LCD发送数据或指令												 *
//*形式参数:bit b_Data_Command , unsigned char uc_Content							 *
//*形参说明:数据或指令的标志位,指令或数据的内容										 *
//*返回参数:无																		 *
//*使用说明:无																		 *
//************************************************************************************
void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
{
 	Parallel_Check_Busy();
  	if(b_Data_Command)
   	 {
		RS = 1;   //数据
    	RW = 0;   //写模式
   	 }
  	else 
   	 {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -