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

📄 ds1302.c

📁 DS1302.c 也是自己写的!带有proteus图!!!
💻 C
字号:
#include<reg51.h>
#include<uint.h>
#include<delay.h>

uchar ds_time[]={"Time:"};
uchar ds_date[]={"Date:"};
uchar week[]={"Week:"};
uchar heng[]={"-"};
uchar td[]={"0123456789"};
uchar ten=0;

sbit ds1302_rs=P2^0;
sbit ds1302_clk=P2^1;
sbit ds1302_dat=P2^2;
sbit lcd_rs=P3^5;
sbit lcd_rw=P3^6;
sbit lcd_ep=P3^7;

void write_ds1302_dat(uchar cmd)	 //写入时钟一个字节
{
		uchar i;
		for(i=0;i<8;i++)
		{
			cmd=cmd>>1;
			ds1302_dat=CY;
			ds1302_clk=1;
			ds1302_clk=0;
		}
}

uchar read_ds1302_dat(void)		//读时钟一个字节
{
		uchar i;
		for(i=0;i<8;i++)
		{
			ACC=ACC>>1;
			if(ds1302_dat)ACC=ACC|0x80;  		
			ds1302_clk = 1;
			ds1302_clk= 0;		
		}
		ds1302_rs = 0;
		return(ACC);
}

uchar read_ds1302(uchar ord1)	//读时钟
{
		uchar dd=0;  
		ds1302_rs=0;
		ds1302_clk=0;
		ds1302_rs=1;
		write_ds1302_dat(ord1);
		dd=read_ds1302_dat();
		ds1302_rs=0;
		return(dd);
}

void write_ds1302(uchar ord2,uchar dd)	//写时钟
{
		ds1302_rs=0;
		ds1302_clk=0;
		ds1302_rs=1;
		write_ds1302_dat(ord2);
		write_ds1302_dat(dd);
		ds1302_rs=0;
}

void inti_ds1302()
{
 	 ds1302_rs=0;
	 ds1302_clk=0;
	 ds1302_dat=0;

/*	 write_ds1302(0x8e,0x00);	//打开写保护
	 write_ds1302(0x80,0x23);	 //启动时钟,并设置秒
	 write_ds1302(0x82,0x43);	 //分
	 write_ds1302(0x84,0x15);	  //时 
	 write_ds1302(0x86,0x03);	  //日
	 write_ds1302(0x88,0x03);	  //月
	 write_ds1302(0x8a,0x02);	  //星期
	 write_ds1302(0x8c,0x10);	  //年
	 write_ds1302(0x90,0xa5);	  //启动充电器
	 write_ds1302(0x8e,0x80);	  //关写保护		*/
}

void lcd_enable()
{
 lcd_rs=0;
 lcd_rw=0;
 lcd_ep=0;
 delay(4);
 lcd_ep=1;
}

void lcd_inti()
{
 P1=0x3c;  //显示 模式设置   
 lcd_enable();
 P1=0x08;	   //显示关闭(光标返回00地址)  
 lcd_enable();
 P1=0x01;	   //清显示		
 lcd_enable();
  P1=0x06;	   //显示光标移动设置	
 lcd_enable();
  P1=0x0c;	   //开显示及光标设置  
 lcd_enable();
}

write_lcd(uchar x)
{
 P1=x;
 lcd_rs=1;
 lcd_rw=0;
 lcd_ep=0;
 delay(4);
 lcd_ep=1;
}

void c_a_dp(uchar asd)
{
 ten=0;ten=asd&0xf0;ten=ten>>4;asd=asd&0x0f;
 write_lcd(td[ten]);
 write_lcd(td[asd]);
}

void main()
{
 uchar s=0,cou;
 P1=0x00;
 inti_ds1302();
 lcd_inti();

 do{P1=0x80;
 lcd_enable();
 s=read_ds1302(0x89);
 for(cou=0;cou<5;cou++)
 {write_lcd(ds_time[cou]);}
 
 s=read_ds1302(0x85);	 //时
 c_a_dp(s);
  write_lcd(heng[0]);
 s=read_ds1302(0x83);	  //分
 c_a_dp(s);
 write_lcd(heng[0]);
 s=read_ds1302(0x81);  //秒
 c_a_dp(s);		  

 P1=0xc0;
 lcd_enable();
 for(cou=0;cou<5;cou++)
{write_lcd(week[cou]);}
 s=read_ds1302(0x8b);	   //星期
 write_lcd(td[s-1]);

 P1=0x90;
 lcd_enable();
 for(cou=0;cou<5;cou++)
 {write_lcd(ds_date[cou]);}
  s=read_ds1302(0x87);	 //日
 c_a_dp(s);
  write_lcd(heng[0]);
 s=read_ds1302(0x89);	  //月
 c_a_dp(s);
 write_lcd(heng[0]);
 s=read_ds1302(0x8d);	  //年
 c_a_dp(s);	
} while(1);

 
}









⌨️ 快捷键说明

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