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

📄 ds1302.lst

📁 用单片机驱动驱动液晶显示器
💻 LST
📖 第 1 页 / 共 4 页
字号:
 230   2              Time->DateString[2] = Time->Year/10 + '0';
 231   2              Time->DateString[3] = Time->Year%10 + '0';
 232   2      }
 233   1      else
 234   1      { 
 235   2              Time->DateString[0] = ' ';
 236   2              Time->DateString[1] = ' ';               
 237   2              Time->DateString[2] = ' ';
 238   2              Time->DateString[3] = ' ';
 239   2      }
 240   1      Time->DateString[4] = '/';
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 5   

 241   1      if(hide_month<2)
 242   1      {
 243   2              Time->DateString[5] = Time->Month/10 + '0';
 244   2              Time->DateString[6] = Time->Month%10 + '0';
 245   2      }
 246   1      else
 247   1      {
 248   2              Time->DateString[5] = ' ';
 249   2              Time->DateString[6] = ' ';
 250   2      }
 251   1      Time->DateString[7] = '/';
 252   1      if(hide_day<2)
 253   1      {
 254   2              Time->DateString[8] = Time->Day/10 + '0';
 255   2              Time->DateString[9] = Time->Day%10 + '0';
 256   2      }
 257   1      else
 258   1      {
 259   2              Time->DateString[8] = ' ';
 260   2              Time->DateString[9] = ' ';          
 261   2      }
 262   1      if(hide_week<2)
 263   1      {
 264   2              week_value[0] = Time->Week%10 + '0';  //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为等
             -一下要在最后显示
 265   2      }
 266   1      else
 267   1      {
 268   2              week_value[0] = ' ';
 269   2      }
 270   1      week_value[1] = '\0';
 271   1      
 272   1      Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符
 273   1      }
 274          
 275          void TimeToStr(SYSTEMTIME *Time)  //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[];
 276          {   if(hide_hour<2)
 277   1      {
 278   2              Time->TimeString[0] = Time->Hour/10 + '0';
 279   2              Time->TimeString[1] = Time->Hour%10 + '0';
 280   2      }
 281   1      else
 282   1      {
 283   2              Time->TimeString[0] = ' ';
 284   2              Time->TimeString[1] = ' ';
 285   2      }
 286   1      Time->TimeString[2] = ':';
 287   1      if(hide_min<2)
 288   1      {
 289   2              Time->TimeString[3] = Time->Minute/10 + '0';
 290   2              Time->TimeString[4] = Time->Minute%10 + '0';
 291   2      }
 292   1      else
 293   1      {
 294   2              Time->TimeString[3] = ' ';
 295   2              Time->TimeString[4] = ' ';
 296   2      }
 297   1      Time->TimeString[5] = ':';
 298   1      if(hide_sec<2)
 299   1      {
 300   2              Time->TimeString[6] = Time->Second/10 + '0';
 301   2              Time->TimeString[7] = Time->Second%10 + '0';
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 6   

 302   2      }
 303   1      else
 304   1      {
 305   2              Time->TimeString[6] = ' ';
 306   2              Time->TimeString[7] = ' ';
 307   2      }
 308   1      Time->DateString[8] = '\0';
 309   1      }
 310          
 311          
 312          void Initial_DS1302(void)   //时钟芯片初始化
 313          {   
 314   1              unsigned char Second=Read1302(DS1302_SECOND);
 315   1              if(Second&0x80)       //判断时钟芯片是否关闭      
 316   1              {
 317   2                      Write1302(0x8e,0x00); //写入允许
 318   2                      Write1302(0x8c,0x07); //以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55
 319   2                      Write1302(0x88,0x07);
 320   2                      Write1302(0x86,0x25);
 321   2                      Write1302(0x8a,0x07);
 322   2                      Write1302(0x84,0x23);
 323   2                      Write1302(0x82,0x59);
 324   2                      Write1302(0x80,0x55);
 325   2                      Write1302(0x8e,0x80); //禁止写入
 326   2              }
 327   1      
 328   1      }
 329          
 330          /***********ds18b20子程序*************************/
 331          
 332          /***********ds18b20延迟子函数(晶振12MHz )*******/ 
 333          
 334          void delay_18B20(unsigned int i)
 335          {
 336   1              while(i--);
 337   1      }
 338          
 339          /**********ds18b20初始化函数**********************/
 340          
 341          void Init_DS18B20(void) 
 342          {
 343   1              unsigned char x=0;
 344   1              DQ = 1;          //DQ复位
 345   1              delay_18B20(8);  //稍做延时
 346   1              DQ = 0;          //单片机将DQ拉低
 347   1              delay_18B20(80); //精确延时 大于 480us
 348   1              DQ = 1;          //拉高总线
 349   1              delay_18B20(14);
 350   1              x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 351   1              delay_18B20(20);
 352   1      }
 353          
 354          /***********ds18b20读一个字节**************/  
 355          
 356          unsigned char ReadOneChar(void)
 357          {
 358   1              uchar i=0;
 359   1              uchar dat = 0;
 360   1              for (i=8;i>0;i--)
 361   1              {
 362   2                      DQ = 0; // 给脉冲信号
 363   2                      dat>>=1;
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 7   

 364   2                      DQ = 1; // 给脉冲信号
 365   2                      if(DQ)
 366   2                              dat|=0x80;
 367   2                      delay_18B20(4);
 368   2              }
 369   1              return(dat);
 370   1      }
 371          
 372          /*************ds18b20写一个字节****************/  
 373          
 374          void WriteOneChar(uchar dat)
 375          {
 376   1              unsigned char i=0;
 377   1              for (i=8; i>0; i--)
 378   1              {
 379   2                      DQ = 0;
 380   2                      DQ = dat&0x01;
 381   2                      delay_18B20(5);
 382   2                      DQ = 1;
 383   2                      dat>>=1;
 384   2              }
 385   1      }
 386          
 387          /**************读取ds18b20当前温度************/
 388          
 389          void ReadTemp(void)
 390          {
 391   1              unsigned char a=0;
 392   1              unsigned char b=0;
 393   1              unsigned char t=0;
 394   1      
 395   1              Init_DS18B20();
 396   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
 397   1              WriteOneChar(0x44);     // 启动温度转换
 398   1      
 399   1              delay_18B20(100);       // this message is wery important
 400   1      
 401   1              Init_DS18B20();
 402   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
 403   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 404   1      
 405   1              delay_18B20(100);
 406   1      
 407   1              a=ReadOneChar();        //读取温度值低位
 408   1              b=ReadOneChar();                //读取温度值高位
 409   1              temp_value=b<<4;
 410   1              temp_value+=(a&0xf0)>>4;               
 411   1      }
 412          void temp_to_str()   //温度数据转换成液晶字符显示
 413          {
 414   1              TempBuffer[0]=temp_value/10+'0';  //十位
 415   1              TempBuffer[1]=temp_value%10+'0';  //个位
 416   1              TempBuffer[2]=0xdf;   //温度符号
 417   1              TempBuffer[3]='C';
 418   1              TempBuffer[4]='\0';
 419   1      }
 420          void Delay1ms(unsigned int count)
 421          {
 422   1              unsigned int i,j;
 423   1              for(i=0;i<count;i++)
 424   1                      for(j=0;j<120;j++);
 425   1      }
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 8   

 426          
 427          /*延时子程序*/
 428          void mdelay(uint delay)
 429          {       uint i;
 430   1      for(;delay>0;delay--)
 431   1      {for(i=0;i<62;i++) //1ms延时.
 432   2      {;}
 433   2      }
 434   1      }
 435          
 436          
 437          void outkey()                    //跳出调整模式,返回默认显示
 438          { uchar Second;
 439   1              if(out==0)         
 440   1              { mdelay(8); 
 441   2              count=0;
 442   2              hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
 443   2              Second=Read1302(DS1302_SECOND);
 444   2              Write1302(0x8e,0x00); //写入允许
 445   2              Write1302(0x80,Second&0x7f);
 446   2              Write1302(0x8E,0x80);          //禁止写入
 447   2              done=0;
 448   2              adjusttick=0;
 449   2              while(out==0);
 450   2      
 451   2              }
 452   1      }
 453          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 454          void Upkey()//升序按键
 455          {          
 456   1              Up=1;
 457   1              if(Up==0)
 458   1              {
 459   2                      mdelay(8);
 460   2                      switch(count)
 461   2                      {case 1:
 462   3                      if(done==1)
 463   3                      {
 464   4                              temp=Read1302(DS1302_SECOND);  //读取秒数

⌨️ 快捷键说明

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