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)
|