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

📄 1.c

📁 低频数字式相位测量仪; 此系统由相位测量仪、数字式移相信号发生器和移相网络三部分组成。为使系统更加稳定
💻 C
字号:
/**********************************************************************
* 函 数 名:   测濒
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输    入:
* 返    回:
* IO口分配:  P1.~P1.5.....分濒线
            P0...........送数据
            p2.0~P2.4....键盘显示
            T0...........被测信号输入 (16) P3.4
            T1...........
            T2...........显示
  function: first........显示初始化
            high.........clear high bit 0
            rehigh.......recover high 0
* 设 计 者:                    日期:
* 修 改 者:                    日期:
* 版    本:
***********************************************************************/
 #include<reg52.h>
 #include<intrins.h>

 #define uchar unsigned char
 #define uint  unsigned int

 //define data
 #define NTH2D    0xF4      // MODE 1  4MHz: 0FAH  6MHZ: 0FBH   2.5MS
 #define NTL2D    0xD0      //         12MHZ: 2.85MS= 2850=B30H=-F4D0H

 //define bit
  bit  Y,                   // 预测标志
       AB,                  // A中断
       START,               // 启动
       ABX,                 // 测相位的标志
       signe;

 //all x
 uchar  Disbit,PN0,
        K,                  // 分濒系数
        TDH,TDL,PDH,PDL;
 uchar  F;
 uint fn;
 //function list
 void first(void);         // first send data
 void deal(uint m);
 void dealp(uint n);
 void delay(uint l);

 //arange define
 uchar data disbuf[8]={0,0,0,0,0,0,0,0};    // display is area
 uchar code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0};//0X77,0X7C,0X39,0X5E,0X79,0X71}; //0-9 A~F


 // point define
 //T1 MODE 1  2.85S
 void timer2(void) interrupt 5 using 3  // T=0.544ms  12MHZ
 {
    uchar  save;
    P0=0;
    TH2=NTH2D;
    TL2=NTL2D;
    save=disbuf[Disbit];
    if(PN0==Disbit) save=save|0x80;
    P2=P2&0xf0;
    P2=P2|Disbit;
    P0=save;
    Disbit+=1;
    if(Disbit==8)   Disbit=0;
 }

  void service_int0(void) interrupt 0 using 2
 {
    if(Y==0)
    {if(START==0)   goto st;
     EX1=1; TH1=0;TL1=0; TR1=1;}
  st:if(START==1)
     {TH0=0;TL0=0;TR0=1; START=0; return;}
     if(START==0)
     {TR0=0;START=1;TDH=TH0;TDL=TL0;signe=1;/*EX0=0;*/}
 }

 // INT1
 void service_int1(void) interrupt 2
 {
    TR1=0;PDH=TH1; PDL=TL1;
    ABX=1;
    EX1=0;
 }

 void main(void)
 {
    uint X,P,fn,fn1,ta;
    uchar M,K;
    first();
    while(1)
    {
       PN0=6;
       IP=0X05;
       TMOD=0X11;
       TH0=0;
       TL0=0;
       IT0=1;
       IT1=1;
      
       EA=1;
       START=1;
       signe=0;
       while(1)
       {
          signe=0; START=1;
          Y=1; P1=P1&0x0f;
          P1=P1|0x1f;   M=1;
          EX0=1;
          while(signe==0);
          ta=256*TDH+TDL;

             signe=0;
          if(ta>=5000) { K=0x1f; M=1; }
          else if(ta>=500)  { K=0x7f; M=8; }
          else if(ta>=100)  { K=0xDF; M=64;}
          else if(ta>=50)   { K=0xff; M=128;}
          P1=P1&0x0f;
          P1=P1|K;
          delay(500);
          /******正式测量**********/
          Y=0;
          START=1;
          signe=0;
          ABX=0;
          TH0=0;    TL0=0;              TH1=0; TL1=0;
         // EX0=1;    EX1=0;
          while(signe==0);               // waite
          while(ABX==0);
          fn1=256*TDH+TDL;
          P=256*PDH+PDL-19;
          if(P>=fn1) X=0;
          X=(float)3600*P/fn1;
          fn=(float)10000/fn1*100*M;
          if(fn>=10000) { fn=fn/10; PN0=1;}
          deal(fn);
          dealp(X);
        }
    }
 }
   void first(void)
   {
    TH2=NTH2D;
    TL2=NTL2D;
    ET2=1;
    EA=1;
    T2CON=0x04;
    P0=0XFF;
    P1=0x1f;
    P2=0XFF;
    P3=0XFF;
    PN0=0xff;
    deal(9999);
    dealp(9999);
    delay(4550);
   }
  void deal(uint m)
    {
       uchar data b0,b1,b2,b3;
       uint div=1000;
       b0=m/div;
       m%=div;
       div/=10;
       b1=m/div;
       m%=div;
       div/=10;
       b2=m/div;
       m%=div;
       b3=m;
       if(b0==0)
       {
           b0=10;
           if(b1==0)
           {
               b1=10;
               if(b2==0) b2=10;
           }
       }
       disbuf[0]=tab[b0];
       disbuf[1]=tab[b1];
       disbuf[2]=tab[b2];
       disbuf[3]=tab[b3];
    }
    void dealp(uint n)
    {
       uchar data b0,b1,b2,b3;
       uint div=1000;
       b0=n/div;
       n%=div;
       div/=10;
       b1=n/div;
       n%=div;
       div/=10;
       b2=n/div;
       n%=div;
       b3=n;
       if(b0==0)
       {
           b0=10;
           if(b1==0)
           {
               b1=10;
           }
       }
       disbuf[4]=tab[b0];
       disbuf[5]=tab[b1];
       disbuf[6]=tab[b2];
       disbuf[7]=tab[b3];
    }

    void delay(uint l)
    {
        while(--l) {_nop_();_nop_();}
    }



⌨️ 快捷键说明

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