📄 main.c
字号:
//#include "reg7202.h"
#include <string.h>
#include "hms7202lib.h"
#include "ddscommand.h"
#include "math.h"
#include "kb.h"
unsigned int Frequency=1000;//用来存放从键盘输入的频率值,Hz
unsigned int oldFrequency;
unsigned int ModemFreq=50;//用来存放从键盘输入的调制频率,Hz
unsigned int oldModemFreq;
unsigned int DeviaFreq=50;//用来存放从键盘输入的调制频偏,Hz
unsigned int oldDeviaFreq;
unsigned int Ampl=1000;//用来存放从键盘输入的幅度值,mVpp
unsigned int oldAmpl;
char fre1_data[6] = {0xC2,0x8E,0xEC,0x37,0x00,0x00};
//用来存放经换算后得到的频率数据,共用
char fre2_data[6] = {0xE6,0x25,0xEC,0xC8,0x7E,0x03};
//用来存放有帧数据的经换算后得到的频率数据,共用
short fre23_data[6] = {0x00,0x00,0x00,0x00,0x00,0x00};
//用来存放频率2和频率3
char amp_data[6] = {0xA3,0x08,0x59,0x07,0x01,0x00};
//用来存放经换算后得到的幅度数据,共用
char ratio_data[6] ={0x75,0x08,0,0,0,0};//用来存放方波占空比
// char oldamp_data[6] = {0,0,0,0,0,0};
unsigned char KeyValue;//用来存放当前按键的键值
unsigned char Ratio_data =50;//用来存放从键盘输入的占空比
unsigned char oldRatio_data;
char *pcmd;//用来指向当前发送的数据
FRAME_HEAD_t * pCurrentWave;//用来指向当前波形
FRAME_HEAD_t * pCurrentArb;//用来指向当前任意波
FRAME_HEAD_t * pCurrentFrameHD;//用来指向当前发送的帧头
void Main()
{
unsigned char moddepth;//AM调制深度
int i,modnum,amsource;
unsigned int SampFreq;//用来存放AM/FM的采样频率
system_init();
/**************************************/
/* LCD display power_on screem*/
/****************************************/
/* char *pcmd = (char *)&SinCMD;
FrameHead_Send(pcmd);
pcmd = (char *)&AmpCMD;
FrameHead_Send(pcmd);//发送默认波形*/
// Get_Freq(Frequency,fre1_data);
// Get_Freq(Frequency*2*RAMP_SDSIZE,fre2_data);
// Get_Amp(Frequency,Ampl,amp_data);
while(1)
{
KeyValue = Get_Key();
switch(KeyValue)
{
case 30://表示按了正弦波按钮
ser_printf("正弦波\n");
pCurrentWave = &SinCMD;
strncpy(SinCMD.m_WFrequency,fre1_data,6);
FrameHead_Send(pCurrentWave);//发送波形ID和频率数据
strncpy(AmpCMD.m_WFrequency,amp_data,6);
pCurrentFrameHD = &AmpCMD;
FrameHead_Send(pCurrentFrameHD);//发送幅度数据
break;
case 34://表示按了方波按钮
ser_printf("方波\n");
pCurrentWave = &SquaCMD;
strncpy(SquaCMD.m_WFrequency,fre1_data,6);
pCurrentFrameHD = &SquaCMD;
FrameHead_Send(pCurrentFrameHD);//发送波形ID和频率数据
strncpy(AmpCMD.m_WFrequency,amp_data,6);
pCurrentFrameHD = &AmpCMD;
FrameHead_Send(pCurrentFrameHD);//发送幅度数据
strncpy(RatioCMD.m_WFrequency,ratio_data,6);
pCurrentFrameHD = &RatioCMD;
FrameHead_Send(pCurrentFrameHD);//发送占空比
break;
case 38://表示按了三角波按钮
ser_printf("三角波\n");
pCurrentWave = &TriaCMD.head;
strncpy(TriaCMD.head.m_WFrequency,fre2_data,6);
pCurrentFrameHD = &TriaCMD.head;
FrameHead_Send(pCurrentFrameHD);//发送波形ID和频率数据
pcmd = (char *)TriaCMD.Tria;
FrameData_Send(pcmd,HW_SDSIZE*2);//发送波形数据
break;
case 39://表示按了锯齿波按钮
ser_printf("锯齿波\n");
pCurrentWave = &RampCMD.head;
strncpy(RampCMD.head.m_WFrequency,fre2_data,6);
pCurrentFrameHD = &RampCMD.head;
FrameHead_Send(pCurrentFrameHD);////发送波形ID和频率数据
pcmd = (char *)RampCMD.Ramp;
FrameData_Send(pcmd,HW_SDSIZE*2);//发送波形数据
break;
case 40://表示按了噪声按钮
ser_printf("噪声\n");
pCurrentWave = &NoiseCMD;
pCurrentFrameHD = &NoiseCMD;
FrameHead_Send(pCurrentWave);//发送波形类型和频率数据(频率数据不变)
strncpy(AmpCMD.m_WFrequency,amp_data,6);
pCurrentFrameHD = &AmpCMD;
FrameHead_Send(pCurrentFrameHD);//发送幅度数据
break ;
case 25://表示按了频率按钮
ser_printf("设置频率:");
oldFrequency = Frequency;
Frequency = readfreq();
if(Frequency==0)
{
Frequency = oldFrequency;
ser_printf("\n取消频率设置\n");
}
else
{
ser_printf("%10d\n",Frequency);
}
freq_convert(Frequency,fre1_data);
freq_convert(Frequency*HW_SDSIZE*2,fre2_data);
amp_convert(Frequency,Ampl,amp_data);
break;
case 26://表示按了幅度按钮
ser_printf("设置幅度:");
oldAmpl = Ampl;
Ampl = readamp();
if(Ampl==0)
{
Ampl = oldAmpl;
ser_printf("\n取消幅度设置\n");
}
else
ser_printf("%10d\n",Ampl);
// strncpy(oldamp_data,amp_data,6);//在幅度数据变换之前保存旧的幅度数据
amp_convert(Frequency,Ampl,amp_data);
break;
case 24://按了输出键
//还有问题:没考虑调制、扫频、突发部分。
if(pCurrentWave->m_WWaveType==0x1a)//噪声不更新频率数据
{
FrameHead_Send(pCurrentWave);//发送波形ID和频率数据
strncpy(AmpCMD.m_WFrequency,amp_data,6);
pCurrentFrameHD = &AmpCMD;
FrameHead_Send(pCurrentFrameHD);//发送幅度数据
}
else if(pCurrentWave->m_WWaveType!=0x1a && pCurrentWave->m_WDataLen==0)//无波形数据
{
strncpy(pCurrentWave->m_WFrequency,fre1_data,6);
FrameHead_Send(pCurrentWave);//发送波形ID和频率数据
strncpy(AmpCMD.m_WFrequency,amp_data,6);
pCurrentFrameHD = &AmpCMD;
FrameHead_Send(pCurrentFrameHD);//发送幅度数据
if(pCurrentWave->m_WWaveType==0x1)//若当前波形为方波,还要发送占空比
{
pCurrentFrameHD = &RatioCMD;
FrameHead_Send(pCurrentFrameHD);
}
}
else //有波形数据
{
strncpy(pCurrentWave->m_WFrequency,fre2_data,6);
FrameHead_Send(pCurrentWave);//发送波形ID和频率数据
switch(pCurrentWave->m_WWaveType)//根据波形ID发送不同的波形数据
{
case 2: // ramp
pcmd = (char *)RampCMD.Ramp;
FrameData_Send(pcmd,HW_SDSIZE*2);
break;
case 3: // tria
pcmd = (char *)TriaCMD.Tria;
FrameData_Send(pcmd,HW_SDSIZE*2);
break;
case 4://UExp
pcmd = (char *)UExpCMD.UExp;
FrameData_Send(pcmd,HW_SDSIZE*2);
break;
case 5://DExp
pcmd = (char *)DExpCMD.DExp;
FrameData_Send(pcmd,HW_SDSIZE*2);
break;
case 6://Cardgm
pcmd = (char *)CardgmCMD.Cardgm;
FrameData_Send(pcmd,HW_SDSIZE*2);
break;
case 7://Sinc
pcmd = (char *)SincCMD.Sinc;
FrameData_Send(pcmd,HW_SDSIZE*2);
break;
case 9://Arb
pcmd = (char *)ArbCMD.Arb;
FrameData_Send(pcmd,ArbCMD.head.m_WDataLen*2);
break;
default :
break;
}//switch end
strncpy(AmpCMD.m_WFrequency,amp_data,6);
pCurrentFrameHD = &AmpCMD;
FrameHead_Send(pCurrentFrameHD);//发送幅度数据
}
case 28://表示按了占空比设置按钮
ser_printf("设置占空比:");
oldRatio_data = Ratio_data;
Ratio_data = readratio();
if(Ratio_data == 0)
{
Ratio_data = oldRatio_data;
ser_printf("取消占空比设置");
}
ratio_convert(Ratio_data,ratio_data);
strncpy(RatioCMD.m_WFrequency,ratio_data,6);
break;
case 20://表示按了mod按钮
modnum = 0;
while(1)
{
KeyValue = Get_Key();
if(KeyValue == 25)//表示更改调制模式
{
modnum = (modnum+1)%3;
continue;
}
else if(KeyValue>25 && KeyValue<30)
{
break;
}
}
//判断使用哪种调制方法
switch(modnum)
{
case 0://AM
pCurrentWave = &AmCMD.head;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -