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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 3 页
字号:
 433   1              {
 434   2                      T2off();      //开启计数器T2
 435   2                      if(ov_flage == 1){
 436   3                              x =  freq;
 437   3                              x += 0xffff; //
 438   3                      }else{
 439   3                              x =  freq;
 440   3                      }
 441   2                      ov_flage = 0;    //溢出标志位清0
 442   2                      freq = 0;                //频率清0
 443   2                      num = 0;
 444   2                      TH2 = 0x00;   //重新给计数器T0赋初值
 445   2                      TL2 = 0x00;
 446   2              }                     
 447   1              TH0 = (65536-50000)/256;   //重新给计数器T0赋初值
 448   1              TL0 = (65536-50000)%256;
 449   1              EA = 1;
 450   1              T0start();    //开启定时器T0
 451   1              T2start();    //开启计数器T2
 452   1       } 
 453          
 454          //----------------------------------------------------------------------
 455          //定时器中断2
 456          void INTT2init(void)
 457          {
 458   1              C_T2 = 1;         //选择信号输入
 459   1              EXEN2 = 0;
 460   1              CP_RL2 = 0;
 461   1              ET2 = 1;      //开启定时器2中断
 462   1              TH2 = 0x00;   //重新给计数器T0赋初值
 463   1              TL2 = 0x00;
 464   1              
 465   1      }
 466           //计数器溢出中断
 467          void intt2(void ) interrupt 5 using 3 
 468          {
 469   1              T2off();
 470   1              TF2 = 0;        //清除中断标志位
 471   1              EXF2 = 0;       //清除捕获标志位
 472   1      //      x++;
 473   1              ov_flage = 0x01; //置位溢出标志位
 474   1              
 475   1      //      TH2 = 0xFF;   //重新给计数器T0赋初值
 476   1      //      TL2 = 0xFB;
 477   1      //      TR2 = 1;
 478   1      }
 479          
 480          //----------------------------------------------------------------------
 481          //外部中断输入
 482          void INT0init(void)
 483          {
 484   1         EA=1;   //开放总中断
 485   1         EX0=1;  //允许使用外中断
 486   1         IT0=1;  //选择负跳变来触发外中断
 487   1      }
 488          void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 9   

 489          {
 490   1              freq++;
 491   1      }
 492          
 493          //-------------------------------------------------------------------
 494          void fre_value(unsigned int data1)
 495          {
 496   1              dis[0] = data1%10;// + 0x30;
 497   1              dis[0] += 0x30;
 498   1              dis[1] = data1%100;
 499   1              dis[1] /= 10;
 500   1              dis[1] += 0x30;
 501   1              dis[2] =  data1%1000; 
 502   1              dis[2] /= 100;
 503   1              dis[2] += 0x30;
 504   1              dis[3] =   data1/1000;
 505   1              //dis[3] = 0;
 506   1              dis[3] += 0x30; 
 507   1      }
 508          //-------------------------------------------------------------------
 509          // 函数名称: main
 510          // 函数功能: 主程序
 511          //-------------------------------------------------------------------
 512          main()
 513          {
 514   1      //    uchar l;
 515   1      //      uchar buffer;
 516   1              unsigned long  buf;
 517   1              unsigned int buf1;
 518   1      
 519   1      //      EXEN2 = 1;
 520   1      
 521   1              PT0 = 1;                                        // 外部中断设置为高优先级
 522   1      //      PX0 = 1;                                        // 外部中断设置为高优先级
 523   1      
 524   1      
 525   1          lcd_init();                //初始化LCD                
 526   1          lcd_pos(0);                //设置显示位置为第一行的第1个字符
 527   1              lcd_flash();
 528   1      
 529   1              intt0init();                       //定时器T0初始化
 530   1              INTT2init();               //定时器T2初始化
 531   1              INT0init();
 532   1          EA = 1;
 533   1              T0start();      //开启定时器T0
 534   1      
 535   1        while(1)
 536   1        {
 537   2              EA = 0;
 538   2              iicInit();                    //I2C总线初始化
 539   2          ADC_PCF8591(0x04);
 540   2              if(SystemError == 1)      //有错误,重新来
 541   2              {
 542   3                      iicInit();                                //I2C总线初始化
 543   3                  ADC_PCF8591(0x04);
 544   3               }
 545   2               EA = 1;   
 546   2               //     lcd_flash();
 547   2              // for(l=0;l<4;l++)     
 548   2              // {
 549   2      
 550   2              delay(200);                                //刷新速率 延迟
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 10  

 551   2              show_value(receivebuf[0]);
 552   2              if(PIN == 0){
 553   3                      buf1 = (dis[2]-0x30)*100;
 554   3                      buf1 += (dis[1]-0x30)*10;
 555   3                      buf1 += (dis[0]-0x30);
 556   3                      buf1 *= 2;
 557   3                      if(buf1 > 999)
 558   3                      {
 559   4                              buf1 = 999;
 560   4                      }
 561   3                      fre_value(buf1);            //
 562   3              }       
 563   2                  lcd_pos(0x08);             
 564   2              lcd_wdat(dis[2]);        //整数位显示
 565   2              lcd_pos(0x0A);             
 566   2              lcd_wdat(dis[1]);        //
 567   2              lcd_pos(0x0b);             
 568   2              lcd_wdat(dis[0]);        //
 569   2      
 570   2                      if((x > 999)&&(x<9999))
 571   2                      {
 572   3                      //      buf = x*2;
 573   3                              buf = x;
 574   3                              buf /=10;
 575   3                              
 576   3                              fre_value(buf);            //    
 577   3                              lcd_pos(0x4a);             
 578   3                      lcd_wdat(dis[2]);        //整数位显示
 579   3      
 580   3                      lcd_pos(0x4b);              
 581   3                      lcd_wdat('.');        //第一位小数显示 
 582   3      
 583   3                      lcd_pos(0x4c);             
 584   3                      lcd_wdat(dis[1]);        //第二位小数显示
 585   3      
 586   3                      lcd_pos(0x4d);             
 587   3                      lcd_wdat(dis[0]);        //第二位小数显示
 588   3      
 589   3                              lcd_pos(0x4e);             
 590   3                      lcd_wdat('K');        //第二位小数显示
 591   3      
 592   3                              lcd_pos(0x4f);             
 593   3                      lcd_wdat('H');        //第二位小数显示
 594   3      
 595   3                      }else if(x>9999)
 596   2                      {
 597   3                              if(x >100000)
 598   3                              {
 599   4                                      x = 0;
 600   4                              }          
 601   3                      //      buf = x*2;
 602   3                              buf = x;
 603   3                              buf /= 100;
 604   3                              fre_value(buf);            //    
 605   3                              lcd_pos(0x4a);             
 606   3                      lcd_wdat(dis[2]);        //整数位显示
 607   3                      lcd_pos(0x4b);             
 608   3                      lcd_wdat(dis[1]);        //第二位小数显示
 609   3      
 610   3                              lcd_pos(0x4c);              
 611   3                      lcd_wdat('.');        //第一位小数显示 
 612   3      
C51 COMPILER V8.02   PCF8591                                                               04/08/2010 23:02:02 PAGE 11  

 613   3                      lcd_pos(0x4d);             
 614   3                      lcd_wdat(dis[0]);        //第二位小数显示
 615   3      
 616   3                              lcd_pos(0x4e);             
 617   3                      lcd_wdat('K');        //第二位小数显示
 618   3      
 619   3                              lcd_pos(0x4f);             
 620   3                      lcd_wdat('H');        //第二位小数显示
 621   3                      }
 622   2                      else{
 623   3                              fre_value(x);            //      
 624   3                              lcd_pos(0x4a);             
 625   3                      lcd_wdat(dis[2]);        //整数位显示
 626   3                      lcd_pos(0x4B);             
 627   3                      lcd_wdat(dis[1]);        //第二位小数显示
 628   3                      lcd_pos(0x4C);             
 629   3                      lcd_wdat(dis[0]);        //第二位小数显示
 630   3                              lcd_pos(0x4D);             
 631   3                      lcd_wdat('H');        //第二位小数显示
 632   3                              lcd_pos(0x4E);             
 633   3                      lcd_wdat('Z');        //第二位小数显示
 634   3                              lcd_pos(0x4F);             
 635   3                      lcd_wdat(' ');        //第二位小数显示
 636   3                      }
 637   2      
 638   2         }
 639   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1517    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21       5
   IDATA SIZE       =      4       4
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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