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

📄 ds1302._h

📁 1602液晶显示模块
💻 _H
字号:
//ICC-AVR 修改日期: 2006-11-06 15:38:44
//姓名:荣俊齐
// Target : M8
// Crystal: 1.0000Mhz
#define uchar   unsigned char  
/******************************************************************************
                        定义DS1302
********************************************************************************/
#define DS1302_RESET1       PORTC|=(1<<PC0)  
#define DS1302_RESET0       PORTC&=~(1<<PC0)  
#define DS1302_CLK1         PORTC|=(1<<PC1)
#define DS1302_CLK0         PORTC&=~(1<<PC1) 
#define DS1302_READ_DATA    PINC&0X04
#define DS1302_WRITE_DATA1  PORTC|=(1<<PC2)
#define DS1302_WRITE_DATA0  PORTC&=~(1<<PC2) 
#define DS1302_DATA_OUTPUT  DDRC|=(1<<PC2)
#define DS1302_DATA_INPUT   DDRC&=~(1<<PC2) 
/****************************************************************************
                     定义读写单元地址
*****************************************************************************/
//读
#define Rsec  0x81            //秒
#define Rmin  0x83            //分
#define Rhou  0x85            //时
#define Rdat  0x87            //日
#define Rmon  0x89            //月
#define Rwee  0x8b            //周
#define Ryea  0x8d            //年
//写
#define Wsec1  0x80            //秒
#define Wmin1  0x82            //分
#define Whou1  0x84            //时
#define Wdat1  0x86            //日
#define Wmon1  0x88            //月
#define Wwee1  0x8a            //周
#define Wyea1  0x8c            //年
int second,minute,hour,date,week,month,year;   //读出后的时间存储单元
char WriteAddress[7]={Wyea1,Wmon1,Wdat1,Whou1,Wmin1,Wsec1,Wwee1};  //写地址
char    WriteTime[7]={0x10,0x12,0x31,0x24,0x50,0x30,0x00};//写的时间
/******************************************************************************
                        定义DS1302初始化程序
********************************************************************************/
void DS1302_set(void) 
{  char i;
   DS1302_CLK0;            
   DS1302_RESET0; 
   for(i=0;i<8;i++)
   {
     NOP();
   }
    DS1302_RESET1; 
}
/******************************************************************************
                        定义m8向DS1302发送程序
********************************************************************************/
void DS1302_Write(char x)
{
  int i;
 
  DS1302_CLK0;             
  DS1302_DATA_OUTPUT;              //控制数据线
 for(i=0;i<8;i++)
        {  DS1302_CLK0;             //输出
        if((x&(1<<i)))
            DS1302_WRITE_DATA1 ;
        else 
           DS1302_WRITE_DATA0 ;
	       NOP();
		DS1302_CLK1; 
		  NOP();
          }
  DS1302_CLK0;
}
//单独矫正某个时间单元
void DS1302_WriteT(char ddr,char time)
{
DS1302_set();
DS1302_Write(ddr);
DS1302_Write(time);
} 
/******************************************************************************
                        定义m8由DS1302接收程序
********************************************************************************/
uchar DS1302_Read(char xx) 
{     
    uchar temp=0,k,n; 
    uchar   temp1=0; 
	uchar  temp2=0;
	 DS1302_set();	  
	DS1302_Write(xx);
  	DS1302_DATA_INPUT;              //释放数据线
	DS1302_CLK0;     //时钟线拉低
    for(n=0;n<4;n++) 
       { DS1302_CLK0;     //时钟线拉低
	       NOP();  
      k=DS1302_READ_DATA;    //读数据,从低位开始 
      if(k==0x04) 
      temp1|=(1<<n); 
      else 
      temp1&=~(1<<n);
	   DS1302_CLK1;     //时钟线拉高
        NOP();     
   } 
    for(n=0;n<3;n++) 
       { DS1302_CLK0;     //时钟线拉低
	       NOP();  
      k=DS1302_READ_DATA;    //读数据,从低位开始 
      if(k==0x04) 
      temp2|=(1<<n); 
      else 
      temp2&=~(1<<n);
	   DS1302_CLK1;     //时钟线拉高
        NOP(); //60~120us      
   } 
   temp=10*temp1+temp2;
   	   DS1302_CLK0;     //时钟线拉低
   return (temp); 
} 
/******************************************************************************
                        定义DS1302读出时间程序
********************************************************************************/
void DS1302_ReadTime(void)
 {
   second=(DS1302_Read(Rsec)%10);
   minute=DS1302_Read(Rmin);
   hour=DS1302_Read(Rhou);
   date=DS1302_Read(Rdat);
   month=DS1302_Read(Rmon);
   year=DS1302_Read(Ryea);
 
 }
/******************************************************************************
                        定义DS1302矫正时间程序
********************************************************************************/
void DS1302_WriteTime(void)
{char *ddr,*time;
 ddr=WriteAddress;
 time=WriteTime;
 while(*ddr)
 {
 DS1302_WriteT(*ddr,*time);
 ddr++;
 time++;
 }
}

⌨️ 快捷键说明

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