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

📄 sz.lst

📁 1302专用时钟芯片 1602 LCD 显示
💻 LST
📖 第 1 页 / 共 3 页
字号:
 197          //===============================================
 198          /******************************************************************** 
 199          * 名称: v_RTInputByte 
 200          * 功能: 往DS1302写入1Byte数据   * 输入: ucDa 写入的数据      * 返回值: 无
 201          ***********************************************************************/
 202          void v_RTInputByte(uchar ucDa) 
 203          { uchar i;ACC = ucDa;for(i=8; i>0; i--){T_IO = ACC0; T_CLK = 1;T_CLK = 0;ACC = ACC >> 1; } }
 204          /******************************************************************** 
 205          * 名称: uchar uc_RTOutputByte     * 功能: 从DS1302读取1Byte数据
 206          * 返回值: ACC
 207          ***********************************************************************/
 208          uchar uc_RTOutputByte(void) 
 209          { uchar i;for(i=8; i>0; i--){ACC = ACC >>1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0;} return(ACC); }
 210          /******************************************************************** 
 211          * 名称: v_W1302     * 说明: 先写地址,后写命令/数据   * 功能: 往DS1302写入数据
 212          * 调用: v_RTInputByte()     * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
 213          * 返回值: 无
 214          ***********************************************************************/
 215          void v_W1302(uchar ucAddr, uchar ucDa)
 216          {T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /* 地址,命令 */v_RTInputByte(ucDa); /* 写1Byte数据*
             -/T_CLK = 1;T_RST =0;} 
 217          /******************************************************************** 
 218          * 说明: 先写地址,后读命令/数据    * 功能: 读取DS1302某地址的数据
 219          * 调用: v_RTInputByte() , uc_RTOutputByte()   * 输入: ucAddr: DS1302地址
 220          * 返回值: ucDa :读取的数据
 221          ***********************************************************************/
 222          uchar uc_R1302(uchar ucAddr)
 223          {
 224   1              uchar ucDa;
 225   1              T_RST = 0;T_CLK = 0;T_RST = 1;
 226   1              v_RTInputByte(ucAddr); /* 地址,命令 */ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
 227   1              T_CLK = 1;T_RST =0;
 228   1              return(ucDa);
 229   1      }
 230          
 231          /********************************************************************
 232          * 名称: v_Set1302      * 功能: 设置初始时间    * 调用: v_W1302() 
 233          * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 
 234          * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 235          * 返回值: 无
 236          ***********************************************************************/
 237          void v_Set1302(uchar *pSecDa) 
 238          {
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 5   

 239   1              uchar i;
 240   1              uchar ucAddr = 0x80; 
 241   1              v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
 242   1                      for(i =7;i>0;i--)
 243   1                      { 
 244   2                      v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
 245   2                      pSecDa++;
 246   2                      ucAddr +=2;
 247   2                      }
 248   1              v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
 249   1      }
 250          /******************************************************************** 
 251          * 名称: v_Get1302* 功能: 读取DS1302当前时间* 调用: uc_R1302() 
 252          * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 253          ***********************************************************************/
 254          void v_Get1302(uchar ucCurtime[]) 
 255          {
 256   1              uchar i;
 257   1              uchar ucAddr = 0x81;
 258   1                      for (i=0;i<7;i++)
 259   1                      {
 260   2                      ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 261   2                      ucAddr += 2;
 262   2                      }
 263   1      } 
 264          
 265          
 266          void scan()
 267          {
 268   1              P2=0xff;
 269   1                      if(sure==0)
 270   1                      {
 271   2      
 272   2                         DQ1=0;
 273   2      //------------------以下是年
 274   2               while(!sure);//等待 按键撤消
 275   2                              delayMs (80);
 276   2                              while(sure)  //直到 确认 键再次被按下时  才退出
 277   2                              {
 278   3                                      if(up==0)
 279   3                                      {
 280   4                                      while(!up);     delayMs (40);           
 281   4                                      mid[6]++;
 282   4                                      if((mid[6]&0x0f)>9){mid[6]=mid[6]+6;}
 283   4                      if(mid[6]>=0x99){mid[6]=0;}
 284   4                                      v_Set1302(mid); xianshi();
 285   4                                  }
 286   3                                      if(down==0)
 287   3                                      {while(!down);          delayMs (40);   
 288   4                                       if(mid[6]==0){mid[6]=0x99;}            
 289   4                                      else {mid[6]--;}
 290   4                                      if((mid[6]&0x0f)==0x0f){mid[6]=mid[6]-6;}
 291   4                                         
 292   4                                      v_Set1302(mid); xianshi();}
 293   3                              }
 294   2                 while(!sure);  
 295   2                              delayMs (80);
 296   2      
 297   2      
 298   2      //------------------以下是 月
 299   2      
 300   2                              while(sure)  //直到 确认 键再次被按下时  才退出
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 6   

 301   2                              {
 302   3                                      if(up==0)
 303   3                                      {
 304   4                                      while(!up);     delayMs (40);                   
 305   4                                      mid[4]++;
 306   4                                      if((mid[4]&0x0f)>9){mid[4]=mid[4]+6;} 
 307   4                                   if(mid[4]>=0x13){mid[4]=1;}
 308   4                                      v_Set1302(mid); xianshi();
 309   4                                  }
 310   3                                      if(down==0)
 311   3                                      {while(!down);          delayMs (40);           
 312   4                                      mid[4]--;
 313   4                                      if((mid[4]&0x0f)==0x0f){mid[4]=mid[4]-6;}
 314   4                                      if((mid[4]==0))
 315   4                                      {
 316   5                                      mid[4]=0x12;
 317   5                                      }
 318   4      
 319   4                                      v_Set1302(mid); xianshi();}
 320   3                              }
 321   2                 while(!sure);  
 322   2      
 323   2              delayMs (80);
 324   2      //------------------以下是日
 325   2                         
 326   2                              while(sure)  //直到 确认 键再次被按下时  才退出
 327   2                              {
 328   3                                      if(up==0)
 329   3                                      {
 330   4                                      while(!up);             delayMs (40);           
 331   4                                      mid[3]++;
 332   4                                      if((mid[3]&0x0f)>9){mid[3]=mid[3]+6;}
 333   4                                   if(mid[3]>=0x32){mid[3]=1;}
 334   4                                      v_Set1302(mid); xianshi();
 335   4                                  }
 336   3                                      if(down==0)
 337   3                                      {while(!down);                  delayMs (40);   
 338   4                                      mid[3]--;
 339   4                                      if((mid[3]&0x0f)==0x0f){mid[3]=mid[3]-6;}
 340   4                                      //if((mid[3]==0x0f)){mid[3]=9;}
 341   4                                      if((mid[3]==0)){mid[3]=0x31;}
 342   4      
 343   4                                      v_Set1302(mid); xianshi();}
 344   3                              }
 345   2                 while(!sure);  
 346   2              delayMs (80);
 347   2      
 348   2                                 
 349   2      
 350   2      //------------------以下是星期  
 351   2      
 352   2                              while(sure)  //直到 确认 键再次被按下时  才退出
 353   2                              {
 354   3                                      if(up==0)
 355   3                                      {
 356   4                                      while(!up);             delayMs (40);           
 357   4                                      mid[5]++;if((mid[5]&0x0f)>=8){mid[5]=1;}
 358   4                                      v_Set1302(mid); xianshi();
 359   4                                  }
 360   3                                      if(down==0)
 361   3                                      {while(!down);          delayMs (40);           
 362   4                                      mid[5]--;if((mid[5]&0x0f)==0){mid[5]=7;}
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 7   

 363   4                                      v_Set1302(mid); xianshi();}
 364   3                              }
 365   2                 while(!sure);        delayMs (80);
 366   2      
 367   2      
 368   2      
 369   2      
 370   2      
 371   2      
 372   2      
 373   2      
 374   2      
 375   2      
 376   2      
 377   2      //-----------------以下是小时
 378   2      
 379   2      
 380   2              while(sure)  //直到 确认 键再次被按下时  才退出
 381   2                              {
 382   3                                      if(up==0)
 383   3                                      {
 384   4                                      while(!up);             delayMs (40);           
 385   4                                      mid[2]++;
 386   4                                      if((mid[2]&0x0f)>9){mid[2]=mid[2]+6;}
 387   4                                   if(mid[2]>=0x24){mid[2]=0;}
 388   4                                      v_Set1302(mid); xianshi();
 389   4                                  }
 390   3                                      if(down==0)
 391   3                                      {while(!down);                  delayMs (40);   
 392   4                                      if((mid[2]==0x00)){mid[2]=0x23;}        
 393   4                                      else {mid[2]--;  }
 394   4      
 395   4                                      if((mid[2]&0x0f)==0x0f){mid[2]=mid[2]-6;}
 396   4                              
 397   4      
 398   4                                      v_Set1302(mid); xianshi();}
 399   3                              }
 400   2                 while(!sure); 
 401   2      
 402   2              delayMs (80);

⌨️ 快捷键说明

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