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

📄 project2.c

📁 电压控制LC振荡器
💻 C
字号:
 #include "SPCE061V004.H"
 #include "IO_bit.h"
 #define dout  IOB3
 #define dclk IOB2
 #define din IOB1
 #define load   IOB0
 
 #define n0  IOA2
 #define n1  IOA3
 #define n2  IOA4
 #define n3  IOA5
 #define n4  IOA6
 #define n5  IOA7
 #define n6  IOA8
 #define n7  IOA9
 #define n8  IOA10
 #define n9  IOA11
 #define a0  IOB8
 #define a1  IOB9
 #define a2  IOB10
 #define a3  IOB11
 #define a4  IOB12
 #define a5  IOB13
 
unsigned int n;
unsigned int key;
unsigned int data;
int a;
 unsigned int x;
/////////////////////////////////////////读键值并返回.
 unsigned int readkey(void)
 {unsigned int key=0,i,com=0x0700;
    for(i=0;i<6;i++)
    { if(com&0x01) din=1;
      else din=0;
      dclk=0;
      dclk=1;
      com>>=1;
     }
    load=0;
     load=1;
   key=key|dout;
   dclk=1;
   dclk=0;
  for(i=0;i<6;i++)
    { key<<=1;
     
     key=key|dout;
    dclk=1;
     dclk=0;
     }
     key=key&0x007f;
     return(key);
  }


 //////////////////////////////////按地址向CH452送数据.
void shjz_ch452(unsigned int ldata,unsigned int hdata)

 { unsigned int i;
  
   for(i=0;i<8;i++)
   {  dclk=0;
    if(ldata&0x0001) din=1;
      else  din=0;
      dclk=1;
      ldata=ldata>>1;
      }
    for(i=0;i<4;i++)
    {dclk=0;
    if(hdata&0x0001) din=1;
     else din=0;
     dclk=1;
     hdata=hdata>>1;
     } 
     load=0;
     load=1;
}
//////////////////////////////////////////////////////////
 ch452_init()
{ shjz_ch452(0x0001,0x0002);
 shjz_ch452(0x0023,0x0004);
  shjz_ch452(0x0080,0x0005); 
} 
/////////////////////////////////////////////////////////// 
void disp1(unsigned int data)
{unsigned int i,data1;
 unsigned int a[8]={0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf};
               //b[8]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89};
               //显示0.,1.,2.,3.,4.      9.
  ch452_init();
 for(i=0;i<3;i++)
  {data1=data%10;
    data=data/10;
   if(i==1)   shjz_ch452(data1|0x80,a[1]); //在第2个数码管上显示0.
     else  shjz_ch452(data1,a[i]);
   
  }
  
  }
////////////////////////////////////////////////////////
void disp2(unsigned int data)
{unsigned int i,data1;
 unsigned int a[8]={0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf};
               //b[8]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89};
               //显示0.,1.,2.,3.,4.      9.
  ch452_init();
 for(i=4;i<6;i++)
  {data1=data%10;
  shjz_ch452(data1,a[i]);
  data=data/10;
  }shjz_ch452((0x80|data),0xe);//在第2个数码管上显示0.
  }
////////////////////////////////////////////////////////////////////////


void   AD(void)
 { float tem;
   unsigned int buff;
  
    buff=*P_ADC_LINEIN_Data;//开始转换
    while(!(*P_ADC_MUX_Ctrl&0x8000));
    buff=*P_ADC_LINEIN_Data;
   
    tem=buff*3.3/0xffc0;
   x=(unsigned int)(tem*100); 
   disp2(x);
 
  }


//////////////////////////////////////////////////////////





////////////////////////////////////////////////////
void key1(void)         
{
 a=28,n=46;
 data=150;
 ch452_init();
 disp1(150);
 *P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2);  //并行送N值
 *P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8);  //并行送A值
}
 
 
void key2(void)        ///步进加100KHZ
{   unsigned int i;

   for(i=0;i<10000;i++);
  { *P_Watchdog_Clear=1;
    for(i=0;i<10000;i++);}
   
     a=a+10;
     data++;
   if(a>31) {a=a-32;n=n+1;}
   if((a==22)&&(n==109)) {n=28;a=46;data=150;}

   disp1(data);             //显示频率
 *P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2);  //并行送N值
 *P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8);  //并行送A值

 }


void key3(void)          ////步进减100KHZ
{  unsigned int i;
   for(i=0;i<10000;i++);
  { *P_Watchdog_Clear=1;
    for(i=0;i<10000;i++);}
    
    a=a-10;
    data--;
    if(a<0) {a=a+32;n=n-1;}
   if((a==18)&&(n==46))  {n=109;a=12;data=350;} 
  
  disp1(data);             //显示频率
 *P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2);  //并行送N值
 *P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8);  //并行送A值

 }

void key4(void)
{   AD();
 }

void key5(void)          ////步进加1MHZ
{  unsigned int i;
   for(i=0;i<10000;i++);
  { *P_Watchdog_Clear=1;
    for(i=0;i<10000;i++);}
    
    a=a+4;
    n=n+3;
    data=data+10;
    if(a>31) {a=a-32;n=n+1;}
   if((a==16)&&(n==112))  {n=46;a=28;data=150;} 
  
  disp1(data);             //显示频率
 *P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2);  //并行送N值
 *P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8);  //并行送A值

 }

void key6(void)          ////步进减1MHZ
{  unsigned int i;
   for(i=0;i<10000;i++);
  { *P_Watchdog_Clear=1;
    for(i=0;i<10000;i++);}
    
    a=a-4;
    n=n-3;
    data=data-10;
    if(a<0) {a=a+32;n=n-1;}
   if((a==24)&&(n==43))  {n=109;a=12;data=350;} 
  
  disp1(data);             //显示频率
 *P_IOA_Data=(*P_IOA_Buffer&0xf003)|(n<<2);  //并行送N值
 *P_IOB_Data=(*P_IOB_Buffer&0xc0ff)|(a<<8);  //并行送A值

 }
////////////////////////////////////////////////////
 void IRQ3(void)__attribute__((ISR));
 void IRQ3(void)
 {
 if(*P_INT_Ctrl&C_IRQ3_EXT2)
  { 
     shjz_ch452(0x0,0x7);
     key = readkey();
     switch(key)
      {case 0x0040:key1();break;
      
       case 0x0041:key2();break;
       
       case 0x0042:key3();break;
       
      case 0x0043:key4();break;
       
     case 0x0044:key5();break;
       case 0x0045:key6();break;
        /*  case 0x0046:key7();break;
       case 0x0047:key8();break;
       case 0x0048:key9();break;
       case 0x0049:key10();break;
      case 0x004a:key11();break;
      case 0x004b:key12();break;
       case 0x004c:key13();break;
       case 0x004d:key14();break;
       case 0x004e:key15();break;
       case 0x004f:key16();break; */
       default:break;
    	}

 	*P_INT_Clear=C_IRQ3_EXT2;
 	} 
 else if(*P_INT_Ctrl&C_IRQ3_EXT1)
    *P_INT_Clear=C_IRQ3_EXT1;
    
    else
    *P_INT_Clear=C_IRQ3_KEY;
    }

  

  
  
  main()
  { 
  hardware();
  
  
  ch452_init();
  shjz_ch452(0x80,0x9);
  shjz_ch452(0x00,0x8);
  //disp2(0);
  
  *P_ADC_MUX_Ctrl=C_ADC_CH2; //LINE_IN-------IOA0  
  *P_ADC_Ctrl= C_ADCE; //

  while(1)
 	{
  	*P_Watchdog_Clear=1;
  
	}


  }

⌨️ 快捷键说明

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