📄 spy主控程序ok.c
字号:
YS=65535;
do{__delay_cycles(500);} while(--YS!=0); //延时23us,有待信号幅值稳定下来在进行AD测量
Uad2=voltage*2.5; //记录AD值
diss(Uad2);//显示监视值
Uz=Uad2-Uad1; //求出增量值
if(Uad2>plus) //增大X9C104一次后的电压大于预输出值么?
{ BL.plus_out=Uad1;
PORTB_Bit3=!PORTB_Bit3; //灯亮,为了调试用
send_buf[1]=0x11;
send_buf[2]=BL.plus_out&0x00ff;
send_buf[3]=(BL.plus_out&0xff00)>>8;
send_sp(send_buf,4); // 先发送为扫频议发出的幅值低8位,在发送为扫频议发出的幅值高8位
goto loop2;
}
if(Uad2<plus) //判断增大X9C104一次后的电压小于预输出值么?
{ //(plus-Uad2)为求出电压差值
BL.pp=(plus-Uad2)/Uz; //得出9C104调节级数
if(BL.pp>=1)
{if(BL.pp<98)
{ for(i=0;i<BL.pp;i++) //调节X9C104增大pp次
{ X9C104_up(); }
j=255;
do{__delay_cycles(1);} while(--j!=0); //延时23us,有待信号幅值稳定下来在进行AD测量
AD(); //启动AD转换函数,
Uad3=voltage*2.5;
BL.plus_out=Uad3; //输出Uad3
send_buf[1]=0x11;
send_buf[2]=BL.plus_out&0x00ff;
send_buf[3]=(BL.plus_out&0xff00)>>8;
send_sp(send_buf,4); // 先发送为扫频议发出的幅值低8位,在发送为扫频议发出的幅值高8位
goto loop2;
}
Uz=Uz*2; // 使增量乘2
PORTA_Bit5=1; //切换到全压状态输出
BL.pp=(plus-Uad2)/Uz;
if(BL.pp>=1)
{ for(i=0;i<BL.pp;i++) //调节X9C104增大pp次
{ X9C104_up();}
}
else { X9C104_up();}
j=255;
do{__delay_cycles(1);} while(--j!=0); //延时23us,有待信号幅值稳定下来在进行AD测量
AD(); //启动AD转换函数,
Uad3=voltage*2.5;
BL.plus_out=Uad3; //输出Uad3
send_buf[1]=0x11;
send_buf[2]=BL.plus_out&0x00ff;
send_buf[3]=(BL.plus_out&0xff00)>>8;
send_sp(send_buf,4); // 先发送为扫频议发出的幅值低8位,在发送为扫频议发出的幅值高8位
goto loop2;
}
BL.plus_out=Uad2;
}
BL.plus_out=Uad2;
send_buf[1]=0x11;
send_buf[2]=BL.plus_out&0x00ff;
send_buf[3]=(BL.plus_out&0xff00)>>8;
send_sp(send_buf,4); // 先发送为扫频议发出的幅值低8位,在发送为扫频议发出的幅值高8位
goto loop2;
}
//---------------------------------------------------------------------------------------------------------//
*/
else if(key==0x1f) //幅值调节键按下了么?
{
++plus_adjust;
PORTA_Bit2=0; //切换CD4066开关为内AD采样模式
PORTA_Bit3=1;
PORTA_Bit4=1;
timer1_init(); //启动PWM输出
OCR1A=454; // 以1.5KHZ频率输出
/* reso_num=99;
for(i=0;i<100;i++)//使X9C104调到0
{ X9C104_down(); }
reso_num=0;
for(i=0;i<50;i++) //再把数字电位器调到中间
{
X9C104_up();
}
*/
if(plus_adjust>8)
{plus_adjust=1;}
switch(plus_adjust)//根据按下的次数写相应的幅值标志位
{
case 1: {plus=35; fudutiaojie();} break; //低限25MV
case 2: {plus=50; fudutiaojie();} break;
case 3: {plus=110; fudutiaojie();} break;
case 4: {plus=210; fudutiaojie();} break;
case 5: {plus=300;fudutiaojie();} break;
case 6: {plus=355;fudutiaojie();} break;
case 7: {plus=420;fudutiaojie();} break;
case 8: {plus=500;fudutiaojie();} break;
default: break;
}
goto loop2;
}
else if(key==0x3b) //单次/循环键按下了么?
{
++single_cycle;
if(single_cycle>2)
{ single_cycle=1;}
send_buf[1]=0xc1; // 发送为扫频格式
send_buf[2]=single_cycle;
send_buf[3]=0;
send_sp(send_buf,4);
goto loop2;
}
else if(key==0x3e) //开始/暂停键按下了么?
{
++start_pause;
if(start_pause>2) {start_pause=1;}
if(start_pause==1) //是开始功能么?
{
swept_flag=1; //置扫频状态标志位
u_number=0; //复位频率和幅值指针,使其还指向本频段的首址
switch(f_sect)//根据按下的次数写相应的幅值标志位
{ case 1: { PL=aa; //使其指针指向频段aa首地址
u_number=0;
f_sectmax=229;//把本频段最大值赋给标志变量
} break;
case 2: { PL=bb; //使其指针指向频段bb首地址
u_number=0;
f_sectmax=345;//把本频段最大值赋给标志变量
} break;
case 3: {PL=cc; //使其指针指向频段cc首地址
u_number=0;
f_sectmax=690;//把本频段最大值赋给标志变量
} break;
default: break;
}
//diss(start_pause);//显示监视值
timer1_init(); //启动PWM输出
//TCCR0=0x05;//启动定时器0
saopin=1; //置扫频标志位
goto loop2;
}
}
else if(key==0x37) //查询下降键按下了吗?
{ if((*PL)>13823) //判断当前F值是本频段最xiao值么?
{u_number=0;goto loop2;}
if((*PL)==13823) //判断当前F值等于本频段最小值么 此功能为了在查询时能查到本频段的最小值
{ BL.zancun=1000000/((*PL)*1.4467592592);
send_buf[1]=0xa0; //发送频率低8位
send_buf[2]=BL.zancun&0x00ff;
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=65535;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0x80; //发送幅值比低8位
send_buf[2]=BL.u_value&0x00ff;
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
goto loop2;
}
if((PL>0)&&(u_number>0))
{ PL--; //使指针移位
u_number--;
// PORTB_Bit4=!PORTB_Bit4;
}
BL.zancun=1000000/((*PL)*1.4467592592);
send_buf[1]=0xa0; //发送频率低8位
send_buf[2]=BL.zancun&0x00ff;
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=65535;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0x80; //发送幅值比低8位
send_buf[2]=BL.u_value&0x00ff;
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
diss(send_buf[1]); //显示监视值
goto loop2;
}
else if(key==0x2f) //查询上升键按下了吗?
{ if((*PL)<f_sectmax) //判断当前F值是本频段最大值么?
{u_number=99; goto loop2;}
if((*PL)==f_sectmax) //判断当前F值等于本频段最大值么 此功能为了在查询时能查到本频段的最大值
{ BL.zancun=1000000/((*PL)*1.4467592592);
send_buf[1]=0xa0;
send_buf[2]=BL.zancun&0x00ff; //发送频率低8位
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=65535;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0x80;
send_buf[2]=BL.u_value&0x00ff; //发送幅值比低8位
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
goto loop2;
}
if((*PL<13823)&&(u_number<=99))
{ if(FWBZ==1) { FWBZ=0;}
else {PL++; //使指针移位
u_number++;
}
}
BL.zancun=1000000/((*PL)*1.4467592592);
send_buf[1]=0xa0; //发送频率低8位
send_buf[2]=BL.zancun&0x00ff;
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=65535;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0x80; //发送幅值比低8位
send_buf[2]=BL.u_value&0x00ff;
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
if(*PL==13823) {PL++; //使指针移位
u_number++;
FWBZ=1;
}
goto loop2;
}
else goto loop2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -