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

📄 display.lst

📁 上学时做的一个51单片机按键显示程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 259   4                              /* left */
 260   4                                      coled[i]=L_dot_ledtable[cobcd.ledbuf[i]];
 261   4                              }
 262   3                      }
 263   2                      return;
 264   2              }
 265   1      
 266   1      }
 267          /**
 268          *when key pressing,it will invoke this function to add a
 269          *key value to display buffer.
 270          */
 271          void addKyeValHexBuf(UINT8 keyVal )
 272          {
 273   1              UINT8 len = 0;
 274   1              sreensaveclk = 0;
 275   1              SparkLights( LIGHT_PAY );
 276   1              len = LedsShowStr.length ;      
 277   1              if(0x0==len){
 278   2                      if( 0x0 == keyVal ){
 279   3                              /*press 0 first*/
 280   3                              
 281   3                              LedsShowStr.length = 0x1;
 282   3                              LedsShowStr.isdot = 0x0;
 283   3                              LedsShowStr.dotposition = LED_MAX_NUM-1; 
 284   3                              /*in order to show single 0 */          
 285   3                              Enter_Critical_OS();
 286   3                              event_word |= EVENT_LED_DOWN_UPDATE;
 287   3                              Exit_Critical_OS();
 288   3                              return;
 289   3                      }
 290   2                      if(0x0a == keyVal ){
 291   3                              /* press . first */
 292   3                              LedsShowStr.length = 0x1;
 293   3                              LedsShowStr.isdot = 0x1;
 294   3                              LedsShowStr.dotposition = LED_MAX_NUM-1;
 295   3                              Enter_Critical_OS();
 296   3                              event_word |= EVENT_LED_DOWN_UPDATE;
 297   3                              Exit_Critical_OS();
 298   3                              return;
 299   3                              
 300   3                      }
 301   2              
 302   2              }
 303   1              if(     LedsShowStr.length == 0x1 && LedsShowStr.isdot==0 && 0==LedsShowStr.ledbuf[7] ){
C51 COMPILER V7.07   DISPLAY                                                               11/25/2005 20:22:00 PAGE 6   

 304   2                      if(0xa!=keyVal)
 305   2                              return;         
 306   2              }
 307   1          /* cant be 0.0xxxx */
 308   1              if(     LedsShowStr.length == 0x1 && LedsShowStr.isdot==1 && 0==LedsShowStr.ledbuf[7] ){
 309   2                      if(0x0==keyVal)
 310   2                              return;         
 311   2              }
 312   1              if((LED_MAX_NUM-1 - LedsShowStr.dotposition) >= 2) return;
 313   1              if( len > 3 ) return; /* void overflood buf */
 314   1              if( keyVal>=0 && keyVal<= 0x9 ){/* val is correct */
 315   2                      MoveOneByte(&LedsShowStr.ledbuf[0],0);/* left move */
 316   2                      LedsShowStr.ledbuf[LED_MAX_NUM-1]= keyVal;
 317   2                      LedsShowStr.length ++;
 318   2                      
 319   2                      if(0x1 == LedsShowStr.isdot ){
 320   3                              LedsShowStr.dotposition--;//move dot ahead one byte                     
 321   3                      }
 322   2              
 323   2          } 
 324   1              else if( keyVal == 0xa && 0x0==LedsShowStr.isdot  ){ /* dot coming */
 325   2                      LedsShowStr.isdot = 1;
 326   2                      LedsShowStr.dotposition = LED_MAX_NUM-1  ;              
 327   2              }
 328   1          /* laungh event */
 329   1              Enter_Critical_OS();
 330   1              event_word |= EVENT_LED_DOWN_UPDATE;
 331   1              Exit_Critical_OS();
 332   1              /*light L1*/
 333   1              
 334   1      
 335   1      }
 336          
 337          void UpateDownLeds()
 338          {
 339   1              
 340   1              UINT8 idata ledupdatetbuf[LED_MAX_NUM];
 341   1              TranslateLedCode(LedsShowStr , ledupdatetbuf , 1);/* with mode 1 */
 342   1              LedMultiByteDisplay(ledupdatetbuf , POSITION_DOWN );
 343   1      
 344   1              
 345   1      }
 346          void UpateLeds(bit ud)
 347          {       
 348   1              UINT8 idata ledupdatetbuf[LED_MAX_NUM];
 349   1              TranslateLedCode(LedsShowStr , ledupdatetbuf , 1);/* with mode 1 */
 350   1              LedMultiByteDisplay(ledupdatetbuf , ud );       
 351   1      }
 352          /*
 353          direction : 0-left / 1- right 
 354          */
 355          void MoveOneByte(UINT8 * buf ,UINT8 direction )
 356          {
 357   1              UINT8   i;
 358   1              if( 0x0 == direction ){//if_1
 359   2                for(i = 0;i< LED_MAX_NUM - 1 ;i++)
 360   2                {
 361   3                              buf[i]=buf[i+1];                        
 362   3                }
 363   2                buf[i] = 0x0;
 364   2          }//if _1
 365   1              else if(0x1 == direction ){//if_2
C51 COMPILER V7.07   DISPLAY                                                               11/25/2005 20:22:00 PAGE 7   

 366   2                                      for(i = LED_MAX_NUM-1 ;i>0;i--)
 367   2                                      {
 368   3                                              buf[i]=buf[i-1];
 369   3                                      }
 370   2                                      buf[i]=0x0;
 371   2               }//if_2
 372   1              
 373   1              
 374   1      }
 375          void clearallleds( void )
 376          {
 377   1              /*reset ledshowstr */
 378   1              RESETLEDSHOWSTR();
 379   1              SparkLights ( 0x0 );
 380   1              Enter_Critical_OS();
 381   1              event_word |= EVENT_LED_DOWN_UPDATE;
 382   1              Exit_Critical_OS();
 383   1      }
 384          
 385          void backspace(void )
 386          {
 387   1              
 388   1              if( LedsShowStr.length > 0 )
 389   1              {               
 390   2                      if( 0x1 == LedsShowStr.isdot){
 391   3                              LedsShowStr.dotposition ++;
 392   3                              if( LedsShowStr.dotposition >LED_MAX_NUM-1 )
 393   3                                 LedsShowStr.isdot = 0;
 394   3                      }
 395   2                  
 396   2                      MoveOneByte(&LedsShowStr.ledbuf[0],1);/// right  move 
 397   2                      LedsShowStr.length --;
 398   2                      if(0==LedsShowStr.length){
 399   3                              RESETLEDSHOWSTR();
 400   3                      }
 401   2                      Enter_Critical_OS();
 402   2                      event_word |= EVENT_LED_DOWN_UPDATE;
 403   2                      Exit_Critical_OS();
 404   2                      
 405   2              }
 406   1      }
 407          /*  + --- - - - - - - - - - - - - - - - - - - - - - - - - - +
 408                  |               |       length  |       cmd      |       data   |       crc     |
 409                  |       8bits   |        8bits  |  8bits |   32bits |  8bits    |
 410          */
 411          void enter( void )
 412          {       
 413   1              i2cbuf[0] = 0x6; /* length */
 414   1              i2cbuf[1] = 0x0; 
 415   1              i2cbuf[2] = 0x0; 
 416   1              i2cbuf[4] = LedsShowStr.ledbuf[LedsShowStr.dotposition]|(LedsShowStr.ledbuf[LedsShowStr.dotposition-1]<<4
             -);
 417   1              i2cbuf[3] = LedsShowStr.ledbuf[LedsShowStr.dotposition-2]|(LedsShowStr.ledbuf[LedsShowStr.dotposition-3]<
             -<4);
 418   1              if(0x7==LedsShowStr.dotposition)
 419   1                        i2cbuf[5] = 0x0;
 420   1              else if(0x6==LedsShowStr.dotposition)
 421   1                        i2cbuf[5] = LedsShowStr.ledbuf[LedsShowStr.dotposition+1]<<4;
 422   1              else 
 423   1                        i2cbuf[5] = (LedsShowStr.ledbuf[LedsShowStr.dotposition+1]<<4)|LedsShowStr.ledbuf[LedsShowStr.dotposit
             -ion+2];
 424   1              i2cbuf[6]=i2cbuf[0]+i2cbuf[1]+i2cbuf[2]+i2cbuf[3]+i2cbuf[4]+i2cbuf[5];
C51 COMPILER V7.07   DISPLAY                                                               11/25/2005 20:22:00 PAGE 8   

 425   1              i2cbuf[6]=~i2cbuf[6];
 426   1              /*lunch event */
 427   1              Enter_Critical_OS();
 428   1              event_word |= EVENT_I2C_DATA_SEND;
 429   1              Exit_Critical_OS();     
 430   1              RESETLEDSHOWSTR();
 431   1      }
 432          
 433          
 434          /*
 435          
 436          */
 437          void SparkLights(UINT8 state )
 438          {
 439   1              if( state & 0x01 ) L5= 0;  
 440   1               else L5= 1;
 441   1              if( state & 0x02 ) L4= 0;  
 442   1               else L4 =1;
 443   1              if( state & 0x04 ) L3= 0;
 444   1               else L3 =1;
 445   1              if( state & 0x08 ) L2= 0;
 446   1               else L2 =1;
 447   1              if( state & 0x10 ) L1= 0;
 448   1               else L1 =1;
 449   1              if( state & 0x20 ) L0= 0;
 450   1               else L0 =1;    
 451   1      }
 452          void error(UINT8 e )
 453          {
 454   1              UINT8 idata ledupdatetbuf[LED_MAX_NUM];
 455   1              switch (e)
 456   1              {
 457   2                      case 0x0c:  LedsShowStr.length = 3;
 458   2                                              LedsShowStr.isdot  = 0;
 459   2                                              LedsShowStr.dotposition = 7;
 460   2                                              LedsShowStr.ledbuf[5]= 12;
 461   2                                              LedsShowStr.ledbuf[6]= 0x0;
 462   2                                              LedsShowStr.ledbuf[7]= 11;      
 463   2                                              TranslateLedCode(LedsShowStr , ledupdatetbuf , 1);/* with mode 1 */
 464   2                                              LedMultiByteDisplay(ledupdatetbuf , POSITION_DOWN );
 465   2                                              RESETLEDSHOWSTR();
 466   2      
 467   2                      break; 
 468   2          }
 469   1      }
 470          /*
 471          *When no events happen,system will start screen save
 472          */
 473          void CheckSreenSave(void)
 474          {       
 475   1              if( sreensaveclk >=10000 ){             
 476   2                      event_word |= EVENT_SCREEN_SAVE;
 477   2                      scrflag = 1;/* start screen save */
 478   2              }
 479   1      }
 480          /*
 481          *this function will show stuff in scrsavebuf buffer.
 482          */
 483          void SaveSreen()
 484          {
 485   1              UINT16 i;
 486   1              UINT8  ledshowcode[LED_MAX_NUM];
C51 COMPILER V7.07   DISPLAY                                                               11/25/2005 20:22:00 PAGE 9   

 487   1              sreensaveclk = 0;
 488   1              LedsShowStr.length = 8;
 489   1              LedsShowStr.isdot = 0;  
 490   1              LedsShowStr.dotposition = 7;
 491   1              scrindex = 0;
 492   1              SparkLights ( 0x0 );
 493   1              while( scrflag )
 494   1              {
 495   2                      ClearDownLeds();
 496   2                      ClearUpLeds();
 497   2                      memcpy(&LedsShowStr.ledbuf[0],scrsavebuf+scrindex ,LED_MAX_NUM );
 498   2                      scrindex=( scrindex + 1 ) % 13 ;
 499   2                      TranslateLedCode(LedsShowStr , ledshowcode , 1);/* with mode 1 */       
 500   2                      LedMultiByteDisplay( ledshowcode , POSITION_DOWN );
 501   2      //      wait(100);
 502   2                      for(i=0;i<65530;i++);
 503   2              }
 504   1              clearallleds();
 505   1              
 506   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1412    ----
   CONSTANT SIZE    =    105    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     33      42
   IDATA SIZE       =   ----      24
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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