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

📄 时钟ds1302lcd.lst

📁 单片机的实用程序代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 196   2                      pReDa++;
 197   2              }
 198   1              T_CLK = 1;
 199   1              T_RST = 0;
 200   1      }
 201          
 202          /********************************************************************
 203          * 名称   :  v_BurstR1302R(uchar *pReDa)
 204          * 功能   :  读取DS1302寄存器数据
 205          * 输入   :  pReDa: 寄存器数据地址
 206          * 返回值 :  无
 207          ***********************************************************************/
 208          void v_BurstR1302R(uchar *pReDa)
 209          {
 210   1              uchar i;
 211   1              T_RST = 0;
 212   1              T_CLK = 0;
 213   1              T_RST = 1;
 214   1              v_RTInputByte(0xff);            //0xbf:时钟多字节读命令
 215   1              for(i=31; i>0; i--)             //31Byte 寄存器数据
 216   1              {
 217   2                      *pReDa = uc_RTOutputByte(); //读1Byte数据
 218   2                      pReDa++;
 219   2              }
 220   1              T_CLK = 1;
 221   1              T_RST = 0;
 222   1      }
 223          
 224          /********************************************************************
 225          * 名称  :  v_Set1302(uchar *pSecDa)
 226          * 功能  :  设置初始时间
 227          * 输入  :  pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
 228          *                                                                  7Byte (BCD码) 1B 1B 1B 1B 1B 1B  1B
 229          * 返回值: 无
 230          ***********************************************************************/
 231          void v_Set1302(uchar *pSecDa)
 232          {
 233   1              uchar i;
 234   1              uchar ucAddr = 0x80;
 235   1              v_W1302(0x8e, 0x00);            //控制命令,WP=0,写操作
 236   1              for(i=7; i>0; i--)
 237   1              {
 238   2                      v_W1302(ucAddr, *pSecDa);   // 秒 分 时 日 月 星期 年
 239   2                      pSecDa++;
 240   2                      ucAddr += 2;
 241   2              }
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 5   

 242   1              v_W1302(0x8e, 0x80);            //控制命令,WP=1,写保护
 243   1      }
 244          
 245          /********************************************************************
 246          * 名称   : v_Get1302(uchar ucCurtime[])
 247          * 功能   : 读取DS1302当前时间
 248          * 输入   : ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
 249          *                                         7Byte (BCD码) 1B 1B 1B 1B 1B  1B  1B
 250          * 返回值 : 无
 251          ***********************************************************************/
 252          void v_Get1302(uchar ucCurtime[])
 253          {
 254   1              uchar i;
 255   1              uchar ucAddr = 0x81;
 256   1              for(i=0; i<7; i++)
 257   1              {
 258   2                      ucCurtime[i] = uc_R1302(ucAddr);    //格式为: 秒 分 时 日 月 星期 年
 259   2                      ucAddr += 2;
 260   2              }
 261   1      }
 262          
 263          /********************************************************************
 264          * 名称 : dectobcd(uchar dec)
 265          * 功能 : DEC码转换为BCD码
 266          * 输入 : dec码
 267          * 输出 : bcd码
 268          ***********************************************************************/
 269          uchar dectobcd(uchar dec)
 270          {
 271   1              uchar bcd;
 272   1              bcd = 0;
 273   1              while(dec >= 10)
 274   1              {              
 275   2                      dec -= 10;                         
 276   2                      bcd++;
 277   2              } 
 278   1              bcd <<= 4;
 279   1              bcd |= dec;
 280   1              return bcd;
 281   1      }
 282          
 283          /********************************************************************
 284          * 名称 : bcdtodec(uchar bcd)
 285          * 功能 : BCD码转换为DEC码
 286          * 输入 : bcd码
 287          * 输出 : dec码
 288          ***********************************************************************/
 289          uchar bcdtodec(uchar bcd)
 290          {
 291   1              uchar data1;
 292   1              data1 = bcd & 0x0f;     //取BCD低4位
 293   1              bcd = bcd & 0x70;       //剔除BCD的最高位和低4位。
 294   1              data1 += bcd >> 1;
 295   1              data1 += bcd >> 3;      //用位移代替乘法运算
 296   1              return data1;
 297   1      }
 298          
 299          /********************************************************************
 300          * 名称 : Write_DS1302Init()
 301          * 功能 : 往DS1302中写入数据。最开始显示的数据就是在这里设置的。
 302          * 输入 : 无
 303          * 输出 : 无
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 6   

 304          ***********************************************************************/
 305          void Write_DS1302Init(void)
 306          {
 307   1              v_W1302(0x8e,0);
 308   1              v_W1302(0x80,0x50);     //写入秒
 309   1              v_W1302(0x8e,0);
 310   1              v_W1302(0x82,0x59);     //写入分
 311   1              v_W1302(0x8e,0);
 312   1              v_W1302(0x84,0x07);     //写入小时
 313   1              v_W1302(0x8e,0);
 314   1              v_W1302(0x86,0x08);     //写入日
 315   1              v_W1302(0x8e,0);
 316   1              v_W1302(0x88,0x08);     //写入月
 317   1              v_W1302(0x8e,0);
 318   1              v_W1302(0x8a,0x05);     //写入星期
 319   1              v_W1302(0x8e,0);
 320   1              v_W1302(0x8c,0x08);     //写入年        
 321   1      }
 322          
 323          /********************************************************************
 324          * 名称 : Run_DS1302(void)
 325          * 功能 : 读出DS1302中的数据,并在液晶1602上进行显示
 326          * 输入 : 无
 327          * 输出 : 无
 328          ***********************************************************************/
 329          void Run_DS1302(void)
 330          {
 331   1              uchar sec, min, hour, day, month, year;
 332   1              while(1)
 333   1              {
 334   2                      v_W1302(0x8f, 0);
 335   2                      sec = bcdtodec(uc_R1302(0x81));    //读出DS1302中的秒
 336   2                      v_W1302(0x8f, 0);
 337   2                      min = bcdtodec(uc_R1302(0x83));    //读出DS1302中的分
 338   2                      v_W1302(0x8f, 0);
 339   2                      hour = bcdtodec(uc_R1302(0x85));   //读出DS1302中的小时
 340   2                      v_W1302(0x8f, 0);
 341   2                      day = bcdtodec(uc_R1302(0x87));    //读出DS1302中的日
 342   2                      v_W1302(0x8f, 0);
 343   2                      month = bcdtodec(uc_R1302(0x89));  //读出DS1302中的月
 344   2                      v_W1302(0x8f, 0);
 345   2                      year = bcdtodec(uc_R1302(0x8d));   //读出DS1302中的年
 346   2      
 347   2                      P0 = table[hour / 10 % 10];
 348   2                      P2 = 0;
 349   2                      Delay_1ms(2);
 350   2                      P0 = table[hour % 10];
 351   2                      P2 = 1;
 352   2                      Delay_1ms(2);
 353   2                      P0 = 0x80;
 354   2                      P2 = 2;
 355   2                      Delay_1ms(2);
 356   2                      P0 = table[min / 10 % 10];
 357   2                      P2 = 3;
 358   2                      Delay_1ms(2);
 359   2                      P0 = table[min % 10];
 360   2                      P2 = 4;
 361   2                      Delay_1ms(2);
 362   2                      P0 = 0x80;
 363   2                      P2 = 5;
 364   2                      Delay_1ms(2);
 365   2                      P0 = table[sec / 10 % 10];
C51 COMPILER V7.02b   蔩钟DS1302LCD                                                        02/25/2010 14:59:24 PAGE 7   

 366   2                      P2 = 6;
 367   2                      Delay_1ms(2);
 368   2                      P0 = table[sec % 10];
 369   2                      P2 = 7;
 370   2                      Delay_1ms(2);
 371   2              }
 372   1      } 
 373          
 374          /********************************************************************
 375          * 名称 : Main(void)
 376          * 功能 : 主函数
 377          * 输入 : 无
 378          * 输出 : 无
 379          ***********************************************************************/ 
 380          void Main(void)
 381          {
 382   1              Write_DS1302Init();
 383   1              Run_DS1302();
 384   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    685    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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