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

📄 main.lst

📁 很实用的单片机例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
 222   5                                              case 4: week++;
 223   5                                                              if(week==8)
 224   5                                                                      week=1;
 225   5                                                              write_week(week);
 226   5                                                              write_com(0x80+12);
 227   5                                                              break;
 228   5                                              case 5: day++;
 229   5                                                              if(day==32)
 230   5                                                                      day=1;
 231   5                                                              write_nyr(9,day);
 232   5                                                              write_com(0x80+9);
 233   5                                                              break;
 234   5                                              case 6: month++;
 235   5                                                              if(month==13)
 236   5                                                                      month=1;
 237   5                                                              write_nyr(6,month);
 238   5                                                              write_com(0x80+6);
 239   5                                                              break;
 240   5                                              case 7: year++;
 241   5                                                              if(year==100)
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 20:29:24 PAGE 5   

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

 304   1              {
 305   2                      delay(5);
 306   2                      if(s4==0)
 307   2                      {       
 308   3                              flag1=~flag1;
 309   3                              while(!s4);di();
 310   3                              if(flag1==0)
 311   3                              {//退出闹钟设置时保存数值
 312   4                                      flag=0;
 313   4                                      write_com(0x80+0x40);
 314   4                                      write_date(' ');
 315   4                                      write_date(' ');
 316   4                                      write_com(0x0c);
 317   4                                      write_ds(1,miao);
 318   4                                      write_ds(3,fen);
 319   4                                      write_ds(5,shi);                                
 320   4                              }
 321   3                              else
 322   3                              {//进入闹钟设置
 323   4                                      read_alarm();//读取原始数据
 324   4                                      miao=amiao;//重新赋值用以按键调节
 325   4                                      fen=afen;
 326   4                                      shi=ashi;
 327   4                                      write_com(0x80+0x40);
 328   4                                      write_date('R');//显示标志
 329   4                                      write_date('i');
 330   4                                      write_com(0x80+0x40+3);
 331   4                                      write_sfm(4,ashi);//送液晶显示闹钟时间
 332   4                                      write_sfm(7,afen);
 333   4                                      write_sfm(10,amiao);
 334   4                              }                       
 335   3                      }
 336   2              }
 337   1      }
 338          
 339          void write_ds(uchar add,uchar date)
 340          {//写12C887函数
 341   1              dscs=0;
 342   1              dsas=1;
 343   1              dsds=1;
 344   1              dsrw=1;
 345   1              P0=add;//先写地址
 346   1              dsas=0;
 347   1              dsrw=0;
 348   1              P0=date;//再写数据
 349   1              dsrw=1;
 350   1              dsas=1;
 351   1              dscs=1;                         
 352   1      }
 353          
 354          uchar read_ds(uchar add)
 355          {//读12C887函数
 356   1              uchar ds_date;
 357   1              dsas=1;
 358   1              dsds=1;
 359   1              dsrw=1;
 360   1              dscs=0;
 361   1              P0=add;//先写地址
 362   1              dsas=0;
 363   1              dsds=0;
 364   1              P0=0xff;
 365   1              ds_date=P0;//再读数据
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 20:29:24 PAGE 7   

 366   1              dsds=1;
 367   1              dsas=1;
 368   1              dscs=1;
 369   1              return ds_date; 
 370   1      }
 371          //*---首次操作12C887时给予寄存器初始化---
 372          void set_time()
 373          {//首次上电初始化时间函数
 374   1              write_ds(0,0);
 375   1              write_ds(1,0);
 376   1              write_ds(2,0);
 377   1              write_ds(3,0);
 378   1              write_ds(4,0);
 379   1              write_ds(5,0);
 380   1              write_ds(6,0);
 381   1              write_ds(7,0);
 382   1              write_ds(8,0);
 383   1              write_ds(9,0);  
 384   1      }
 385          //----------------------------------------*/
 386          void read_alarm()
 387          {//读取12C887闹钟值
 388   1              amiao=read_ds(1);
 389   1              afen=read_ds(3);
 390   1              ashi=read_ds(5);
 391   1      }
 392          void main()//主函数
 393          {wr=0;
 394   1              init();//调用初始化函数
 395   1              while(1)
 396   1              {
 397   2                      keyscan();//按键扫描
 398   2                      if(flag_ri==1)//当闹钟中断时进入这里
 399   2                      {
 400   3                              di();
 401   3                              delay(100);
 402   3                              di();
 403   3                              delay(500);
 404   3                      }       
 405   2                      if(flag==0&&flag1==0)//正常工作时进入这里
 406   2                      {
 407   3                              keyscan();//按键扫描
 408   3                              year=read_ds(9);//读取12C887数据
 409   3                              month=read_ds(8);       
 410   3                              day=read_ds(7);
 411   3                              week=read_ds(6);
 412   3                              shi=read_ds(4);
 413   3                              fen=read_ds(2);
 414   3                              miao=read_ds(0);        
 415   3                              write_sfm(10,miao);//送液晶显示
 416   3                              write_sfm(7,fen);
 417   3                              write_sfm(4,shi);
 418   3                              write_week(week);
 419   3                              write_nyr(3,year);
 420   3                              write_nyr(6,month);
 421   3                              write_nyr(9,day);
 422   3                      }
 423   2              }
 424   1      }
 425          
 426          void exter() interrupt 2//外部中断1服务程序
 427          {       uchar c; //进入中断表示闹钟时间到,
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 20:29:24 PAGE 8   

 428   1              flag_ri=1; //设置标志位,用以大程序中报警提示
 429   1              c=read_ds(0x0c);//读取12C887的C寄存器表示响应了中断
 430   1      }
 431          
 432          
 433          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1454    ----
   CONSTANT SIZE    =     29    ----
   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 + -