📄 main.c
字号:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "KEYB.h"
#include "LCD4.h"
#include "ADC.h"
#include "Func.h"
#include "DDS_AD9850.h"
#include "DAC_MAX515.h"
#include "Timer.h"
#include "Mix.c"
const char *mnuA[] = {" TEST MODE "," WORK MODE "};
const char *mnuB[] = {" REFRESH RATE "," NOISE LEVEL "," START SCAN "," RETURN "};
const char *mnuC[] = {" TEST DDS "," TEST TIMER "," TEST ADC "," TEST DAC "," RETURN "};
uint16_t rRate,BaseFreq;
uint8_t noise,cursor,curC;
uint8_t result[201];
void UISelWork(void);
void UISelTest(void);
void refreshDisp(void);
uint8_t TestInput(void);
int main(void)
{
uint8_t cur;
sei();
Timer_Wait_s(1); //wait LCD init
LCD_Init();
LCD_DispStr("INITIALIZING...");
ADC_Init(1);
DA_Init();
DDS_Init();
rRate = 40;
noise = 50;
while(1)
{
cur = LCD_DispMenu(mnuA,1);
if(cur)
UISelWork();
else
UISelTest();
}
return 0;
}
uint8_t TestInput(void)
{
uint8_t cur;
cur = KB_GetChar(0,1);
switch(cur)
{
case 'F':
if(cursor < 200)
{
cursor++;
curC=1;
}
break;
case 'E':
return 1;
case 'D':
if(cursor > 0)
{
cursor--;
curC=1;
}
break;
default:
return 0;
}
return 0;
}
void refreshDisp(void)
{
uint8_t x,y,t;
t = 1;
DA_SetLevel_B(5);
for(x = 0;x < 201;x++)
{
DA_SetLevel_A(x);
DA_SetLevel_B(result[x] + 5);
/*
DELAY_4M_us;
if(x==cursor)
{
for(y = 20;y>4;y--)
DA_SetLevel_B(y);
}
else if(t == 0)
{
t = 20;
for(y = 0;y < 6;y++)
DA_SetLevel_B(y);
}
else
DA_SetLevel_B(5);
t--;
*/
DELAY_8M_us;DELAY_8M_us;
DA_SetLevel_B(5);
}
if(curC)
{
LCD_SetXY(6,1);
LCD_DispStr(" ");
LCD_SetXY(6,1);
LCD_DispNum(cursor*10 + BaseFreq);
curC = 0;
}
DA_SetLevel_A(0);
Timer_Set_ms(rRate);
}
void UISelWork(void)
{
uint8_t cur,rTmp[201];
uint16_t avg;
uint32_t cFreq,f;
int16_t sub,calc;
while(1)
{
switch(cur = LCD_DispMenu(mnuB,3))
{
case 0:
LCD_Clear();
LCD_DispStr("SET RATE: Hz");
cur = KB_GetNum(10,0,25,1,100,5," ");
rRate = 1000/cur;
break;
case 1:
LCD_Clear();
LCD_DispStr(" COUPLE GROUND ");
LCD_SetXY(0,1);
LCD_DispStr("PRESS E WHEN OK");
do
{
cur = KB_GetChar(1,1);
}while(cur != 'E');
LCD_Clear();
LCD_DispStr(" WAIT 5 SEC ");
cur = 10;
avg = 0;
while(cur--)
{
avg += ADC_Read_Sync();
Timer_Wait_ms(450);
}
noise = avg/10;
LCD_Clear();
LCD_DispStr("AVG NOISE: ");
LCD_DispNum(noise);
LCD_DispStr("mV");
Timer_Wait_s(2);
break;
case 2:
LCD_Clear();
LCD_DispStr("CENTRAL FREQ:");
LCD_SetXY(0,1);
LCD_DispStr(" KHz");
cFreq = KB_GetNum(0,1,0,1000,30000,10," ");
BaseFreq = cFreq - 1000;
cFreq += 470;
LCD_Clear();
LCD_DispStr("SCANING ...");
LCD_SetXY(0,1);
LCD_DispStr("FREQ: KHz");
LCD_SetXY(5,1);
cFreq *= 1000;
cursor = 1;
curC = 1;
Timer_Set_ms(rRate);
while(1)
{
cur = 0;
for(f = cFreq - 1000000;f < cFreq + 1000001;f += 10000)
{
avg = 0;
for(sub = -4000;sub < 3001;sub+=1000)
{
DDS_UpdateFreq(f + sub);
DELAY_8M_us;
avg += ADC_Read_Sync();
if(waitFlag == 0)
refreshDisp();
}
avg >>=3;
if (avg <= noise)
avg = 0;
rTmp[cur++] = avg;
}
if(TestInput())
{
DDS_Init();
DA_Init();
break;
}
for(calc = 200;calc>=0;calc--)
{
if(rTmp[calc]==0)
result[calc] = 0;
else
{
result[calc] = rTmp[calc];
if(calc >= 94)
{
sub = (rTmp[calc - 94] - rTmp[calc]);
if(sub <= noise)
sub = 0;
rTmp[calc - 94] = sub;
}
}
if(waitFlag == 0)
refreshDisp();
}
if(TestInput())
{
DDS_Init();
DA_Init();
break;
}
}
break;
case 3:
return;
}
}
}
void UISelTest(void)
{
uint8_t cur;
uint32_t cFreq;
while(1)
{
switch(cur = LCD_DispMenu(mnuC,4))
{
case 0:
LCD_Clear();
LCD_DispStr("SELECT FREQ:");
LCD_SetXY(0,1);
LCD_DispStr(" HZ");
while(1)
{
cFreq = KB_GetNum(0,1,0,0,60000000,10," ");
DDS_UpdateFreq(cFreq);
}
break;
case 1:
break;
case 2:
LCD_Clear();
while(1)
{
cur = ADC_Read_Sync();
LCD_DispStr("PA0: mV");
LCD_SetXY(5,0);
LCD_DispNum(cur);
Timer_Wait_ms(500);
}
break;
case 3:
break;
case 4:
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -