📄 ss_sweep.c
字号:
SetCMD(mod&0x01);
refresh_led();
break;
case Screen:
if(key_pressed==ON)
{
switch(key_no)
{
case key_enter: MainSM=Setup;
//SetPhase(Freq);
break;
case key_clr: MainSM=FreqScan;
FreqS=Freq;
set_up(2);
show_fre(4);
sweep_amp(0);//扫频
break;
case key_mod: SetCMD((++mod)&0x01);//SetCMD((++mod)&0x01)
display_mod((mod)&0x01);//display_mod((mod)&0x01)
refresh_led();
break;
case key_tiao: MainSM=TiaoFu;
SetCMD(2);
sweep_amp(1);
break;
default: break;
}
key_pressed=OFF;
}
break;
case FreqScan: //扫频输出状态
//Set_Display_Add(384);
//printf("Scan Frequence");
//sweep_amp(0);//扫频
switch(SetFSM)//进入扫频状态的设置
{
case enter_num://扫频初始状态,并LCD显示不同的内容
if(aa==0){//设置扫频频率的最小值
//cls();
//Set_Display_Add(512);
//printf("min:");
last_line(1);
}
if(aa==1){//设置扫频频率的最大值
//Set_Display_Add(640);
//printf("max:");
last_line(2);
}
if(aa==2){//设置扫频频率的步长或者对数增长的系数
//Set_Display_Add(768);
if(bb==0){
last_line(3);
}
if(bb==1){
last_line(4);
}
}
value_index=0;
SetFSM=wait_key;
break;
case wait_key: //处理键盘输入
if(key_pressed==ON)
{
switch(key_no)
{
case key0:
case key1:
case key2:
case key3:
case key4:
case key5:
case key6:
case key7:
case key8:
case key9:
if(value_index<5)
{
value[value_index]=key_no;
value_index++;
}
break;
case key_enter://每按一下setup,aa加1,以进行不同的处理
aa=(aa+1)%4;
SetFSM=exit_setup;
break;
case key_xuan1://选择模式2,对数模式
bb=1;
//Set_Display_Add(480);
//printf("mod 2");
log_lin(0);
delayMs(100);
SetFSM=enter_num;
break;
case key_xuan2://选择模式1,线性模式
bb=0;
//Set_Display_Add(480);
//printf("mod 1");
log_lin(1);
delayMs(100);
SetFSM=enter_num;
break;
default: break;
}
refresh_led();
key_pressed=OFF;
}
break;
case exit_setup: Freq_temp=value[0];
Freq=Freq_temp*10000;
Freq_temp=value[1];
Freq=Freq+Freq_temp*1000;
Freq_temp=value[2];
Freq=Freq+Freq_temp*100;
Freq_temp=value[3];
Freq=Freq+Freq_temp*10;
Freq=Freq+value[4];
if(aa==1) {//设置并显示最小频率
minF=Freq;
/* Set_Display_Add(576);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(1);
refresh_led();
SetFSM=enter_num;
}
if(aa==2) {//设置并显示最大频率
maxF=Freq;
/* Set_Display_Add(704);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(2);
refresh_led();
SetFSM=enter_num;
}
if(aa==3) {//设置并显示步长或者系数
step=Freq;
/* Set_Display_Add(832);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(3);
refresh_led();
SetFSM=scan_start;
}
break;
case scan_start:
delayMs(10);//延时函数,每隔100ms频率改变一次
if(FreqS>maxF) FreqS=minF;//设置扫频的最小值
SetPhase(FreqS&0x7fff); //设置频率,以模32k循环
if(bb==0){
FreqS+=step;
//Set_Display_Add(480);
//printf("mod 1");
log_lin(1);//线性模式
} //频率步进step,linear freq change
if(bb==1){
FreqS=(FreqS+1)*step/100;
//Set_Display_Add(480);
//printf("mod 2");
log_lin(0);//对数模式
}//频率对数变化
if(key_pressed==ON){
switch(key_no){
case key_enter: MainSM=Setup;//结束扫频,进入正常波形的设置状态
sweep_amp(2);
log_lin(2);
last_line(0);
SetCMD((++mod)&0x00);//模波形式设置,在本实验中实际上没有用处
display_mod((mod)&0x00);
// cls();
break;
case key_mod: MainSM=Start;
sweep_amp(2);
log_lin(2);
last_line(0);
//SetCMD((++mod)&0x00);//模波形式设置,在本实验中实际上没有用处
display_mod((mod)&0x01);
//refresh_led();
break;
default: SetFSM=scan_start;
}
key_pressed=OFF;
}
break;
}
break;
////////////////////////////////////////////////////////////////////////
case Setup:
// cls();
/*Set_Display_Add(428);
printf("SETUP");*/
set_up(0);//设置
SetFSM=0;
aa=0;
switch(SetupSM)
{
case enter_num: value[0]=0;
value[1]=0;
value[2]=0;
value[3]=0;
value[4]=0;
/* Set_Display_Add(560);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(0);
value_index=0;
SetupSM=wait_key;
break;
case wait_key: if(key_pressed==ON)
{
switch(key_no)
{
case key0:
case key1:
case key2:
case key3:
case key4:
case key5:
case key6:
case key7:
case key8:
case key9:
if(value_index<5)
{
value[value_index]=key_no;
value_index++;
}
break;
case key_enter:SetupSM=exit_setup;
break;
case key_mod: SetCMD((++mod)&0x03);
display_mod((mod)&0x03);
refresh_led();
break;
default: break;
}
/* Set_Display_Add(560);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(0);
refresh_led();
key_pressed=OFF;
}
break;
case exit_setup: Freq_temp=value[0];
Freq=Freq_temp*10000;
Freq_temp=value[1];
Freq=Freq+Freq_temp*1000;
Freq_temp=value[2];
Freq=Freq+Freq_temp*100;
Freq_temp=value[3];
Freq=Freq+Freq_temp*10;
Freq=Freq+value[4];
SetPhase(Freq);
/* Set_Display_Add(560);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(0);
refresh_led();
/* Set_Display_Add(428);
printf(" ");*/
set_up(1);
refresh_led();
SetupSM=enter_num;
MainSM=Screen;
break;
}
break;
////////////////////////////////////////////////////////////
case TiaoFu: //调幅状态
//SetCMD(2);
//sweep_amp(1);
aa=0;
SetFSM=0;
set_up(0);
switch(SetupSM)
{
case enter_num: value[0]=0;//调制波频率初始值为前一个状态所设置的值
value[1]=0;
value[2]=0;
value[3]=0;
value[4]=0;
/* Set_Display_Add(560);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(0);
value_index=0;
SetupSM=wait_key;
break;
case wait_key:
set_up(0);
if(key_pressed==ON)//提取按键值,进行状态的处理
{
switch(key_no)
{
case key0:
case key1:
case key2:
case key3:
case key4:
case key5:
case key6:
case key7:
case key8:
case key9:
if(value_index<5)
{
value[value_index]=key_no;
value_index++;
}
break;
case key_enter:SetupSM=exit_setup;//按下setup,进行载波调制波频率的设置
set_up(1);
break;
case key_tiao: //若再按下调幅键,则进入DDS的最初状态,即screen状态,可以进行正常频率的设置
SetupSM=enter_num;
MainSM=Screen;
SetCMD(0);
display_mod(0);
sweep_amp(2);
refresh_led();
show_fre(0);
break;
case key_mod: //若按下模式键则退出到最初状态
SetupSM=enter_num;
MainSM=Screen;
SetCMD(0);
display_mod(0);
sweep_amp(2);
refresh_led();
show_fre(0);
break;
default: break;
}
/* Set_Display_Add(560);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(0);
refresh_led();
key_pressed=OFF;
}
break;
case exit_setup: Freq_temp=value[0];
Freq=Freq_temp*10000;
Freq_temp=value[1];
Freq=Freq+Freq_temp*1000;
Freq_temp=value[2];
Freq=Freq+Freq_temp*100;
Freq_temp=value[3];
Freq=Freq+Freq_temp*10;
Freq=Freq+value[4];
SetPhase(Freq);//设置调制波频率
/* Set_Display_Add(560);
putchar(value[0]+0x30);
putchar(value[1]+0x30);
putchar(value[2]+0x30);
putchar(value[3]+0x30);
putchar(value[4]+0x30);*/
show_fre(0);
refresh_led();
/* Set_Display_Add(428);
printf(" ");*/
set_up(1);
refresh_led();
//SetupSM=enter_num;
SetupSM=wait_key;
//MainSM=TiaoFu;
//MainSM=Screen;
//sweep_amp(2);
value_index=0;
break;
}
break;
////////////////////////////////////////////////////////////
default:
break;
}
} //等待中断
}
void interrupt_handle() interrupt 0
{
//uchar disdata;
DISABLE; //CPU关中断
wait(); //键盘消抖延时
if (Int_wire==0)
{
key_pressed=ON;
P2=0xFF;
key_no=P2&0x0F; //读取P2口的低四位显示数据编码
}
ENABLE; //CPU开中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -