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

📄 shizhong.lst

📁 很实用的单片机例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
 216   5                                              case 5: day++;
 217   5                                                              if(day==32)
 218   5                                                                      day=1;
 219   5                                                              write_nyr(9,day);
 220   5                                                              write_com(0x80+9);
 221   5                                                              break;
 222   5                                              case 6: month++;
 223   5                                                              if(month==13)
 224   5                                                                      month=1;
 225   5                                                              write_nyr(6,month);
 226   5                                                              write_com(0x80+6);
 227   5                                                              break;
 228   5                                              case 7: year++;
 229   5                                                              if(year==100)
 230   5                                                                      year=0;
 231   5                                                              write_nyr(3,year);
 232   5                                                              write_com(0x80+3);
 233   5                                                              break;
 234   5                                      }
 235   4                              }
 236   3                      }
 237   2                      if(s3==0)
 238   2                      {
 239   3                              delay(1);
 240   3                              if(s3==0)
 241   3                              {
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 5   

 242   4                                      while(!s3);di();
 243   4                                      switch(s1num)
 244   4                                      {//根据功能键次数调节相应数值
 245   5                                              case 1: miao--;
 246   5                                                              if(miao==-1)
 247   5                                                                      miao=59;
 248   5                                                              write_sfm(10,miao);
 249   5                                                              write_com(0x80+0x40+10);
 250   5                                                              break; 
 251   5                                              case 2: fen--;
 252   5                                                              if(fen==-1)
 253   5                                                                      fen=59;
 254   5                                                              write_sfm(7,fen);
 255   5                                                              write_com(0x80+0x40+7);
 256   5                                                              break;
 257   5                                              case 3: shi--;
 258   5                                                              if(shi==-1)
 259   5                                                                      shi=23;
 260   5                                                              write_sfm(4,shi);
 261   5                                                              write_com(0x80+0x40+4);
 262   5                                                              break;
 263   5                                              case 4: week--;
 264   5                                                              if(week==0)
 265   5                                                                      week=7;
 266   5                                                              write_week(week);
 267   5                                                              write_com(0x80+12);
 268   5                                                              break;
 269   5                                              case 5: day--;
 270   5                                                              if(day==0)
 271   5                                                                      day=31;
 272   5                                                              write_nyr(9,day);
 273   5                                                              write_com(0x80+9);
 274   5                                                              break;
 275   5                                              case 6: month--;
 276   5                                                              if(month==0)
 277   5                                                                      month=12;
 278   5                                                              write_nyr(6,month);
 279   5                                                              write_com(0x80+6);
 280   5                                                              break;
 281   5                                              case 7: year--;
 282   5                                                              if(year==-1)
 283   5                                                                      year=99;
 284   5                                                              write_nyr(3,year);
 285   5                                                              write_com(0x80+3);
 286   5                                                              break;
 287   5                                      }
 288   4                              }
 289   3                      }
 290   2              }
 291   1              if(s4==0)//检测S4
 292   1              {
 293   2                      delay(5);
 294   2                      if(s4==0)
 295   2                      {       
 296   3                              flag1=~flag1;
 297   3                              while(!s4);di();
 298   3                              if(flag1==0)
 299   3                              {//退出闹钟设置时保存数值
 300   4                                      flag=0;
 301   4                                      write_com(0x80+0x40);
 302   4                                      write_date(' ');
 303   4                                      write_date(' ');
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 6   

 304   4                                      write_com(0x0c);
 305   4                                      write_ds(1,miao);
 306   4                                      write_ds(3,fen);
 307   4                                      write_ds(5,shi);                                
 308   4                              }
 309   3                              else
 310   3                              {//进入闹钟设置
 311   4                                      read_alarm();//读取原始数据
 312   4                                      miao=amiao;//重新赋值用以按键调节
 313   4                                      fen=afen;
 314   4                                      shi=ashi;
 315   4                                      write_com(0x80+0x40);
 316   4                                      write_date('R');//显示标志
 317   4                                      write_date('i');
 318   4                                      write_com(0x80+0x40+3);
 319   4                                      write_sfm(4,ashi);//送液晶显示闹钟时间
 320   4                                      write_sfm(7,afen);
 321   4                                      write_sfm(10,amiao);
 322   4                              }                       
 323   3                      }
 324   2              }
 325   1      }
 326          
 327          void write_ds(uchar add,uchar date)
 328          {//写12C887函数
 329   1              dscs=0;
 330   1              dsas=1;
 331   1              dsds=1;
 332   1              dsrw=1;
 333   1              P0=add;//先写地址
 334   1              dsas=0;
 335   1              dsrw=0;
 336   1              P0=date;//再写数据
 337   1              dsrw=1;
 338   1              dsas=1;
 339   1              dscs=1;                         
 340   1      }
 341          
 342          uchar read_ds(uchar add)
 343          {//读12C887函数
 344   1              uchar ds_date;
 345   1              dsas=1;
 346   1              dsds=1;
 347   1              dsrw=1;
 348   1              dscs=0;
 349   1              P0=add;//先写地址
 350   1              dsas=0;
 351   1              dsds=0;
 352   1              P0=0xff;
 353   1              ds_date=P0;//再读数据
 354   1              dsds=1;
 355   1              dsas=1;
 356   1              dscs=1;
 357   1              return ds_date; 
 358   1      }
 359          //*---首次操作12C887时给予寄存器初始化---
 360          void set_time()
 361          {//首次上电初始化时间函数
 362   1              write_ds(0,0);
 363   1              write_ds(1,0);
 364   1              write_ds(2,0);
 365   1              write_ds(3,0);
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 7   

 366   1              write_ds(4,0);
 367   1              write_ds(5,0);
 368   1              write_ds(6,0);
 369   1              write_ds(7,0);
 370   1              write_ds(8,0);
 371   1              write_ds(9,0);  
 372   1      }
 373          //----------------------------------------*/
 374          void read_alarm()
 375          {//读取12C887闹钟值
 376   1              amiao=read_ds(1);
 377   1              afen=read_ds(3);
 378   1              ashi=read_ds(5);
 379   1      }
 380          void main()//主函数
 381          {wr=0;
 382   1              init();//调用初始化函数
 383   1              while(1)
 384   1              {
 385   2                      keyscan();//按键扫描
 386   2                      if(flag_ri==1)//当闹钟中断时进入这里
 387   2                      {
 388   3                              di();
 389   3                              delay(100);
 390   3                              di();
 391   3                              delay(500);
 392   3                      }       
 393   2                      if(flag==0&&flag1==0)//正常工作时进入这里
 394   2                      {
 395   3                              keyscan();//按键扫描
 396   3                              year=read_ds(9);//读取12C887数据
 397   3                              month=read_ds(8);       
 398   3                              day=read_ds(7);
 399   3                              week=read_ds(6);
 400   3                              shi=read_ds(4);
 401   3                              fen=read_ds(2);
 402   3                              miao=read_ds(0);        
 403   3                              write_sfm(10,miao);//送液晶显示
 404   3                              write_sfm(7,fen);
 405   3                              write_sfm(4,shi);
 406   3                              write_week(week);
 407   3                              write_nyr(3,year);
 408   3                              write_nyr(6,month);
 409   3                              write_nyr(9,day);
 410   3                      }
 411   2              }
 412   1      }
 413          
 414          void exter() interrupt 2//外部中断1服务程序
 415          {       uchar c; //进入中断表示闹钟时间到,
 416   1              flag_ri=1; //设置标志位,用以大程序中报警提示
 417   1              c=read_ds(0x0c);//读取12C887的C寄存器表示响应了中断
 418   1      }
 419          
 420          
 421          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1454    ----
   CONSTANT SIZE    =     29    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 8   

   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 + -