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

📄 phase.c

📁 运用TLC5510A高速(20M),扫描出波形,测量相位差,两个TLC5510A测两个波形.
💻 C
📖 第 1 页 / 共 2 页
字号:
  Out_data2_com(Add,0x00,0x24);
  Out_com(0xb0);
  Out_data(0x80+4*Num_chn);
  Out_com(0xb2);
  Add=16*(Y_chn+1)+X_chn;
  Out_data2_com(Add,0x00,0x24);
  Out_com(0xb0);
  Out_data(0x80+4*Num_chn+1);
  Out_com(0xb2);
  Add=16*Y_chn+X_chn+1;
  Out_data2_com(Add,0x00,0x24);
  Out_com(0xb0);
  Out_data(0x80+4*Num_chn+2);
  Out_com(0xb2);
  Add=16*(Y_chn+1)+X_chn+1;
  Out_data2_com(Add,0x00,0x24);
   Out_com(0xb0);
  Out_data(0x80+4*Num_chn+3);
   Out_com(0xb2);
}
/***********================液晶结束====================*************/
/******      上面不可改动        ********/

/*****************************以上为系统函数***************************************/
/*****************************以下为功能函数***************************************/
 zhuanhuan(bit biao ,float shu)
 {long int temp;
 if(biao)
   { temp=shu;
    if(qianhou)
     f[8]='+';
    else
     f[8]='-';
      f[9]=temp/100+'0';f[10]=temp/10%10+'0';
      f[11]='.';
      f[12]=temp%10+'0';
   }
  else
   {if(shu>=1000)
     {temp=shu;   f[6]='K';
      if(shu>=100000)
        {f[1]=temp/100000+'0'; temp%=100000;
         f[2]=temp/10000+'0';  temp%=10000;
         f[3]=temp/1000+'0';
         f[4]='.';
         f[5]=temp%1000/100+'0';
         }
      else if(shu>=10000)
         { f[1]=temp/10000+'0';
         f[2]=temp/1000%10+'0';
         f[3]='.';
         f[4]=temp/100%10+'0';
         f[5]=temp/10%10+'0';
         }
       else
         { f[1]=temp/1000+'0';
         f[3]=temp/100%10+'0';
         f[2]='.';
         f[4]=temp/1000%10+'0';
         f[5]=temp%10+'0';
         }
       }
     else if(shu>=1)
      { f[6]='H';
       if(shu>=100)
          {temp=shu*10;
           f[1]=temp/1000+'0'; temp%=1000;
           f[2]=temp/100+'0';  temp%=100;
           f[4]='.';
           f[3]=temp/10+'0';
           f[5]=temp%10+'0';
           }
       else if(shu>=10)
          {temp=shu*100;
           f[1]=temp/1000+'0'; temp%=1000;
           f[2]=temp/100+'0';  temp%=100;
           f[3]='.';
           f[4]=temp/10+'0';
           f[5]=temp%10+'0';
           }
         else
          {temp=shu*1000;
           f[1]=temp/1000+'0'; temp%=1000;
           f[3]=temp/100+'0';  temp%=100;
           f[2]='.';
           f[4]=temp/10+'0';
           f[5]=temp%10+'0';
          }
        }
      else
        {f[6]='H';
        temp=shu*1000;
         f[1]='0';
         f[3]=temp/100+'0';  temp%=100;
         f[2]='.';
         f[4]=temp%100/10+'0';
         f[5]=temp%10+'0';
         }
        }
    }
   /************回车确定函数*************/
void enter()
{  Cursor=0;
   hk=0;
}
 /**********显示缓冲区赋值函数***********/
void sent_num(bit i,uchar j)
{ if(Cursor==5)
 {Cursor=0;enter(); }             //输入满5个数字,自动回车退出
 else
  { f[Cursor+8]=j;
  Cursor++;
    /*if(state==1)
    { v[Cursor+8]=j;}
   else
     {f[Cursor+8]=j;}
    Cursor++;                              //Cursor为5位数据   */
   }
}
/*********键值中断处理程序*************/
void int1(void) interrupt 2
{  uchar Key_Temp=0,m_Key=0;
   Key_Temp=KEY;  //读取键值
   Delay(10000);    //软件去抖动
   m_Key=KEY;
   anjian=~anjian;
   EA=0;         //防止其他中断进入
  if(Key_Temp==m_Key)
  { if(m_Key==0)       sent_num(0,'1');     //定义数字键1
    else if(m_Key==1)  sent_num(0,'2');     //定义数字键2
    else if(m_Key==2)  sent_num(0,'3');     //定义数字键3
    else if(m_Key==6)  sent_num(0,'4');     //定义数字键4
    else if(m_Key==7)  sent_num(0,'5');     //定义数字键5
    else if(m_Key==8)  sent_num(0,'6');     //定义数字键6
    else if(m_Key==12) sent_num(0,'7');     //定义数字键7
    else if(m_Key==13) sent_num(0,'8');     //定义数字键8
    else if(m_Key==14) sent_num(0,'9');     //定义数字键9
    else if(m_Key==15) sent_num(0,'0');     //定义数字键0
    else if(m_Key==9)  sent_num(0,'.');     //定义小数点


    else if(m_Key==16)enter();          //定义回车键,不显示光标
    else if(m_Key==3)
    {  P16=~P16;
       change2=~change2;
    }
    else if(m_Key==10)
    {

    }
    else if(m_Key==5)
       {change=~change;
        }
    else if(m_Key==4) {if(Cursor!=0){hk=1;enter();}}    //KHz
    else if(m_Key==11)
            { fine=0; }
    else if(m_Key==17)
            { if(state==0)
              { state=1;
                 Chars_dis(" Dian Ya Chu Li ");
                 Dis_line(6);
               }

             else
               { state=0;
                Chars_dis(" Ping Li Chu Li ");
                Dis_line(6);
               }
             }        //定义频率状态0,电压状态1

   }
   EA=1;       //开启中断
 }
void sendfre(uchar b)
 { clear=0;
  CE=1;
  CE=0;
  Delay(120);         //等待上升沿清零
  clear=1;
  send_fre=b;         //输出频率f=F/256*N =39062.5*N
  outfre=39062.5*b;
 }
void convent()
{uchar MAX1,MIN1,MAX2,MIN2,temp1,temp2;
 int  i,j;
 //bit  d1you=0,g1you=0,d2you=0,g2you=0,bzhi=0;    //清标志位
 gu1=0;feng1=0;gu2=0;feng2=0;
 Addr=0xb000;Addr2=0xb800;                       //把两个5510的地址付给 Addr
 MAX1=*Addr;MIN1=*Addr;MAX2=*Addr2; MIN2=*Addr2;               //
 for(i=0;i<storge;i++)
 { temp1=*Addr; temp2=*Addr2;
    if((temp1>MAX1)&&(temp1-MAX1<8))        //8
        MAX1=*Addr;
     else if((temp1<MIN1)&&(MIN1-temp1<12)) //12
        MIN1=*Addr;
    if((temp2>MAX2)&&(temp2-MAX2<8))        //8
        MAX2=*Addr2;
      else if((temp2<MIN2)&&(MIN2-temp2<12))//12
        MIN2=*Addr2;
   Addr++; Addr2++;
  }                                     //找出波峰波谷
   Addr=0xb000;Addr2=0xb800; 
  for(i=0;i<storge;i++)
 { temp1=*Addr; temp2=*Addr2;
   if(temp1==MAX1)
    { if(!feng1)                //没有波峰,只存储一次存储
      {gao1=i;feng1=1;}
    }
   else if(temp1==MIN1)
     { if(!gu1)
       {di1=i;gu1=1;}
     }
  if(temp2==MAX2)
     { if(!feng2)               //没有波峰,存储
       {feng2=1;gao2=i;}
     }
    else if(temp2==MIN2)
     {if(!gu2)  //有波谷,存储
       {gu2=1;di2=i;}
     }
   Addr++; Addr2++;
  }
//以上为判断峰谷状态
 if(gao1<gao2)               
        { qianhou=1;      //滞后
          i=gao2-gao1;
          if(di1>gao1)
            gao1=di1-gao1;
           else
           gao1=gao1-di1;
           if(di2>gao2)
            gao2=di2-gao2;
             else
             gao2=gao2-di2;
           gao1=gao1+gao2;
          realfre=outfre/gao1*1.068;
         xiang=i*3600.0/gao1;              
         if(gao1>i)
           fine=1;
          Delay(1);
        }
  else if(gao2>gao1)
     { gao2=di2-di1;
          if(di1>gao1)
            gao1=di1-gao1;
           else
            gao1=gao1-di1;
          realfre=outfre/gao1/2;
           xiang=gao2*1800.0/gao1;
           if(xiang>0&&xiang<900)
           fine=1;
        }
   if(fine)
    { Chars_dis("Haven Convented ");
      Dis_line(7);
      L_delay(1);
      zhuanhuan(1,xiang);
      zhuanhuan(0,realfre);
    }
}
void cepin()
 { long int t;
   uchar temp1,temp2,temp3;
   clr=0;
   Delay(500);
   clr=1;     //清零
   Delay(500);
   temp1=fo_h;
   temp2=fo_m;
   temp3=fo_l;
   t=temp1*256*256+temp2*256+temp3;         //(long int)temp1*256*256+
   realfre=1.0/t*20000000;
 }
/*========================================主函数====================================*/
  void main(void)
{ uchar temp;
  uint i;
  Init_Int();            //中断初始化
  Init_time();           //时间初始化
  //Init_Serial();       //串口初始化
  Init_Dian();
  Clear_Dian(0);
  Clear_Dian(1);
  Init_Dian();
  Clear_Dian(0);
  Clear_Dian(1);
  
  Chn_Create();            //汉字生成程序
  
  Chn_dis(8,0,0);
  Chn_dis(10,0,1);
  Chn_dis(12,0,2);
  Chn_dis(14,0,3);
  Chn_dis(0,0,4);
  Chn_dis(2,0,5);
  Chn_dis(4,0,6);
  Chn_dis(6,0,7);      //武汉大学电子设计
  
  Chn_dis(3,2,8);
  Chn_dis(6,2,9);
  Chn_dis(9,2,10);
  Chn_dis(12,2,11);    //高速测量
  game=1;
  change=1;
  P16=0;
  //boxing();
while(1)
  {  Chars_dis(f);  // 取频率数据
     Dis_line(5);
   //cepin();
  if(!fine)
   {  Chars_dis(" Conventionning ");
      Dis_line(7);
      L_delay(3);
      sendfre(leijia);            //开始存储
      while(P15);
      convent();
    }
    while(change2)
   { if(!change)
      {Addr=0xb000;
       for(i=0;i<storge;i++)
        {temp=*Addr;Addr++;}           //显示存储波形1
       }
      else
       {Addr=0xb800;
       for(i=0;i<storge;i++)
        {temp=*Addr;Addr++;}           //显示存储波形2
       }
    }
  }
}

⌨️ 快捷键说明

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