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
|