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

📄 text1.lst

📁 红外遥控时钟温度计语音报时间和温度deshejifangan
💻 LST
📖 第 1 页 / 共 2 页
字号:
 250   5                                      }
 251   4                                      if(mode_num==6)
 252   4                                      {
 253   5                                              now.second++;
 254   5                                              if(now.second==60) now.second=0;
 255   5                               write_time(7,now.second);
 256   5                               gotoxy(2,8);while(!plus);
 257   5                                      }
 258   4                              }
 259   3                      }
 260   2              if(dec==0)
 261   2                      {
 262   3                              delay(5);
 263   3                              if(dec==0)
 264   3                              {       delay(5);
 265   4                                      while(!dec);
 266   4                                      delay(5);
 267   4                          if(mode_num==1)
 268   4                                      {
 269   5                                              today.year--;
 270   5                                           write_riqi(1,today.year/100);
 271   5                               write_riqi(3,today.year%100);
 272   5                               gotoxy(1,12);
 273   5                               display_week();
 274   5                               gotoxy(1,4);while(!dec);
 275   5                                      }
 276   4                          if(mode_num==2)
 277   4                                      {
 278   5                                              today.month--;
 279   5                               if(today.month==0) today.month=12;
 280   5                                           write_riqi(6,today.month);
 281   5                               gotoxy(1,12);
 282   5                               display_week();
 283   5                               gotoxy(1,7);while(!dec);
 284   5                                      }
 285   4                          if(mode_num==3)
 286   4                                      {
 287   5                                              today.day--;
 288   5                               if(today.day==0)
 289   5                               today.day=monthday(today.year,today.month);
 290   5                                           write_riqi(9,today.day);
 291   5                               gotoxy(1,12);
 292   5                               display_week();
 293   5                               gotoxy(1,10);while(!dec);
 294   5                                      }
 295   4                                      if(mode_num==4)
 296   4                                      {
 297   5                                              now.hour--;
 298   5                                              if(now.hour<0) now.hour=23;
 299   5                                           write_time(1,now.hour);
 300   5                               gotoxy(2,2);while(!dec);
 301   5                                      }
 302   4                                      if(mode_num==5)
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 6   

 303   4                                      {
 304   5                                              now.minute--;
 305   5                                              if(now.minute<0) now.minute=59;
 306   5                                              write_time(4,now.minute);
 307   5                               gotoxy(2,5);while(!dec);
 308   5                                      }
 309   4                                      if(mode_num==6)
 310   4                                      {
 311   5                                              now.second--;
 312   5                                              if(now.second<0) now.second=59;
 313   5                               write_time(7,now.second);
 314   5                               gotoxy(2,8); while(!dec);
 315   5                                      }
 316   4                              }
 317   3                      }
 318   2           }
 319   1       }
 320          
 321          void display_temp()
 322          {
 323   1        uint wendu;
 324   1        uchar A1,A2;
 325   1        tmpchange(); 
 326   1        wendu=tmp();
 327   1         A1=wendu/10;
 328   1         A2=wendu%10;
 329   1        gotoxy(2,10);
 330   1        display_data(A1);
 331   1        display_string(".");
 332   1        write_date(int_to_char[A2]);    
 333   1      }
 334          
 335          void timer0(void) interrupt 1
 336          {
 337   1           TR0=0;
 338   1           TL0=(TIMER0_COUNT & 0X00FF);//设置Timer0低八位数值
 339   1           TH0=(TIMER0_COUNT >> 8);//设置Timer0高八位数值
 340   1           TR0=1;
 341   1              count++;
 342   1           if(count==30) display_temp();
 343   1           if(count==200)
 344   1                      {
 345   2                              count=0;
 346   2                              now.second++;
 347   2                              if(now.second==60)
 348   2                              {
 349   3                                      now.second=0;
 350   3                                      now.minute++;
 351   3                                      if(now.minute==60)
 352   3                                      {
 353   4                                              now.minute=0;
 354   4                                              now.hour++;
 355   4                                              if(now.hour==24)
 356   4                                              {
 357   5                                                      now.hour=0;
 358   5                                    today.day++;
 359   5                                    if(today.day>monthday(today.year,today.month))
 360   5                                    {
 361   6                                         today.day=1;
 362   6                                         today.month++;
 363   6                                         if(today.month==13)
 364   6                                         {
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 7   

 365   7                                              today.month=1;
 366   7                                              today.year++;
 367   7                                         }
 368   6                                         write_riqi(6,today.month);
 369   6                                    }
 370   5                                    write_riqi(9,today.day);
 371   5                                    gotoxy(1,12);
 372   5                                    display_week();
 373   5                                              }
 374   4                                              write_time(1,now.hour);
 375   4                                      }
 376   3                                      write_time(4,now.minute);
 377   3                              }
 378   2                              write_time(7,now.second);               
 379   2                      }       
 380   1      }
 381          
 382          void main()
 383          {
 384   1              IE = 0x81;                 //允许总中断中断,使能 INT0 外部中断
 385   1          TCON = 0x01;               //触发方式为脉冲负边沿触发
 386   1          
 387   1          IRIN=1;                    //I/O口初始化
 388   1               belay1(10);
 389   1              init_lcd();
 390   1           timer0_initialize();
 391   1           gotoxy(1,1);
 392   1           display_string("2008/06/10 ");
 393   1           display_week();
 394   1           gotoxy(2,1);
 395   1           display_string("00:00:00");
 396   1           gotoxy(2,10);
 397   1           display_string("00.0C");
 398   1               
 399   1           while(1) ;//keyscan();
 400   1      
 401   1      }
 402          /**********************************************************/
 403          void belay(unsigned char x)    //x*0.14MS
 404          {
 405   1       unsigned char i;
 406   1        while(x--)
 407   1       {
 408   2        for (i = 0; i<13; i++) {}
 409   2       }
 410   1      }
 411          
 412          /**********************************************************/
 413          void belay1(int ms)
 414          {
 415   1       unsigned char y;
 416   1        while(ms--)
 417   1       {
 418   2        for(y = 0; y<250; y++)
 419   2        {
 420   3         _nop_();
 421   3         _nop_();
 422   3         _nop_();
 423   3         _nop_();
 424   3        }
 425   2       }
 426   1       }
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 8   

 427           /**********************************************************/
 428          void IR_IN() interrupt 0 using 0
 429          {
 430   1        unsigned char j,k,N=0;
 431   1           EX0 = 0;   
 432   1               belay(15);
 433   1               if (IRIN==1) 
 434   1           { EX0 =1;
 435   2                 return;
 436   2                } 
 437   1                                 //确认IR信号出现
 438   1        while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
 439   1          {belay(1);}
 440   1      
 441   1       for (j=0;j<4;j++)         //收集四组数据
 442   1       { 
 443   2        for (k=0;k<8;k++)        //每组数据有8位
 444   2        {
 445   3         while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
 446   3           {belay(1);}
 447   3          while (!IRIN)          //等 IR 变为高电平
 448   3           {belay(1);}
 449   3           while (IRIN)           //计算IR高电平时长
 450   3            {
 451   4          belay(1);
 452   4          N++;           
 453   4          if (N>=30)
 454   4               { EX0=1;
 455   5               return;}                  //0.14ms计数过长自动离开。
 456   4            }                        //高电平计数完毕                
 457   3           IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
 458   3           if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
 459   3           N=0;
 460   3        }//end for k
 461   2       }//end for j
 462   1         
 463   1         if (IRCOM[2]!=~IRCOM[3])
 464   1         { EX0=1;
 465   2           return; }
 466   1      
 467   1         IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位
 468   1         IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位
 469   1      
 470   1         if(IRCOM[5]>9)
 471   1          { IRCOM[5]=IRCOM[5]+0x37;}
 472   1         else
 473   1                IRCOM[5]=IRCOM[5]+0x30;
 474   1      
 475   1         if(IRCOM[6]>9)
 476   1          { IRCOM[6]=IRCOM[6]+0x37;}
 477   1         else
 478   1                IRCOM[6]=IRCOM[6]+0x30;
 479   1      
 480   1           lcd_pos(0x4b);             
 481   1           lcd_wdat(IRCOM[6]);        //第一位数显示 
 482   1           lcd_pos(0x4c);             
 483   1           lcd_wdat(IRCOM[5]);        //第二位数显示
 484   1              
 485   1      
 486   1      
 487   1           EX0 = 1; 
 488   1      } 
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 9   

 489          
 490          
 491          
 492          
 493          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2040    ----
   CONSTANT SIZE    =     80    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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