|
代碼初學(xué)者寫的代碼,可能不太規(guī)范,但是代碼簡單分方便理解,希望對大家有幫助
單片機(jī)源程序如下:
- #include "stm32f10x.h"
- #include "led.h"
- #include "system.h"
- #include "SysTick.h"
- #include "beep.h"
- #include "dtube.h"
- #include "key.h"
- #include "text.h"
- #include "lcd.h"
- #include "dac.h"
- #include "usart.h"
- #include "ADF4351.h"
- #include "adc.h"
- float fre_max_ini = 100;
- float fre_min_ini = 80;
- float static fre_max = 100 ;
- float static fre_min = 80 ;
- float static fre_num = 100 ;
- double RMS_adc_get(void) //有效值adc采樣
- {
-
- float value = 0;
- float x=1.75;
- double y=0;
-
- value = Get_ADC_Value(ADC_Channel_1,5);
- x = (float)value*(3.3/4096);
- y = 62.0805 - 18.64 * x ;
-
-
- return y ;
- }
- void key_fre(void) //鎖相環(huán)單獨(dú)控制
- {
- float static num = 100.0 ;
- short flag = 0;
- char a[6];
- short count = 0;
- int key = 0;
- int i=1;
- POINT_COLOR=RED;
-
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
-
- while(i!=0)
- {
- key = Key_Scan();
-
- switch (key){
- case 1://1
- if(flag)
- num += 0.1;
- else
- {
- num *= 10;
- num += 1;
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 2://2
- if(flag)
- num += 0.2;
- else
- {
- num *= 10;
- num += 2;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 3://3
- if(flag)
- num += 0.3;
- else
- {
- num *= 10;
- num += 3;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 4://point
- flag = 1;
- break;
- case 5://4
- if(flag)
- num += 0.4;
- else
- {
- num *= 10;
- num += 4;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 6://5
- if(flag)
- num += 0.5;
- else
- {
- num *= 10;
- num += 5;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 7://6
- if(flag)
- num += 0.6;
- else
- {
- num *= 10;
- num += 6;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 8://
- i=0;
- LCD_Clear(BLACK);
- break;
- case 9://7
- if(flag)
- num += 0.7;
- else
- {
- num *= 10;
- num += 7;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 10://8
- if(flag)
- num += 0.8;
- else
- {
- num *= 10;
- num += 8;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 11://9
- if(flag)
- num += 0.9;
- else
- {
- num *= 10;
- num += 9;
-
- }
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 12://reset
- num = 100.0;
- flag = 0;
- LCD_Clear(BLACK);
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 13://left
- num -= 1;
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 14://0
- if(flag)
- num += 0.0;
- else
- {
- num *= 10;
-
- }sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 15://right
- num += 1;
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- break;
- case 16://ok
- LCD_Clear(BLACK);
- if(num < 35.0)
- num = 35.0;
- if(num > 4400.0)
- num = 4400.0;
- count = 0;
- sprintf(a,"%.1f",num);
- LCD_ShowString(60,60,a,POINT_COLOR);
- //ADF4351WriteFreq(num);
- break;
- default:
- break;
- }
- }
- }
- void draw_hand(void) //手動(dòng)掃頻
- {
- int key;
- int i;
- char a[6];
- double static dbm = 0;
- float num = fre_min;
- while(i)
- {
- //ADF4351WriteFreq(num);
- LCD_ShowString(60,180," fre: ",POINT_COLOR);
- LCD_ShowString(60,210," dbm: ",POINT_COLOR);
- sprintf(a,"%.1f",num);
- LCD_ShowString(120,180,a,POINT_COLOR);
-
- key = Key_Scan();
- switch (key){
- case 15: // +
- num += 0.1;
- //ADF4351WriteFreq(num);
- led();
- dbm = RMS_adc_get();
- sprintf( a ,"%.1f", num );
- LCD_ShowString(120,180, a ,POINT_COLOR);
- sprintf( a ,"%.3f", dbm );
- LCD_ShowString(120,210, a ,POINT_COLOR);
- break;
- case 13: // -
- num -= 0.1;
- //ADF4351WriteFreq(num);
- led();
- dbm = RMS_adc_get();
- sprintf(a,"%.1f",num);
- LCD_ShowString(120,180,a,POINT_COLOR);
- sprintf( a ,"%.3f", dbm );
- LCD_ShowString(120,210, a ,POINT_COLOR);
-
- break;
- case 8: //退出
- i=0;
- LCD_Clear(BLACK);
- break;
- default:
- break;
- }
- }
-
- }
- void draw_outo(void) //自動(dòng)掃頻
- {
- char a[6];
- int key;
- int i=1;
- double static dbm = 0;
- float num = fre_min;
-
- while(i)
- {
- LCD_ShowString(60,120," please press ok or quit",POINT_COLOR);
- LCD_ShowString(60,180," fre: ",POINT_COLOR);
- LCD_ShowString(60,210," dbm: ",POINT_COLOR);
- sprintf(a,"%.1f",num);
- LCD_ShowString(120,180,a,POINT_COLOR);
- key = Key_Scan();
- switch (key){
- case 16: //開始自動(dòng)掃頻
- while(num < fre_max)
- {
- //ADF4351WriteFreq(num);
- led();
- dbm = RMS_adc_get();
- sprintf(a,"%.1f",num);
- LCD_ShowString(120,180,a,POINT_COLOR);
- sprintf( a ,"%.3f", dbm );
- LCD_ShowString(120,210, a ,POINT_COLOR);
- num += 0.1;
- }
- break;
- case 8: //退出
- i=0;
- LCD_Clear(BLACK);
- break;
- default:
- break;
- }
- }
- }
- u16 key_con(float num , int y ,float num_ini) //高低頻率設(shè)置
- {
- int i=1;
- char a[6];
- int key;
- short count = 0;
- short flag = 0;
- fre_num = num ;
-
- sprintf(a,"%.1f", fre_num);
- LCD_ShowString( 120 , y , a , POINT_COLOR );
-
- while(i)
- {
- key = Key_Scan();
- switch (key){
- case 1://1
- if(flag)
- fre_num += 0.1;
- else
- {
- fre_num *= 10;
- fre_num += 1;
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 2://2
- if(flag)
- fre_num += 0.2;
- else
- {
- fre_num *= 10;
- fre_num += 2;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 3://3
- if(flag)
- fre_num += 0.3;
- else
- {
- fre_num *= 10;
- fre_num += 3;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 4://point
- flag = 1;
- break;
- case 5://4
- if(flag)
- fre_num += 0.4;
- else
- {
- fre_num *= 10;
- fre_num += 4;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 6://5
- if(flag)
- fre_num += 0.5;
- else
- {
- fre_num *= 10;
- fre_num += 5;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 7://6
- if(flag)
- fre_num += 0.6;
- else
- {
- fre_num *= 10;
- fre_num += 6;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 8://
- fre_num = num ;
- i=0;
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 9://7
- if(flag)
- fre_num += 0.7;
- else
- {
- fre_num *= 10;
- fre_num += 7;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 10://8
- if(flag)
- fre_num += 0.8;
- else
- {
- fre_num *= 10;
- fre_num += 8;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 11://9
- if(flag)
- fre_num += 0.9;
- else
- {
- fre_num *= 10;
- fre_num += 9;
-
- }
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 12://reset
- LCD_ShowString(120,y, " " ,POINT_COLOR);
- fre_num = (float)num_ini;
- flag = 0;
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 13://left
- fre_num -= 1;
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 14://0
- if(flag)
- fre_num += 0.0;
- else
- {
- fre_num *= 10;
-
- }sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 15://right
- fre_num += 1;
- sprintf(a,"%.1f",fre_num);
- LCD_ShowString(120,y,a,POINT_COLOR);
- break;
- case 16://ok
- i = 0 ;
- return fre_num;
- break;
- default:
- break;
- }
- }
- //return fre_num;
- }
- void fre_set(void) // set
- {
- int i=1;
- char a[6];
- int key;
- int y = 60;
-
- LCD_ShowString( 10 , 60 , " fre_max(1): " , POINT_COLOR );
- sprintf(a,"%.1f",fre_max);
- LCD_ShowString( 120 , 60 , a , POINT_COLOR );
-
- LCD_ShowString( 10 , 80 , " fre_min(2): " , POINT_COLOR );
- sprintf(a,"%.1f",fre_min);
- LCD_ShowString( 120 , 80 , a , POINT_COLOR );
-
- while(i)
- {
- key = Key_Scan();
- switch (key){
- case 1: //fre_max
- y = 60 ;
- fre_max = key_con( fre_max , y , fre_max_ini );
- break;
- case 2: //fre_min
- y = 80;
- fre_min = key_con( fre_min , y , fre_min_ini);
- break;
- case 8: //退出
- i=0;
- LCD_Clear(BLACK);
- break;
- default:
- break;
- }
- }
- }
- void draw_fre(void) //頻譜儀
- {
-
- char a[6];
- int key;
- int i=1;
-
- while(i)
- {
- LCD_ShowString(60,60," please press 1,2,3 or quit ",POINT_COLOR);
- key = Key_Scan();
- switch (key){
- case 1: //手動(dòng)掃頻
- LCD_Clear(BLACK);
- draw_hand();
- break;
- case 2: //自動(dòng)掃頻
- LCD_Clear(BLACK);
- draw_outo();
- break;
- case 3: //設(shè)置
- LCD_Clear(BLACK);
- fre_set();
- break;
- case 8: //退出
- i=0;
- LCD_Clear(BLACK);
- break;
- default:
- break;
- }
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- int main()
- {
- float num;
- char a[6];
- int key;
-
- SysTick_Init(72);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優(yōu)先級(jí)分組 分2組
- USART1_Init(9600);
- KEY_Init();
- LED_Init();
- LCD_Init(); //LCD初始化
- ADCx_Init();
- GPIO_ADF4351_Configuration();//ADF4351GPIO初始化
- //ADF4351Init();//ADF4351輸出初始化(70M)
- LCD_Clear(BLACK);
- POINT_COLOR=RED;
-
- GPIO_ResetBits(GPIOE,GPIO_Pin_6);
-
- LCD_ShowString(60,60," please press 1 or 2",POINT_COLOR);
-
- while(1)
- {
- key = Key_Scan();
- switch (key){
- case 1: //鎖相環(huán)單獨(dú)控制
- LCD_Clear(BLACK);
- key_fre();
- LCD_ShowString(60,60," please press 1 or 2 ",POINT_COLOR);
- break;
- case 2: //頻譜儀
- LCD_Clear(BLACK);
- draw_fre();
- LCD_ShowString(60,60," please press 1 or 2 ",POINT_COLOR);
- break;
- default:
- break;
- }
- }
-
-
-
-
- }
復(fù)制代碼
所有資料51hei提供下載:
頻譜儀.7z
(218.36 KB, 下載次數(shù): 37)
2019-7-29 16:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|