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

📄 led.lst

📁 51的万年历程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 219   1              RTC_SCL=1;
 220   1              RTC_RST=0;
 221   1              return dat;
 222   1      }
 223          
 224          
 225          typedef struct __SYSTEMTIME__
 226          {
 227                  uint8  Second;
 228                  uint8  Mine;
 229                  uint8  Hour;
 230                  uint8  Day;
 231                  uint8  Month;
 232                  uint8  Week;
 233                  uint8  Year;
 234          }SYSTEMTIME;
 235          static SYSTEMTIME TIMETYPE;
 236          
 237          void CurrentTime(SYSTEMTIME *dat)
 238          {
 239   1              uint8 TimeValue;
 240   1              TimeValue=RTC_Read_Byte(READ_SECOND);
 241   1              dat->Second=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
 242   1              TimeValue=RTC_Read_Byte(READ_MINE);
 243   1              dat->Mine=  (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
 244   1              TimeValue=RTC_Read_Byte(READ_HOUR);
 245   1              dat->Hour=  (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
 246   1              TimeValue=RTC_Read_Byte(READ_DAY);
 247   1              dat->Day=       (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
 248   1              TimeValue=RTC_Read_Byte(READ_MONTH);
 249   1              dat->Month= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
 250   1              TimeValue=RTC_Read_Byte(READ_WEEK);
 251   1              dat->Week=      (TimeValue&0x0f);
 252   1              TimeValue=RTC_Read_Byte(READ_YEAR);
 253   1              dat->Year=      (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);
 254   1      }
 255          bit LCD_BUSY()
 256          {
 257   1              bit result;
 258   1              LCD_RS=0;
 259   1              LCD_RW=1;
 260   1              LCD_EN=1;
 261   1              _nop_();
 262   1              _nop_();
 263   1              result=(bit)(LCD_PORT&0x80);
 264   1              LCD_EN=0;
 265   1              return result;
 266   1      }
 267          void LCD_Write(uint8 dat,uint8 type)
 268          {
 269   1              uint8 i;
 270   1              while((LCD_BUSY()&&i<100)){i++;}
C51 COMPILER V7.50   LED                                                                   09/28/2008 21:00:12 PAGE 6   

 271   1              if(i>99)LCD_NO=1;
 272   1              LCD_RS=type;
 273   1              LCD_RW=0;
 274   1              LCD_EN=0;
 275   1              _nop_();
 276   1              _nop_();
 277   1              _nop_();
 278   1              _nop_();
 279   1              LCD_PORT=dat;
 280   1              _nop_();
 281   1              _nop_();
 282   1              _nop_();
 283   1              _nop_();
 284   1              LCD_EN=1;
 285   1              _nop_();
 286   1              _nop_();
 287   1              _nop_();
 288   1              _nop_();
 289   1              LCD_EN=0;
 290   1      }
 291          void LCD_INITIALIZE()
 292          {
 293   1              LCD_Write(0x06,LCD_COMMAND);
 294   1              LCD_Write(0x38,LCD_COMMAND);
 295   1              LCD_Write(0x0c,LCD_COMMAND);
 296   1              LCD_Write(0x01,LCD_COMMAND);
 297   1      }       
 298          void LCD_Prints(uint8 *dat,uint8 add)
 299          {
 300   1              LCD_Write(add|0x80,LCD_COMMAND);
 301   1              while(*dat!='\0')LCD_Write((*(dat++)),LCD_DATA);
 302   1      }
 303          void et0() interrupt 1 using 0
 304          {
 305   1              static uint8 i;
 306   1              TH0=0xf3;
 307   1              TL0=0xf3;
 308   1              TR0=1;
 309   1              i++;
 310   1              if(i==22)
 311   1              {
 312   2                      i=0;
 313   2                      WORDNUMBER++;
 314   2              }
 315   1      }
 316          void KEY_Delay()
 317          {
 318   1              uint8 i,j;
 319   1              for(i=0;i<200;i++)
 320   1              for(j=0;j<200;j++);
 321   1      }
 322          void SET_YEAR()
 323          {
 324   1              uint8 YEAR[3];
 325   1              LCD_Prints("  YEAR SETTING  ",0);
 326   1              LCD_Prints("  YEAR:20       ",0x40);
 327   1              if((!KEY3)&&(TIMETYPE.Year<80)){KEY_Delay();i1=i2=0;TIMETYPE.Year++;}
 328   1              else if(TIMETYPE.Year>79)TIMETYPE.Year=0;
 329   1              if((!KEY4)&&(TIMETYPE.Year>0)){KEY_Delay();i1=i2=0;TIMETYPE.Year--;}
 330   1              YEAR[0]=(TIMETYPE.Year/10)+'0';
 331   1              YEAR[1]=(TIMETYPE.Year%10)+'0';
 332   1              YEAR[2]='\0';
C51 COMPILER V7.50   LED                                                                   09/28/2008 21:00:12 PAGE 7   

 333   1              LCD_Prints(YEAR,0x49);
 334   1      }                       
 335          void SET_MONTH()
 336          {
 337   1              uint8 MONTH[3];
 338   1              LCD_Prints("  MONTH SETTING ",0);
 339   1              LCD_Prints("  MONTH:        ",0x40);
 340   1              if((!KEY3)&&(TIMETYPE.Month<13)){KEY_Delay();TIMETYPE.Month++;i1=i2=0;}
 341   1              else if(TIMETYPE.Month>12)TIMETYPE.Month=1;
 342   1              if((!KEY4)&&(TIMETYPE.Month>1)){KEY_Delay();TIMETYPE.Month--;i1=i2=0;}
 343   1              MONTH[0]=(TIMETYPE.Month/10)+'0';
 344   1              MONTH[1]=(TIMETYPE.Month%10)+'0';
 345   1              MONTH[2]='\0';
 346   1              LCD_Prints(MONTH,0x48);
 347   1      }
 348          void SET_DAY()
 349          {
 350   1              uint8 DAY[3];
 351   1              LCD_Prints("  DAY SETTING   ",0);
 352   1              LCD_Prints("  DAY:          ",0x40);
 353   1              if((!KEY3)&&(TIMETYPE.Day<32)){KEY_Delay();TIMETYPE.Day++;i1=i2=0;}
 354   1              else if(TIMETYPE.Day>31)TIMETYPE.Day=1;
 355   1              if((!KEY4)&&(TIMETYPE.Day>1)){KEY_Delay();TIMETYPE.Day--;i1=i2=0;}
 356   1              DAY[0]=(TIMETYPE.Day/10)+'0';
 357   1              DAY[1]=(TIMETYPE.Day%10)+'0';
 358   1              DAY[2]='\0';
 359   1              LCD_Prints(DAY,0x46);
 360   1      }
 361          void SET_WEEK()
 362          {
 363   1              uint8 WEEK[2];
 364   1              LCD_Prints("  WEEK SETTING  ",0);
 365   1              LCD_Prints("  WEEK:         ",0x40);
 366   1              if((!KEY3)&&(TIMETYPE.Week<8)){KEY_Delay();TIMETYPE.Week++;i1=i2=0;}
 367   1              else if(TIMETYPE.Week>7)TIMETYPE.Week=1;
 368   1              if((!KEY4)&&(TIMETYPE.Week>1)){KEY_Delay();TIMETYPE.Week--;i1=i2=0;}
 369   1              WEEK[0]=TIMETYPE.Week+'0';
 370   1              WEEK[1]='\0';
 371   1              LCD_Prints(WEEK,0x47);
 372   1      }
 373          void SET_HOUR()
 374          {
 375   1              uint8 HOUR[3];
 376   1              LCD_Prints("  HOUR SETTING  ",0);
 377   1              LCD_Prints("  HOUR:         ",0x40);
 378   1              if((!KEY3)&&(TIMETYPE.Hour<24)){KEY_Delay();TIMETYPE.Hour++;i1=i2=0;}
 379   1              else if(TIMETYPE.Hour>23)TIMETYPE.Hour=0;
 380   1              if((!KEY4)&&(TIMETYPE.Hour>0)){KEY_Delay();TIMETYPE.Hour--;i1=i2=0;}
 381   1              HOUR[0]=(TIMETYPE.Hour/10)+'0';
 382   1              HOUR[1]=(TIMETYPE.Hour%10)+'0';
 383   1              HOUR[2]='\0';
 384   1              LCD_Prints(HOUR,0x47);
 385   1      }
 386          void SET_MINE()
 387          {
 388   1              uint8 MINE[3];
 389   1              LCD_Prints("  MINE SETTING  ",0);
 390   1              LCD_Prints("  MINE:         ",0x40);
 391   1              if((!KEY3)&&(TIMETYPE.Mine<60)){KEY_Delay();TIMETYPE.Mine++;i1=i2=0;}
 392   1              else if(TIMETYPE.Mine>59)TIMETYPE.Mine=0;
 393   1              if((!KEY4)&&(TIMETYPE.Mine>0)){KEY_Delay();TIMETYPE.Mine--;i1=i2=0;}
 394   1              MINE[0]=(TIMETYPE.Mine/10)+'0';
C51 COMPILER V7.50   LED                                                                   09/28/2008 21:00:12 PAGE 8   

 395   1              MINE[1]=(TIMETYPE.Mine%10)+'0';
 396   1              MINE[2]='\0';
 397   1              LCD_Prints(MINE,0x47);
 398   1      }
 399          void SET_SECOND()
 400          {
 401   1              uint8 SECOND[3];
 402   1              LCD_Prints(" SECOND SETTING ",0);
 403   1              LCD_Prints(" SECOND:        ",0x40);
 404   1              if((!KEY3)&&(TIMETYPE.Second<60)){KEY_Delay();TIMETYPE.Second++;i1=i2=0;}
 405   1              else if(TIMETYPE.Second>59)TIMETYPE.Second=0;
 406   1              if((!KEY4)&&(TIMETYPE.Second>0)){KEY_Delay();TIMETYPE.Second--;i1=i2=0;}
 407   1              SECOND[0]=(TIMETYPE.Second/10)+'0';
 408   1              SECOND[1]=(TIMETYPE.Second%10)+'0';
 409   1              SECOND[2]='\0';
 410   1              LCD_Prints(SECOND,0x48);
 411   1      }
 412          void Write_Time()
 413          {
 414   1              uint8 year,month,day,hour,mine,second,week;
 415   1              year=((TIMETYPE.Year/10)<<4)|(TIMETYPE.Year%10);
 416   1              month=((TIMETYPE.Month/10)<<4)|(TIMETYPE.Month%10);
 417   1              day=((TIMETYPE.Day/10)<<4)|(TIMETYPE.Day%10);
 418   1              week=TIMETYPE.Week;
 419   1              hour=((TIMETYPE.Hour/10)<<4)|(TIMETYPE.Hour%10);
 420   1              mine=((TIMETYPE.Mine/10)<<4)|(TIMETYPE.Mine%10);
 421   1              second=((TIMETYPE.Second/10)<<4)|(TIMETYPE.Second%10);
 422   1              RTC_Write_Byte(0x8e,0x00); //写入允许
 423   1          RTC_Write_Byte(0x80,WRITE_SECOND|0x80);
 424   1              RTC_Write_Byte(0x8e,0x80); //禁止写入
 425   1              RTC_Write_Byte(0x8e,0x00); //写入允许
 426   1              RTC_Write_Byte(WRITE_YEAR,year); //写入新的秒数
 427   1              RTC_Write_Byte(WRITE_MONTH,month); //写入新的秒数
 428   1              RTC_Write_Byte(WRITE_DAY,day); //写入新的秒数
 429   1              RTC_Write_Byte(WRITE_HOUR,hour); //写入新的秒数
 430   1              RTC_Write_Byte(WRITE_MINE,mine&0x7f); //写入新的秒数
 431   1              RTC_Write_Byte(WRITE_WEEK,week); //写入新的秒数
 432   1              RTC_Write_Byte(WRITE_SECOND,second);
 433   1              RTC_Write_Byte(0x8e,0x00); //写入允许
 434   1              RTC_Write_Byte(0x8E,0x80);
 435   1      }                       
 436          void SET_TIME()
 437          {
 438   1              uint8 i;
 439   1              CurrentTime(&TIMETYPE);
 440   1              while(1)
 441   1              {        
 442   2                      switch(i)
 443   2                      {
 444   3                              case 0:SET_YEAR();break;
 445   3                              case 1:SET_MONTH();break;
 446   3                              case 2:SET_DAY(); break;
 447   3                              case 3:SET_WEEK();break;
 448   3                              case 4:SET_HOUR();break;
 449   3                              case 5:SET_MINE();break;
 450   3                              case 6:SET_SECOND();break;
 451   3                      }
 452   2                      if(!KEY2){i++;KEY_Delay();i1=i2=0;}
 453   2                      if(i==7){i=0;Write_Time();break;}
 454   2                      i1++;
 455   2                      if(i1==10){i2++;i1=0;}
 456   2                      if(i2==100){i=0;Write_Time();break;}
C51 COMPILER V7.50   LED                                                                   09/28/2008 21:00:12 PAGE 9   

 457   2              }
 458   1      }
 459          
 460          void TIMESETTING()
 461          {       
 462   1              if(!KEY1){LED_EN=1;SET_TIME();}
 463   1              WORDNUMBER=0;
 464   1              WORDNUM=0;
 465   1      }
 466          void LED_Ser(uint8 dat)
 467          {
 468   1              SBUF=dat;
 469   1              while(TI==0);
 470   1              TI=0;
 471   1      }
 472          void LED_Delay()
 473          {
 474   1              uint8 i,j;
 475   1              for(i=0;i<11;i++)
 476   1              for(j=0;j<16;j++);
 477   1      }
 478          void SET_STB()

⌨️ 快捷键说明

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