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

📄 ds1302.c

📁 LPC2124+数码管+液晶+串口+键盘设置+1302 数字时钟 带proteus仿真
💻 C
字号:
#include <LPC21xx.h>
#define ds1302_cs (1<<16)
#define ds1302_sck (1<<17)
#define ds1302_dio (1<<18)

//--------------------------------
//读DS1302的指定的地址单元中的内容函数
//--------------------------------
unsigned char read_ds1302_rtc(unsigned char rtc_address)
{
  unsigned char i;
  unsigned char temp;

  IO0CLR|=ds1302_cs;
  IO0CLR|=ds1302_sck;	 //sck=0
  IO0SET|=ds1302_cs;	 //cs=1
  IO0DIR|=ds1302_dio;	 //dio配置为输出
  for(i=8;i>0;i--)		 //8次循环
     {
	  if(rtc_address & 0x01) IO0SET|=ds1302_dio;	 //最低位为1,则dio=1;
	  else IO0CLR|=ds1302_dio;					 //	否则dio=0
	  rtc_address>>=1;							 //	右移1位
	  IO0SET|=ds1302_sck;						 //sck=1
	  IO0CLR|=ds1302_sck;						 //	sck=0
	 }
  IO0DIR&=~ds1302_dio;                           //dio配置为输入
  temp=0;
  if(0!=(IO0PIN & ds1302_dio)) temp+=0x80;         //若dio为高电平,则移到最高位
  for(i=7;i>0;i--)
     {
	  temp>>=1;
	  IO0SET|=ds1302_sck;	 
      IO0CLR|=ds1302_sck;
	  if(0!=(IO0PIN & ds1302_dio)) temp+=0x80;
	 }
   IO0CLR|=ds1302_cs;
   return(temp);
}

//--------------------------------
//向DS1302的指定的地址单元写数据函数
void write_ds1302_rtc(unsigned char rtc_address,unsigned char rtc_data)
 {
  unsigned char i;

  IO0CLR|=ds1302_cs;
  IO0CLR|=ds1302_sck;
  IO0SET|=ds1302_cs;
  IO0DIR|=ds1302_dio; //dio配置为输出
  for(i=8;i>0;i--)
     {
	  if(rtc_address & 0x01) IO0SET|=ds1302_dio;
	  else IO0CLR|=ds1302_dio;
	  rtc_address>>=1;
	  IO0SET|=ds1302_sck;
	  IO0CLR|=ds1302_sck;
	 }
   for(i=8;i>0;i--)
   {
    if(rtc_data & 0x01)IO0SET|=ds1302_dio;
	else IO0CLR|=ds1302_dio;
	rtc_data>>=1;
	IO0SET|=ds1302_sck;
	IO0CLR|=ds1302_sck;
   }
  IO0CLR|=ds1302_cs;
}

⌨️ 快捷键说明

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