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

📄 _ds12c887

📁 DS12c887电子时钟详细教程仿真
💻
📖 第 1 页 / 共 2 页
字号:

 242   4      
 243   4                              }
 244   3                        }
 245   2                }
 246   1              //**********************************************************
 247   1              //S1有按下过,检测S2,S3
 248   1              //如果按键2按下执行加,//如果按键3按下执行减
 249   1                if(s1num!=0)  //S1有按下过,检测S2,S3
 250   1                {
 251   2                      if(s2==0)               //如果按键2按下执行加
 252   2                      {
 253   3                              delayms(5);
 254   3                              if(s2==0)
 255   3                              {
 256   4                                      while(!s2);di();
 257   4                                      switch(s1num)
 258   4                                      {
 259   5                                              case 1:
 260   5                                                      miao++;
 261   5                                                      if(miao>59)
 262   5                                                      {
 263   6                                                              miao=0;
 264   6                                                      }
 265   5                                                      write_sfm(10,miao);
 266   5                                                      write_cmd(0x80+0x40+10);
 267   5                                                      break;  
 268   5                                              case 2:
 269   5                                                      fen++;
 270   5                                                      if(fen>59)
 271   5                                                      {
 272   6                                                              fen=0;
 273   6                                                      }
 274   5                                                      write_sfm(7,fen);
 275   5                                                      write_cmd(0x80+0x40+7);
 276   5                                                      break; 
 277   5                                              case 3:
 278   5                                                      shi++;
 279   5                                                      if(shi>23)
 280   5                                                      {
 281   6                                                              shi=0;
 282   6                                                      }
 283   5                                                      write_sfm(4,shi);
 284   5                                                      write_cmd(0x80+0x40+4);
 285   5                                                      break; 
 286   5                                              case 4:
 287   5                                                      week++;
 288   5                                                      if(week>7)
 289   5                                                      {
 290   6                                                              week=1;
 291   6                                                      }
 292   5                                                      write_week(week);
 293   5                                                      write_cmd(0x80+12);
 294   5                                                      break; 
 295   5                                              case 5:
 296   5                                                      day++;
 297   5                                                      if(day>31)
 298   5                                                      {
 299   6                                                              day=1;
 300   6                                                      }
 301   5                                                      write_nyr(9,day);
 302   5                                                      write_cmd(0x80+9);
 303   5                                                      break; 
C51 COMPILER V7.50   ___DS12C887                                                           09/03/2012 17:35:06 PAGE 6   

 304   5                                              case 6:
 305   5                                                      month++;
 306   5                                                      if(month>12)
 307   5                                                      {
 308   6                                                              month=1;
 309   6                                                      }
 310   5                                                      write_nyr(6,month);
 311   5                                                      write_cmd(0x80+6);
 312   5                                                      break; 
 313   5                                              case 7:
 314   5                                                      year++;
 315   5                                                      if(year>99)
 316   5                                                      {
 317   6                                                              year=0;
 318   6                                                      }
 319   5                                                      write_nyr(3,year);
 320   5                                                      write_cmd(0x80+3);
 321   5                                                      break; 
 322   5                                              }
 323   4                                      }
 324   3                          }
 325   2                          //***************************************** 
 326   2                          if(s3==0)
 327   2                          {
 328   3                              delayms(5);
 329   3                              if(s3==0)
 330   3                              {
 331   4                                      while(!s3);di();
 332   4                                      switch(s1num)
 333   4                                      {
 334   5                                              case 1:
 335   5                                                      miao--;
 336   5                                                      if(miao<0)
 337   5                                                      {
 338   6                                                              miao=59;
 339   6                                                      }
 340   5                                                      write_sfm(10,miao);
 341   5                                                      write_cmd(0x80+0x40+10);
 342   5                                                      break;  
 343   5                                              case 2:
 344   5                                                      fen--;
 345   5                                                      if(fen<0)
 346   5                                                      {
 347   6                                                              fen=59;
 348   6                                                      }
 349   5                                                      write_sfm(7,fen);
 350   5                                                      write_cmd(0x80+0x40+7);
 351   5                                                      break; 
 352   5                                              case 3:
 353   5                                                      shi--;
 354   5                                                      if(shi<0)
 355   5                                                      {
 356   6                                                              shi=23;
 357   6                                                      }
 358   5                                                      write_sfm(4,shi);
 359   5                                                      write_cmd(0x80+0x40+4);
 360   5                                                      break; 
 361   5                                              case 4:
 362   5                                                      week--;
 363   5                                                      if(week<1)
 364   5                                                      {
 365   6                                                              week=7;
C51 COMPILER V7.50   ___DS12C887                                                           09/03/2012 17:35:06 PAGE 7   

 366   6                                                      }
 367   5                                                      write_week(week);
 368   5                                                      write_cmd(0x80+12);
 369   5                                                      break; 
 370   5                                              case 5:
 371   5                                                      day--;
 372   5                                                      if(day<1)
 373   5                                                      {
 374   6                                                              day=31;
 375   6                                                      }
 376   5                                                      write_nyr(9,day);
 377   5                                                      write_cmd(0x80+9);
 378   5                                                      break; 
 379   5                                              case 6:
 380   5                                                      month--;
 381   5                                                      if(month<1)
 382   5                                                      {
 383   6                                                              month=12;
 384   6                                                      }
 385   5                                                      write_nyr(6,month);
 386   5                                                      write_cmd(0x80+6);
 387   5                                                      break; 
 388   5                                              case 7:
 389   5                                                      year--;
 390   5                                                      if(year<0)
 391   5                                                      {
 392   6                                                              year=99;
 393   6                                                      }
 394   5                                                      write_nyr(3,year);
 395   5                                                      write_cmd(0x80+3);
 396   5                                                      break; 
 397   5                                      }                               
 398   4                                 }
 399   3                           }
 400   2                 }
 401   1                //**********************************************************
 402   1                if(s4==0)
 403   1                   {
 404   2                              delayms(5);
 405   2                              if(s4==0)
 406   2                              {
 407   3                                      while(!s4);di(); flag1=~flag1;  //闹铃调好后再按一次键返回
 408   3                                      if(flag1==0)   //退出闹钟设置保存数值
 409   3                                      {
 410   4                                              flag=0;    //启动时间显示
 411   4                                              write_cmd(0x80+0x40);
 412   4                                              write_dat(' ');
 413   4                                              write_dat(' ');
 414   4                                              write_cmd(0x0c);  //清屏下,否则光标乱跳   (闹铃调时间时)
 415   4                                              write_ds(1,miao);
 416   4                                              write_ds(3,fen);
 417   4                                              write_ds(5,shi);
 418   4                                      }
 419   3                                      else  //设置闹钟
 420   3                                      {
 421   4                                              read_alarm();  //读原始数据
 422   4                                              miao=amiao;
 423   4                                              fen=afen;
 424   4                                              shi=ashi;
 425   4                                              write_cmd(0xc0);
 426   4                                              write_dat('R');write_dat('i');
 427   4                                              write_cmd(0x80+0x40);
C51 COMPILER V7.50   ___DS12C887                                                           09/03/2012 17:35:06 PAGE 8   

 428   4                                              write_sfm(4,ashi);
 429   4                                              write_sfm(7,afen);      
 430   4                                              write_sfm(10,amiao);            
 431   4                                      }                       
 432   3                              }
 433   2                   }
 434   1      }
 435          //******************************************************************
 436             //主程序
 437          //******************************************************************
 438          void main()
 439          {
 440   1              init();
 441   1              while(1)
 442   1              {
 443   2                      keyscan();         //键盘不断扫描       
 444   2                      if(flag_ri==1)    //如果闹铃时间到
 445   2                      {
 446   3                              di();
 447   3                              delayms(100);
 448   3                              di();
 449   3                              delayms(500);
 450   3                      }
 451   2                      if(flag==0&&flag1==0)
 452   2                      {
 453   3                              keyscan();
 454   3                              year=read_ds(9);
 455   3                              month=read_ds(8);
 456   3                              day=read_ds(7);
 457   3                              week=read_ds(6);
 458   3                              shi=read_ds(4);
 459   3                              fen=read_ds(2);
 460   3                              miao=read_ds(0);
 461   3                              write_sfm(10,miao);
 462   3                              write_sfm(7,fen);
 463   3                              write_sfm(4,shi);
 464   3                              write_week(week);
 465   3                              write_nyr(3,year);
 466   3                              write_nyr(6,month);
 467   3                              write_nyr(9,day);
 468   3                      }       
 469   2              } 
 470   1      }
 471          void exter()interrupt 2    //闹铃外部中断1
 472          {
 473   1              uchar c;         //闹铃时间到
 474   1              flag_ri=1;
 475   1              c=read_ds(0x0c);   //读C寄存器表示响应中断
 476   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1504    ----
   CONSTANT SIZE    =     25    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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