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

📄 main.c

📁 一个基于AD9954的430单片机编程
💻 C
📖 第 1 页 / 共 2 页
字号:
/*--------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------*/
#include  "includes.h"

/*--------------------------------------------------------------------------------------------------
变量
--------------------------------------------------------------------------------------------------*/
//#pragma location="DATA16_C"
const char chinese[]="0123456789abcdef";
char KeyBuf;
MENU FSKMod;
MENU PSKMod;
MENU FMMod;
MENU STuneMod;
const char FSKName[]="FSK 方式        ";
const char PSKName[]="PSK 方式        ";
const char FMName[]=" FM 方式        ";
const char STuneName[]="单频方式        ";

const unsigned int FMTab1[]={0xD1B7,0xBCBF,0xA7C7,0x92CF,0x7DD7,0x68DF,0x53E7,0x3EEF,0x29F7,0x14FF};
const unsigned int FMTab0[]=
{
8418,8418,8417,8416,8415,8412,8410,8406,8402,8397,
8392,8386,8380,8373,8365,8357,8348,8339,8329,8319,
8308,8296,8284,8271,8258,8245,8231,8216,8201,8185,
8169,8153,8136,8119,8101,8083,8064,8045,8026,8006,
7986,7965,7944,7923,7902,7880,7858,7836,7813,7791,
7768,7745,7721,7698,7674,7650,7626,7602,7577,7553,
7529,7504,7480,7455,7430,7406,7381,7356,7332,7307,
7283,7259,7234,7210,7186,7162,7138,7115,7091,7068,
7045,7023,7000,6978,6956,6934,6913,6892,6871,6850,
6830,6810,6791,6772,6753,6735,6717,6700,6683,6667,
6651,6635,6620,6605,6591,6578,6565,6552,6540,6528,
6517,6507,6497,6488,6479,6471,6463,6456,6450,6444,
6439,6434,6430,6426,6424,6421,6420,6419
};
const int FMTab2[]=
{
10737,10734,10724,10707,10684,10655,10619,10576,10527,10472,10410,10342,10267,
10187,10100,10006,9907,9802,9690,9573,9450,9321,9186,9046,8900,8748,8592,8430,
8263,8091,7914,7732,7545,7354,7158,6958,6754,6545,6333,6116,5896,5672,5445,5214,
4981,4744,4504,4262,4017,3769,3519,3267,3013,2758,2500,2241,1981,1719,1456,1193,
928,664,398,133,-133,-398,-664,-928,-1193,-1456,-1719,-1981,-2241,-2500,-2758,
-3013,-3267,-3519,-3769,-4017,-4262,-4504,-4744,-4981,-5214,-5445,-5672,-5896,
-6116,-6333,-6545,-6754,-6958,-7158,-7354,-7545,-7732,-7914,-8091,-8263,-8430,
-8592,-8748,-8900,-9046,-9186,-9321,-9450,-9573,-9690,-9802,-9907,-10006,-10100,
-10187,-10267,-10342,-10410,-10472,-10527,-10576,-10619,-10655,-10684,-10707,
-10724,-10734,-10737
};
const unsigned int FMTab3[]=
{
21474,
21471,
21461,
21444,
21421,
21392,
21356,
21313,
21264,
21209,
21147,
21079,
21004,
20924,
20837,
20743,
20644,
20539,
20427,
20310,
20187,
20058,
19923,
19783,
19637,
19485,
19329,
19167,
19000,
18828,
18651,
18469,
18282,
18091,
17895,
17695,
17491,
17282,
17070,
16853,
16633,
16409,
16182,
15951,
15718,
15481,
15241,
14999,
14754,
14506,
14256,
14004,
13750,
13495,
13237,
12978,
12718,
12456,
12193,
11930,
11665,
11401,
11135,
10870,
10604,
10339,
10073,
9809,
9544,
9281,
9018,
8756,
8496,
8237,
7979,
7724,
7470,
7218,
6968,
6720,
6475,
6233,
5993,
5756,
5523,
5292,
5065,
4841,
4621,
4404,
4192,
3983,
3779,
3579,
3383,
3192,
3005,
2823,
2646,
2474,
2307,
2145,
1989,
1837,
1691,
1551,
1416,
1287,
1164,
1047,
935,
830,
731,
637,
550,
470,
395,
327,
265,
210,
161,
118,
82,
53,
30,
13,
3,
0
};

const char FSKTab[5][5]=
{
  {0x80,0x00,0x00,0x00,0x00},     //工作方式为ram到相位累加
  {0x10,0x27,0x00,0x00,0x00},     //段1
  {0x10,0x27,0x00,0x01,0x04},     //段2
  {0x00,0x12,0x05,0xBC,0x00},     //110k
  {0x00,0x0E,0xBE,0xDF,0x00}      //90k
};

const char PSKTab[5][5]=
{
  {0xC0,0x00,0x00,0x00,0x00},
  {0x00,0x10,0x62,0x4D,0x00},
  {0x10,0x27,0x01,0x00,0x80},
  {0x00,0x00,0x00,0x00,0x00},
  {0x80,0x00,0x00,0x00,0x00}
};

/*
const char li[] =
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x18,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xFF,0xDC,0x00,0x01,
0x80,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xFF,0xBC,0x00,0x01,
0x80,0x00,0x30,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xB8,0x00,0x01,
0x80,0x00,0x30,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0x78,0x00,0x01,
0x80,0x00,0x19,0xFF,0xFE,0xC0,0x00,0x00,0x00,0x00,0x02,0xFF,0xFF,0x70,0x00,0x01,
0x80,0x00,0x18,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0xFF,0xFE,0xF0,0x00,0x01,
0x80,0x00,0x0C,0x01,0xFF,0x60,0x00,0x00,0x00,0x00,0x05,0xFF,0xFE,0xE0,0x00,0x01,
0x80,0x00,0x0C,0x7F,0xD0,0x20,0x00,0x00,0x00,0x00,0x05,0xFF,0xFD,0xE0,0x00,0x01,
0x80,0x00,0x06,0x00,0x0F,0xB0,0x00,0x00,0x00,0x00,0x0B,0xFF,0xFD,0xC0,0x00,0x01,
0x80,0x00,0x06,0x03,0xFC,0x10,0x00,0x00,0x00,0x00,0x0B,0xFF,0xFB,0xC0,0x00,0x01,
0x80,0x00,0x03,0x1F,0x00,0x18,0x00,0x00,0x00,0x00,0x17,0xFF,0xFB,0x80,0x00,0x01,
0x80,0x00,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x17,0xFF,0xF7,0x80,0x00,0x01,
0x80,0x00,0x01,0x80,0x00,0x0C,0x00,0x00,0x00,0x00,0x17,0xFF,0xF7,0x00,0x00,0x01,
0x80,0x00,0x01,0x80,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0xFF,0xEF,0x00,0x00,0x01,
0x80,0x00,0x00,0xC0,0x00,0xF6,0x00,0x00,0x00,0x00,0x06,0x7F,0xEE,0x00,0x00,0x01,
0x80,0x00,0x00,0xC0,0x03,0xC2,0x00,0x00,0x00,0x00,0x01,0x9F,0xDE,0x00,0x00,0x01,
0x80,0x00,0x00,0x60,0x00,0x3B,0x00,0x00,0x00,0x00,0x00,0x67,0xDF,0x00,0x00,0x01,
0x80,0x00,0x00,0x60,0x00,0xE3,0x00,0x00,0x00,0x00,0x00,0x19,0xBF,0x00,0x00,0x01,
0x80,0x00,0x00,0x30,0x03,0x8E,0x00,0x00,0x00,0x00,0x00,0x06,0x3F,0x00,0x00,0x01,
0x80,0x00,0x00,0x30,0x06,0x3C,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x01,
0x80,0x00,0x00,0x18,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,
0x80,0x00,0x00,0x18,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0x80,0x00,0x01,
0x80,0x00,0x00,0x0C,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x1F,0xC0,0x00,0x01,	
0x80,0x00,0x00,0x0C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x07,0xE0,0x00,0x01,
0x80,0x00,0x00,0x06,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0xE0,0x00,0x01,
0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0xC0,0x00,0x01,
0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0xFF,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x05,0x40,0x88,0x04,0x01,0x08,0x00,0x00,0x0A,0x81,0x10,0x04,0x00,0x20,0x01,
0x80,0x79,0x21,0x08,0x02,0x21,0x49,0x00,0x00,0xF2,0x42,0x10,0x04,0x47,0x10,0x01,
0x80,0x09,0x07,0xDF,0x7F,0xF7,0xAA,0x00,0x00,0x12,0x0F,0xBE,0x7F,0xE5,0xFE,0x01,
0x80,0x7F,0xF4,0x51,0x08,0x81,0x2C,0x00,0x00,0xFF,0xE8,0xA2,0x44,0x47,0x00,0x01,
0x80,0x09,0x04,0x61,0x08,0x81,0x7F,0x00,0x00,0x12,0x08,0xC2,0x7F,0xC5,0x4A,0x01,
0x80,0x0B,0x24,0x51,0x08,0x83,0x81,0x00,0x00,0x16,0x48,0xA2,0x44,0x45,0x6A,0x01,
0x80,0x1D,0x47,0xC9,0x05,0x05,0x01,0x00,0x00,0x3A,0x8F,0x92,0x44,0x47,0x52,0x01,
0x80,0x68,0x84,0x49,0x05,0x05,0x7F,0x00,0x00,0xD1,0x08,0x92,0x7F,0xC5,0x6A,0x01,
0x80,0x09,0x94,0x41,0x02,0x01,0x01,0x00,0x00,0x13,0x28,0x82,0x44,0x05,0x4A,0x01,
0x80,0x0E,0x57,0xC1,0x0D,0x81,0x01,0x00,0x00,0x1C,0xAF,0x82,0x04,0x29,0x42,0x01,
0x80,0x38,0x34,0x4E,0x70,0x71,0x7F,0x00,0x00,0x70,0x68,0x9C,0x03,0xEB,0x7E,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
*/

/*--------------------------------------------------------------------------------------------------
单频控制函数
--------------------------------------------------------------------------------------------------*/
void STune()
{
  signed long int fre0=0,fre1;
  char cmd[4]={0};
  char n;
  
  AD9954PutCmd(CFR1,4,cmd);
  while(1)
  {
    while(!KeyBuf);
    if(KeyBuf==156) return;   //推出(屏显)
    fre0=MenuGetLon(fre0);
    if(fre0<200000) fre1=(fre0*10737)/1000;
    else fre1=(fre0/100)*1074;
    for(n=0;n<4;n++) cmd[n]=((char *)&fre1)[3-n];
    AD9954PutCmd(FTW0,4,cmd);
  }
}

/*--------------------------------------------------------------------------------------------------
FSK
--------------------------------------------------------------------------------------------------*/
void FSK()
{
  char n;
  
  AD9954PutCmd(CFR1,4,(char *)(FSKTab[0]));
  AD9954PutCmd(RSCW0,5,(char *)(FSKTab[1]));
  P5OUT&=~AD9954_PS0;
  P5OUT&=~AD9954_PS1;
  while(0<(SPI0Sendn-SPI0Datn)&&(SPI0Sendn-SPI0Datn)<3);
  SPI0SendDat[SPI0Datn++]=AD9954_CS;
  SPI0SendDat[SPI0Datn++]=RAM;
  AD9954PutRam((char *)(FSKTab[3]));
//  AD9954PutRam((char *)(FSKTab[3]));
  while(!(U0TCTL&TXEPT));
  P5OUT|=AD9954_IOUPDATE;
  for(n=0;n<100;n++);
  P5OUT&=~AD9954_IOUPDATE;
  
  AD9954PutCmd(RSCW1,5,(char *)(FSKTab[2]));
  P5OUT|=AD9954_PS0;
  P5OUT&=~AD9954_PS1;
  while(0<(SPI0Sendn-SPI0Datn)&&(SPI0Sendn-SPI0Datn)<3);
  SPI0SendDat[SPI0Datn++]=AD9954_CS;
  SPI0SendDat[SPI0Datn++]=RAM;
  AD9954PutRam((char *)(FSKTab[4]));
//  AD9954PutRam((char *)(FSKTab[3]));
  while(!(U0TCTL&TXEPT));
  P5OUT|=AD9954_IOUPDATE;
  for(n=0;n<100;n++);
  P5OUT&=~AD9954_IOUPDATE;
}

/*--------------------------------------------------------------------------------------------------
PSK
--------------------------------------------------------------------------------------------------*/
void PSK()
{
  char n;
  
  AD9954PutCmd(CFR1,4,(char *)(PSKTab[0]));
  AD9954PutCmd(FTW0,4,(char *)(PSKTab[1]));
  AD9954PutCmd(RSCW0,5,(char *)(PSKTab[2]));
  P5OUT&=~AD9954_PS0;
  P5OUT&=~AD9954_PS1;
  while(0<(SPI0Sendn-SPI0Datn)&&(SPI0Sendn-SPI0Datn)<3);
  SPI0SendDat[SPI0Datn++]=AD9954_CS;
  SPI0SendDat[SPI0Datn++]=RAM;
  AD9954PutRam((char *)(PSKTab[3]));
  AD9954PutRam((char *)(PSKTab[4]));
  while(!(U0TCTL&TXEPT));
  P5OUT|=AD9954_IOUPDATE;
  for(n=0;n<100;n++);
  P5OUT&=~AD9954_IOUPDATE;
}

/*--------------------------------------------------------------------------------------------------
FM
--------------------------------------------------------------------------------------------------*/
void FM()
{
  char cmd[5],n,nn;
  unsigned long int temp;
  
  AD9954PutCmd(CFR1,4,(char *)(FSKTab[0]));
  cmd[0]=0x86;
  cmd[1]=0x01;
  cmd[2]=0x7F;
  cmd[3]=0x03;
  cmd[4]=0x6C;
  AD9954PutCmd(RSCW3,5,cmd);
  P5OUT|=AD9954_PS1;
  P5OUT|=AD9954_PS0;
  while(0<(SPI0Sendn-SPI0Datn)&&(SPI0Sendn-SPI0Datn)<3);
  SPI0SendDat[SPI0Datn++]=AD9954_CS;
  SPI0SendDat[SPI0Datn++]=RAM;
  for(n=0x00;n<0x80;n++)
  {
//    temp=FMTab2[n];
//    temp=temp*10+0x10624D;
    temp=10*(signed long int)FMTab2[n]+0x10624D;
    for(nn=0;nn<4;nn++) cmd[nn]=((char *)&temp)[3-nn];
    AD9954PutRam(cmd);
  }
  while(!(U0TCTL&TXEPT));
  P5OUT|=AD9954_IOUPDATE;
  for(n=0;n<100;n++);
  P5OUT&=~AD9954_IOUPDATE;
}

/*--------------------------------------------------------------------------------------------------
主函数
--------------------------------------------------------------------------------------------------*/
void main()
{
  char key,n;
//  unsigned int dt;
//  char cmdn,modifycmd ;
  char cmd[8]={0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
  char cursor[12]={0x18,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
//  signed long int num;
  
  
  Init430();
  _BIS_SR(GIE);                         //全局中断使能
//  InitTA();*
//  InitTB();

//  SPI0SendDat[0]=0xA5;                  //必须放在InitSPI0前,因为初始化完成后就直接进入中断发送了
//  SPI0Sendn=0;
  InitSPI0(); 
  InitSPI1(); 
  FYDInit();
//  FYDGRamInit();
//  FYDPutPic(0x80,0x80,0x08,0x20,(char *)li);
//  FYDPutPic(0x88,0x80,0x08,0x20,(char *)&(li[0x200]));
  
  FYDPutWords(0x80,5,(char *)chinese);
//  FYDPutHex(0x98,8,cmd);
//  FYDPutNum(0x90,0);
//  FYDPutNum(0x88,12345);
//  FYDPutBin(0x88,0x75);
  IRInit();
/*--------------------------------------------------------------------------------------------------------------
本次任务的关键初始化
--------------------------------------------------------------------------------------------------------------*/  
  AD9954Init();
  
  MenuCur=&STuneMod;  
  MenuCur->name=(char *)STuneName;
  MenuCur->fun=STune;
  MenuCur->far=NULL;
  MenuCur->sub=NULL;
  MenuCur->pre=NULL;
  MenuCur->nxt=&FSKMod;  

  MenuCur=MenuCur->nxt;
  MenuCur->name=(char *)FSKName;
  MenuCur->fun=STune;
  MenuCur->far=NULL;
  MenuCur->sub=NULL;
  MenuCur->pre=&STuneMod;
  MenuCur->nxt=&PSKMod;

  MenuCur=MenuCur->nxt;
  MenuCur->name=(char *)PSKName;
  MenuCur->fun=STune;
  MenuCur->far=NULL;
  MenuCur->sub=NULL;
  MenuCur->pre=&FSKMod;
  MenuCur->nxt=&FMMod;

  MenuCur=MenuCur->nxt;
  MenuCur->name=(char *)FMName;
  MenuCur->fun=STune;
  MenuCur->far=NULL;

⌨️ 快捷键说明

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