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

📄 ds1302_code.txt

📁 DS1302的应用程序,只是基本功能.要是开发出强大的,也请上传大家分享
💻 TXT
字号:

//---程序说明---//

/*--------------------------------------------------------------------

	程序名		DS1302时钟驱动函数
	
	作者		杜洋

	创建日		2007-3-15

	使用说明	直接调用各函数

	系统要求	CPU MCS-51   12MHZ

					DoYoung.net 创造独立资源
    
--------------------------------------------------------------------*/


/****************************************************************************/
//头文件
#include <AT89X52.h>

/*****************************************************************************/
//定义DS1302时钟接口
sbit clock_clk = P3 ^ 5;//ds1302_clk(时钟线)
sbit clock_dat = P3 ^ 4;//ds1302_dat(数据线)
sbit clock_Rst = P3 ^ 3;//ds1302_Rst(复位线)

/****************************************************************************/
//定义全局变量
unsigned char yy,mo,dd,xq,hh,mm,ss;//定义时间映射全局变量(专用寄存器)
bit w = 0; //调时标志位

/*****************************************************************************/
//常用时钟数据读取
void read_clockS(void){
	ss = read_clock(0x81);//读取秒数据
	mm = read_clock(0x83);//读取分钟数据
	hh = read_clock(0x85);//小时
	dd = read_clock(0x87);//日
	mo = read_clock(0x89);//月
	xq = read_clock(0x8b);//星期
	yy = read_clock(0x8d);//年
}
/*****************************************************************************/
//调时用加1程序(上层应用)
void Set_time(unsigned char sel){ //根据选择调整的相应项目加1并写入DS1302
  signed char address,item;
  signed char max,mini;
  lcm_w_test(0,0x9a);
  lcm_w_word("调整");
  //if(sel==6)  {address=0x80; max=0;mini=0;}     //秒7
  if(sel==5)  {address=0x82; max=59;mini=0;}    //分钟6
  if(sel==4)  {address=0x84; max=23;mini=0;}    //小时5
  if(sel==3)  {address=0x8a; max=7;mini=1;}    //星期4  
  if(sel==2)  {address=0x86; max=31;mini=1;}    //日3
  if(sel==1)  {address=0x88; max=12;mini=1;}    //月2
  if(sel==0)  {address=0x8c; max=99; mini=0;}    //年1
  
  //读取1302某地址上的数值转换成10进制赋给item 
  item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
  if(KEY_2 == 0){
  	item++;//数加 1  
  }
  if(KEY_4 == 0){
  	item--;//数减 1 
  }
  if(item>max) item=mini;//查看数值有效范围   
  if(item<mini) item=max;           
  write_clock(0x8e,0x00);//允许写操作
  write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
  write_clock(0x8e,0x80);//写保护,禁止写操作 
  updata ();	//刷新数据
  lcm_w_mm();//刷新 分 
}
/*****************************************************************************/
//设置1302的初始时间
void Init_1302(void){//(2008年1月1日00时00分00秒星期二)
	write_clock(0x8e,0x00);//允许写操作

	write_clock(0x8c,0x08);//年
	write_clock(0x8a,0x02);//星期
	write_clock(0x88,0x01);//月
	write_clock(0x86,0x01);//日
	write_clock(0x84,0x00);//小时
	write_clock(0x82,0x00);//分钟
	write_clock(0x80,0x00);//秒
	write_clock(0x90,0xa5);//充电	
	write_clock(0x8e,0x80);//禁止写操作
}
/*****************************************************************************/
//DS1302写数据(底层协议)
void write_clock(unsigned char ord, unsigned char dd){
	clock_clk=0;
	clock_Rst=0;
	clock_Rst=1;
	clock_out(ord);
	clock_out(dd);
	clock_Rst=0;
	clock_clk=1;
}
/*****************************************************************************/
//1302驱动程序(底层协议)
void clock_out(unsigned char dd){
	ACC=dd;
	clock_dat=a0; clock_clk=1; clock_clk=0;
	clock_dat=a1; clock_clk=1; clock_clk=0;
	clock_dat=a2; clock_clk=1; clock_clk=0;
	clock_dat=a3; clock_clk=1; clock_clk=0;
	clock_dat=a4; clock_clk=1; clock_clk=0;
	clock_dat=a5; clock_clk=1; clock_clk=0;
	clock_dat=a6; clock_clk=1; clock_clk=0;
	clock_dat=a7; clock_clk=1; clock_clk=0;
}
/*****************************************************************************/
//DS1302写入字节(底层协议)
unsigned char clock_in(void){
	clock_dat=1;
	a0=clock_dat;
	clock_clk=1; clock_clk=0; a1=clock_dat;
	clock_clk=1; clock_clk=0; a2=clock_dat;
	clock_clk=1; clock_clk=0; a3=clock_dat;
	clock_clk=1; clock_clk=0; a4=clock_dat;
	clock_clk=1; clock_clk=0; a5=clock_dat;
	clock_clk=1; clock_clk=0; a6=clock_dat;
	clock_clk=1; clock_clk=0; a7=clock_dat;
	return(ACC);
}
/*****************************************************************************/
//DS1302读数据(底层协议)
unsigned char read_clock(unsigned char ord){
	unsigned char dd=0;
	clock_clk=0;
	clock_Rst=0;
	clock_Rst=1;
	clock_out(ord);
	dd=clock_in();
	clock_Rst=0;
	clock_clk=1;
	return(dd);
}
/*****************************************************************************/




⌨️ 快捷键说明

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