标题:
STM32的AD9959驱动源程序
[打印本页]
作者:
ymf
时间:
2018-7-4 15:17
标题:
STM32的AD9959驱动源程序
STM32的AD9959驱动程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "touch.h"
#include "picture.h"
#include "mygui.h"
#include "string.h"
#include "stmflash.h"
#include "math.h"
#include "string.h"
#include "task_manage.h"
#include "AD9959.h"
#include "timer.h"
#include "sys.h"
#include "adc.h"
#include "key.h"
#include "oled.h"
#define KEY_NUM 5 //键盘最大按键次数
#define KEY_MAX 10000
#define KEY_MIN 0
#define SLI_F_MAX 202 //最大200M,202是弥补滑条的差值 ,一下同理
#define SLI_A_MAX 1029 //最大1023
#define SLI_P_MAX 16466 //最大16383
#define SLI_SF_MAX 141
#define SLI_SF_MIN 51
#define SLI_STPF_MAX 102
#define SLI_SWT_MAX 11
#define CIRCLE_1 2
#define CIRCLE_2 4
void ALL_INIT(void);
void Main_Loop(void);
void Key_Deal(u8 key);
void Software_Circle_Memu_Test(void);
void Main_Memu_Show(void);
void TASK_MAIN_LOOP(void);
void sweep_clen_lcd(void);
void clen_ALL(void);
void CH1_CHANGE(void);
void CH2_CHANGE(void);
void CH3_CHANGE(void);
void CH4_CHANGE(void);
void Sweep_Set(void);
void Set_Point_Fre_Clen(void);
char SHOW_BUFF[256];//显存buff
char buff[255];
unsigned char Refresh_flag = 0; //按键值刷新当且仅当键盘确认被按下后,标志位置1
float RETURN_KEY_VAULE = 0; //软件键盘的返回值;
u16 RETURN_SLI_VAULE = 0;//软件滑条返回值
// ADC1转换的电压值通过MDA方式传到SRAM
extern __IO uint16_t ADC_ConvertedValue[macNOFCHANEL];
// 局部变量,用于保存转换计算后的电压值
float ADC_ConvertedValueLocal[macNOFCHANEL];
u8 key_str[20][10] = {"开始","返回"}; //创建一个图片键盘,二维数组里面的内容为软件键盘的内容
KEYBOARD key = {160, 280, 1, 2, 30, 20, 7, LIGHTBLUE, 1, 16, BLACK,0, gImage_1,LIGHTGREEN}; //软件键盘的设置
SLIDER sli_F = {10,180,200,5,BLUE, 10,10,YELLOW,SLI_F_MAX};
SLIDER sli_A = {10,220,200,5,BLUE, 10,10,YELLOW,SLI_A_MAX};
SLIDER sli_P = {10,260,200,5,BLUE, 10,10,YELLOW,SLI_P_MAX};
SLIDER sli_SFMX = {10,140,200,5,BLUE, 10,10,YELLOW,SLI_SF_MAX};
SLIDER sli_SFMI = {10,180,200,5,BLUE, 10,10,YELLOW,SLI_SF_MIN};
SLIDER sli_STP = {10,220,200,5,BLUE, 10,10,YELLOW,SLI_STPF_MAX};
SLIDER sli_SWT = {10,260,200,5,BLUE, 10,10,YELLOW,SLI_SWT_MAX};
u8 cir_str[CIRCLE_2][10] = {"CH1","CH2","CH3","CH4"}; //圆圈菜单对应的名称
CIRCLE_MEMU cir_memu = {30,100,10,CIRCLE_2,40,3,16,BLUE,RED,WHITE}; //创建一个圆圈菜单。
int Cir_choose[CIRCLE_2] = {0}; //圆圈菜单数组,即圆圈菜单的状态记录数组
u8 T_Cir = 0; //圆圈菜单是否发生更新的值
int Memu_Case = 0; //圆圈菜单状态值
u8 cir_str_memu[CIRCLE_1][10] = {"点频","扫频"}; //圆圈菜单对应的名称
CIRCLE_MEMU cir_memu_m = {60,60,10,CIRCLE_1,100,3,16,BLACK,BLUE,WHITE}; //创建一个圆圈菜单。
u8 T_Cir_m = 0; //圆圈菜单是否发生更新的值
int Memu_Case_m = 0; //圆圈菜单状态值
int Cir_choose_m[CIRCLE_1] = {0}; //圆圈菜单数组,即圆圈菜单的状态记录数组
u32 ch_f[4] = {2000,2000,50,50};
u32 ch_a[4] = {1023,1023,1023,1023};
u32 ch_p[4] = {0,0,0,0};
//扫频定义
/******************************************************************************/
u32 SweepMinFre = 10000000; //最小10M
u32 SweepMaxFre = 100000000; //最大100M
u32 SweepStepFre = 1000000; //扫面步进值,0.1M
u16 SweepTime = 10; //ms两步进频率之间的间隔 如果5s内完成50M带款扫秒那么最大两频点间隔为10ms
u8 SweepFlag = 0; //扫描启动标志位
/******************************************************************************/
//注这里所有的汉字都来自于字库gb16.h,需要用到汉字就在字库添加即可
int main(void)
{
ALL_INIT();
ADCx_Init();
while(1)
{
// Main_Loop();
ADC_ConvertedValueLocal[0] =(float) ADC_ConvertedValue[0]/4096*3.3;
ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*3.3;
ADC_ConvertedValueLocal[2] =(float) ADC_ConvertedValue[2]/4096*3.3;
ADC_ConvertedValueLocal[3] =(float) ADC_ConvertedValue[3]/4096*3.3;
sprintf(buff, "V1 = %.2f ", ADC_ConvertedValueLocal[0]);
OLED_ShowStr(0,0,(u8 *)buff,1);
sprintf(buff, "V2 = %.2f ", ADC_ConvertedValueLocal[1]);
OLED_ShowStr(0,1,(u8 *)buff,1);
sprintf(buff, "V3 = %.2f ", ADC_ConvertedValueLocal[2]);
OLED_ShowStr(0,2,(u8 *)buff,1);
sprintf(buff, "V4 = %.2f ", ADC_ConvertedValueLocal[3]);
OLED_ShowStr(0,3,(u8 *)buff,1);
}
}
//void Main_Loop(void)
//{
// TASK_MAIN_LOOP();
//}
void ALL_INIT(void)
{
NVIC_Configuration(); //设置中断分组
delay_init(); //延时函数初始化,用的是滴答定时器,较为精准的延时
uart_init(9600); //串口初始化为9600
key_init();
LCD_Init(); //LCD初始化
I2C_Configuration();
OLED_Init();
OLED_Fill(0x00);
// TP_Init();
// Timerx_Init( 99,71);
// LCD_ShowString(20, 30, 24, RED, (u8 *)"DDS-AD9959");
// LCD_ShowString(150, 23, 24, RED, (u8 *)"射频源");
// Main_Memu_Show();
// Circle_Memu_Init(cir_memu_m,cir_str_memu,10);
Init_AD9959();
}
//void TASK_MAIN_LOOP(void)
//{
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// if(Memu_Case_m == 1)
// {
// T_Cir = Circle_Memu_GetValue(cir_memu, Cir_choose,&Memu_Case);
// Set_Point_Fre_Clen();
// switch (Memu_Case)
// {
// case 1 : CH1_CHANGE(); break;
// case 2 : CH2_CHANGE(); break;
// case 3 : CH3_CHANGE(); break;
// case 4 : CH4_CHANGE(); break;
// default : Set_Point_Fre_Clen();break;
// }
// }
// if(Memu_Case_m == 2)
// {
// Sweep_Set();
// }
//}
//void TASK_MAIN_LOOP(void)
//{
// u8 t=0;
// t=KEY_Scan(0);
// switch(t)
// {
// case KEY0_PRES:
// CH1_CHANGE();
// break;
// case KEY1_PRES:
// CH2_CHANGE();
// break;
// default:
// delay_ms(10);
// }
//
//}
//void CH1_CHANGE(void)
//{
//
// Write_frequence(0,ch_f[0]);
// Write_Amplitude(0,ch_a[0]);
// Write_Phase(0, ch_p[0]);
//}
//void CH2_CHANGE(void)
//{
//
// Write_frequence(1,ch_f[1]);
// Write_Amplitude(1,ch_a[1]);
// Write_Phase(1, ch_p[1]);
//}
//void CH1_CHANGE(void)
//{
// u32 A0_NEXT = ch_a[0];
//
// SLIDER_Init(sli_F);
// SLIDER_Init(sli_A);
// SLIDER_Init(sli_P);
//
//
// while(Memu_Case == 1 && Memu_Case_m == 1)
// {
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// T_Cir = Circle_Memu_GetValue(cir_memu, Cir_choose,&Memu_Case);
// if(!T_Cir)
// {
// ch_f[0] = SLIDER_GetValue(sli_F,SLI_F_MAX);
// ch_a[0] = SLIDER_GetValue(sli_A,SLI_A_MAX);
// ch_p[0] = SLIDER_GetValue(sli_P,SLI_P_MAX);
// if(ch_f[0] != (SLI_F_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Frequency: %09d Hz", ch_f[0] * 1000000);
// LCD_ShowString(10, 200, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_frequence(0,ch_f[0] * 1000000);
// }
//
// if(ch_a[0] != (SLI_A_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Amplitude: %.3f Mv", (double)ch_a[0] * 500 / 1023);
// LCD_ShowString(10, 240, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Amplitude(0,ch_a[0]);
// A0_NEXT = ch_a[0];
// }
//
// if(ch_p[0] != (SLI_P_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Phase: %.3fT", (double) ch_p[0] / 16383);
// LCD_ShowString(10, 280, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Phase(0, ch_p[0]);
// Write_Amplitude(0,A0_NEXT);
// }
// }
// }
//}
//void CH2_CHANGE(void)
//{
// u32 A1_NEXT = ch_a[1];
//
// SLIDER_Init(sli_F);
// SLIDER_Init(sli_A);
// SLIDER_Init(sli_P);
//
//
// while(Memu_Case == 2 && Memu_Case_m == 1)
// {
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// T_Cir = Circle_Memu_GetValue(cir_memu, Cir_choose,&Memu_Case);
// if(!T_Cir)
// {
// ch_f[1] = SLIDER_GetValue(sli_F,SLI_F_MAX);
// ch_a[1] = SLIDER_GetValue(sli_A,SLI_A_MAX);
// ch_p[1] = SLIDER_GetValue(sli_P,SLI_P_MAX);
// if(ch_f[1] != (SLI_F_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Frequency: %09d Hz", ch_f[1] * 1000000);
// LCD_ShowString(10, 200, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_frequence(1,ch_f[1] * 1000000);
// }
//
// if(ch_a[1] != (SLI_A_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Amplitude: %.3f Mv", (double)ch_a[1] * 500 / 1023);
// LCD_ShowString(10, 240, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Amplitude(1,ch_a[1]);
// A1_NEXT = ch_a[1];
// }
//
// if(ch_p[1] != (SLI_P_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Phase: %.3fT", (double) ch_p[1] / 16383);
// LCD_ShowString(10, 280, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Phase(1, ch_p[1]);
// Write_Amplitude(1,A1_NEXT);
// }
// }
// }
//}
//void CH3_CHANGE(void)
//{
// u32 A2_NEXT = ch_a[2];
//
// SLIDER_Init(sli_F);
// SLIDER_Init(sli_A);
// SLIDER_Init(sli_P);
//
//
// while(Memu_Case == 3 && Memu_Case_m == 1)
// {
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// T_Cir = Circle_Memu_GetValue(cir_memu, Cir_choose,&Memu_Case);
// if(!T_Cir)
// {
// ch_f[2] = SLIDER_GetValue(sli_F,SLI_F_MAX);
// ch_a[2] = SLIDER_GetValue(sli_A,SLI_A_MAX);
// ch_p[2] = SLIDER_GetValue(sli_P,SLI_P_MAX);
// if(ch_f[2] != (SLI_F_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Frequency: %09d Hz", ch_f[2] * 1000000);
// LCD_ShowString(10, 200, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_frequence(2,ch_f[2] * 1000000);
// }
//
// if(ch_a[2] != (SLI_A_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Amplitude: %.3f Mv", (double)ch_a[2] * 500 / 1023);
// LCD_ShowString(10, 240, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Amplitude(2,ch_a[2]);
// A2_NEXT = ch_a[2];
// }
//
// if(ch_p[2] != (SLI_P_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Phase: %.3fT", (double) ch_p[2] / 16383);
// LCD_ShowString(10, 280, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Phase(2, ch_p[2]);
// Write_Amplitude(2,A2_NEXT);
// }
// }
// }
//}
//void CH4_CHANGE(void)
//{
// u32 A3_NEXT = ch_a[3];
//
// SLIDER_Init(sli_F);
// SLIDER_Init(sli_A);
// SLIDER_Init(sli_P);
//
//
// while(Memu_Case == 4 && Memu_Case_m == 1)
// {
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// T_Cir = Circle_Memu_GetValue(cir_memu, Cir_choose,&Memu_Case);
// if(!T_Cir)
// {
// ch_f[3] = SLIDER_GetValue(sli_F,SLI_F_MAX);
// ch_a[3] = SLIDER_GetValue(sli_A,SLI_A_MAX);
// ch_p[3] = SLIDER_GetValue(sli_P,SLI_P_MAX);
// if(ch_f[3] != (SLI_F_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Frequency: %09d Hz", ch_f[3] * 1000000);
// LCD_ShowString(10, 200, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_frequence(3,ch_f[3] * 1000000);
// }
//
// if(ch_a[3] != (SLI_A_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Amplitude: %.3f Mv", (double)ch_a[3] * 500 / 1023);
// LCD_ShowString(10, 240, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Amplitude(3,ch_a[3]);
// A3_NEXT = ch_a[3];
// }
//
// if(ch_p[3] != (SLI_P_MAX+1))
// {
// sprintf((char*)SHOW_BUFF, "Phase: %.3fT", (double) ch_p[3] / 16383);
// LCD_ShowString(10, 280, 16, BLACK, (u8 *)SHOW_BUFF);
// Write_Phase(3, ch_p[3]);
// Write_Amplitude(3,A3_NEXT);
// }
// }
// }
//}
//void Main_Memu_Show(void)
//{
// Circle_Memu_Init(cir_memu,cir_str,5);
//}
//void Sweep_Set(void)
//{
//
// u8 KEY_vaule = 0;
// u32 sweep_arr[4] = {0};
//
// SLIDER_Init(sli_SFMX);
// SLIDER_Init(sli_SFMI);
// SLIDER_Init(sli_STP);
// SLIDER_Init(sli_SWT);
// sweep_clen_lcd();
// KeyBaord_Init(key,key_str);
// KEY_vaule = KeyBaord_GetValue(key,key_str);
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// while((KEY_vaule == 0) && (Memu_Case_m == 2))
// {
// T_Cir_m = Circle_Memu_GetValue(cir_memu_m, Cir_choose_m,&Memu_Case_m);
// KEY_vaule = KeyBaord_GetValue(key,key_str);
// sweep_arr[0] = SLIDER_GetValue(sli_SFMX,SLI_SF_MAX);
// sweep_arr[1] = SLIDER_GetValue(sli_SFMI,SLI_SF_MIN);
// sweep_arr[2] = SLIDER_GetValue(sli_STP,SLI_STPF_MAX);
// sweep_arr[3] = SLIDER_GetValue(sli_SWT,SLI_SWT_MAX);
// if(sweep_arr[0] != (SLI_SF_MAX+1))
// {
// SweepMaxFre = sweep_arr[0] * 1000000;
// sprintf((char*)SHOW_BUFF, "Fre_Max: %09d Hz", SweepMaxFre);
// LCD_ShowString(10, 160, 16, BLACK, (u8 *)SHOW_BUFF);
// }
// if(sweep_arr[1] != (SLI_SF_MIN+1))
// {
// SweepMinFre = sweep_arr[1] * 1000000;
// sprintf((char*)SHOW_BUFF, "Fre_Min: %09d Hz", SweepMinFre);
// LCD_ShowString(10, 200, 16, BLACK, (u8 *)SHOW_BUFF);
// }
// if(sweep_arr[2] != (SLI_STPF_MAX+1))
// {
// SweepStepFre = sweep_arr[2] * 100000;
// sprintf((char*)SHOW_BUFF, "Fre_Stp: %09d Hz", SweepStepFre);
// LCD_ShowString(10, 240, 16, BLACK, (u8 *)SHOW_BUFF);
// }
// if(sweep_arr[3] != (SLI_SWT_MAX+1))
// {
// SweepTime = sweep_arr[3];
// sprintf((char*)SHOW_BUFF, "Fre_Tim: %02d ms", SweepTime);
// LCD_ShowString(10, 280, 16, BLACK, (u8 *)SHOW_BUFF);
// }
// }
// if (ADC_ConvertedValueLocal[0] == 0)
// {
// Memu_Case_m = 0;
// clen_ALL();
// SweepFlag = 0;
// }
// if(KEY_vaule == 2)
// {
// Memu_Case_m = 0;
// clen_ALL();
// SweepFlag = 0;
// }
// if(KEY_vaule == 1)
// {
//// Memu_Case_m = 0;
//// clen_ALL();
// SweepFlag = 1;
// }
//}
//void sweep_clen_lcd(void)
//{
// LCD_ShowString(10, 160, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 200, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 240, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 280, 16, BLACK, (u8 *)" ");
//}
//void Set_Point_Fre_Clen(void)
//{
// sweep_clen_lcd();
// LCD_ShowString(10, 138, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 272, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 288, 16, BLACK, (u8 *)" ");
//}
//void clen_ALL(void)
//{
// Set_Point_Fre_Clen();
// LCD_ShowString(10, 178, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 218, 16, BLACK, (u8 *)" ");
// LCD_ShowString(10, 258, 16, BLACK, (u8 *)" ");
//}
复制代码
全部资料51hei下载地址:
AD9959_Sweep_point_fre.rar
(389.9 KB, 下载次数: 119)
2018-7-5 01:22 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
xwstu
时间:
2020-9-10 14:06
想问下这个引脚是怎么连,我连的一直没有输出
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1