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

📄 alarm001.lst

📁 菜鸟板的时钟 第一次学51 师兄们帮小弟看看 还有很多要改进的地方
💻 LST
📖 第 1 页 / 共 3 页
字号:
 218                  
 219                  
 220          
 221          void time0(void) interrupt 1 
 222          {
 223   1              TH0=0xF4;TL0=0x48;
 224   1             if(discnt>11)discnt=0;// 显示为12位数码管
 225   1             if(cnt>200)cnt=0;// 调整时的闪烁周期
 226   1             switch(MS)
 227   1               {
 228   2                  case 0:{dis_time(discnt);}break;// 显示走时
 229   2                  case 1:{dis_adjtime(discnt);}break;// 显示调时
 230   2                  case 2:{dis_almtime(discnt);}break;
 231   2                  default: break;
 232   2              }
 233   1                 discnt++;cnt++;
 234   1                
 235   1      }
 236          
 237          void time1(void) interrupt 3    //50ms
 238          {uchar temp1,temp2,temp;
 239   1         TH1=0X3C;TL1=0XAF;
 240   1          time_cnt++;
C51 COMPILER V7.07   ALARM001                                                              02/02/2009 01:27:16 PAGE 5   

 241   1              if(time_cnt>=20)   //  1秒钟计时时间到,读PCF8583的各寄存器的值
 242   1                      {   
 243   2                            time_cnt=0;
 244   2                            temp=IRcvByte(PCF8583, 0X02);
 245   2                              temp1=(temp/16)&0x0f;temp2=temp&0x0f;
 246   2                           sec=temp1*10+temp2;
 247   2                          temp=IRcvByte(PCF8583, 0X03);
 248   2                              temp1=temp>>4;temp2=temp&0x0f;
 249   2                           min=temp1*10+temp2;
 250   2                          temp=IRcvByte(PCF8583, 0X04);
 251   2                              temp1=(temp>>4)&0x03;temp2=temp&0x0f;
 252   2                           hou=temp1*10+temp2;
 253   2                          temp=IRcvByte(PCF8583, 0X05);
 254   2                              temp1=(temp>>4)&0x03;;temp2=temp&0x0f;
 255   2                           day=temp1*10+temp2;
 256   2                          temp=IRcvByte(PCF8583, 0X06);
 257   2                              temp1=(temp>>4)&0x01;temp2=temp&0x0f;
 258   2                           mon=temp1*10+temp2;
 259   2                      }
 260   1      }
 261          
 262          
 263          
 264          void send164(uchar m)
 265          {uchar k,i,b;
 266   1      k=SEG7[m];
 267   1      i=8;
 268   1      CLK=0;
 269   1      while (i--)
 270   1              {b=k>>i;
 271   2          if((b&0x01)==0x01)DATA=1;//判断b的最低位的值是多少
 272   2            else  DATA=0;
 273   2           CLK=1; _nop_();
 274   2          CLK=0;
 275   2           } 
 276   1              
 277   1      }
 278                                              //P2 KOU                                                 //P1kou     
 279                                              
 280          void dis_time(uchar m)
 281          {
 282   1         P1&=0XC3;/// 等价于 P1=P1&0xc3;;准备送段码  ,位码口全部清零
 283   1         P2=0X00;////准备送段码,位码口全部清零
 284   1               {switch(m)
 285   2                   {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
 286   3                     case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
 287   3                     case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
 288   3                     case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
 289   3                     case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
 290   3                      case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
 291   3                      case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
 292   3                      case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
 293   3                      case 8:{send164(sec/10);P1|=act[m];P2=0X00;}break;
 294   3                      case 9:{send164(sec%10);P1|=act[m];P2=0X00;}break;
 295   3                      case 10:{send164(0);P1|=act[m];P2=0X00;}break;
 296   3                      case 11:{send164(0);P1|=act[m];P2=0X00;}break;
 297   3                      default:break;}
 298   2                    }
 299   1      
 300   1      }
 301          
 302          
C51 COMPILER V7.07   ALARM001                                                              02/02/2009 01:27:16 PAGE 6   

 303          void dis_adjtime(uchar m)
 304          {  
 305   1           if(cnt>100)
 306   1              { 
 307   2                  P1&=0XC3;
 308   2                 P2=0X00;
 309   2                              switch(m)
 310   2                              {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
 311   3                            case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
 312   3                            case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
 313   3                            case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
 314   3                             case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
 315   3                             case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
 316   3                              case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
 317   3                              case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
 318   3                              case 8:{send164(0);P1&=act[m];P2=0X00;}break;
 319   3                              case 9:{send164(0);P1&=act[m];P2=0X00;}break;
 320   3                              case 10:{send164(0);P1&=act[m];P2=0X00;}break;
 321   3                             case 11:{send164(0);P1&=act[m];P2=0X00;}break;
 322   3                                default:break;
 323   3                                                }
 324   2                    }
 325   1            else 
 326   1              {  
 327   2                  P1&=0XC3;
 328   2                 P2=0X00;
 329   2              }
 330   1      }
 331          
 332          void dis_almtime(uchar m)
 333          {
 334   1           if(cnt>100)
 335   1              { 
 336   2                  P1&=0XC3;
 337   2                 P2=0X00;
 338   2                              switch(m)
 339   2                              {case 0:{send164(ALM_mon/10);P2|=act[m];P1&=0XC3;}break;
 340   3                            case 1:{send164(ALM_mon%10);P2|=act[m];P1&=0XC3;}break;
 341   3                            case 2:{send164(ALM_day/10);P2|=act[m];P1&=0XC3;}break;
 342   3                            case 3:{send164(ALM_day%10);P2|=act[m];P1&=0XC3;}break;
 343   3                             case 4:{send164(ALM_hou/10);P2|=act[m];P1&=0XC3;}break;
 344   3                             case 5:{send164(ALM_hou%10);P2|=act[m];P1&=0XC3;}break;
 345   3                              case 6:{send164(ALM_min/10);P2|=act[m];P1&=0XC3;}break;
 346   3                              case 7:{send164(ALM_min%10);P2|=act[m];P1&=0XC3;}break;
 347   3                              case 8:{send164(0);P1&=act[m];P2=0X00;}break;
 348   3                              case 9:{send164(0);P1&=act[m];P2=0X00;}break;
 349   3                              case 10:{send164(0);P1&=act[m];P2=0X00;}break;
 350   3                             case 11:{send164(0);P1&=act[m];P2=0X00;}break;
 351   3                                default:break;
 352   3                                                }
 353   2                    }
 354   1            else 
 355   1              {  
 356   2                  P1&=0XC3;
 357   2                 P2=0X00;
 358   2              }
 359   1      }
 360          
 361          void TIMERIni(void)
 362          {
 363   1             TMOD=0X11;
 364   1              TH0=0xF4;TL0=0x48;TH1=0X3C;TL1=0XAF;
C51 COMPILER V7.07   ALARM001                                                              02/02/2009 01:27:16 PAGE 7   

 365   1             EA=1;
 366   1              ET0=1;
 367   1              ET1=1;
 368   1             TR1=1;TR0=1;
 369   1      }
 370          
 371          
 372          
 373           
 374             
 375          /*******************************************************************
 376                               起动总线函数               
 377          函数原型: void  Start_I2c();  
 378          功能:       启动I2C总线,即发送I2C起始条件.
 379            
 380          ********************************************************************/
 381          void Start_I2c(void)
 382          {
 383   1        SDA=1;   /*发送起始条件的数据信号*/
 384   1        _Nop();
 385   1        _Nop();
 386   1        SCL=1;
 387   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
 388   1        _Nop();
 389   1        _Nop();
 390   1        _Nop();
 391   1        _Nop(); 
 392   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
 393   1        SDA=0;   /*发送起始信号*/
 394   1        _Nop();    /* 起始条件锁定时间大于4μs*/
 395   1        _Nop();
 396   1        _Nop();
 397   1        _Nop();
 398   1        _Nop(); 
 399   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
 400   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
 401   1        _Nop();
 402   1        _Nop();
 403   1        _Nop();
 404   1        _Nop();
 405   1      }
 406          
 407           
 408          
 409          
 410          /*******************************************************************
 411                                结束总线函数               
 412          函数原型: void  Stop_I2c();  
 413          功能:       结束I2C总线,即发送I2C结束条件.
 414            
 415          ********************************************************************/
 416          void Stop_I2c(void)
 417          {
 418   1        SDA=0;  /*发送结束条件的数据信号*/
 419   1        _Nop();   /*发送结束条件的时钟信号*/
 420   1        _Nop();   /*发送结束条件的时钟信号*/
 421   1        SCL=1;  /*结束条件建立时间大于4μs*/
 422   1        _Nop();
 423   1        _Nop();
 424   1        _Nop();
 425   1        _Nop();
 426   1        _Nop();
C51 COMPILER V7.07   ALARM001                                                              02/02/2009 01:27:16 PAGE 8   

 427   1        SDA=1;  /*发送I2C总线结束信号*/
 428   1        _Nop();
 429   1        _Nop();
 430   1        _Nop();
 431   1        _Nop();
 432   1        _Nop();
 433   1      }
 434          
 435           
 436          
 437          
 438          /*******************************************************************
 439                           字节数据传送函数               
 440          函数原型: void  SendByte(uchar c);
 441          功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
 442               此状态位进行操作.(不应答或非应答都使ack=0 假)     

⌨️ 快捷键说明

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