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

📄 pinlvji3.lst

📁 频率计 闸门时间0.1s 1s 10s 频率范围0~99khz 可以切换 里面有四个源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   PINLVJI3                                                              11/17/2008 18:59:29 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE PINLVJI3
OBJECT MODULE PLACED IN pinlvji3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pinlvji3.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          unsigned char data key,flag_ft,point,buffer,j,INT1_ready,couter,couter0,bus0,bus1,cycle;
   3          //键盘,频率判决结果,判决频率寄存,小数点位置标志,显示缓冲变量,显示循环变量,边沿触发界定,定时器0定时寄存,定
             -时器1定时寄存,显示刷新循环寄存CT0计数值寄存,CT1计数值寄存
   4          unsigned int data Z,delay,k,turn;//脉宽,占空比,程序延迟循环变量,
   5          float data T,F,T_T,F_F,W;//周期,频率
   6          unsigned char code BitTab[4]={0x7f,0xbf,0xdf,0xef};//位驱动码
   7          unsigned char code DispTab[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0,0xf7};//字形码
   8          /*                              0    1    2    3    4    5    6    7    8    9    -   */
   9          unsigned char data DispBuf[4];//待显示数据寄存
  10          sbit P0_0=P0^0;//位变量定义
  11          sbit P0_1=P0^1;
  12          sbit P0_2=P0^2;
  13          sbit P0_3=P0^3;
  14          
  15          sbit P1_0=P1^0;
  16          sbit P1_1=P1^1;
  17          sbit P1_2=P1^2;
  18          sbit P1_3=P1^3;
  19          sbit P1_4=P1^4;
  20          sbit P1_5=P1^5;
  21          sbit P1_6=P1^6;
  22          sbit P1_7=P1^7;
  23          
  24          sbit P2_5=P2^5;
  25          
  26          sbit P3_3=P3^3;
  27          ///////////////////////////////////////////////////////////////////
  28          void Ft();//1KHZ/16KHZ门限频率判决函数
  29          void Ft_10();//10KH门限频率判决函数
  30          void test_af();//小于1KHZ的频率测量函数
  31          void test_w();//小于10KHZ脉冲宽度测量函数
  32          void test_bf();//1KHZ~16KHZ频率测量函数
  33          void test_z();//占空比测量函数
  34          void test_at();//小于1KHZ的周期测量函数
  35          void test_bt();//1KHZ~16KHZ周期测量函数
  36          void test_cf();//16KHZ以上频率测量函数
  37          void test_ct();//16KHZ以上周期测量函数
  38          void Display();//显示驱动函数
  39          void Delay_5m();//软件延迟约5ms函数
  40          void Measure();//按键处理与对应测量函数
  41          /////////////////////////////////////////////////////////////////////
  42          void Ft()//判决1KHZ/16KHZ
  43          {
  44   1          //unsigned char p;
  45   1          TMOD=0x15;
  46   1          TL1=0xb0;
  47   1          TH1=0x3c;
  48   1          TH0=0;
  49   1       TL0=0;
  50   1      
  51   1          TR1=1;
  52   1          TR0=1;
  53   1      
  54   1          for(;TF1==0;);
C51 COMPILER V7.50   PINLVJI3                                                              11/17/2008 18:59:29 PAGE 2   

  55   1      
  56   1       TF1=0;
  57   1       for(;TF1==0;);
  58   1          TR0=0;
  59   1          TR1=0;
  60   1      
  61   1          k=TL0|(TH0<<8);
  62   1      
  63   1          if(k>131) flag_ft=3;//p=1;
  64   1          else if(k>10) flag_ft=2;//p=2;
  65   1          else flag_ft=1;//p=3;
  66   1       //return(p);
  67   1      }
  68          ////////////////////////////////////////////////////////////////////////////////
  69          void Ft_10()//判决10KHZ函数
  70          {
  71   1          TMOD=0X15;
  72   1          TL1=0XC0;
  73   1          TH1=0XE0;
  74   1       TH0=0;
  75   1       TL0=0;
  76   1          
  77   1          TR1=1;
  78   1          TR0=1;
  79   1      
  80   1          for(;TF1==0;);
  81   1      
  82   1       TF1=0;
  83   1          TR0=0;
  84   1          TR1=0;
  85   1      
  86   1          k=TL0|(TH0<<8);
  87   1          
  88   1          if(k<=5) flag_ft=4;
  89   1          else flag_ft=5;
  90   1      }
  91          ////////////////////////////////////////////////////////////////////////////////
  92          void test_af(void)//测量小于1KHZ的频率,用INT1和CT0。
  93          {
  94   1          F=0;
  95   1       test_at();
  96   1       P1=P1|0xff;//情上次单位指示
  97   1          F=1000000/T_T;
  98   1          
  99   1          if(F<10) 
 100   1       {
 101   2           F*=1000;point=1;
 102   2       }
 103   1          else if(F<100) 
 104   1       {
 105   2           F*=100;point=2;
 106   2          }
 107   1          else if(F<1000) 
 108   1       {
 109   2           F*=10;point=3;
 110   2       }
 111   1          else 
 112   1       {
 113   2           point=4;
 114   2       }
 115   1       P1_2=0;//HZ指示灯亮
 116   1      }
C51 COMPILER V7.50   PINLVJI3                                                              11/17/2008 18:59:29 PAGE 3   

 117          /////////////////////////////////////////////////////////////////////////////////////
 118          void test_w()//测量脉冲宽度
 119          {
 120   1          W=0;
 121   1          TMOD=0x90;//初始化
 122   1          TH1=0x00;
 123   1          TL1=0x00;
 124   1       ET1=1;//开中断
 125   1       EA=1;
 126   1      
 127   1       bus1=0;
 128   1      
 129   1          for(;P3_3==1;);//等待无效高电平过去
 130   1          TR1=1;
 131   1          for(;P3_3==0;);//等待高电平
 132   1          for(;P3_3==1;);//等待低电平关闭计数器
 133   1          TR1=0;
 134   1       W=bus1*65536;
 135   1          W+=TL1|(TH1<<8);
 136   1      
 137   1       if(W<100)
 138   1       {
 139   2           W*=100;point=2;P1_1=0;//us指示灯亮
 140   2          }
 141   1       else if(W<1000)
 142   1       {
 143   2           W*=10;point=3;P1_1=0;//us指示灯亮
 144   2       }
 145   1       else if(W<10000)
 146   1       {
 147   2           point=4;P1_1=0;//us指示灯亮
 148   2       }
 149   1          else if(W<100000) 
 150   1       {
 151   2           W/=10;point=2;P1_0=0;//ms指示灯亮
 152   2       }
 153   1          else if(W<1000000) 
 154   1       {
 155   2           W/=100;point=3;P1_0=0;//ms指示灯亮
 156   2          }
 157   1       else if(W<10000000)
 158   1       {
 159   2           W/=1000;point=4;P1_0=0;//ms指示灯亮
 160   2          }
 161   1          else 
 162   1       {
 163   2           point=0;
 164   2       }
 165   1      }
 166          //////////////////////////////////////////////////////////////////
 167          void test_bf(void)//测量测量1~16KHZ频率T1记数,T0定时
 168          {
 169   1          F=0;
 170   1          TMOD=0x51;
 171   1       TL1=0x00;
 172   1       TH1=0x00;
 173   1       TL0=0xbc;
 174   1       TH0=0xbd;
 175   1      
 176   1       ET0=1;
 177   1       ET1=1;
 178   1       EA=1;
C51 COMPILER V7.50   PINLVJI3                                                              11/17/2008 18:59:29 PAGE 4   

 179   1      
 180   1          TR0=1;
 181   1       TR1=1;
 182   1       couter=0;
 183   1       bus1=0;
 184   1      
 185   1          for(;couter<16;);
 186   1          TR1=0;
 187   1       TR0=0;
 188   1       F=bus1*65536;//取CT1记数值
 189   1          F+=TL1|(TH1<<8);
 190   1       F_F=F;
 191   1      
 192   1       if(F<10000)
 193   1       {
 194   2           point=1;
 195   2       }
 196   1          else if(F<100000) 
 197   1       {
 198   2           F/=10;point=2;
 199   2       }
 200   1          else 
 201   1       {
 202   2           point=0;
 203   2       }
 204   1       P1_3=0;//KHZ指示灯亮
 205   1      }
 206          ///////////////////////////////////////////
 207          void test_z()
 208          {
 209   1          Z=0;
 210   1          Ft();//flag_ft=Ft();
 211   1      
 212   1          if(flag_ft==1) test_at();
 213   1          else test_bt();
 214   1          test_w();
 215   1       P1=P1|0xff;//情上次单位指示
 216   1          Z=(unsigned int)((W/T)*100);
 217   1          if(Z<10) 
 218   1       {
 219   2            Z*=1000;point=1;
 220   2       }
 221   1          else if(Z<=100) 
 222   1       {
 223   2           Z*=100;point=2;
 224   2       }
 225   1          /*else if(Z<1000) 
 226   1       {
 227   1            Z*=10;point=3;
 228   1       }*/
 229   1       else
 230   1       {
 231   2           point=2;
 232   2        }
 233   1      }
 234          ///////////////////////////////////////////////////////////////////////////////////
 235          void test_at(void)//测量小于1KHZ的周期
 236          {
 237   1          T=0;
 238   1          TMOD=0x01;
 239   1          IT1=1;
 240   1          EX1=1;
C51 COMPILER V7.50   PINLVJI3                                                              11/17/2008 18:59:29 PAGE 5   

 241   1       ET0=1;
 242   1       EA=1;
 243   1      
 244   1      
 245   1       TL0=0x00;
 246   1          TH0=0x00;
 247   1          bus0=0;
 248   1      
 249   1          TR0=0;//新加的
 250   1      
 251   1          INT1_ready=0;
 252   1          for(;INT1_ready<2;);
 253   1       EX1=0;//关INT1中断
 254   1      
 255   1       T=bus0*65536;
 256   1          T+=TL0|(TH0<<8);
 257   1       T_T=T;//传递给频率测量函数
 258   1      
 259   1       if(T<1000)
 260   1       {
 261   2           T=T*10;point=3;P1_1=0;//us指示灯亮
 262   2       }
 263   1       else if(T<10000)
 264   1       {
 265   2           point=4;P1_1=0;//us指示灯亮
 266   2       }
 267   1          else if(T<100000) 
 268   1       {
 269   2           T/=10;point=2;P1_0=0;//ms指示灯亮
 270   2       }
 271   1          else if(T<1000000) 
 272   1       {
 273   2           T/=100;point=3;P1_0=0;//ms指示灯亮
 274   2          }
 275   1       else if(T<10000000)
 276   1       {
 277   2           T/=1000;point=4;P1_0=0;//ms指示灯亮
 278   2          }
 279   1          else 
 280   1       {
 281   2           point=0;
 282   2       }
 283   1      }
 284          //////////////////////////////////////////////////////////////////////////////////
 285          
 286          void test_bt(void)//测量测量1~16KHZ周期
 287          {
 288   1          T=0;
 289   1      
 290   1          test_bf();
 291   1       P1=P1|0xff;//情上次单位指示
 292   1          T=1000000/F_F;
 293   1      
 294   1          if(T<1000) 
 295   1       {
 296   2           T=T*10;point=3;
 297   2       }
 298   1       else if(T<10000)
 299   1       {
 300   2           point=4;
 301   2          }
 302   1       else
C51 COMPILER V7.50   PINLVJI3                                                              11/17/2008 18:59:29 PAGE 6   

 303   1       {
 304   2           point=0;

⌨️ 快捷键说明

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