⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spy主控程序ok.c

📁 此程序主要测试50HZ~3KHZ音频范围幅频特性测试程序.程序包含主控程序和显示程序.
💻 C
📖 第 1 页 / 共 4 页
字号:
                       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 + -