spy主控程序阶段1.c
来自「此程序主要测试50HZ~3KHZ音频范围幅频特性测试程序.程序包含主控程序和显示」· C语言 代码 · 共 893 行 · 第 1/3 页
C
893 行
send_buf[2]=BL.zancun&0x00ff; //取得低8位
send_buf[3]=(BL.zancun&0xff00)>>8; //取得高8位
send_sp(send_buf,4); //先发送频率低8位,在发送频率高8位
YS=33177;
do{__delay_cycles(1);} while(--YS!=0); //延时3ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ=0.0904224537us
send_buf[1]=0x94; //发送幅值低8位
send_buf[2]=BL.u_ratio&0x00ff; //取得低8位
send_buf[3]=(BL.u_ratio&0xff00)>>8; //取得高8位
send_sp(send_buf,4); //先发送幅值低8位,在发送幅值高8位
OCR1A=*(++ff); //更新PWM频率修改参数
PORTB_Bit2=!PORTB_Bit2; //灯亮,为了调试用
goto loop2;
}
goto loop2;
}
key=kbscan();//调用键盘扫描
if(key==0x3d) //频率键按下了么?
{ PORTB_Bit4=!PORTB_Bit4; //灯亮,为了调试用
++f_sect; //++frequency;
if(f_sect>3)
{f_sect=1;}
if(f_sect==1) //为50HZ~3KHZ范围 A
{ ff=aa; //使其指针指向频段aa首地址
u_number=0;
// f_sect=1;// 置扫频频段标志为A频段
f_sectmax=229;//把本频段最大值赋给标志变量
}
if(f_sect==2) //为50HZ~2KHZ范围 B
{ff=bb; //使其指针指向频段bb首地址
u_number=0;
// f_sect=2;// 置扫频频段标志为B频段
f_sectmax=345;//把本频段最大值赋给标志变量
}
if(f_sect==3) //为50HZ~1KHZ范围 C
{ff=cc; //使其指针指向频段cc首地址
u_number=0;
// f_sect=3; // 置扫频频段标志为C频段
f_sectmax=690;//把本频段最大值赋给标志变量
}
send_buf[1]=0xc0; //发送频段号
send_buf[2]=f_sect;
send_buf[3]=0;
send_sp(send_buf,4);
goto loop2;
}
else if(key==0x1f) //幅值调节键按下了么?
{ //PORTB_Bit3=!PORTB_Bit3; //灯亮,为了调试用
++plus_adjust;
PORTA_Bit2=0; //切换CD4066开关为内AD采样模式
PORTA_Bit3=1;
PORTA_Bit4=1;
if(plus_adjust>8)
{plus_adjust=1;}
switch(plus_adjust)//根据按下的次数写相应的幅值标志位
{
case 1: {plus=5;} break;
case 2: {plus=10;} break;
case 3: {plus=20;} break;
case 4: {plus=50;} break;
case 5: {plus=100;} break;
case 6: {plus=200;} break;
case 7: {plus=350;} break;
case 8: {plus=500;} break;
default: break;
}
PORTA_Bit5=0; //先切换到1/2状台输出
for(i=0;i<100;i++) //将增益数字电位器的抽头调至零位
{ CS2=0;
UD=0;
INC=1;
j=12;
do{__delay_cycles(1);} while(--j!=0);
INC=0;
j=12;
do{__delay_cycles(1);} while(--j!=0);
INC=1;
CS2=1;
// WDR();
}
reso_num=0;
j=255;
do{__delay_cycles(1);} while(--j!=0); //延时23us,有待信号幅值稳定下来在进行AD测量
AD(); //启动AD转换函数,
Uad1=voltage*2.5; //记录AD值
for(i=0;i<1;i++) //调节X9C104增大一次
{
X9C104_up();
}
j=255;
do{__delay_cycles(1);} while(--j!=0); //延时23us,有待信号幅值稳定下来在进行AD测量
AD(); //启动AD转换函数,
Uad2=voltage*2.5; //记录AD值
Uz=Uad2-Uad1; //求出增量值
if(Uad2>plus) //增大X9C104一次后的电压大于预输出值么?
{ BL.plus_out=Uad1;
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==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; //置扫频状态标志位
PORTA_Bit2=1; //切换CD4066开关为外AD采样模式
PORTA_Bit3=0;
PORTA_Bit4=0;
//ff=0; u_number=0; //复位频率和幅值指针,使其还指向本频段的首址
//diss(start_pause);//显示监视值
PORTB_Bit3=!PORTB_Bit3; //灯亮,为了调试用
timer1_init(); //启动PWM输出
//TCCR0=0x05;//启动定时器0
saopin=1; //置扫频标志位
goto loop2;
}
}
else if(key==0x2f) //查询上升键按下了吗?
{
if((*ff)<f_sectmax) //判断当前F值是本频段最大值么?
{ goto loop2;}
if((*ff)==f_sectmax) //判断当前F值等于本频段最大值么 此功能为了在查询时能查到本频段的最大值
{BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0xa0;
BL.zancun=1000000/((*ff)*1.4467592592);
send_buf[2]=BL.zancun&0x00ff; //发送频率低8位
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=5530;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
send_buf[1]=0xa2;
send_buf[2]=BL.u_value&0x00ff; //发送幅值比低8位
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
goto loop2;
}
--ff; //使指针移位
--u_number;
// f_value=*ff; //提取频点
BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0xa0; //发送频率低8位
BL.zancun=1000000/((*ff)*1.4467592592);
send_buf[2]=BL.zancun&0x00ff;
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=5530;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
send_buf[1]=0xa2; //发送幅值比低8位
send_buf[2]=BL.u_value&0x00ff;
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
goto loop2;
}
else if(key==0x37) //查询下降键按下了吗?
{
if((*ff)>13823) //判断当前F值是本频段最xiao值么?
{ goto loop2;}
if((*ff)==13823) //判断当前F值等于本频段最小值么 此功能为了在查询时能查到本频段的最小值
{BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0xa0; //发送频率低8位
BL.zancun=1000000/((*ff)*1.4467592592);
send_buf[2]=BL.zancun&0x00ff;
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=5530;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
send_buf[1]=0xa2; //发送幅值比低8位
send_buf[2]=BL.u_value&0x00ff;
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
goto loop2;
}
++ff; //使指针移位
++u_number;
// f_value=*ff; //提取频点
BL.u_value=aa_u[u_number];// 提取幅值点
send_buf[1]=0xa0; //发送频率低8位
BL.zancun=1000000/((*ff)*1.4467592592);
send_buf[2]=BL.zancun&0x00ff;
send_buf[3]=(BL.zancun&0xff00)>>8;
send_sp(send_buf,4);
YS=5530;
do{__delay_cycles(1);} while(--YS!=0); //延时0.5ms,以使显示刷新 '' __delay_cycles(1)''延时一个机器周期即:1/11.0592MHZ0.0904224537us
send_buf[1]=0xa2; //发送幅值比低8位
send_buf[2]=BL.u_value&0x00ff;
send_buf[3]=(BL.u_value&0xff00)>>8;
send_sp(send_buf,4);
goto loop2;
}
else goto loop2;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?