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

📄 新建文本文档.txt

📁 基于FPGA+DDS的MSK数字调制源设计 C语言控制DDS
💻 TXT
字号:
C语言编程对DDS芯片的控制源程序
#include <io.h>
#include"system.h"
send(int a) 
{
IOWR(PIO_DAT_BASE,0,a);
IOWR(PIO_CON_BASE,0,2);
IOWR(PIO_CON_BASE,0,0);
}
write_fw(int fre,int pha)
{
fre=fre*43;
send(pha<<3);
send(fre>>24);
send(fre>>16);
send(fre>>8);
send(fre);
IOWR(PIO_CON_BASE,0,1);
IOWR(PIO_CON_BASE,0,0);
}
disp(int dd)
{
int led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  
IOWR(PIO_HEX3_BASE,0,led[(dd>>12)&15]);
IOWR(PIO_HEX2_BASE,0,led[(dd>>8)&15]);
IOWR(PIO_HEX1_BASE,0,led[(dd>>4)&15]);
IOWR(PIO_HEX0_BASE,0,led[dd&15]);
}

int keyscan()
{
  volatile int i,j,col,row;
  int key[4][4]={1,2,3,4,5,6,7,8,9,0,0xa,0xb,0xc,0xd,0xe,0xf};//键盘编码    
  while(1)
  {
    IOWR(PIO_KEY_BASE,0,0);//选择所有行
    usleep(20);
    if(IORD(PIO_KEY_BASE,0)!=15)//有键按下
    {
      row=1;
      for(i=0;i<4;i++)//行扫描
      {
        IOWR(PIO_KEY_BASE,0,~row);//选择行
        usleep(20);
        col=IORD(PIO_KEY_BASE,0);//读取列值
        if(col!=15)//有键按下
        {
          col=~col & 0xf;
          for(j=0;j<4;j++)
          {
            col>>=1;if(col==0)break;//转换列值
          }
          break;
        }
        row<<=1;//扫描下一行
      } 
      break; 
    }
  } 
  while(IORD(PIO_KEY_BASE,0)!=15);//等待按键松开 
  return key[i][j];
}
int main()
{
  volatile int flag1=0, flag2=0, flag3=0, flag4=0,flag5=0;
  int keycode=0, ledo=0,freq=100000,m=0,n=0;
  write_fw(freq,0);
  IOWR(PIO_CON_BASE,0,0);
  IOWR(PIO_HEX3_BASE,0,0x88);
  IOWR(PIO_HEX2_BASE,0,0x88);
  IOWR(PIO_HEX1_BASE,0,0x88);
  IOWR(PIO_HEX0_BASE,0,0x88);
  while(1)
  {
    write_fw(freq,0);
    keycode=keyscan();
    if(keycode<0xa && flag1!=0)
    {
      freq=freq*10+keycode;
      ledo=(ledo<<4)+keycode;
      disp(ledo);
      continue;
    }
    if(keycode==0xa)
    {
      if(flag1==0)
      {
        flag1=1;
        flag2=0;
        flag3=0;
        flag4=0;
        flag5=0;
        freq=0;
        ledo=0;
        disp(ledo);
        continue;
      }
      else
      {
        flag1=0;
        IOWR(PIO_HEX3_BASE,0,0x88);
        IOWR(PIO_HEX2_BASE,0,0x88);
        IOWR(PIO_HEX1_BASE,0,0x88);
        IOWR(PIO_HEX0_BASE,0,0x88);
        if(freq<10000000)
        {
          write_fw(freq,0);
        } 
        continue;
      }
    }
    if(keycode==9)
    {
      if (freq>1000)
      {
        freq=freq+100;
        write_fw(freq,0);
      }
      continue;
    }
    if(keycode==0)
    {
      if (freq<10000000)
      {
        freq=freq-100;
        write_fw(freq,0);
      }
      continue;
    }
    if(keycode==0xb)
    {
      flag1=0;
      flag2=~flag2;
      flag3=0;
      flag4=0;
      flag5=0;
    }
    if(keycode==0xc)
    {
      flag1=0;
      flag2=0;
      flag3=~flag3;
      flag4=0;
      flag5=0;
    }
    if(keycode==0xd) 
    {
      flag1=0;
      flag2=0;
      flag3=0;
      flag4=~flag4;
      flag5=0;
    }
    if(keycode==0xe)
    {
      flag1=0;
      flag2=0;
      flag3=0;
      flag4=0;
      flag5=~flag5;
    }
   if (flag2)     //按B键
    {
      IOWR(PIO_HEX3_BASE,0,0x83);
      IOWR(PIO_HEX2_BASE,0,0x83);
      IOWR(PIO_HEX1_BASE,0,0x83);
      IOWR(PIO_HEX0_BASE,0,0x83);
      while(1)    //2FSK
      {
        if(IORD(PIO_M31_BASE,0))
          write_fw(freq,0);
        else
          write_fw(freq/2,0);
        if(IORD(PIO_KEY_BASE,0)!=15)
        break;
      }
    }
    if (flag3)    //按C键
    {
      IOWR(PIO_HEX3_BASE,0,0xc6);
      IOWR(PIO_HEX2_BASE,0,0xc6);
      IOWR(PIO_HEX1_BASE,0,0xc6);
      IOWR(PIO_HEX0_BASE,0,0xc6);
      while(1)    //2ASK
      {
        m=IORD(PIO_M31_BASE,0)*freq;
        write_fw(m,0);
        if(IORD(PIO_KEY_BASE,0)!=15) break;
      }
    }
    if (flag4)    //按D键
    {
      IOWR(PIO_HEX3_BASE,0,0xa1);
      IOWR(PIO_HEX2_BASE,0,0xa1);
      IOWR(PIO_HEX1_BASE,0,0xa1);
      IOWR(PIO_HEX0_BASE,0,0xa1);
      while(1)    //2PSK
      {
        if(IORD(PIO_M31_BASE,0))
          write_fw(freq,0);
        else
          write_fw(freq,90);
        if(IORD(PIO_KEY_BASE,0)!=15) break;
      }
    }
     if (flag5)    //按E键
    {
      IOWR(PIO_HEX3_BASE,0,0x86);
      IOWR(PIO_HEX2_BASE,0,0x86);
      IOWR(PIO_HEX1_BASE,0,0x86);
      IOWR(PIO_HEX0_BASE,0,0x86);
      while(1)    //MSK
      {
        m=freq+50000;n=freq-50000;
        if(IORD(PIO_M31_BASE,0))
          write_fw(m,0);
        else     
          write_fw(n,0);
        if(IORD(PIO_KEY_BASE,0)!=15) break;
      }
    }
  }
}

⌨️ 快捷键说明

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