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

📄 ds1302.c

📁 有遥控的温度计,用dS1302做时钟芯片
💻 C
字号:

#include <io8515v.h>
#include <macros.h>
#include <162-1302.h>
/************************************************
                       延时程序
************************************************/
void delay(uchar n)
{
uchar a;
for(a=0;a<n;a++)
  ;
}
/****************************************************
                      写一个字节
****************************************************/
void write_data(uchar addr,uchar data)
{
unsigned char i,temp;
 T_DDR|=T_IO;
T_PORT&=~T_RST;
T_PORT&=~T_CLK;         
  asm("nop");
  asm("nop");
  asm("nop");
  asm("nop");
T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
  temp=addr;
  for(i=0;i<8;i++) 
  { 
  if(temp&(1<<i))  
  		T_PORT |=T_IO ;  
  else 
  	    T_PORT &=~T_IO ;
  asm("nop");
  asm("nop");
  T_PORT |=T_CLK;             //时钟上升沿写入数据
  asm("nop");
  T_PORT &=~T_CLK;             //时钟拉低电平 
  }
  temp=data;
    for(i=0;i<8;i++) 
  { 
  if(temp&(1<<i))  
  	    T_PORT |=T_IO ;  
  else 
  	    T_PORT &=~T_IO ; 
  asm("nop");
  asm("nop"); 
  T_PORT |=T_CLK;             //时钟上升沿写入数据
   asm("nop");
  T_PORT &=~T_CLK;             //时钟拉低电平 
  } 
  T_PORT&=~T_RST;             //禁止DS1302 
}

/***************************************************
                      读一个字节
***************************************************/
uchar read_data(uchar addr)
{
uchar i,temp,k;
temp=0;
T_DDR|=T_IO;
T_PORT&=~T_RST;
T_PORT&=~T_CLK;         
  asm("nop");
  asm("nop");
  asm("nop");
  asm("nop");
T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
temp=addr;
  for(i=0;i<8;i++) 
  { 
  	if(temp&(1<<i)) 
  		 T_PORT |=T_IO ;  
  	else 
  		 T_PORT &=~T_IO ;
    asm("nop");
    asm("nop"); 
  	T_PORT |=T_CLK;             //时钟上升沿写入数据 	
	T_PORT &=~T_CLK;             //时钟拉低电平 
  }
   T_DDR&=~T_IO;
for(i=0;i<8;i++)
 { 
    k=(T_PIN&T_IO);
  if(k==T_IO)
      temp|=(1<<i);
  else
  	  temp&=~(1<<i);
	    asm("nop");
       asm("nop"); 
  T_PORT|=T_CLK;              //上升沿读出数据 
   T_PORT &=~T_CLK;             //时钟电平拉低 
  }
  T_DDR|=T_IO;
  T_PORT&=~T_CLK; 
  T_PORT&=~T_RST;             //禁止DS1302 
 return(temp);
}
//1302初始化
void init_1302()
{
write_data(0x8e,0x00);      //关闭寄存器写保护
write_data(0x90,0x00);	    //写充电寄存器
write_data(0x80,0x00);      //秒寄存器停止位置0,时钟启动,初值设为0
}

void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d)
{
  write_data(0x80,sec);
  write_data(0x82,min);
  write_data(0x84,hour);
  write_data(0x86,day);
  write_data(0x88,month);
  write_data(0x8a,d);
}

⌨️ 快捷键说明

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