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

📄 1302.c

📁 这个是1302的代码
💻 C
字号:
/************************************************************************************/
/*     程序名:实时时钟DS1302代码                                                   */
/*                                                                                  */
/*     晶振:12.0 M                                        CPU型号:AT89S52         */
/*                                                                                  */                                             
/*                                                                                  */
/*     功能描述: 将J6和6,7,8脚分别和J7的6,7,8脚								*/
/*								(自上往下数)用短路帽连接起来!					*/
/*                                                                                  */
/*     http://www.mculover.net                                                      */
/*     http://www.mculover.net/bbs                                                  */
/*   													 					    	*/
/*                                                                                  */
/*                                                湘灵电子工作室 版权所有           */                                 
/*                                                         2006-03-20               */
/************************************************************************************/ 
#include<reg51.h>

sbit clock_clk = P1 ^ 7;//ds1302_clk
sbit clock_dat = P1 ^ 6;//ds1302_dat
sbit clock_rst = P1 ^ 5;//ds1302_rst

//为了编程方便定义的位变量
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;

unsigned char Tab_Num[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 
							0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字

/*****************************************************************/
void Delay(int num)//延时函数
{
	while(num--) ;
}

/*************************1 3 0 2 *****************************/
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;
}

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);
}

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);
}

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;
}

/******************************************************************/
void Disp(void)//显示和闪烁函数
{
	unsigned char d, e;

	d=read_clock(0x81);//读秒
	e=d;
	d=d>>4;
	e=e&0x0f;

	P0 = Tab_Num[ d ];
	P2 = 0xfd;
	Delay(250);
	P2 = 0xff;
	P0 = Tab_Num[ e ];
	P2 = 0xfe;
	Delay(250);
	P2 = 0xff;    
      
   	d=read_clock(0x83);//读分钟
	e=d;
	d=d>>4;
	e=e&0x0f;

	P0 = Tab_Num[ d ];
	P2 = 0xef;
	Delay(250);
	P2 = 0xff;
	P0 = Tab_Num[ e ];
	P2 = 0xe7;
	Delay(250);
	P2 = 0xff;         
 
  	d=read_clock(0x85);//读小时
	e=d;
	d=d>>4;
	e=e&0x0f;

	P0 = Tab_Num[ d ];
	P2 = 0x7f;
	Delay(250);
	P2 = 0xff;
	P0 = Tab_Num[ e ];
	P2 = 0xbf;
	Delay(250);
	P2 = 0xff;

/*************************************************************
	d=read_clock(0x87);//读日
	e=d;
	d=d>>4;
	e=e&0x0f;
	P0 = Tab_Num[ d ];
	P2 = 0x01;
	Delay(2000);
	P2 = 0x00;
	P0 = Tab_Num[ e ];
	P2 = 0x02;
	Delay(2000);
	P2 = 0x00;

	d=read_clock(0x89);//读月
	e=d;
	d=d>>4;
	e=e&0x0f;
	P0 = Tab_Num[ d ];
	P2 = 0x01;
	Delay(2000);
	P2 = 0x00;
	P0 = Tab_Num[ e ];
	P2 = 0x02;
	Delay(2000);
	P2 = 0x00;

	d=read_clock(0x8d);//读年
	e=d;
	d=d>>4;
	e=e&0xf;
	P0 = Tab_Num[ d ];
	P2 = 0x01;
	Delay(2000);
	P2 = 0x00;
	P0 = Tab_Num[ e ];
	P2 = 0x02;
	Delay(2000);
	P2 = 0x00;
**********************************************************/
}

/*--------------------时钟的初始化---------------------------*/
void Init_1302(void)
{
	write_clock(0x8e,0x00);//close_protect
	Delay(250);
	write_clock(0x8c,0x05);//year
	Delay(250);
	write_clock(0x8a,0x04);//week_day
	Delay(250);
	write_clock(0x88,0x10);//month
	Delay(250);
	write_clock(0x86,0x20);//date
    Delay(250);
	write_clock(0x84,0x00);//hour
	Delay(250);
	write_clock(0x82,0x22);//minute
	Delay(250);
	write_clock(0x80,0x00);//second
	Delay(250);

	write_clock(0x90,0xa5);//supply_power
	Delay(250);	
	write_clock(0x8e,0x80);//open_protect	
	Delay(250);
}

/*******************主函数************************************/
void main(void)
{
	Init_1302( );//初始化DS1302寄存器

	while(1)
	{
		Disp( );
	}
}

	


	

⌨️ 快捷键说明

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