久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
頻譜儀STM32單片機代碼
[打印本頁]
作者:
fuyu6791
時間:
2019-7-29 13:07
標題:
頻譜儀STM32單片機代碼
代碼初學者寫的代碼,可能不太規范,但是代碼簡單分方便理解,希望對大家有幫助
單片機源程序如下:
#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) //鎖相環單獨控制
{
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) //手動掃頻
{
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) //自動掃頻
{
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: //開始自動掃頻
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) //高低頻率設置
{
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: //手動掃頻
LCD_Clear(BLACK);
draw_hand();
break;
case 2: //自動掃頻
LCD_Clear(BLACK);
draw_outo();
break;
case 3: //設置
LCD_Clear(BLACK);
fre_set();
break;
case 8: //退出
i=0;
LCD_Clear(BLACK);
break;
default:
break;
}
}
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
int main()
{
float num;
char a[6];
int key;
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優先級分組 分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: //鎖相環單獨控制
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;
}
}
}
復制代碼
所有資料51hei提供下載:
頻譜儀.7z
(218.36 KB, 下載次數: 37)
2019-7-29 16:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-7-29 17:00
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
goodmasher
時間:
2023-1-19 02:40
樓主真是個好心人, 但這些代碼比較不好用,因為沒有電路圖,涉及到射頻電路中的鎖相環,沒有電路圖可能很難理解它的實用價值,望樓主補上電路圖.
作者:
許玩童
時間:
2023-3-16 21:35
確實不知道是使用啥顯示屏啥電路圖,黑幣有限,不敢下載了。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
蜜桃一区二区三区
|
欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放
|
久久精品小视频
|
日本久草视频
|
午夜小电影
|
久久精品久久久久久
|
亚洲午夜一区二区
|
国产精品96久久久久久
|
99爱在线视频
|
亚洲天堂一区
|
www.亚洲精品
|
黄色中文字幕
|
毛片视频免费
|
毛片一级黄色
|
欧美国产亚洲一区二区
|
国产伦精品一区二区三区精品视频
|
国产在线二区
|
国产a视频
|
一区二区亚洲
|
国产欧美日韩在线观看
|
91精品国产乱码久久久久久久久
|
久久久久国色av免费观看性色
|
日韩av第一页
|
久久91
|
华人黄网站大全
|
欧美不卡一区二区三区
|
天堂色
|
成人精品一区二区三区中文字幕
|
av二区三区
|
2018中文字幕第一页
|
欧美精品一二三
|
国产亚洲欧美在线
|
中文字幕精品一区二区三区精品
|
午夜激情免费视频
|
一级黄色毛片
|
91影院
|
久久美国
|
av免费入口
|
免费久久网
|
日美女逼逼
|
久草www
|