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

📄 led.lst

📁 本人写的STC单片机EEPROM功能程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 288                                  ISP_TRIG=0x00;
 289                                  return Error;
 290                          }
 291                          in_addr++;                                      // 指向下一个字节
 292                  }
 293                  ISP_ADDRL=0xff;
 294                  ISP_ADDRH=0xff;
 295                  ISP_CONTR=0x00;
 296                  ISP_CMD=0x00;
 297                  ISP_TRIG=0x00;
 298                  return  Ok;
 299          }
 300          
 301          /**************************************************************************
 302          *    函数原型: void DogReset(void)
 303          *    功    能: 重新设置看门狗
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 6   

 304          **************************************************************************/
 305          void DogReset(void) reentrant{
 306   1      
 307   1      #if STC89C58
 308   1      #if STCSPD_1
                      WDT_CONTR=0x35;
              #elif STCSPD_2
 311   1              WDT_CONTR=0x36;
 312   1      #endif
 313   1      #elif W77E58
                      TA=0xaa;
                      TA=0x55;
                      RWT=1;
                      _nop_();
                      _nop_();
              #endif
 320   1      }
 321          
 322          /**************************************************************************
 323          *    函数原型: void Dog_Init(void)
 324          *    功    能: 看门狗设置
 325          **************************************************************************/
 326          void Dog_Init(void){
 327   1      
 328   1      #if STC89C58
 329   1      #if STCSPD_1
                      WDT_CONTR=0x34;                 // 2秒
              #elif STCSPD_2
 332   1              WDT_CONTR=0x35;                 // 2秒
 333   1      #endif
 334   1      #elif W77E58
                      CKCON&=0x3f;                            // 3秒
                      CKCON|=0xc0;
              /*      _nop_();
                      _nop_();
                      _nop_();
                      TA=0xaa;
                      TA=0x55;
                      WDCON=0;*/
                      _nop_();
                      _nop_();
                      _nop_();
                      _nop_();
                      _nop_();
                      _nop_();
                      _nop_();
                      TA=0xaa;
                      TA=0x55;
                      WDCON=2;
              #endif
 354   1      }
 355          
 356          /**************************************************************************
 357          *    函数原型: void delay_20us(uint Count)
 358          *    功    能: 延时Count个20us
 359          **************************************************************************/
 360          /*
 361          void delay_20us(register uint Count){
 362          
 363                  register uchar T;
 364          
 365                  for(;Count>0;Count--){
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 7   

 366                          for(T=0;T<5;T++){
 367          #if STC89C58
 368          #if STCSPD_1
 369                                  // STC89C58,22.1184MHz晶振,12分频,此时延时准确
 370                                  ;
 371          #elif STCSPD_2
 372                                  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 373                                  _nop_(); _nop_(); _nop_();
 374          #endif
 375          #elif W77E58
 376                                  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 377                                  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 378                                  _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 379                                  _nop_();
 380          #endif
 381                                  }
 382                          DogReset();
 383                          }
 384          }
 385          
 386          /**************************************************************************
 387          *    函数原型: void delay_ms(uint Count)
 388          *    功    能: 延时Count个ms
 389          **************************************************************************/
 390          void delay_ms(register uint Count){
 391   1      
 392   1              register uchar T;
 393   1      
 394   1              for(;Count>0;Count--){
 395   2                      for(T=0;T<250;T++){
 396   3      #if STC89C58
 397   3      #if STCSPD_1
                                      // STC89C58,22.1184MHz晶振,12分频,此时延时准确
                                      _nop_(); _nop_(); _nop_(); _nop_();
              #elif STCSPD_2
 401   3                              _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 402   3                              _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 403   3                              _nop_(); _nop_();
 404   3      #endif
 405   3      #elif W77E58
                                      _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
                                      _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
                                      _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
                                      _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
              #endif
 411   3                              }
 412   2                      DogReset();
 413   2                      }
 414   1      }
 415          
 416          /***********************************************************************************
 417          函数名:void timeRead(void)
 418          功能:保存参数
 419          返回值:
 420          ***********************************************************************************/
 421          void timeRead(void){
 422   1              vSecond=eeprom_read(vSecondAddr);
 423   1              vMinute=eeprom_read(vMinuteAddr);
 424   1              vHour=eeprom_read(vHourAddr);
 425   1      }
 426          
 427          /***********************************************************************************
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 8   

 428          函数名:void timeSave(void)
 429          功能:保存参数
 430          返回值:
 431          ***********************************************************************************/
 432          void timeSave(void){
 433   1              eeprom_eares(UseAddr);
 434   1              eeprom_write(vSecondAddr, vSecond);
 435   1              eeprom_write(vMinuteAddr, vMinute);
 436   1              eeprom_write(vHourAddr, vHour);
 437   1      }
 438          
 439          /***********************************************************************************
 440          函数名:uchar keyscan(void)
 441          功能:按键扫描
 442          返回值:
 443          ***********************************************************************************/
 444          uchar keyscan(void){
 445   1      
 446   1              return(~P2&0x38);
 447   1      
 448   1      }
 449          
 450          /**************************************************************************
 451          *    函数原型: uchar ButtonAction(void);
 452          *    功    能: 按钮动作类型
 453                   返 回 值: 当按钮为空,  返回值为vBtnType_Null=0
 454                                     当按钮按下时,返回值为vBtnType_Push=1
 455                             当按钮弹起时,按回值为vBtnType_Pop =2
 456                             当按钮长按时,返回值为vBtnType_Keep=3
 457          *************************************************************************/
 458          uchar keyAction(void){
 459   1      
 460   1              uchar cButton;
 461   1      
 462   1              cButton=keyscan();
 463   1              if(cButton==cBtnVal){
 464   2                      // 无按键
 465   2                      if(cButton==vBtnVal_Null){
 466   3                              return(vBtnAct_Null);
 467   3                      }
 468   2                      // 按键保持
 469   2                      else{
 470   3                              return(vBtnAct_Keep);
 471   3                      }
 472   2              }
 473   1              else if(cButton==vBtnVal_All){
 474   2                      return(vBtnAct_All);
 475   2              }
 476   1      /*      else if(cButton==vBtnVal_Debug){
 477   1                      return(vBtnAct_Debug);
 478   1                      }*/
 479   1              else{
 480   2                      delay_ms(10);
 481   2                      if(keyscan()==cButton){
 482   3                              // 按键弹起
 483   3                              if(cButton==vBtnVal_Null){
 484   4                                      cBtnValPre=cBtnVal;
 485   4                                      cBtnVal=cButton;
 486   4                                      return(vBtnAct_Pop);
 487   4                              }
 488   3                              // 按键按下
 489   3                              else{
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 9   

 490   4                                      cBtnValPre=cBtnVal;
 491   4                                      cBtnVal=cButton;
 492   4                                      return(vBtnAct_Push);
 493   4                              }
 494   3                      }
 495   2              }
 496   1      }
 497          
 498          /**************************************************************************
 499          *    函数原型: bit ButtonKeep(uint iTime);
 500          *    功    能: 检测按钮按下是否保持了指定的时间,单位为毫秒
 501                   返 回 值: 在指定时间内,按钮弹起,则返回0
 502                             否则返回1
 503          *************************************************************************/
 504          /*
 505          bit keyKeep(uint iTime){
 506          
 507                  uint iNum;
 508          
 509                  for(iNum=0;iNum<iTime/50;iNum++){
 510                          delay_ms(50);
 511                          if(keyAction()==vBtnAct_Pop){
 512                                  return(0);
 513                                  }
 514                          }
 515                  return(1);
 516          }
 517          /***********************************************************************************
 518          函数名:void keyhandle(void)
 519          功能:按键处理
 520          返回值:
 521          ***********************************************************************************/
 522          void keyhandle(void){
 523   1              uchar cKeyType;
 524   1      
 525   1              // 按键单按时取值
 526   1              cKeyType=keyAction();
 527   1              if(cKeyType==vKeyAct_Push){
 528   2                      cDY_KeyKeep=0xff;
 529   2                      switch(cBtnVal){
 530   3                              case vBtnVal_ST:
 531   3                                      timeRead();
 532   3                                      vSecond=0;
 533   3                                      eeprom_write(vSecondAddr, 0);
 534   3      /*                              eeprom_eares(UseAddr);
 535   3                                      eeprom_write(UseAddr, 0x01);
 536   3                                      b_Run=!b_Run;
 537   3                                      cDY_KeyKeep=50;*/
 538   3                                      break;
 539   3                              case vBtnVal_Up:
 540   3                                      timeRead();
 541   3                                      vMinute=0;
 542   3                                      eeprom_write(vMinuteAddr, 0);
 543   3      /*                              eeprom_eares(UseAddr);
 544   3                                      eeprom_write(UseAddr, 0x02);
 545   3                                      cDY_KeyKeep=50;*/
 546   3                                      break;
 547   3                              case vBtnVal_Down:
 548   3                                      timeRead();
 549   3                                      vHour=0;
 550   3                                      eeprom_write(vHourAddr, 0);
 551   3      /*                              eeprom_eares(UseAddr);
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 10  

 552   3                                      eeprom_write(UseAddr, 0x03);
 553   3                                      cDY_KeyKeep=50;*/
 554   3                                      break;
 555   3                              default:
 556   3                                      break;
 557   3                      }
 558   2              }
 559   1      }
 560          
 561          /***********************************************************************************
 562          函数名:void DisplayNum(uchar cNumber)
 563          功能:显示子程序
 564          返回值:
 565          ***********************************************************************************/
 566          /*
 567          void DisplayNum(uchar cNumber){
 568                  Led_Data[cNumber];
 569          }
 570          
 571          /***********************************************************************************
 572          函数名:uchar getcode(uchar i)
 573          功能:根据共阴极字型编码表获取0~9,A~B字型代码
 574          返回值:
 575          ***********************************************************************************/
 576          /*
 577          uchar getcode(uchar i){
 578                  uchar cTemp;
 579                  switch (i){
 580                          case 0:  cTemp=0x05; break;   //
 581                          case 1:  cTemp=0xDD; break;   //

⌨️ 快捷键说明

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