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

📄 200926.lst

📁 菜鸟板的时钟 第一次学51 师兄们帮小弟看看 还有很多要改进的地方
💻 LST
📖 第 1 页 / 共 3 页
字号:
 242   2                              }
 243   1                         DQ=1;
 244   1                         for(i=0;i<8;i++){delay15us();delay15us();delay15us();delay15us();}//Delay_uS(45);
 245   1                          
 246   1      }
 247          
 248          bit readTS(void)                                                //读DS18B20数据位
 249          {
 250   1      bit d;
 251   1      DQ=1;
 252   1      DQ=0;
 253   1      _Nop();_Nop();//_Nop();
 254   1      DQ=1;
 255   1      _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();//_Nop();_Nop();_Nop();_Nop();_Nop();_Nop()
             -;_Nop();
 256   1      d=DQ;_Nop();_Nop();
 257   1      DQ=1;
 258   1       BDelay_uS(5);//delay15us();delay15us();delay15us();delay15us();
 259   1      //DQ=1;
 260   1      return d;
 261   1      }
 262          
 263          
 264          uchar readBTS(void)                                             //读1字节
 265          {char i,j;
 266   1      bit d;
 267   1      uchar a;
 268   1      j=0;
 269   1      for(i=0;i<8;i++)
 270   1      {
 271   2      d=readTS();
 272   2      if(d)j+=1;
 273   2      j=_cror_(j,1);
 274   2      }
 275   1      a=(uchar)j;
 276   1      return a;
 277   1      }
 278          
 279          void write0TS(void)                                             //写DS18B20数据位0
 280          {
 281   1      DQ=1;
 282   1      DQ=0;
 283   1      BDelay_uS(5);
 284   1      _Nop();_Nop();_Nop();_Nop();_Nop();
 285   1      DQ=1;
 286   1      _Nop();
 287   1      _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
 288   1      }
 289          //********************************************************
 290          void write1TS(void)                                     //写DS18B20数据位1
 291          {
 292   1      DQ=1;
 293   1      DQ=0;
 294   1      _Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();
 295   1      DQ=1;
 296   1      
 297   1      BDelay_uS(5);
 298   1      }
 299          
 300          void writeBTS(uchar byte)                               //写1字节
 301          {uchar i;
 302   1      for(i=0;i<8;i++)
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 6   

 303   1      {
 304   2      if(byte&0x01)
 305   2            write1TS();
 306   2      else
 307   2           write0TS();
 308   2      byte=byte>>1;
 309   2      }
 310   1      }
 311          
 312          
 313          
 314          void gettempTS(void)                                    //读取测得的环境温度
 315          {uchar a,d;
 316   1      DS18B20_init();
 317   1      writeBTS(0xcc);
 318   1      writeBTS(0x44);
 319   1      Delay1mS(700);
 320   1      DS18B20_init();
 321   1      writeBTS(0xcc);
 322   1      writeBTS(0xbe);
 323   1      btemp2=readBTS();_Nop();_Nop();
 324   1      btemp1=readBTS();
 325   1      readBTS();readBTS();readBTS();readBTS();
 326   1      readBTS();readBTS();readBTS();
 327   1      a=(btemp2&0xf0)>>4;
 328   1      d=(btemp1&0x07)<<4;
 329   1      btemp=a|d;
 330   1      
 331   1      }
 332          
 333          //////////////////断码输出//////////////////////
 334          void send164(uchar m)
 335          {uchar k,i,b;
 336   1      k=SEG7[m];
 337   1      i=8;
 338   1      CLK=0;
 339   1      while (i--)
 340   1              {b=k>>i;
 341   2          if((b&0x01)==0x01)DATA=1;//判断b的最低位的值是多少
 342   2            else  DATA=0;
 343   2           CLK=1; _Nop();
 344   2          CLK=0;
 345   2           } 
 346   1              
 347   1      }
 348                                              //P2 KOU                                                 //P1kou     
 349                                              
 350          void dis_time(uchar m)
 351          {
 352   1         P1&=0XC3;/// 等价于 P1=P1&0xc3;;准备送段码  ,位码口全部清零
 353   1         P2=0X00;////准备送段码,位码口全部清零
 354   1         
 355   1               {switch(m)
 356   2                   {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
 357   3                     case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
 358   3                     case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
 359   3                     case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
 360   3                     case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
 361   3                      case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
 362   3                      case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
 363   3                      case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
 364   3                      case 8:{send164(sec/10);P1|=act[m];P2=0X00;}break;
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 7   

 365   3                      case 9:{send164(sec%10);P1|=act[m];P2=0X00;}break;
 366   3                      case 10:{send164(btemp1/10);P1|=act[m];P2=0X00;}break;
 367   3                      case 11:{send164(btemp1%10);P1|=act[m];P2=0X00;}break;
 368   3                      
 369   3                      default:break;}
 370   2                    }
 371   1      
 372   1      }
 373          
 374          
 375          void dis_adjtime(uchar m)
 376          {  
 377   1           if(cnt>200)
 378   1              { 
 379   2                  P1&=0XC3;
 380   2                 P2=0X00;
 381   2                              switch(m)
 382   2                              {case 0:{send164(mon/10);P2|=act[m];P1&=0XC3;}break;
 383   3                            case 1:{send164(mon%10);P2|=act[m];P1&=0XC3;}break;
 384   3                            case 2:{send164(day/10);P2|=act[m];P1&=0XC3;}break;
 385   3                            case 3:{send164(day%10);P2|=act[m];P1&=0XC3;}break;
 386   3                             case 4:{send164(hou/10);P2|=act[m];P1&=0XC3;}break;
 387   3                             case 5:{send164(hou%10);P2|=act[m];P1&=0XC3;}break;
 388   3                              case 6:{send164(min/10);P2|=act[m];P1&=0XC3;}break;
 389   3                              case 7:{send164(min%10);P2|=act[m];P1&=0XC3;}break;
 390   3                              case 8:{send164(0);P1&=act[m];P2=0X00;}break;
 391   3                              case 9:{send164(0);P1&=act[m];P2=0X00;}break;
 392   3                              case 10:{send164(0);P1&=act[m];P2=0X00;}break;
 393   3                             case 11:{send164(0);P1&=act[m];P2=0X00;}break;
 394   3                                default:break;
 395   3                                                }
 396   2                    }
 397   1            else 
 398   1              {  
 399   2                  P1&=0XC3;
 400   2                 P2=0X00;
 401   2              }
 402   1      }
 403          
 404          
 405          void TIMERIni(void)
 406          {
 407   1             TMOD=0X11;
 408   1              TH0=0xF8;TL0=0x30;TH1=0X3C;TL1=0XAF;
 409   1             EA=1;
 410   1              ET0=1;
 411   1              ET1=1;
 412   1             TR1=1;TR0=1;
 413   1      }
 414          
 415          
 416          
 417           
 418             
 419          /*******************************************************************
 420                               起动总线函数               
 421          函数原型: void  Start_I2c();  
 422          功能:       启动I2C总线,即发送I2C起始条件.
 423            
 424          ********************************************************************/
 425          void Start_I2c(void)
 426          {
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 8   

 427   1        SDA=1;   /*发送起始条件的数据信号*/
 428   1        _Nop();
 429   1        _Nop();
 430   1        SCL=1;
 431   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
 432   1        _Nop();
 433   1        _Nop();
 434   1        _Nop();
 435   1        _Nop(); 
 436   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
 437   1        SDA=0;   /*发送起始信号*/
 438   1        _Nop();    /* 起始条件锁定时间大于4μs*/
 439   1        _Nop();
 440   1        _Nop();
 441   1        _Nop();
 442   1        _Nop(); 
 443   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
 444   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
 445   1        _Nop();
 446   1        _Nop();
 447   1        _Nop();
 448   1        _Nop();
 449   1      }
 450          
 451           
 452          
 453          
 454          /*******************************************************************
 455                                结束总线函数               
 456          函数原型: void  Stop_I2c();  
 457          功能:       结束I2C总线,即发送I2C结束条件.
 458            
 459          ********************************************************************/
 460          void Stop_I2c(void)
 461          {
 462   1        SDA=0;  /*发送结束条件的数据信号*/
 463   1        _Nop();   /*发送结束条件的时钟信号*/
 464   1        _Nop();   /*发送结束条件的时钟信号*/
 465   1        SCL=1;  /*结束条件建立时间大于4μs*/
 466   1        _Nop();
 467   1        _Nop();
 468   1        _Nop();
 469   1        _Nop();
 470   1        _Nop();
 471   1        SDA=1;  /*发送I2C总线结束信号*/
 472   1        _Nop();
 473   1        _Nop();
 474   1        _Nop();
 475   1        _Nop();
 476   1        _Nop();
 477   1      }
 478          
 479           
 480          
 481          
 482          /*******************************************************************
 483                           字节数据传送函数               
 484          函数原型: void  SendByte(uchar c);
 485          功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
 486               此状态位进行操作.(不应答或非应答都使ack=0 假)     
 487               发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
 488          ********************************************************************/
C51 COMPILER V7.07   200926                                                                02/06/2009 15:01:06 PAGE 9   

 489          void  SendByte(uchar c)
 490          {

⌨️ 快捷键说明

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