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

📄 zh.lst

📁 基于单片机的步进电机课程设计(基于2803驱动芯片)
💻 LST
📖 第 1 页 / 共 3 页
字号:
 264          {   if(hide_hour<2)
 265   1          {
 266   2                Time->TimeString[0] = Time->Hour/16 + '0';
 267   2                Time->TimeString[1] = Time->Hour%16 + '0';
 268   2              }
 269   1                else
 270   1                  {
 271   2                    Time->TimeString[0] = ' ';
 272   2                    Time->TimeString[1] = ' ';
 273   2                      }
 274   1              Time->TimeString[2] = ':';
 275   1          if(hide_min<2)
 276   1              {
 277   2                Time->TimeString[3] = Time->Minute/16 + '0';
 278   2                Time->TimeString[4] = Time->Minute%16 + '0';
 279   2              }
 280   1                else
 281   1                  {
 282   2                    Time->TimeString[3] = ' ';
 283   2                    Time->TimeString[4] = ' ';
 284   2                  }
 285   1              Time->TimeString[5] = ':';
 286   1          if(hide_sec<2)
 287   1          {
 288   2                Time->TimeString[6] = Time->Second/16 + '0';
 289   2                Time->TimeString[7] = Time->Second%16 + '0';
 290   2          }
 291   1            else
 292   1             {
 293   2               Time->TimeString[6] = ' ';
 294   2               Time->TimeString[7] = ' ';
 295   2             }
 296   1              Time->DateString[8] = '\0';
 297   1      }
 298          
 299          
 300          void Initial_DS1302(void)   //时钟芯片初始化
 301          {   
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 6   

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

 364   1              unsigned char i=0;
 365   1              for (i=8; i>0; i--)
 366   1              {
 367   2                      DQ = 0;
 368   2                      DQ = dat&0x01;
 369   2              delay_18B20(5);
 370   2                      DQ = 1;
 371   2              dat>>=1;
 372   2       }
 373   1      }
 374          
 375          /**************读取ds18b20当前温度************/
 376          
 377          void ReadTemp(void)
 378          {
 379   1              unsigned char a=0;
 380   1              unsigned char b=0;
 381   1              unsigned char t=0;
 382   1      
 383   1              Init_DS18B20();
 384   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
 385   1              WriteOneChar(0x44);     // 启动温度转换
 386   1      
 387   1              delay_18B20(100);       // this message is wery important
 388   1      
 389   1              Init_DS18B20();
 390   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
 391   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 392   1      
 393   1              delay_18B20(100);
 394   1      
 395   1              a=ReadOneChar();        //读取温度值低位
 396   1              b=ReadOneChar();                //读取温度值高位
 397   1              temp_value=b<<4;
 398   1              temp_value+=(a&0xf0)>>4;               
 399   1      }
 400          void temp_to_str()   //温度数据转换成液晶字符显示
 401          {
 402   1        TempBuffer[0]=temp_value/10+'0';  //十位
 403   1        TempBuffer[1]=temp_value%10+'0';  //个位
 404   1        TempBuffer[2]=0xdf;   //温度符号
 405   1        TempBuffer[3]='C';
 406   1        TempBuffer[4]='\0';
 407   1      }
 408          void Delay1ms(unsigned int count)
 409          {
 410   1              unsigned int i,j;
 411   1              for(i=0;i<count;i++)
 412   1              for(j=0;j<120;j++);
 413   1      }
 414          
 415          /*延时子程序*/
 416          void mdelay(uint delay)
 417          {       uint i;
 418   1              for(;delay>0;delay--)
 419   1                      {for(i=0;i<62;i++) //1ms延时.
 420   2                      {;}
 421   2                      }
 422   1      }
 423          
 424          
 425          void outkey()                    //跳出调整模式,返回默认显示
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 8   

 426          { uchar Second;
 427   1        if(out==0||wireless_1==1)         
 428   1        { mdelay(8); 
 429   2              count=0;
 430   2              hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
 431   2              Second=Read1302(DS1302_SECOND);
 432   2          Write1302(0x8e,0x00); //写入允许
 433   2              Write1302(0x80,Second&0x7f);
 434   2              Write1302(0x8E,0x80);          //禁止写入
 435   2              done=0;           
 436   2              while(out==0);
 437   2              while(wireless_1==1);
 438   2        }
 439   1      }
 440          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 441          void Upkey()//升序按键
 442          {          
 443   1                      Up=1;
 444   1                      if(Up==0||wireless_2==1)
 445   1                                {
 446   2                                         mdelay(8);
 447   2                                             switch(count)
 448   2                                                {case 1:
 449   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 450   3                                                                        temp=temp+1;  //秒数加1
 451   3                                        up_flag=1;    //数据调整后更新标志
 452   3                                                                        if((temp&0x7f)>0x59)   //超过59秒,清零
 453   3                                        temp=0;                                                                 
 454   3                                                                        break;
 455   3                                                 case 2:
 456   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 457   3                                                                        temp=temp+1;  //分数加1
 458   3                                        up_flag=1;
 459   3                                                                        if(temp>0x59)          //超过59分,清零
 460   3                                                                        temp=0;
 461   3                                                                        break;
 462   3                                                 case 3:
 463   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 464   3                                                                        temp=temp+1;  //小时数加1
 465   3                                        up_flag=1;
 466   3                                                                        if(temp>0x23)   //超过23小时,清零
 467   3                                                                        temp=0;
 468   3                                                                        break;
 469   3                                                 case 4:
 470   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 471   3                                                                        temp=temp+1;  //星期数加1
 472   3                                        up_flag=1;
 473   3                                                                        if(temp>0x7)  
 474   3                                                                        temp=1;
 475   3                                                                        break;
 476   3                                                 case 5:
 477   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 478   3                                                                        temp=temp+1;  //日数加1
 479   3                                        up_flag=1;
 480   3                                                                        if(temp>0x31)
 481   3                                                                        temp=1;
 482   3                                                                        break;
 483   3                                                 case 6:
 484   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 485   3                                                                        temp=temp+1;  //月数加1
 486   3                                        up_flag=1;
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 9   

 487   3                                                                        if(temp>0x12)
 488   3                                                                        temp=1;
 489   3                                                                        break;
 490   3                                                 case 7:
 491   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 492   3                                                                        temp=temp+1;  //年数加1
 493   3                                        up_flag=1;
 494   3                                                                        if(temp>0x85)
 495   3                                                                        temp=0;
 496   3                                                                        break;
 497   3                                                     default:break;
 498   3                                                }
 499   2                                                
 500   2                                         while(Up==0);
 501   2                             while(wireless_2==1);
 502   2                                        }
 503   1      }
 504          
 505          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 506          void Downkey()//降序按键
 507          {           
 508   1                      Down=1;
 509   1                  if(Down==0||wireless_3==1)
 510   1                                {
 511   2                                         mdelay(8);
 512   2                                           switch(count)
 513   2                                                {case 1:
 514   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 515   3                                                                        temp=temp-1;                                              //秒数减1
 516   3                                        down_flag=1;       //数据调整后更新标志
 517   3                                                                        if(temp==0x7f)     //小于0秒,返回59秒
 518   3                                                                        temp=0x59;
 519   3                                                                        break;
 520   3                                                 case 2:
 521   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 522   3                                                                        temp=temp-1;  //分数减1
 523   3                                        down_flag=1;
 524   3                                                                        if(temp==-1)
 525   3                                                                        temp=0x59;      //小于0秒,返回59秒
 526   3                                                                        break;
 527   3                                                 case 3:
 528   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 529   3                                                                        temp=temp-1;  //小时数减1
 530   3                                        down_flag=1;
 531   3                                                                        if(temp==-1)
 532   3                                                                        temp=0x23;
 533   3                                                                        break;
 534   3                                                 case 4:
 535   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数

⌨️ 快捷键说明

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