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

📄 ds1302.h

📁 keilc 下编写的DS1302的简单驱动,
💻 H
字号:
/********************************************
* DS1302 Pin Configuration *
********************************************/
sbit DS_CLK = P0^6;
sbit DS_IO = P0^5;
sbit DS_RST = P0^4;

/********************************************
* Shift Data from Mcu in DS1302 *
********************************************/
void DS_Shift_In(uchar bIn)
{
   uchar i;
   for( i=0;i<8;i++ )
   {
      DS_CLK = 0; /* low logic level */
      if( bIn&0x01 ) DS_IO = 1; /* change data */
      else DS_IO = 0; /* LSB first */
      bIn = bIn>>1; /* next bit */
      DS_CLK = 1; /* raising edge in */
   } 
}

/********************************************
* Shift Data from DS1302 to MCU *
********************************************/
uchar DS_Shift_Out(void)
{
   uchar i, bData;
   DS_IO=1; /* release DS_IO */ 
   for( i=0;i<8;i++ )
   {
     DS_CLK = 1; /* high logic level */
     DS_CLK = 0; /* failing edge data removed */
     bData = bData>>1; /* store data */
     if( DS_IO ) bData = bData|0x80 ;
   } 
   return (bData);
}

/********************************************
* Read One Byte from DS1302 to MCU *
* Written in 25/10,2000. HIT *
* cr: Read Command * 
* 0x81-Read Second: CH XXX,XXXX(BCD) *
* 0X83-Read Minute: 0 XXX,XXXX(BCD) * 
* 0X85-Read Hour: 12/24 0 A/P x,xxxx * 
* 0X87-Read Date: 00 XX,XXXX(BCD) * 
* 0X89-Read Month: 000 X,XXXX(BCD) * 
* 0X8B-Read Week: 00000 XXX(BCD) * 
* 0X8D-Read Year: xxxx XXX(BCD) * 
********************************************/
uchar DS_Read(uchar cr)
{
   uchar dd=0;
   DS_RST = 0; /* initializing */
   DS_CLK = 0; /* SCLK low logic level */
   DS_RST = 1; /* Enabled */
   DS_Shift_In(cr); /* Write Command Byte */
   dd = DS_Shift_Out(); /* Read Data */
   DS_RST=0; /* Disabled */
   DS_CLK=1; 
   return (dd);
}

/*********************************************
* Read One Byte from DS1302 to MCU *
* Written in 25/10,2000. HIT *
* ord: Write Command,dd-data for writting* 
* 0x80-Write Second: CH XXX,XXXX(BCD) *
* 0X82-Write Minute: 0 XXX,XXXX(BCD) * 
* 0X84-Write Hour: 12/24 0 A/P x,xxxx * 
* 0X85-Write Date: 00 XX,XXXX(BCD) * 
* 0X86-Write Month: 000 X,XXXX(BCD) * 
* 0X8a-Write Week: 00000 XXX(BCD) * 
* 0X8c-Write Year: xxxx XXX(BCD) * 
*********************************************/

void DS_Write(uchar ord,uchar dd)
{
   DS_RST = 0;
   DS_CLK = 0;
   DS_RST = 1; /* Enable */
   DS_Shift_In(ord); /* Write Command */
   DS_Shift_In(dd); /* Write Data */
   DS_RST = 0;
   DS_CLK = 1;
}


/*********************************************
* Set DS1302 Clock Value *
* Written in 25/10,2000. HIT *
* dt[6]-dt[0]: Week,Year,Month,Date * 
* Hour,Minute,Second * 
*********************************************/

void DS_SetClock()
{
DS_Write(0x8E,0); /* Disabled Write Protect */
DS_Write(0x80,0x80); /* Disabled Clock */
DS_Write(0x8a,3); /* Week Day BCD */ 
DS_Write(0x8c,7); /* Year : BCD */ 
DS_Write(0x88,8); /* Month : BCD */ 
DS_Write(0x86,29); /* Date : BCD */ 
DS_Write(0x84,21); /* Hour(24) BCD */ 
DS_Write(0x82,58); /* Minute : BCD */ 
DS_Write(0x80,58&0x7F); /* Second : BCD */
DS_Write(0x8E,0x80); /* Enabled Write Protect */
}

/*********************************************
* Read DS1302 Clock Value *
* Written in 25/10,2000. HIT *
* dt[6]-dt[0]: Week,Year,Month,Date * 
* Hour,Minute,Second * 
*********************************************/

void DS_ReadClock()
{
a=DS_Read(0x8b); /* Week */ 
b=DS_Read(0x8d); /* Year */ 
c=DS_Read(0x89); /* Month */ 
d=DS_Read(0x87); /* Date */ 
e=DS_Read(0x85)&0x3F; /* Hour */ 
f=DS_Read(0x83)&0x7F; /* Minute */ 
g=DS_Read(0x81)&0x7F; /* Second */
}

⌨️ 快捷键说明

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