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

📄 main.c

📁 430 单片机控制产生正玄波输出 周期频率可以调节
💻 C
📖 第 1 页 / 共 2 页
字号:
         //DAC通道1输出正弦波
         TACCR0+=DAC_TIME;
         if(out_sin<(unsigned int*)0XF4E0)
		out_sin+=6;
				
	 else
	       out_sin=(unsigned int*)0xf100;
	 Dac12Write(*out_sin,1);
   }

   if(P2IFG&BIT4) 
   {
         GotimeDfA(0,0);
         GoDac12(0,0);
         GoDac12(0,1);
         LCD_PutStr(2,0,"8:开始调制     ");
         P2IE|=BIT4;
    }   
    P2IFG=0;
   // test2=TAR; 
}




void InitFM()                       //初始化FM模式
{
    //Init9854();
    send_data[0]=0X60;
    send_data[1]=0X00;
    send_data[2]=0X44;
    send_data[3]=0X10;
    send(4, control,send_data);
    send_data[0]=0Xff;
    send_data[1]=0XFF;
    send(2,SHAPI,send_data);
    send(2,SHAPQ,send_data);
    LCD_LcmClearTXT();   
    Clear_7290();
    _DINT();                           //写FLASH停止中断响应
    write(0XF100);
    _EINT();
    TimerAInit(0);   
    LCD_PutStr(0,0,"载波:");
   // get_data=(unsigned long *)0x302;            //发送的数据指针
    send_data[0]=0XFF;
    send_data[1]=0XFF;
    TOTAL=0;
    temp_i=0;
}



void FM()
{
    GO=1;
    while(GO) 
    {
        if(RESET)                                  //重设参数
        {   
            InitFM();
            SET=1;   
            while(SET==1);  
            if(TOTAL>10000000)                     //输入频率越界
            {
                LCD_PutStr(1,3,erro);
                delayMS(9999);
                TOTAL=0;
                continue;
            }
            get_data=TOTAL*85;
            get_data+=(get_data)/93-get_data/8400;;
            ftw_fm=get_data;                               //设定载波频率控制字

            LCD_PutNum_l(-1,-1,TOTAL);
            LCD_PutStr(-1,-1,"Hz"); 
            LCD_PutStr(1,0,"5:最大频偏:10KHz");
            //LCD_PutStr(3,0,"4:下调  6:上调");
            LCD_PutStr(2,0,"8:开始调制    ");
            LCD_PutStr(3,0,"1:重设 0:退出");
            SET=0;
            RESET=0;
        }//if
        if(FM_ADD)
        {
            if(add_fm==419)
            {
               add_fm=209;
               LCD_PutStr(1,0,"5:最大频偏:5KHz ");
            }
            else
            {
                add_fm=419;
                LCD_PutStr(1,0,"5:最大频偏:10KHz");
            }
            FM_ADD=0;
        }
        if(BEGING)
        {
            P2IE=0X00;
            LCD_PutStr(2,0,"按任意键停止");
            p_to_sin=0;
            GotimeDfA(100,0);
            BEGING=0;
        }
    }
        
}



void InitPSK()                       //初始化PSK模式
{
   // Init9854();
    send_data[0]=0X60;
    send_data[1]=0X08;
    send_data[2]=0X64;
    send_data[3]=0X10;
    send(4, control,send_data);
    send_data[0]=0Xe3;
    send_data[1]=0Xa5 ;
    send_data[2]=0X9b;
    send_data[3]=0Xc4;
    send_data[4]=0X20;
    send_data[5]=0X00;
    send(6, FTW1,send_data);
    send_data[0]=0XFF;
    send_data[1]=0XFF;
    send(2,SHAPI,send_data);
    send(2,SHAPQ,send_data);
    send_data[0]=0X00;                 //90度
    send_data[1]=0X10;
    send(2,PAR2,send_data);  
    send_data[0]=0X00;                 //270度
    send_data[1]=0X30;
    send(2,PAR1,send_data);  
    LCD_LcmClearTXT();   
    Clear_7290();
    TimerAInit(1);                        //初始化定时器
  //  LCD_PutStr(0,0,"BPSK调制");
    LCD_PutStr(0,0,"载波频率:100K");
    LCD_PutStr(1,0,"基带信号");
   // get_data=(unsigned long *)0x302;            //发送的数据指针
    send_data[0]=0XFF;
    send_data[1]=0XFF;
    TOTAL=0;
    temp_i=0;
}
void PSK()
{
    GO=1;
    while(GO) 
    {
        if(RESET)                                  //重设参数
        {   
            InitPSK();
            SET=1;   
            while(SET==1);    
            for(temp_i=0;temp_i<TOTAL;temp_i++)
            {
                if(temp_num[temp_i]==0)
                    display[temp_i]=0X30;
                else
                    display[temp_i]=0X31;
            }
            display[temp_i]='\0';
            LCD_PutStr(1,4,display);
            LCD_PutStr(2,0,"8:开始调制      ");
            LCD_PutStr(3,0,dsply_exit);
            SET=0;
            RESET=0;
        }//if
        if(BEGING)
        {
            P2IE=0X00;
            LCD_PutStr(2,0,"按任意键停止");
            temp_i=0;
            GotimeDfA(100,1);                   //打开定时器 
            BEGING=0;
        }
    }

}


/*****************************************************************************
捕获/比较1中断
*****************************************************************************/
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)   
{  
  TACCR1+=TIME1;
  if(TAIV==4){}
  switch(WHICH)
  {
      case 4:  
      case 6:  
      {        
           if(temp_num[temp_i])
           {
               DATA_S;
               P4OUT|=BIT0;
           }
           else
           {
               DATA_C;
               P4OUT&=~BIT0;
           }
           temp_i++;
           if(temp_i==TOTAL)
               temp_i=0;
           break;
      }
      case 5:
      {          
          if(temp_num[temp_i])
           {
               send_data[0]=0XFF;
               send_data[1]=0XFF;
               send(2,SHAPI,send_data);
               send(2,SHAPQ,send_data);
           }
           else
           {
               send_data[0]=0X00;
               send_data[1]=0X00;
               send(2,SHAPI,send_data);
               send(2,SHAPQ,send_data);
           }
           temp_i++;
           if(temp_i==TOTAL)
               temp_i=0;
           break;
      }
          
      default :break;
  }
  if(P2IFG&BIT4) 
  {
       GotimeDfA(0,1);
       GotimeDfA(0,0);
       LCD_PutStr(2,0,"8:开始调制    ");
       P2IE|=BIT4;
  }   
  P2IFG=0;

}



void InitASK()
{
    send_data[0]=0X60;
    send_data[1]=0X00;
    send_data[2]=0X64;
    send_data[3]=0X10;
    send(4, control,send_data);
    send_data[0]=0Xe3;
    send_data[1]=0Xa5;
    send_data[2]=0X9b;
    send_data[3]=0Xc4;
    send_data[4]=0X20;
    send_data[5]=0X00;
    send(6, FTW1,send_data);
    LCD_LcmClearTXT();   
    Clear_7290();
    TimerAInit(1);                        //初始化定时器

    LCD_PutStr(0,0,"载波频率:100K");
    LCD_PutStr(1,0,"基带信号");
    TOTAL=0;
    temp_i=0;
}


void ASK()
{
    GO=1;
    while(GO) 
    {
        if(RESET)                                  //重设参数
        {   
            InitASK();
            SET=1;   
            while(SET==1);    
            for(temp_i=0;temp_i<TOTAL;temp_i++)
            {
                if(temp_num[temp_i]==0)
                    display[temp_i]=0X30;
                else
                    display[temp_i]=0X31;
            }
            display[temp_i]='\0';
            LCD_PutStr(1,4,display);
            LCD_PutStr(2,0,"8:开始调制      ");
            LCD_PutStr(3,0,dsply_exit);
            SET=0;
            RESET=0;
        }//if
        if(BEGING)
        {
            P2IE=0X00;
            LCD_PutStr(2,0,"按任意键停止");
            temp_i=0;
            GotimeDfA(100,1);                   //打开定时器
            BEGING=0;
        }
    }
}



void InitAM()                       //初始化AM模式
{
    //Init9854();
    send_data[0]=0X60;
    send_data[1]=0X00;
    send_data[2]=0X44;
    send_data[3]=0X10;
    send(4, control,send_data);
    send_data[0]=0Xff;
    send_data[1]=0XFF;
    send(2,SHAPI,send_data);
    send(2,SHAPQ,send_data);
    LCD_LcmClearTXT();   
    Clear_7290();  
    _DINT();                           //写FLASH停止中断响应
    write(0XF100);
    _EINT();
    TimerAInit(0);  
    InitDac12();
    GoDac12(100,0);
   sinx=610;
    Dac12Write(sinx,0);
    LCD_PutStr(0,0,"载波:");
    send_data[0]=0XFF;
    send_data[1]=0XFF;
    TOTAL=0;
    temp_i=0;
j=0;
    display_sinx=10;  
}



void AM()
{
    GO=1;
    while(GO) 
    {
        if(RESET)                                  //重设参数
        {   
            InitAM();
            SET=1;   
            while(SET==1);  
            if(TOTAL>10000000)                     //输入频率越界
            {
                LCD_PutStr(1,3,erro);
                delayMS(9999);
                TOTAL=0;
                continue;
            }
            get_data=TOTAL*85;
            get_data+=(get_data)/93-get_data/8400;   //设定载波
            get_data=get_data/4;    
            send_data[2]=(unsigned char )get_data;
            send_data[3]=(unsigned char )(get_data>>8);
            send_data[4]=(unsigned char )(get_data>>16);
            send_data[5]=(unsigned char )(get_data>>24);
            send(6, FTW1,send_data);

            LCD_PutNum_l(-1,-1,TOTAL);
            LCD_PutStr(-1,-1,"Hz"); 
            LCD_PutStr(1,0,"5:调制度 10%");
            LCD_PutStr(2,0,"8:开始调制    ");
            LCD_PutStr(3,0,"1:重设 0:退出");
            SET=0;
            RESET=0;
        }//if

        if(FM_ADD)                                //调节步长x10
        {
            j++;
            if(j==10)
            {
              j=0;
            }
            switch (j)
            {case 0:  sinx=610; LCD_PutStr(1,0,"5:调制度10%  "  );break;
            case 1:  sinx=305;LCD_PutStr(1,0,"5:调制度20%  "  );break;
            case 2:  sinx=203;LCD_PutStr(1,0,"5:调制度30%  "  );break;
            case 3:  sinx=152;LCD_PutStr(1,0,"5:调制度40%  "  );break;
            case 4:  sinx=122;LCD_PutStr(1,0,"5:调制度50%  "  );break;
            case 5:  sinx=101;LCD_PutStr(1,0,"5:调制度60%  "   );break;
            case 6:  sinx=87;LCD_PutStr(1,0,"5:调制度70%"  );break;
             case 7:  sinx=76;LCD_PutStr(1,0,"5:调制度80%  "  );break;
             case 8:  sinx=68;LCD_PutStr(1,0,"5:调制度90%  "  );break;
             case 9:  sinx=61;LCD_PutStr(1,0,"5:调制度100%");break;
            default :break;
            }
            Dac12Write(sinx,0);
           
            FM_ADD=0;
        }
        if(BEGING)
        {
            P2IE=0X00;
            LCD_PutStr(2,0,"按任意键停止");
            out_sin=(unsigned int *)0xF100;
            GotimeDfA(100,0);
            GoDac12(100,0); 
         //   GoDac12(100,1); 
            BEGING=0;
        }
    }
        
}
void InitFSK()                       //初始化FSK模式
{
   // Init9854();
    send_data[0]=0X60;
    send_data[1]=0X02;
    send_data[2]=0X44;
    send_data[3]=0X10;
    send(4, control,send_data);
    
    send_data[0]=0XFF;
    send_data[1]=0XFF;
    send(2,SHAPI,send_data);
    send(2,SHAPQ,send_data);

    LCD_LcmClearTXT();   
    Clear_7290();
    TimerAInit(1);                        //初始化定时器
 
    send_data[0]=0XFF;
    send_data[1]=0XFF;
    TOTAL=0;
    temp_i=0;
}
void FSK()
{
    GO=1;
    while(GO) 
    {
        if(RESET)                                  //重设参数
        {   
            InitFSK();
            WHICH=1;
            LCD_PutStr(0,0,"0频率:");
            SET=1;   
            while(SET==1);  
            if(TOTAL>10000000)                     //输入频率越界
            {
                LCD_PutStr(0,3,erro);
                delayMS(9999);
                TOTAL=0;
                continue;
            }
            f_fsk1=TOTAL;
            get_data=TOTAL*85;
            get_data+=(get_data)/93-get_data/8400;
get_data=get_data/4+10;
            send_data[1]=0XFF;
            send_data[0]=0XFF;
            send_data[2]=(unsigned char )get_data;
            send_data[3]=(unsigned char )(get_data>>8);
            send_data[4]=(unsigned char )(get_data>>16);
            send_data[5]=(unsigned char )(get_data>>24);
            send(6, FTW1,send_data);                           //写入9854寄存器   
            LCD_PutNum_l(1,0,TOTAL);
            LCD_PutStr(-1,-1,"Hz"); 
            Clear_7290();
            TOTAL=0;
            temp_i=0;
            
            LCD_PutStr(2,0,"1频率:");
            SET=1;   
            while(SET==1);  
            if(TOTAL>10000000)                     //输入频率越界
            {
                LCD_PutStr(0,3,erro);
                delayMS(9999);
                TOTAL=0;
                continue;
            }
            f_fsk2=TOTAL;
            get_data=TOTAL*85;
            get_data+=(get_data)/93-get_data/8400;
get_data=get_data/4+10;
            send_data[1]=0XFF;
            send_data[0]=0XFF;
            send_data[2]=(unsigned char )get_data;
            send_data[3]=(unsigned char )(get_data>>8);
            send_data[4]=(unsigned char )(get_data>>16);
            send_data[5]=(unsigned char )(get_data>>24);
            send(6, FTW2,send_data);                           //写入9854寄存器   

            LCD_PutNum_l(3,0,TOTAL);
            LCD_PutStr(-1,-1,"Hz"); 
            delayMS(9999);
            delayMS(9999);
            TOTAL=(f_fsk1+f_fsk2)/2;
            LCD_LcmClearTXT();
            LCD_PutStr(0,0,"中心频率");
            LCD_PutNum_l(-1,-1,TOTAL);
            Clear_7290();
            TOTAL=0;
            temp_i=0;

            WHICH=6;
            LCD_PutStr(1,0,"基带信号"); 
            SET=1;   
            while(SET==1);    
            for(temp_i=0;temp_i<TOTAL;temp_i++)
            {
                if(temp_num[temp_i]==0)
                    display[temp_i]=0X30;
                else
                    display[temp_i]=0X31;
            }
            display[temp_i]='\0';
            LCD_PutStr(1,4,display);
            LCD_PutStr(2,0,"8:开始调制      ");
            LCD_PutStr(3,0,dsply_exit);
            SET=0;
            RESET=0;
        }//if
        if(BEGING)
        {
            P2IE=0X00;
            LCD_PutStr(2,0,"按任意键停止");
            temp_i=0;
            GotimeDfA(100,1);                   //打开定时器 
            BEGING=0;
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -