资源简介

利用430控制DS1302,可以显示日期和时间,通过按键可以调整时间。同时可以进行定时,比如闹钟,可以定两个时间

资源截图

代码片段和文件信息


#include 
#define uchar unsigned char 
#define uint unsigned int

#define SDA_H P2OUT|=BIT6
#define SDA_L P2OUT&=~BIT6//模拟数据位
#define SCL_H P2OUT|=BIT1
#define SCL_L P2OUT&=~BIT1//模拟时钟
#define RST_H P2OUT|=BIT7
#define RST_L P2OUT&=~BIT7//复位
#define RST_out P2DIR|=BIT7

#define SCL_out P2DIR |= BIT1    //SCL设置为输出模式
#define SDA_in  P2DIR &= ~BIT6   //SDA改成输入模式
#define SDA_out P2DIR |= BIT6    //SDA变回输出模式
#define SDA_val P2IN&BIT6        //SDA的位值
 
#define TRUE    1
#define FALSE   0
uchar Setdata[]={0x090x010x060x090x120x080x06};//时钟预设值
/*

#define AM(X) X
#define PM(X) (X+12)  写地址     // 转成24小时制
#define DS1302_SECOND 0x80   读地址 0x81
#define DS1302_MINUTE 0x82  0x83
#define DS1302_HOUR 0x84  0x85
#define DS1302_WEEK 0x8A  0x8b
#define DS1302_DAY 0x86  0x87
#define DS1302_MONTH 0x88  0x89
#define DS1302_YEAR 0x8C  0x8D
#define DS1302_RAM(X) (0xC0+(X)*2)    //用于计算 DS1302_RAM 地址的宏 
*/
/*******************************************
函数名称:delay
功    能:延时约100us的时间
********************************************/
void delays(void)
{
    uchar i;
    
    for(i = 0;i < 15;i++)
        _NOP();
}
/************向DS1302写入一BYTE数据********/
void DS1302InputByte(uchar data)
{
  uchar i;
  SDA_out;
  RST_H;
 
  for(i=0;i<8;i++)
  {
    if(data&0x01) SDA_H;
    else SDA_L;
    SCL_L;
    delays();
    SCL_H;
    delays();
    data=data>>1;
  }
  
}
/*************从DS1302读入一字节的数据**************/
uchar  DS1302OutputByte(void)
{
  uchar itemp=0x00;
  SDA_in;
  RST_H;

  for(i=0;i<8;i++)
  {
    temp=temp>>1;
    SCL_H;
    delays();
    SCL_L;
    delays();  
     if(SDA_val)
      temp|=BIT7;
  }
  return temp;
}
/**********向特定地址写入数据*************/
void write1302(uchar addressuchar data)
{
  RST_L;
  SCL_L;
  _NOP();
  RST_H;
  DS1302InputByte(address);
  DS1302InputByte(data);
  SCL_H;
  RST_L;
}
/************从特定地址读入数据***********/
uchar read1302(uchar address)
{
  uchar data;
  RST_L;
  SCL_L;
  _NOP();
  RST_H;
  DS1302InputByte(address);
  data=DS1302OutputByte();
  SCL_H;
  RST_L;
  return data;
}
/************设置时间*****************/
void DS1302_settime(uchar *data)
{
  uchar iaddress;
  address=0x8c;
  write1302(0x8e0x00);
  for(i=0;i<7;i++)
  {
    write1302(addressdata[i]);
    address-=2;
  }
  write1302(0x8e0x80);
}
/************得到时间*****************/
void DS1302_Get(uchar *time)
{
  uchar valueaddress=0x8D;
  for(value=0;value<7;value++)
  {
    time[value]=read1302(address);
    time[value]=((time[value]&0x70)>>4)*10+(time[value]&0x0F);
    address-=2;
  }
}
/*************1302初始化************/
void init_1302()
{
  RST_out;
  SCL_out;
  RST_L;
  SCL_L;
  delays();  
  SCL_H; 

}
/***********一次读出多个字节****************/
void BurstRead1302(uchar *ptr)
{
    uchar i;
  
    RST_L; 
    SCL_L; 
    _NOP();
    RST_H;
    DS1302InputByte(0xbf);             //0xbf:时钟多字节读命令
    for (i = 8; i > 0; i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        160  2010-08-10 21:56  DS1302_5110_定时\1302.eww

     文件        436  2010-08-11 17:16  DS1302_5110_定时\1302.h

     文件      29652  2010-08-15 20:41  DS1302_5110_定时\Debug\Exe\DS1302.d43

     文件        169  2010-08-15 20:41  DS1302_5110_定时\Debug\Obj\DS1302.pbd

     文件      90039  2010-08-15 20:41  DS1302_5110_定时\Debug\Obj\main.r43

     文件       3216  2010-08-15 20:41  DS1302_5110_定时\ds1302.c

     文件       2310  2010-08-15 20:41  DS1302_5110_定时\DS1302.dep

     文件      13407  2010-08-11 10:27  DS1302_5110_定时\DS1302.ewd

     文件      44774  2008-06-02 10:35  DS1302_5110_定时\DS1302.ewp

     文件        802  2010-08-12 10:54  DS1302_5110_定时\key.c

     文件       6651  2010-08-12 11:16  DS1302_5110_定时\main.c

     文件       4864  2010-08-11 17:53  DS1302_5110_定时\NOKIA_5110_ALL.c

     文件       5665  2010-08-11 17:54  DS1302_5110_定时\NOKIA_5110_ALL.h

     文件       3847  2010-08-15 20:41  DS1302_5110_定时\settings\1302.wsdt

     文件       2472  2010-08-15 20:41  DS1302_5110_定时\settings\DS1302.cspy.bat

     文件       5909  2010-08-15 20:41  DS1302_5110_定时\settings\DS1302.dbgdt

     文件        990  2010-08-15 20:41  DS1302_5110_定时\settings\DS1302.dni

     目录          0  2010-08-12 09:01  DS1302_5110_定时\Debug\Exe

     目录          0  2010-08-12 09:01  DS1302_5110_定时\Debug\List

     目录          0  2010-08-15 20:41  DS1302_5110_定时\Debug\Obj

     目录          0  2010-08-12 09:01  DS1302_5110_定时\Debug

     目录          0  2010-08-12 09:01  DS1302_5110_定时\settings

     目录          0  2010-08-15 20:41  DS1302_5110_定时

----------- ---------  ---------- -----  ----

               215363                    23


评论

共有 条评论