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

📄 progm.lst

📁 这是测量接触电阻的程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 209   1              df(flag,66,UiBuffer[2],0);
 210   1              df(flag,74,21,0);
 211   1              df(flag,78,UiBuffer[3],0);
 212   1              df(flag,86,10,0);
 213   1      }
 214          
 215          void ds_erro1()//显示接线错误,无电流
 216          {
 217   1              lcd_init();
 218   1              dh(5,4,32,0);
 219   1              dh(5,20,33,0);
 220   1              dh(5,36,34,0);
 221   1              dh(5,52,35,0);
 222   1              dh(5,68,37,0);
 223   1              dh(5,76,36,0);
 224   1              dh(5,92,7,0);
 225   1              dh(5,108,20,0);
 226   1      }
 227          
 228          
 229          void cedianliu()//测试电路回路,功能:用于故障判断
 230          {
 231   1              uint dd,ff;
 232   1              float uiDianliu;
 233   1              dd=  Read2543(0);
 234   1      /*A/D读出电流值除以放大倍数还原原信号,再除以标准电阻得出电流,这里
 235   1      将A/D数单位0.00061035,放大10倍,是为了去掉小数点,精确到小数点后一位*/
 236   1              ff=Read2543(0);
 237   1              ff=Read2543(0);
 238   1              uiDianliu       =       (float)(ff* 0.0122/(VB*RB)*DIANLIUXIAO);
 239   1        //uiDianliu   =       (uint)( Read2543(0)* 0.0061035/(VB*RB));
 240   1        if((uiDianliu<850)|(uiDianliu>2500))//电流小于85A,或大于250A,提示接线错误
 241   1        {
C51 COMPILER V7.06   PROGM                                                                 03/05/2009 08:55:15 PAGE 5   

 242   2              ds_erro1();//若结果异常,显示故障
 243   2              SELC = 1;
 244   2                      while(1);
 245   2        }
 246   1        else
 247   1        {
 248   2              div_i_shuzi(uiDianliu);//分离转化为BCD数
 249   2          showdianliu(4);  //显示电流值,行x=4
 250   2        }
 251   1      }
 252          
 253          void ds_erro2()//仪器故障
 254          {
 255   1              lcd_init();
 256   1              dh(2,16,11,0);
 257   1              dh(2,32,38,0);
 258   1              dh(2,48,39,0);
 259   1              dh(2,64,40,0);
 260   1              dh(2,80,41,0);
 261   1              dh(2,96,37,0);
 262   1      
 263   1              dh(5,4,25,0);
 264   1              dh(5,20,42,0);
 265   1              dh(5,36,43,0);
 266   1              dh(5,52,44,0);
 267   1              dh(5,68,45,0);
 268   1              dh(5,84,46,0);
 269   1              dh(5,100,47,0);
 270   1              df(5,116,22,0);
 271   1      }
 272          
 273          void liangcheng()//选择电压回路的量程
 274          {
 275   1              uint dushu;
 276   1              AV1=AV2=0;//放大倍数为1,最小倍数
 277   1              dushu=Read2543(1);
 278   1              dushu=Read2543(1);
 279   1              if(dushu>3768)//大于2.3V,满量程2.5V
 280   1                      {
 281   2                              ds_erro2();//仪器故障
 282   2                              SELC=1;
 283   2                              while(1);
 284   2                      }
 285   1              else
 286   1                      {
 287   2                              AV2=1;//放大10倍
 288   2                              delay1ms(200);
 289   2                              dushu=Read2543(1);
 290   2                              dushu=Read2543(1);
 291   2                              if(dushu>3276)//大于4V,满量程5V
 292   2                                      {
 293   3                                              AV2=0;
 294   3                                              VX=1.0;
 295   3                                              xiao=DIANZUXIAO1;//确定该档位的修正因子
 296   3                                              return;
 297   3                                      }
 298   2                              else
 299   2                                      {
 300   3                                              AV1=1;//放大100倍
 301   3                                              delay1ms(200);
 302   3                                              dushu=Read2543(1);
 303   3                                              dushu=Read2543(1);
C51 COMPILER V7.06   PROGM                                                                 03/05/2009 08:55:15 PAGE 6   

 304   3                                              if(dushu>3276)//大于4V,满量程5V
 305   3                                                      {
 306   4                                                              AV1=0;
 307   4                                                              VX=10.0;
 308   4                                                              xiao=DIANZUXIAO2;//确定该档位的修正因子
 309   4                                                              return;
 310   4                                                      }
 311   3                                              else
 312   3                                                      {
 313   4                                                              VX=100.0;
 314   4                                                              xiao=DIANZUXIAO3;//确定该档位的修正因子
 315   4                                                              return;
 316   4                                                      }
 317   3                                      }
 318   2                      }
 319   1      
 320   1      }
 321          
 322          /*将浮点数分离成整数和小数,并将小数扩大一千倍*/
 323          void div_zhengshu_xiaoshu(float fdshu)
 324          {
 325   1              float fx,fz,ftm;
 326   1              ftm = fdshu;
 327   1              fx=modf(ftm, &fz);
 328   1              iZHENGSHU=(long)fz;
 329   1              fx=fx*1000;
 330   1              iXIAOSHU=(long)fx;
 331   1      }
 332          
 333          void showdianzu(float Rtemp)//浮点分离电阻值
 334          {
 335   1              float Result;
 336   1              uint shu_zhen,shu_xiao;
 337   1              Result=Rtemp;
 338   1              /*将浮点数分离成整数和小数,并将小数扩大一千倍*/
 339   1              div_zhengshu_xiaoshu(Result);
 340   1              shu_zhen=iZHENGSHU;//整数
 341   1              shu_xiao=iXIAOSHU;//小数点后三位被放大1000,成为整数
 342   1              if(shu_zhen<10)//小于10,小数点后三位数
 343   1                      {
 344   2                              dian_bit=3;
 345   2                              UiBuffer[4]     =       shu_zhen;
 346   2                              UiBuffer[5] = mod_100(&shu_xiao);
 347   2                              UiBuffer[6] = mod_10(&shu_xiao);
 348   2                              UiBuffer[7] = shu_xiao;
 349   2                      }
 350   1              else if(shu_zhen<100)//小于100,小数点后2位数
 351   1                                      {
 352   2                                              dian_bit=2;
 353   2                                              UiBuffer[4]     =       mod_10(&shu_zhen);
 354   2                                              UiBuffer[5] = shu_zhen;
 355   2                                              UiBuffer[6] = mod_100(&shu_xiao);
 356   2                                              UiBuffer[7] = mod_10(&shu_xiao);
 357   2                                      }
 358   1                               else       //大于100,小数点后1位数
 359   1                                      {
 360   2                                              if(shu_zhen>999)//大于1000,无小数点
 361   2                                                      {
 362   3                                                              dian_bit=0;
 363   3                                                              UiBuffer[4]     =       mod_1000(&shu_zhen);
 364   3                                                              UiBuffer[5] = mod_100(&shu_zhen);
 365   3                                                              UiBuffer[6] = mod_10(&shu_zhen);
C51 COMPILER V7.06   PROGM                                                                 03/05/2009 08:55:15 PAGE 7   

 366   3                                                              UiBuffer[7] = shu_zhen;
 367   3                                                      }
 368   2                                              else
 369   2                                                      {
 370   3                                                              dian_bit=1;
 371   3                                                              UiBuffer[4]     =       mod_100(&shu_zhen);
 372   3                                                              UiBuffer[5] = mod_10(&shu_zhen);
 373   3                                                              UiBuffer[6] = shu_zhen;
 374   3                                                              UiBuffer[7] = mod_100(&shu_xiao);
 375   3                                                      }
 376   2                                      }
 377   1              xsdianzu(6);//显示行x=6
 378   1      }
 379          
 380          //测试电阻
 381          void ceshidianzu()
 382          {
 383   1              uchar ucmp=30;
 384   1              uint ucItmp;
 385   1              float fRx=0.0 , K=0.0,fv=0.0, fi=0.0,rtmp=0.0,ucceshi=0.0 ;
 386   1              K = VB*RB/VX ;
 387   1              ucceshi=30.0;
 388   1              while(ucmp--)
 389   1              {
 390   2                ucItmp=Read2543(1);
 391   2                      ucItmp=Read2543(1);
 392   2                      fv= (float)ucItmp;
 393   2                      ucItmp=Read2543(0);
 394   2                      ucItmp=Read2543(0);
 395   2                      fi= (float)ucItmp ;
 396   2                      rtmp=fv/fi ;       //电压回路电流回路比值
 397   2                      fRx = fRx + rtmp;      //送数到结果缓冲区,共计30次的累加和
 398   2              }
 399   1      //结果=比值的平均值 * K * 衰减倍数 * 校正因子
 400   1              fRx = fRx/ucceshi*K*SHUAIJIAN*DIANLIUXIAO*1000000.0*xiao ;
 401   1              showdianzu(fRx);//浮点分离测试数据
 402   1      }
 403          
 404          //测试结果
 405          void showceshijieguo()
 406          {
 407   1              lcd_init();
 408   1              dh(0,0,9,0);
 409   1              dh(0,16,10,0);
 410   1              dh(0,32,23,0);
 411   1              dh(0,48,24,0);
 412   1              df(0,64,17,0);
 413   1              showdianliu(3);
 414   1              xsdianzu(5);
 415   1      }
 416          
 417          uchar idata ch1[8]={0xb2,0xe2,0xca,0xd4,0xbd,0xe1,0xb9,0xfb};//测试结果
 418          //uchar idata ch2[5]={0xb5,0xe7,0xd7,0xe8,0x3a};//电阻
 419          //uchar idata ch3[5]={0xb5,0xe7,0xc1,0xf7,0x3a};//电流
 420          uchar idata ch4[5]={0xcf,0xb5,0xcd,0xb3,0x3a};//系统:
 421          uchar  idata daRTmpBuf[7] = {0,0,0,0,0,0xa9,0xab};//前5个字节为电阻4位数+1个小数点,后2个字节为mΩ
 422          uchar  idata daiTmpBuf[6] = {0,0,0,0x2e,0,0x41};//前5个字节为电流4位数(含小数点后一位),后1个字节为A
 423          void daima() // 转换打印代码
 424          {
 425   1              uchar i;

⌨️ 快捷键说明

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