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

📄 text1.c

📁 DS1302 万年历 驱动程序
💻 C
字号:
#include<reg52.h>
#define uc 	unsigned char
/*************************ds1302与at89s52引脚连接********************/
sbit T_RST=P1^2; 
sbit T_CLK=P1^1;                 
sbit T_IO=P1^0;
               
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
/*************************其他引脚*******************************/
sbit gn=P3^0; 
sbit jia=P3^1;
sbit jian=P3^2;            
/***********************延时程序=a*1ms**************************************/
void delay(unsigned char a){
   unsigned char i;
   while(a-- !=0)
   {
        for(i=0;i<125;i++);
   }
}

/*******************显示处理***************************/
void xianshi(uc a, uc b)
{
	if(b==0x06||b==0x0f)
		
	{
		P2=a*0x10+b;
	delay(1);
	}
	else
	{
 		P2=a/0x10*0x10+b;
		delay(1) ;
						
		P2=a%0x10*0x10+b+1;
	delay(1) ;
	 }
} 

  


/******************DS1302:写入操作(上升沿)*********************/ 
void write_byte(unsigned char da)
{
   unsigned char i;
   ACC=da;
   for(i=8;i>0;i--)
   { 
      T_IO=ACC0;
	  T_CLK=0;     
      T_CLK=1;
      ACC=ACC>>1;
   }
}

/******************DS1302:读取操作(下降沿)*****************/
unsigned char read_byte(void)
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
      ACC=ACC>>1;
	  T_CLK = 1;
	  T_CLK = 0;
      ACC7 = T_IO;
   }
   return(ACC);

}

/******************DS1302:写入数据(先送地址,再写数据)***************************/ 
void write_1302(unsigned char addr,unsigned char da)
{
   T_RST=0;    //停止工作
   T_CLK=0;                                 
   T_RST=1;   //重新工作
   write_byte(addr);    //写入地址
   
   write_byte(da);
   T_RST=0;
   T_CLK=1;
}

/******************DS1302:读取数据(先送地址,再读数据)**************************/
unsigned char read_1302(unsigned char addr)
{
   unsigned char temp;
   T_RST=0;                                   //停止工作
   T_CLK=0;  
   T_RST=1;                         //重新工作
   write_byte(addr);   //写入地址
   temp=read_byte();
   T_RST=0;
   T_CLK=1;     //停止工作
   return(temp);
}





/******************************加1*****************************/
void jiayi()
{
	uc a;
	write_1302(0x8e,0x00);
	a++; 
	if(a==60) a=0;
	write_1302(0x82,a);
	write_1302(0x8e,0x80);
	
}






/************************主程序**********************************************/
void main(void)
{
   unsigned char clk_time[7]={0x57,0x27,0x12,0x23,0x07,0x04,0x08};  //秒,分,时,日,月,周,年 寄存器初始值
   unsigned char  temp=0x80;          
   unsigned char i;
   unsigned char a=0,b=0;
   write_1302(0x8e,0x00);             //WP=0 写操作
   for(i=0;i<7;i++)
   {
   write_1302(temp,clk_time[i]);
   temp+=2;
   }
   write_1302(0x8e,0x80);             //WP=1 写保护
   while(1)
   { 


   	  if(jia==0) a=1;
	 
 		if(a)	 
		   if(jia==1) 
	 		 {
	  		 jiayi();
	  		 a=0;
	  		 }

      temp=0x81;                    
      for(i=0;i<7;i++)
 	  {
	     clk_time[i]=read_1302(temp);
		 temp+=2;
	  } 
	   
      xianshi(clk_time[0],0x0b);
	  xianshi(clk_time[1],0x09);
	  xianshi(clk_time[2],0x07);
	  xianshi(clk_time[3],0x04);
	  xianshi(clk_time[4],0x02);
	  xianshi(clk_time[5],0x06);
	  xianshi(clk_time[6],0x00);
   }  
}

⌨️ 快捷键说明

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