2021年电赛模块化程序总结

2023-11-12

1、ADC0804

集成A/D转换器品种繁多,选用时应综合考虑各种因素选取集成芯片。一般逐次比较型A/D转换器用的比较多,ADC0804就是这类单片集成A/D转换器。ADC0804是一款8位、单通道、低价格A/D转换器,主要特点是:模数转换时间大约100us;方便TTL或CMOS标准接口;可以满足差分电压输入;具有参考电压输入端;内含时钟发生器;单电源工作时(0~5)V输入电压范围是0~5V;不需要调零等等。ADC0804是一款早期的AD转换器,而且因其价格低廉而在要求不高的场合得到广泛应用。

  • 芯片参数
    ——工作电压:+5V,即VCC=+5V。
    ——模拟转换电压范围:0~+5V,即0≤Vin≤+5V。
    ——分辨率:8位,即分辨率为1/28=1/256,转换值介于0~255之间。
    ——转换时间:100us(fCK=640KHz时)。
    ——转换误差:±1LSB。
    ——参考电压:2.5V,即Vref/2=2.5V。

  • 各引脚的作用
    ——Vin(+)、Vin(-):两个模拟信号输入端,可以接收单极性、双极性和差模输入信号。
    ——DB0-DB7:具有三态特性数字信号输出端,输出结果为八位二进制结果。
    ——CLKIN:时钟信号输入端。
    ——CLKR:内部时钟发生器的外接电阻端,与CLK端配合可由芯片自身产生时钟脉冲,其频率计算方式是:fck=1/(1.1RC)。
    ——CS:片选信号输入端,低电平有效。
    ——WR:写信号输入端,低电平启动AD转换。
    ——RD:读信号输入端,低电平输出端有效。
    ——INTR:转换完毕中断提供端,AD转换结束后,低电平表示本次转换已完成。
    ——VREF/2:参考电平输入,决定量化单位。
    ——VCC:芯片电源5V输入。
    ——AGND:模拟电源地线。
    ——DGND:数字电源地线。

  • ADC0804典型接法在这里插入图片描述
    ADC0804相关函数
    ADC0804.c

#include"ADC0804.h"

void ADC0804_Delay100us(void)   
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=43;a>0;a--);
}

/************************************
* 函数名称:ADC0804_Start()
* 函数功能:启动ADC0804转换
* 输入参数:无
* 返回参数:无
************************************/
void ADC0804_Start()
{
   ADC0804_CS_L;
   ADC0804_WR_L;
   ADC0804_Delay;
   ADC0804_WR_H;
   while(ADC0804_INT);
   ADC0804_CS_H;
} 

/************************************
* 函数名称:ADC0804_ReadData()
* 函数功能:读取ADC0804数据
* 输入参数:无
* 返回参数:电压原始数据值
************************************/
uchar ADC0804_ReadData()
{
  uchar temp_data;
  ADC0804_DATA=0xFF;
  ADC0804_CS_L;
  ADC0804_RD_L;
  ADC0804_Delay;
  temp_data=ADC0804_DATA;
  ADC0804_RD_H;
  ADC0804_CS_H;
  return(temp_data);
}
/************************************
* 函数名称:ADC0804_GetVoltage(uchar V)
* 函数功能:获取ADC0804的采集的电压
* 输入参数:参考电压
* 返回参数:电压值*10
************************************/
uint ADC0804_GetVoltage(uchar V)
{
  uint temp_V,dat;
  ADC0804_Start();
  dat=ADC0804_ReadData()*10;
  temp_V=dat/(0xFF/V);
  return(temp_V);	

}

ADC0804.h

#ifndef _ADC0804_H_
#define _ADC0804_H_
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit ADC0804_CS=P2^3;
sbit ADC0804_RD=P2^4;
sbit ADC0804_WR=P2^5;
sbit ADC0804_INT=P2^6;
#define  ADC0804_CS_H   ADC0804_CS=1
#define  ADC0804_CS_L   ADC0804_CS=0
#define	 ADC0804_RD_H   ADC0804_RD=1
#define	 ADC0804_RD_L   ADC0804_RD=0
#define  ADC0804_WR_H   ADC0804_WR=1
#define  ADC0804_WR_L   ADC0804_WR=0
#define  ADC0804_DATA   P1
#define  ADC0804_Delay 	ADC0804_Delay100us()

void ADC0804_Start();
uchar ADC0804_ReadData();
uint ADC0804_GetVoltage(uchar V);
#endif

2、LCD1602

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。
在这里插入图片描述
在这里插入图片描述

LCD1602.c

/******************************************
 通用型1602液晶显示函数

 ************************************************/ 
#include "LCD1602.H"
#define LCD1602_DATA P0
sbit LCD1602_RS=P2^0; //数据命令选择端(4):L为命令;H为数据
sbit LCD1602_RW=P2^1; //读写选择端(5):L为写模式;H为读模式
sbit LCD1602_EN=P2^2; //使能信号(6):高脉冲完成数据指令读写
#define LCD1602_RS_L LCD1602_RS=0
#define LCD1602_RS_H LCD1602_RS=1
#define LCD1602_RW_L LCD1602_RW=0
#define LCD1602_RW_H LCD1602_RW=1
#define LCD1602_EN_L LCD1602_EN=0
#define LCD1602_EN_H LCD1602_EN=1
/*********************************
延时50微妙
********************************/
void LCD1602_Delayus()
{
    unsigned char a,b;
    for(b=1;b>0;b--)
    for(a=22;a>0;a--);
}
/********************************
延时10毫秒
********************************/
void LCD1602_Delayms()
{
    unsigned int i,j;
	for(i=10;i>0;i--)
	for(j=113;j>0;j--);
}
/******************************
1602写命令函数
*****************************/
void LCD1602_WriteCmd(uchar cmd)
{	
    LCD1602_DATA=cmd;
	LCD1602_RW_L;
	LCD1602_RS_L;//RS拉低,选择写命令	
	
	LCD1602_EN_H;//恢复初始化
	LCD1602_Delayus();   //短暂延时
	LCD1602_EN_L;//使能端上升沿完成操作
	LCD1602_Delayus();   //短暂延时
}

void LCD1602_MoveCursor(uchar dir)
{	
   uchar temp_dir;
   temp_dir=0x10+dir*4;
   LCD1602_WriteCmd(temp_dir);
}
void LCD1602_MoveScreen(uchar dir)
{	
   uchar temp_dir;
   temp_dir=0x18+dir*4;
   LCD1602_WriteCmd(temp_dir);
}
/*****************************
1602写数据函数
*****************************/
void LCD1602_WriteData(uchar dat)
{	  
      LCD1602_DATA=dat;
	  LCD1602_RW_L;
	  LCD1602_RS_H; //RS拉高选择写数据
	  LCD1602_EN_H; //使能端上升沿完成操作
	  LCD1602_Delayus() ;
	  LCD1602_EN_L; //使能端恢复初始化
}

/*****************************
1602写数据函数
*****************************/
uchar LCD1602_ReadStatus()
{	  
      LCD1602_DATA=0xFF;
	  LCD1602_RS_L; //RS拉高选择写数据
	  LCD1602_RW_H; //使能端上升沿完成操作
	  LCD1602_Delayus() ;
	  LCD1602_EN_H;
	  LCD1602_EN_L; //使能端恢复初始化
	  LCD1602_Delayus() ;
	  while(LCD1602_DATA&0x80);
	  return(LCD1602_DATA);
}
/*****************************
1602写数据函数
*****************************/
uchar LCD1602_ReadData()
{	  
      
	  LCD1602_RS_H; //RS拉高选择写数据
	  LCD1602_RW_H; //使能端上升沿完成操作
	  LCD1602_Delayus() ;
	  LCD1602_EN_H;
	  LCD1602_EN_L; //使能端恢复初始化
	  LCD1602_Delayus() ;
	  return(LCD1602_DATA);
}
/*********************************
1602 液晶初始化函数
********************************/
void LCD1602_Init(uchar d,uchar c,uchar b)
{
	uchar temp_cmd;
	temp_cmd=0x08+d*4+c*2+b;
	LCD1602_EN_L;//拉低使能信号端
	LCD1602_Delayms();
	LCD1602_WriteCmd(0x38);//显示模式设置:设置16x2显示,5x7点阵,8位数据接口
	LCD1602_Delayms();
	LCD1602_WriteCmd(0x38);
	LCD1602_Delayms();
	LCD1602_WriteCmd(0x38);
	LCD1602_Delayms();
	LCD1602_WriteCmd(0x38);
	LCD1602_WriteCmd(temp_cmd);/*0 0 0 0 1 D C B 
	                  		D=1开显示、D=0关显示
			 		  		C=1显光标、C=0关光标
			 				B=1开闪烁、B=0关闪烁*/ 
	LCD1602_WriteCmd(0x06);//写一个字符后地址指针自动加1
	LCD1602_WriteCmd(0x01);//显示清屏

	
}
/********************************************************************
* 名称 : LCD1602_DisplayChar(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" 
         调用该函数如LCD1602_DisplayCharI(1,5,b的ascii码)
		 或LCD1602_DisplayChar(1,5,'b')
* 输入 : 行列坐标和需要显示字符的ASCII码值
* 输出 : 无
***********************************************************************/
void LCD1602_DisplayChar(uchar hang,uchar lie,uchar ascii) 

{
	uchar temp_addr=0;
	if(hang == 1) temp_addr = 0x80;	//第一行开始地址
	if(hang == 2) temp_addr = 0xc0;	//第二行开始地址
	temp_addr = temp_addr + lie - 1;
	
	LCD1602_WriteCmd(temp_addr); //写入地址命令
    LCD1602_WriteData(ascii);	 //写入数据
}
/********************************************************************
* 名称 : LCD1602_DisplayString(uchar hang,uchar lie,uchar *sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,
         调用该函数如LCD1602_DisplayString(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void LCD1602_DisplayString(uchar hang,uchar lie,uchar *str)
{
	uchar temp_addr=0;
	if(hang == 1) temp_addr = 0x80;//第一行开始地址
	if(hang == 2) temp_addr = 0xc0;//第二行开始地址
	temp_addr = temp_addr + lie - 1;
	
	LCD1602_WriteCmd(temp_addr);	  //写入开始位地址
	while(1)
	{
		if(*str == '\0')break; //检测到空字符时跳出循环	
		LCD1602_WriteData(*str);//写入数据
		str++;				  //指针变量自加
	}
}
void LCD1602_PrintHZ(unsigned char sta,unsigned char *hz)
{
	unsigned char i,tempH,tempL,temp_addr;
	tempH=0;
	for(i=0;i<8;i++)
	{
	 tempH=hz[i*2]>>5;
	 tempL=hz[i*2]&0x1f;
	 LCD1602_WriteCmd(0x40+i);
	 LCD1602_WriteData(tempH);
	 LCD1602_WriteCmd(0x48+i);
	 LCD1602_WriteData(tempL);
	 tempH=hz[i*2+1]>>5;
	 tempL=hz[i*2+1]&0x1f;
	 LCD1602_WriteCmd(0x56+i);
	 LCD1602_WriteData(tempH);
	 LCD1602_WriteCmd(0x64+i);
	 LCD1602_WriteData(tempL);
	}
		for(i=8;i<16;i++)
	{
	 tempH=hz[i*2]>>5;
	 tempL=hz[i*2]&0x1f;
	 LCD1602_WriteCmd(0x72+i);
	 LCD1602_WriteData(tempH);
	 LCD1602_WriteCmd(0x80+i);
	 LCD1602_WriteData(tempL);
	 tempH=hz[i*2+1]>>5;
	 tempL=hz[i*2+1]&0x1f;
	 LCD1602_WriteCmd(0x88+i);
	 LCD1602_WriteData(tempH);
	 LCD1602_WriteCmd(0x92+i);
	 LCD1602_WriteData(tempL);
	}
	
     LCD1602_DisplayChar(1,sta,0x00);
     LCD1602_DisplayChar(1,sta+1,0x01); //固定位置 单引号内可以写任意的数字或字母
	 LCD1602_DisplayChar(1,sta+2,0x02);
	 LCD1602_DisplayChar(1,sta+3,0x03);
	 LCD1602_DisplayChar(2,sta,0x04);
     LCD1602_DisplayChar(2,sta+1,0x05); //固定位置 单引号内可以写任意的数字或字母
	 LCD1602_DisplayChar(2,sta+2,0x06);
	 LCD1602_DisplayChar(2,sta+3,0x07);

}

void LCD1602_DefineCGRAM(uchar *sign)
{
 uchar i,j,k,temp_addr;
 k=0;temp_addr=0x40;
 for(j=0;j<8;j++)
 {	for(i=0;i<8;i++)
	{
		LCD1602_WriteCmd(temp_addr+i);
		LCD1602_WriteData(sign[k]);
		k++;		
	}
	temp_addr=temp_addr+8;
 }
}

LCD1602.h

#ifndef _LCD1602_H_
#define _LCD1602_H_
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
extern void LCD1602_WriteCmd(uchar cmd);
extern void LCD1602_WriteData(uchar dat);
extern void LCD1602_Init(uchar d,uchar c,uchar b);
extern uchar LCD1602_ReadStatus();
extern uchar LCD1602_ReadData();
extern void LCD1602_DefineCGRAM(uchar *sign);
extern void LCD1602_MoveScreen(uchar dir);
extern void LCD1602_MoveCursor(uchar dir);
extern void LCD1602_DisplayChar(uchar hang,uchar lie,uchar ascii);
extern void LCD1602_DisplayString(uchar hang,uchar lie,uchar *str);
extern void LCD1602_PrintHZ(unsigned char sta,unsigned char *hz);
#endif

3、AD9854

AD9854数字合成器是高集成度的器件,它采用先进的DDS技术,片内整合了两路高速、高性能正交D/A转换器通过数字化编程可以输出I、Q两路合成信号。在高稳定度时钟的驱动下,AD9854将产生一高稳定的频率、相位、幅度可编程的正弦和余弦信号,作为本振用于通信,雷达等方面。AD9854的DDS核具有48位的频率分辨率(在300M系统时钟下,频率分辨率可达1uHZ)。输出17位相位截断保证了良好的无杂散动态范围指标。AD9854允许输出的信号频率高达150MHZ,而数字调制输出频率可达100MHZ。通过内部高速比较器正弦波转换为方波输出,可用作方便的时钟发生器

8051版AD9854.c

#include <AD9854.h>
#include <intrins.h>
#include <reg52.h>
#include <init.h>
//**********************以下为系统时钟以及其相关变量设置**************************/
/* 
  此处根据自己的需要设置系统时钟以及与其相关的因子,一次需且只需开启一个   
  CLK_Set为时钟倍频设置,可设置4~20倍倍频,但最大不能超过300MHZ
  Freq_mult_ulong和Freq_mult_doulle均为2的48次方除以系统时钟,一个为长整形,一个为双精度型
*/
// #define CLK_Set 7
// const ulong  Freq_mult_ulong  = 1340357;
// const double Freq_mult_doulle = 1340357.032;

//#define CLK_Set 9
//const ulong  Freq_mult_ulong  = 1042500;		 
//const double Freq_mult_doulle = 1042499.9137431;

// #define CLK_Set 8
// const ulong  Freq_mult_ulong  = 1172812;
// const double Freq_mult_doulle = 2932031.403;

#define CLK_Set 10
const ulong  Freq_mult_ulong  = 938250;
const double Freq_mult_doulle = 938249.9224;

uchar FreqWord[6];              //6个字节频率控制字

//**************************修改硬件时要修改的部分********************************/
 #define AD9854_DataBus P3
 #define AD9854_AdrBus  P1
 sbit AD9854_RST   = P2^0;    		//控制信号引脚
 sbit AD9854_SP    = P2^1;
 sbit AD9854_OSK   = P2^2; 			//osk
 sbit AD9854_UDCLK = P2^4; 
 sbit AD9854_WR    = P1^6;
 sbit AD9854_FDATA = P2^6;       //fsk/bpsk/hold
 sbit AD9854_RD    = P2^7;
  		


//====================================================================================
//函数名称:void AD9854_WR_Byte(uchar addr,uchar dat)
//函数功能:AD9854并行口写入数据
//入口参数:addr     6位地址
//         dat      写入的数据
//出口参数:无
//====================================================================================
void AD9854_WR_Byte(uchar addr,uchar dat)
{
	AD9854_AdrBus  = (addr&0x3f) | (P1&0xc0);
	AD9854_DataBus = dat;
	AD9854_WR      = 0;
	AD9854_WR      = 1;	
}

//====================================================================================
//函数名称:void AD9854_Init(void)
//函数功能:AD9854初始化
//入口参数:无
//出口参数:无
//====================================================================================
void AD9854_Init(void)
{
	AD9854_WR=1;//将读、写控制端口设为无效
	AD9854_RD=1;
	AD9854_UDCLK=0;
	AD9854_RST=1;                 //复位AD9854
	DelayMs(10);
	AD9854_RST=0;
  AD9854_SP = 1;
	
	//AD9854_WR_Byte(0x1d,0x10);	           //关闭比较器
	AD9854_WR_Byte(0x1d,0x00);	           //开启比较器
	AD9854_WR_Byte(0x1e,CLK_Set);	   //设置系统时钟倍频            
	AD9854_WR_Byte(0x1f,0x00);	   //设置系统为模式0,由外部更新
	AD9854_WR_Byte(0x20,0x60);	   //设置为可调节幅度,取消插值补偿

	AD9854_UDCLK=1;               //更新AD9854输出
  AD9854_UDCLK=0;
}

//====================================================================================
//函数名称:void Freq_convert(long Freq)
//函数功能:正弦信号频率数据转换
//入口参数:Freq   需要转换的频率,取值从0~SYSCLK/2
//出口参数:无   但是影响全局变量FreqWord[6]的值
//说明:   该算法位多字节相乘算法,有公式FTW = (Desired Output Frequency × 2N)/SYSCLK
//         得到该算法,其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK
//         为可编程的系统时钟,FTW为48Bit的频率控制字,即FreqWord[6]
//====================================================================================
void Freq_convert(long Freq)   
{
	ulong FreqBuf;
	ulong Temp=Freq_mult_ulong;   	       

	uchar Array_Freq[4];			     //将输入频率因子分为四个字节
	Array_Freq[0]=(uchar)Freq;
	Array_Freq[1]=(uchar)(Freq>>8);
	Array_Freq[2]=(uchar)(Freq>>16);
	Array_Freq[3]=(uchar)(Freq>>24);

	FreqBuf=Temp*Array_Freq[0];                  
	FreqWord[0]=FreqBuf;    
	FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[1]);
	FreqWord[1]=FreqBuf;
	FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[2]);
	FreqWord[2]=FreqBuf;
	FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[3]);
	FreqWord[3]=FreqBuf;
	FreqBuf>>=8;

	FreqWord[4]=FreqBuf;
	FreqWord[5]=FreqBuf>>8;			
}  

//====================================================================================
//函数名称:void AD9854_SetSine(ulong Freq,uint Shape)
//函数功能:AD9854正弦波产生程序
//入口参数:Freq   频率设置,取值范围为0~(1/2)*SYSCLK
//         Shape  幅度设置. 为12 Bit,取值范围为(0~4095) ,取值越大,幅度越大 
//出口参数:无
//====================================================================================
void AD9854_SetSine(ulong Freq,uint Shape)
{
	uchar count;
	uchar Adress;

	Adress = 0x04;                        //选择频率控制字地址的初值

	Freq_convert(Freq);		           //频率转换

	for(count=6;count>0;)	          //写入6字节的频率控制字  
  {
		AD9854_WR_Byte(Adress++,FreqWord[--count]);
  }
	
	AD9854_WR_Byte(0x21,Shape>>8);	  //设置I通道幅度
	AD9854_WR_Byte(0x22,(uchar)(Shape&0xff));
	
	AD9854_WR_Byte(0x23,Shape>>8);	  //设置Q通道幅度
	AD9854_WR_Byte(0x24,(uchar)(Shape&0xff));

	AD9854_UDCLK=1;                    //更新AD9854输出
  AD9854_UDCLK=0;
}

8051版AD9854.h

#ifndef AD9854_H
#define AD9854_H
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
void AD9854_WR_Byte(uchar addr,uchar dat);
void AD9854_Init(void);
void Freq_convert(long Freq);
void AD9854_SetSine(ulong Freq,uint Shape);


#endif

stm32核心板AD9854.c

#include <stm32f10x.h>
#include "AD9854.h"
#include "Delay.h"

//**********************以下为系统时钟以及其相关变量设置**************************/
/* 
  此处根据自己的需要设置系统时钟以及与其相关的因子,一次需且只需开启一个   
  CLK_Set为时钟倍频设置,可设置4~20倍倍频,但最大不能超过300MHZ
  Freq_mult_ulong和Freq_mult_doulle均为2的48次方除以系统时钟,一个为长整形,一个为双精度型
*/
//#define CLK_Set 7
//const u32  Freq_mult_ulong  = 1340357;
//const double Freq_mult_doulle = 1340357.032;

//#define CLK_Set 9
//const u32  Freq_mult_ulong  = 1042500;		 
//const double Freq_mult_doulle = 1042499.9137431;

// #define CLK_Set 8
// const u32  Freq_mult_ulong  = 1172812;
// const double Freq_mult_doulle = 1172812.403;

#define CLK_Set 10
const u32  Freq_mult_ulong  = 938250;
const double Freq_mult_doulle = 938249.9224;

u8 FreqWord[6];              //6个字节频率控制字

//====================================================================================
// 初始化程序区
//====================================================================================
//====================================================================================
// void GPIO_AD9854_Configuration(void)
// 函数功能: AD9854引脚配置函数
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: RCC_APB2PeriphClockCmd(); GPIO_Init();
// 注意事项: 无
//====================================================================================
void GPIO_AD9854_Configuration(void)
{ 
	GPIO_InitTypeDef GPIO_InitStructure;

	// 使能IO口时钟
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC |
							RCC_APB2Periph_GPIOB, ENABLE);   
	// 地址端口
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |	GPIO_Pin_2 | GPIO_Pin_3 
								| GPIO_Pin_4 | GPIO_Pin_5 ; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;;		// 推挽输出
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	// 数据端口
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |	GPIO_Pin_10 | GPIO_Pin_11 
								| GPIO_Pin_12 | GPIO_Pin_13 |	GPIO_Pin_14 | GPIO_Pin_15; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;;		// 推挽输出
	GPIO_Init(GPIOB, &GPIO_InitStructure); 
	// 控制端口
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8  | GPIO_Pin_9  |	GPIO_Pin_10 | GPIO_Pin_11 
								| GPIO_Pin_12 | GPIO_Pin_13 |	GPIO_Pin_14; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;;		// 推挽输出
	GPIO_Init(GPIOC, &GPIO_InitStructure);
}

//====================================================================================
// AD9854驱动区
//====================================================================================
//====================================================================================
//函数名称:void AD9854_WR_Byte(uchar addr,uchar dat)
//函数功能:AD9854并行口写入数据
//入口参数:addr     6位地址
//         dat      写入的数据														
//出口参数:无
//====================================================================================
void AD9854_WR_Byte(u8 addr,u8 dat)
{
	u16 Tmp;
	
	Tmp =  GPIO_ReadOutputData(GPIOA);
	GPIO_Write(GPIOA, (u16)(addr&0x3f) | (Tmp & 0xFFC0));		// ADDER  	
	Tmp =  GPIO_ReadOutputData(GPIOB);
 	GPIO_Write(GPIOB, (u16)(dat<<8) | (Tmp & 0x00FF));		  // DATA
	AD9854_WR_Clr;
	AD9854_WR_Set;
}

//====================================================================================
//函数名称:void AD9854_Init(void)
//函数功能:AD9854初始化
//入口参数:无
//出口参数:无
//====================================================================================
void AD9854_Init(void)
{
	AD9854_WR_Set;                 // 将读、写控制端口设为无效
	AD9854_RD_Set;
	AD9854_UDCLK_Clr;
	AD9854_RST_Set;                // 复位AD9854
	Delay_10us (10);
	AD9854_RST_Clr;
	AD9854_SP_Set;


// 	AD9854_WR_Byte(0x1d,0x10);	   // 关闭比较器
	AD9854_WR_Byte(0x1d,0x00);	 // 开启比较器
	AD9854_WR_Byte(0x1e,CLK_Set);	 // 设置系统时钟倍频            
	AD9854_WR_Byte(0x1f,0x01);	   // 设置系统为模式0,由外部更新
	AD9854_WR_Byte(0x20,0x60);	   // 设置为可调节幅度,取消插值补偿,关闭Sinc效应

	AD9854_UDCLK_Set;              // 更新AD9854输出
	AD9854_UDCLK_Clr;
}

//====================================================================================
//函数名称:void Freq_convert(long Freq)
//函数功能:正弦信号频率数据转换
//入口参数:Freq   需要转换的频率,取值从0~SYSCLK/2
//出口参数:无   但是影响全局变量FreqWord[6]的值
//说明:   该算法位多字节相乘算法,有公式FTW = (Desired Output Frequency × 2N)/SYSCLK
//         得到该算法,其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK
//         为可编程的系统时钟,FTW为48Bit的频率控制字,即FreqWord[6]
//====================================================================================
void Freq_convert(long Freq)   
{	
  u32 FreqBuf;
  u32 Temp=Freq_mult_ulong;   	       

	u8 Array_Freq[4];			     //将输入频率因子分为四个字节
	Array_Freq[0]=(u8) Freq;
	Array_Freq[1]=(u8)(Freq>>8);
	Array_Freq[2]=(u8)(Freq>>16);
	Array_Freq[3]=(u8)(Freq>>24);

	FreqBuf=Temp*Array_Freq[0];                  
	FreqWord[0]=FreqBuf;    
	FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[1]);
	FreqWord[1]=FreqBuf;
	FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[2]);
	FreqWord[2]=FreqBuf;
	FreqBuf>>=8;

	FreqBuf+=(Temp*Array_Freq[3]);
	FreqWord[3]=FreqBuf;
	FreqBuf>>=8;

	FreqWord[4]=FreqBuf;
	FreqWord[5]=FreqBuf>>8;	
}  

//====================================================================================
//函数名称:void AD9854_SetSine(ulong Freq,uint Shape)
//函数功能:AD9854正弦波产生程序
//入口参数:Freq   频率设置,取值范围为0~(1/2)*SYSCLK
//         Shape  幅度设置. 为12 Bit,取值范围为(0~4095) ,取值越大,幅度越大 
//出口参数:无
//====================================================================================
void AD9854_SetSine(u32 Freq,u16 Shape)
{
	u8 count;
	u8 Adress;

	Adress = 0x04;                      //选择频率控制字地址的初值

	Freq_convert(Freq);		              //频率转换

	for(count=6;count>0;)	              //写入6字节的频率控制字  
  {
		AD9854_WR_Byte(Adress++,FreqWord[--count]);
  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
	
	AD9854_WR_Byte(0x21,(Shape>>8) & 0x00FF);	    		//设置I通道幅度
	AD9854_WR_Byte(0x22,(Shape&0x00ff));
	
	AD9854_WR_Byte(0x23,(Shape>>8) & 0x00FF);	    //设置Q通道幅度
	AD9854_WR_Byte(0x24,(Shape&0x00ff));
	AD9854_UDCLK_Set;                   			//更新AD9854输出
	AD9854_UDCLK_Clr;

}

//====================================================================================
//函数名称:void Freq_doublt_convert(double Freq)
//函数功能:正弦信号频率数据转换
//入口参数:Freq   需要转换的频率,取值从0~SYSCLK/2
//出口参数:无   但是影响全局变量FreqWord[6]的值
//说明:   有公式FTW = (Desired Output Frequency × 2N)/SYSCLK得到该函数,
//         其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK
//         为可编程的系统时钟,FTW为48Bit的频率控制字,即FreqWord[6]
//注意:   该函数与上面函数的区别为该函数的入口参数为double,可使信号的频率更精确
//         谷雨建议在100HZ以下用本函数,在高于100HZ的情况下用函数void Freq_convert(long Freq)
//====================================================================================
//void Freq_double_convert(double Freq)   
//{
//	u32 Low32;
//	u16 High16;
//  double Temp=Freq_mult_doulle;   	            //23ca99为2的48次方除以120M
//	Freq*=(double)(Temp);
	1 0000 0000 0000 0000 0000 0000 0000 0000 = 4294967295
//	High16 = (int)(Freq/4294967295);                  //2^32 = 4294967295
//	Freq -= (double)High16*4294967295;
//	Low32 = (u32)Freq;

//	FreqWord[0]=Low32;	     
//	FreqWord[1]=Low32>>8;
//	FreqWord[2]=Low32>>16;
//	FreqWord[3]=Low32>>24;
//	FreqWord[4]=High16;
//	FreqWord[5]=High16>>8;			
//} 

//====================================================================================
//函数名称:void AD9854_SetSine_double(double Freq,uint Shape)
//函数功能:AD9854正弦波产生程序
//入口参数:Freq   频率设置,取值范围为0~1/2*SYSCLK
//         Shape  幅度设置. 为12 Bit,取值范围为(0~4095) 
//出口参数:无
//====================================================================================
//void AD9854_SetSine_double(double Freq,u16 Shape)
//{
//	u8 count=0;
//	u8 Adress;

//	Adress=0x04;						     //选择频率控制字1地址的初值

//	Freq_double_convert(Freq);		           //频率转换
//	 
//	for(count=6;count>0;)	                    //写入6字节的频率控制字  
//  {
//		AD9854_WR_Byte(Adress++,FreqWord[--count]);
//  }
//	
//	AD9854_WR_Byte(0x21,Shape>>8);	  //设置I通道幅度
//	AD9854_WR_Byte(0x22,(u8)(Shape&0xff));
//	
//	AD9854_WR_Byte(0x23,Shape>>8);	  //设置Q通道幅度
//	AD9854_WR_Byte(0x24,(u8)(Shape&0xff));

//	AD9854_UDCLK_Set;                    //更新AD9854输出
//  AD9854_UDCLK_Clr;
//}

//====================================================================================
//函数名称:void AD9854_InitFSK(void)
//函数功能:AD9854的FSK初始化
//入口参数:无
//出口参数:无
//====================================================================================
//void AD9854_InitFSK(void)
//{
//	AD9854_WR_Set;                        //将读、写控制端口设为无效
//  AD9854_RD_Clr;
//  AD9854_UDCLK_Clr;
//  AD9854_RST_Set;                        //复位AD9854
//  Delay_1ms(1);	
//  AD9854_RST_Clr;
//  AD9854_SP_Set;

//	AD9854_WR_Byte(0x1d,0x10);	       //关闭比较器
//	AD9854_WR_Byte(0x1e,CLK_Set);	   //设置系统时钟倍频
//	AD9854_WR_Byte(0x1f,0x02);	       //设置系统为模式1,由外部更新
//	AD9854_WR_Byte(0x20,0x60);	      //设置为可调节幅度,取消插值补偿

//	AD9854_UDCLK_Set;                  //更新AD9854输出
//  AD9854_UDCLK_Clr;
//}

//====================================================================================
//函数名称:void AD9854_SetFSK(ulong Freq1,ulong Freq2)
//函数功能:AD9854的FSK设置
//入口参数:Freq1   FSK频率1   
//         Freq2   FSK频率2
//出口参数:无
//====================================================================================
//void AD9854_SetFSK(u32 Freq1,u32 Freq2)
//{
//  u8 count=6;
//	u8 Adress1,Adress2;

//	const u16 Shape=4000;	      //幅度设置. 为12 Bit,取值范围为(0~4095)
//	
//	Adress1=0x04;				 //选择频率控制字1地址的初值
//	Adress2=0x0a;				 //选择频率控制字2地址的初值
//	
//	Freq_convert(Freq1);               //频率转换1
//	
//	for(count=6;count>0;)	          //写入6字节的频率控制字  
//  {
//		AD9854_WR_Byte(Adress1++,FreqWord[--count]);
//  }
//	
//	Freq_convert(Freq2);               //频率转换2

//	for(count=6;count>0;)	          //写入6字节的频率控制字  
//  {
//		AD9854_WR_Byte(Adress2++,FreqWord[--count]);
//  }

//	AD9854_WR_Byte(0x21,Shape>>8);	      //设置I通道幅度
//	AD9854_WR_Byte(0x22,(u8)(Shape&0xff));
//	
//	AD9854_WR_Byte(0x23,Shape>>8);	     //设置Q通道幅度
//	AD9854_WR_Byte(0x24,(u8)(Shape&0xff));

//	AD9854_UDCLK_Set;                    //更新AD9854输出
//  AD9854_UDCLK_Clr;		
//}

//====================================================================================
//函数名称:void AD9854_InitBPSK(void)
//函数功能:AD9854的BPSK初始化
//入口参数:无
//出口参数:无
//====================================================================================
//void AD9854_InitBPSK(void)
//{
//	AD9854_WR_Set;                    //将读、写控制端口设为无效
//	AD9854_RD_Clr;
//	AD9854_UDCLK_Clr;
//	AD9854_RST_Set;                   //复位AD9854
//  Delay_1ms(1);	
//	AD9854_RST_Clr;
//  AD9854_SP_Set;

//	AD9854_WR_Byte(0x1d,0x10);	       //关闭比较器
//	AD9854_WR_Byte(0x1e,CLK_Set);	   //设置系统时钟倍频
//	AD9854_WR_Byte(0x1f,0x08);	      //设置系统为模式4,由外部更新
//	AD9854_WR_Byte(0x20,0x60);	      //设置为可调节幅度,取消插值补偿

//	AD9854_UDCLK_Set;                //更新AD9854输出
//  AD9854_UDCLK_Clr;
//}

//====================================================================================
//函数名称:void AD9854_SetBPSK(uint Phase1,uint Phase2)
//函数功能:AD9854的BPSK设置
//入口参数:Phase1   调制相位1
//         Phase2	调制相位2
//出口参数:无
//说明:   相位为14Bit,取值从0~16383,谷雨建议在用本函数的时候将Phase1设置为0,
//         将Phase1设置为8192,180°相位
//====================================================================================
//void AD9854_SetBPSK(u16 Phase1,u16 Phase2)
//{
//	u8 count;

//	const u32 Freq=60000;
//  const u16 Shape=4000;

//	u8 Adress;
//	Adress=0x04;                           //选择频率控制字1地址的初值

//	AD9854_WR_Byte(0x00,Phase1>>8);	           //设置相位1
//	AD9854_WR_Byte(0x01,(u8)(Phase1&0xff));
//	
//	AD9854_WR_Byte(0x02,Phase2>>8);	          //设置相位2
//	AD9854_WR_Byte(0x03,(u8)(Phase2&0xff));

//	Freq_convert(Freq);                            //频率转换

//	for(count=6;count>0;)	                         //写入6字节的频率控制字  
//  {
//		AD9854_WR_Byte(Adress++,FreqWord[--count]);
//  }

//	AD9854_WR_Byte(0x21,Shape>>8);	                  //设置I通道幅度
//	AD9854_WR_Byte(0x22,(u8)(Shape&0xff));
//	
//	AD9854_WR_Byte(0x23,Shape>>8);	               //设置Q通道幅度
//	AD9854_WR_Byte(0x24,(u8)(Shape&0xff));

//	AD9854_UDCLK_Set;                                //更新AD9854输出
//  AD9854_UDCLK_Clr;	
//}

//====================================================================================
//函数名称:void AD9854_InitOSK(void)
//函数功能:AD9854的OSK初始化
//入口参数:无
//出口参数:无
//====================================================================================
//void AD9854_InitOSK(void)
//{																				
//	AD9854_WR_Set;                           //将读、写控制端口设为无效
//	AD9854_RD_Clr;
//	AD9854_UDCLK_Clr;
//	AD9854_RST_Set;                          //复位AD9854
//  Delay_1ms(1);	
//	AD9854_RST_Clr;
//  AD9854_SP_Set;

//  AD9854_WR_Byte(0x1d,0x10);	           //关闭比较器
//	AD9854_WR_Byte(0x1e,CLK_Set);	       //设置系统时钟倍频
//	AD9854_WR_Byte(0x1f,0x00);	           //设置系统为模式0,由外部更新
//	AD9854_WR_Byte(0x20,0x70);	           //设置为可调节幅度,取消插值补偿,通断整形内部控制

//	AD9854_UDCLK_Set;                        //更新AD9854输出
//	AD9854_UDCLK_Clr;
//}

//====================================================================================
//函数名称:void AD9854_SetOSK(uchar RateShape)
//函数功能:AD9854的OSK设置
//入口参数: RateShape    OSK斜率,取值为4~255,小于4则无效
//出口参数:无
//====================================================================================
//void AD9854_SetOSK(u8 RateShape)
//{
//	u8 count;

//	const u32 Freq=60000;			 //设置载频
//  const u16  Shape=4000;			//幅度设置. 为12 Bit,取值范围为(0~4095)

//	u8 Adress;
//	Adress=0x04;               //选择频率控制字地址的初值

//	Freq_convert(Freq);                       //频率转换

//	for(count=6;count>0;)	                         //写入6字节的频率控制字  
//  {
//		AD9854_WR_Byte(Adress++,FreqWord[--count]);
//  }

//	AD9854_WR_Byte(0x21,Shape>>8);	                  //设置I通道幅度
//	AD9854_WR_Byte(0x22,(u8)(Shape&0xff));
//	
//	AD9854_WR_Byte(0x23,Shape>>8);	                  //设置Q通道幅度
//	AD9854_WR_Byte(0x24,(u8)(Shape&0xff));  	 


//  AD9854_WR_Byte(0x25,RateShape);				       //设置OSK斜率

//	AD9854_UDCLK_Set;                                //更新AD9854输出
//  AD9854_UDCLK_Clr;	
//}

//====================================================================================
//函数名称:void AD9854_InitAM(void)
//函数功能:AD9854的AM初始化
//入口参数:无
//出口参数:无
//====================================================================================
//void AD9854_InitAM(void)
//{
//	u8 count;

//	const u32 Freq=60000;			 //设置载频

//	u8  Adress;
//	Adress=0x04;      //选择频率控制字地址的初值
//	
//	AD9854_WR_Set;    //将读、写控制端口设为无效
//	AD9854_RD_Clr;
//	AD9854_UDCLK_Clr;
//	AD9854_RST_Set;     //复位AD9854
//  Delay_1ms(1);	
//	AD9854_RST_Clr;
//  AD9854_SP_Set;

//	AD9854_WR_Byte(0x1d,0x10);	                  //关闭比较器
//	AD9854_WR_Byte(0x1e,CLK_Set);	             //设置系统时钟倍频
//	AD9854_WR_Byte(0x1f,0x00);	                 //设置系统为模式0,由外部更新
//	AD9854_WR_Byte(0x20,0x60);	                  //设置为可调节幅度,取消插值补偿

//	Freq_convert(Freq);                            //频率转换

//	for(count=6;count>0;)	                         //写入6字节的频率控制字  
//  {
//		AD9854_WR_Byte(Adress++,FreqWord[--count]);
//  }

//	AD9854_UDCLK_Set;                             //更新AD9854输出
//	AD9854_UDCLK_Clr;
//}

//====================================================================================
//函数名称:void AD9854_SetAM(uchar Shape)
//函数功能:AD9854的AM设置
//入口参数:Shape   12Bit幅度,取值从0~4095   
//出口参数:无
//====================================================================================
//void AD9854_SetAM(u16 Shape)
//{
//	AD9854_WR_Byte(0x21,Shape>>8);	                  //设置I通道幅度
//	AD9854_WR_Byte(0x22,(u8)(Shape&0xff));
//	
//	AD9854_WR_Byte(0x23,Shape>>8);	                  //设置Q通道幅度
//	AD9854_WR_Byte(0x24,(u8)(Shape&0xff));

//	AD9854_UDCLK_Set;                                   //更新AD9854输出
//  AD9854_UDCLK_Clr;			
//}

//====================================================================================
//函数名称:void AD9854_InitRFSK(void)
//函数功能:AD9854的RFSK初始化
//入口参数:无
//出口参数:无
//====================================================================================
void AD9854_InitRFSK(void)
{
	AD9854_WR_Set;                      //将读、写控制端口设为无效
	AD9854_RD_Clr;
	AD9854_UDCLK_Clr;
	AD9854_RST_Set;                     //复位AD9854
	Delay_1ms(1);	
	AD9854_RST_Clr;
	AD9854_SP_Set;
	AD9854_FDATA_Clr;

	AD9854_WR_Byte(0x1d,0x10);	        //关闭比较器
	AD9854_WR_Byte(0x1e,CLK_Set);	      //设置系统时钟倍频
	AD9854_WR_Byte(0x1f,0x24);	        //设置系统为模式2,由外部更新,使能三角波扫频功能
	AD9854_WR_Byte(0x20,0x60);	        //设置为可调节幅度,取消插值补偿,关闭Sinc效应	

	AD9854_UDCLK_Set;                   //更新AD9854输出
  AD9854_UDCLK_Clr;
}

//====================================================================================
//函数名称:void AD9854_SetRFSK(void)
//函数功能:AD9854的RFSK设置
//入口参数:Freq_Low          RFSK低频率	   48Bit
//         Freq_High         RFSK高频率	   48Bit
//         Freq_Up_Down		 步进频率	   48Bit
//		     FreRate           斜率时钟控制  20Bit
//出口参数:无
//注:     每两个脉冲之间的时间周期用下式表示(FreRate +1)*(System Clock ),一个脉冲,
//         频率 上升或者下降 一个步进频率
//====================================================================================
void AD9854_SetRFSK(u32 Freq_Low,u32 Freq_High,u32 Freq_Up_Down,u32 FreRate)
{
	u8 count=6;
	u8 Adress1,Adress2,Adress3;
  const u16  Shape=3600;			   //幅度设置. 为12 Bit,取值范围为(0~4095)

	Adress1=0x04;		     //选择频率控制字地址的初值 
	Adress2=0x0a;
	Adress3=0x10;

	Freq_convert(Freq_Low);                             //频率1转换

	for(count=6;count>0;)	                         //写入6字节的频率控制字  
  {
		AD9854_WR_Byte(Adress1++,FreqWord[--count]);
  }

	Freq_convert(Freq_High);                             //频率2转换

	for(count=6;count>0;)	                         //写入6字节的频率控制字  
  {
		AD9854_WR_Byte(Adress2++,FreqWord[--count]);
  }

	Freq_convert(Freq_Up_Down);                             //步进频率转换

	for(count=6;count>0;)	                               //写入6字节的频率控制字  
  {
		AD9854_WR_Byte(Adress3++,FreqWord[--count]);
  }

	AD9854_WR_Byte(0x1a,(u8)((FreRate>>16)&0x0f));				   //设置斜升速率
	AD9854_WR_Byte(0x1b,(u8)(FreRate>>8));
	AD9854_WR_Byte(0x1c,(u8)FreRate);				    

	AD9854_WR_Byte(0x21,Shape>>8);	                  //设置I通道幅度
	AD9854_WR_Byte(0x22,(u8)(Shape&0xff));
	
	AD9854_WR_Byte(0x23,Shape>>8);	                  //设置Q通道幅度
	AD9854_WR_Byte(0x24,(u8)(Shape&0xff));

	AD9854_UDCLK_Set;                                //更新AD9854输出
  AD9854_UDCLK_Clr;	
}

stm32核心板版AD9854.h

/*--------------------------------------------------------------
头文件名:AD9854.h				  
文件描述:数据处理头文件
---------------------------------------------------------------*/
#ifndef _AD9854_H_
#define _AD9854_H_

#include <stm32f10x.h>
//----------------------------------------------------------------
// AD9854_I/O控制线
//-----------------------------------------------------------------
#define AD9854_RD_Set (GPIO_SetBits(GPIOC,GPIO_Pin_8))         
#define AD9854_RD_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_8))

#define AD9854_WR_Set (GPIO_SetBits(GPIOC,GPIO_Pin_9))         
#define AD9854_WR_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_9))

#define AD9854_UDCLK_Set (GPIO_SetBits(GPIOC,GPIO_Pin_10))           
#define AD9854_UDCLK_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_10))

#define AD9854_RST_Set (GPIO_SetBits(GPIOC,GPIO_Pin_11))				   //开关电源板
#define AD9854_RST_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_11))

#define AD9854_SP_Set (GPIO_SetBits(GPIOC,GPIO_Pin_12))         
#define AD9854_SP_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_12))

#define AD9854_OSK_Set (GPIO_SetBits(GPIOC,GPIO_Pin_13))         
#define AD9854_OSK_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_13))

#define AD9854_FDATA_Set (GPIO_SetBits(GPIOC,GPIO_Pin_14))        //fsk/bpsk/hold  
#define AD9854_FDATA_Clr (GPIO_ResetBits(GPIOC,GPIO_Pin_14))


//**************************以下部分为函数定义********************************
extern void GPIO_AD9854_Configuration(void);						// AD9854_IO口初始化
static void AD9854_WR_Byte(u8 addr,u8 dat);	  
extern void AD9854_Init(void);						  
static void Freq_convert(long Freq);	         	  
extern void AD9854_SetSine(u32 Freq,u16 Shape);	  
static void Freq_double_convert(double Freq);		  
extern void AD9854_SetSine_double(double Freq,u16 Shape);
extern void AD9854_InitFSK(void);				
extern void AD9854_SetFSK(u32 Freq1,u32 Freq2);					  
extern void AD9854_InitBPSK(void);					  
extern void AD9854_SetBPSK(u16 Phase1,u16 Phase2);					
extern void AD9854_InitOSK(void);					 
extern void AD9854_SetOSK(u8 RateShape);					  
extern void AD9854_InitAM(void);					 
extern void AD9854_SetAM(u16 Shape);					
extern void AD9854_InitRFSK(void);					 
extern void AD9854_SetRFSK(u32 Freq_Low,u32 Freq_High,u32 Freq_Up_Down,u32 FreRate);				

#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021年电赛模块化程序总结 的相关文章

  • LCD1602液晶显示模块学习笔记

    LCD1602液晶显示模块 一 初识LCD6021 1 实物图1 2 引脚图1 3 引脚功能说明 二 显示位置三 显示内容四 指令集五 工作时序5 1 写操作时序5 2 读操作时序 六 编程思路6 1 写数据6 2 写指令6 3 初始化6
  • LCD1602和LCD12864

    1602 字符型 xff08 字符型的模组 xff09 只能显示数字与字符 不可以显示汉字 12864 点阵型 xff08 图形型的模组 xff09 可根据需求任意显示字符 数字 汉字 图形 1602 为16字乘2行 12864 为128列
  • LCD1602液晶显示屏的入门级应用(一)

    嵌入式小白 xff0c 今天用到1602 xff0c 被CGRAM DDRAM CGROM搞得乱七八糟 xff0c 特此记录一下 xff0c 供大家参考 首先 xff0c 1602液晶显示屏除了电源 地以外 xff0c 有3个控制引脚 RS
  • STC12C5A60S2_LCD1602驱动

    文章目录 LCD1602 HLCD1602 cmain c LCD1602 H 代码如下 xff1a span class token macro property span class token directive hash span
  • 详解LCD1602液晶显示屏的使用

    1 简介 作为各类单片机实物设计的常用显示屏 xff0c LCD1602是一种专门用于显示字母 数字 符号等点阵式LCD xff0c 其1602是指LCD显示的内容为16X2 xff0c 即可以显示两行 xff0c 每行16个字符 xff0
  • LCD1602和12864显示器

    1 LCD显示器相关背景 1 1 LCD简介 1 显示器 xff0c 常见显示器 2 LCD Liquid Crystal Display xff0c 液晶显示器 xff0c 原理介绍 3 LCD应用领域 4 LED OLED 1 2 电子
  • LCD1602按下复位后乱码的问题

    1602按下后会有乱码的问题 xff0c 其实根本上是硬件引起的 某些最小系统板的复位电路没做好 xff0c 按下复位键后 xff0c 就会产生乱码 但是出现这种现象 xff0c 是可以用软件后期修正的 由于LCD复位后默认是8线输入 xf
  • LCD1602模块如何显示自定义字符

    相信大家现在知道了如何通过查字库表的方法来显示表中的任意一个字符 假如现在我想显示某个温度值 xff0c 需要标志出温度符号 C xff0c 现在你去字库表里面查找 xff0c 发现根本找不到这个符号 xff0c 那怎么办 xff1f 下面
  • STM32F407的LCD1602液晶显示程序

    LCD1602 H ifndef LCD1602 H define LCD1602 H include sys h include stm32f4xx h unsigned char message 20 unsigned char mes
  • 树莓派上使用python实现LCD1602显示当前ip

    树莓派一般运行Linux操作系统后通过远程控制来运行 xff0c 但是往往由于网络原因导致树莓派分配的ip地址被改变 xff0c 致使需要重新连接屏幕后才能查看树莓派的当前ip 最近手头有个LCD1602 xff0c 所以尝试将通过驱动LC
  • STM32驱动lcd1602,并口8位 6800时序

    STM32驱动lcd1602 xff0c 并口8位 6800时序 一 LCD1602 xff08 3 3V硬件版本 xff09 简介 1 1 引脚 引脚 xff0c lcd1602采用标准接口 xff0c 6800时序8位并行数据传输 第
  • Lcd1602——斌哥51

    最新修改时间2022 7 22 LCD1602 16代表显示16个字符 xff0c 2代表总共显示两行 芯片的工作电压是4 5 5 5v 工作电流2 0ma xff08 5V xff09 模块最佳工作电压5 0v 字符尺寸 xff1a 2
  • 基于51单片机的红外解码器

    1 简介 本红外解码器是以MCS 51系列AT89C512片机为核心 将红外传感器接收的信号解析出来 LCD1602显示屏将解码数据显示出来 2 总体原理图 硬件组成 单片机最小系统 LCD1602显示屏 IR红外接收器 系统电源 3 程序
  • 电子闹钟设计

    摘要 本设计是以89c51单片机作为控制核心的闹铃系统 本文大致可以分三个章节 第一章讲用单片机制作电子闹钟带来的优势 还有电子闹钟在未来的电子产品中的趋势以及本次设计所要实现的课题目标 第二章讲一些设计思路和硬件组成 第三讲程序代码 最后
  • 51单片机——串口通信

    51单片机 串口通信 串口通信 串口通信的原理 串口的配置 定时器的配置 c源代码 netty源代码 结果 本篇博客的最终效果是实现51单片机用串口发送Hello World netty监听串口读到Hello World后回发给51单片机
  • ADC0804的使用

    一 前言介绍 这个博客主要说明ADC0804的使用 数码管的动态显示作为辅助功能 方便观察 利用滑变和5V电源来获得一个输入电压值 输入到ADC0804的输入端 二 ADC0804芯片的介绍 1 A D转换概念 即模数转换 输入模拟量 比如
  • 51单片机——LCD1602液晶显示屏

    如下图 红框就是LCD1602液晶显示屏 他是可插拔的 插上去后数码管就会乱码无效了 因为他两共用了MCU的8个P0口 LCD1602原理图 从上面两幅图可以看出来 LCD1602的LCD D0 LCD D7分别对应MCU的P00 P07
  • LCD1602芯片的使用——简单易懂

    题目 想在LCD1602上显示两行如下字样 huaianxinxi wantin 想完成上面的显示必须掌握LCD1602芯片的基本知识 将在程序下面附上LCD1602芯片的基本知识 供大家参考 我实现的比较简单 没有什么花哨的显示 大家首先
  • 2021年电赛模块化程序总结

    文章目录 1 ADC0804 2 LCD1602 3 AD9854 1 ADC0804 集成A D转换器品种繁多 选用时应综合考虑各种因素选取集成芯片 一般逐次比较型A D转换器用的比较多 ADC0804就是这类单片集成A D转换器 ADC
  • stm32cubeide驱动LCD1602显示屏

    STM32驱动LCD1602 硬件连接关系 STM32CUBEIDE设置 代码 项目设置 最后运行 硬件连接关系 LCD1602 STM32 VCC VCC GND GND VO VCC 滑动变阻 RS PB1 RW PB2 BOOT1 E

随机推荐

  • Unity进阶--fsm状态机的使用笔记

    文章目录 Unity进阶 fsm状态机的使用笔记 第一种用基础的 if 播放实现动画控制 switch case实现状态机 使用状态机 Unity进阶 fsm状态机的使用笔记 第一种用基础的 if 播放实现动画控制 朴实无华 简单易懂 但是
  • 动态通讯录的实现

    大家在编写动态通讯录之前 我希望大家能够了解malloc和realloc的用法 https blog csdn net cdatreides article details 80522095 希望大家能够通过我的这篇博客了解malloc和r
  • PLC基础知识,详细解说PLC的优势,特点,功能,分类,应用领域及安装注意事项

    可编程控制器 Programmable Logic Controller 是计算机编程的一种 简称PLC 一 PLC的主要优势 1 现场可修改程序且编程方便简单 2 整体模块化结构后维修起来方便 3 比继电器控制装置更稳定和可靠 4 体积小
  • C++回调函数

    C 非静态成员函数的回调
  • NodeMcu arduino ESP8266WIFI 模块 WIFIAccessPoint 示例介绍,建立网络服务器进行TCP 请求 同步控制操作开发板的输出

    将ESP8266 创建网络服务器进行访问 同步控制操作开发板的输出 Create a WiFi access point and provide a web server on it 译 创建WiFi接入点并在其上提供web服务器 incl
  • 一个好用的8字节哈希算法

    http www isthe com chongo tech comp fnv index html
  • Matlab查询表格中数据并对数据进行对比

    想查查自己在年级每个成绩排多少名 然后编了这样一个程序 a 算法分析与设计实验 记录学习算法分析与设计实验的总人数 j 0 记录比这个分大的人数 k 0 for i 1 26863 比较两个字符串是否相等 if strcmp Untitle
  • Windows 下 T-Kernel QEMU模拟器使用

    google了一下 没有找到T Kernel QEMU模拟器使用介绍的内容 只有T Kernel 自己的文档 那就简单的介绍一下 1 下载对应的T Kernel代码包 参考以前的文档 http blog csdn net robertson
  • Python:用指定的字拼成这个字本身

    字 字 字字字字字字字字字字字 字 字 字字字字字字字 字 字 字字字字字字字字字字字 字 字 字字字 符 符 符符符符 符符符符符 符 符 符 符 符 符 符 符 符符 符符符符符符符 符 符 符 符 符 符 符 符 符 符 符 符 符符
  • 逻辑设备名到物理设备名的映射实现

    为了实现设备的无关性 当应用程序请求使用I O设备时 应当用逻辑设备名 但系统值识别物理设备名 所以应在系统中需要配置一张逻辑设备表 用于将逻辑设备名映射到物理设备名 逻辑设备表LUT Logical Unit Table 在逻辑设备表中
  • 使用Anaconda创建python环境 & 常见错误

    目录 使用anaconda创建python环境 1 流程 1 使用 cmd 命令打开终端 2 执行 conda 命令进入conda环境 3 执行 conda creat name 环境名 python python版本 命令创建环境 2 常
  • 在vue中使用for循环有异步请求,每次都只获取到最后一个数据解决办法

    我预想是将标签数组 dynamicTags 使用for循环取出每个值 在遍历标签数组将值一一添加到数据库中 奈何for循环结束了 才去执行put请求 这就导致了只添了数组的最后一个值 原因是axios put请求是异步请求 解决方案 使用递
  • 分析整理文献的具体步骤_VOSviewer文献综述

    文献综述在科技论文和学位论文中占据着重要地位 是论文中的一个重要且不可或缺的部分 它是研究者在对某一学科 专业或专题的大量文献进行阅读 整理 筛选 分析 综合和提炼的基础上 用自己的语言综合叙述研究状况的情报研究成果 因此 文献综述的好坏直
  • 计算宽度_桥梁有效宽度计算,看看很有用!

    有效分布宽度实质上是剪力滞效应的反应 由于目前桥梁设计多用二维平面解析 故荷载的有效分布宽度仍需要计算 不过还有很多深层次问题还不能合理解答 有待进一步研究和探讨 各中间跨正弯矩段取该跨计算跨径的0 2倍 边跨正弯矩段取该跨计算跨径的0 2
  • 回溯法-装载问题

    子集树问题 和 子集树的0 1背包问题类似 但是没有考虑价格 include
  • 【Parallels Desktop】解决Sorry, This Application Cannot Be Run Under A Virtual Machine

    问题描述 解决步骤 Win R 或Cmd R 打开 运行 窗口 输入regedit并点击 确定 打开注册表编辑器 依次展开HKEY LOCAL MACHINE HARDWARE ACPI DSDT文件夹 鼠标右键点击PRLS 选择 重命名
  • Redis第二讲 Redis数据持久化AOF和RDB

    RDB快照 snapshot 在默认情况下 Redis 将内存数据库快照保存在名字为 dump rdb 的二进制文件中 你可以对 Redis 进行设置 让它在 N 秒内数据集至少有 M 个改动 这一条件被满足时 自动保存一次数据集 save
  • 【修仙境界】等级划分

    文章目录 一 下境界 1 炼气 一共13层 2 筑基 分初 中 后期和大圆满 3 结丹 分初 中 后期和大圆满 4 元婴 分初 中 后期和大圆满 5 化神 分初 中 后期和大圆满 二 中境界 1 炼虚 分初 中 后期和大圆满 2 合体 分初
  • C++ 编程出错的地方(考试选择题易错点)

    一 int IsSvn int n if n 7 0 return 1 要判断这个数能不能被7整除 你就只返回1吗 那岂不是只返回1 没有0的情况了 应该改为 int IsSvn int n if n 7 0 return 1 else r
  • 2021年电赛模块化程序总结

    文章目录 1 ADC0804 2 LCD1602 3 AD9854 1 ADC0804 集成A D转换器品种繁多 选用时应综合考虑各种因素选取集成芯片 一般逐次比较型A D转换器用的比较多 ADC0804就是这类单片集成A D转换器 ADC