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

📄 51

📁 51单片机大量源码
💻
字号:
#ifndef _DS1302
#define _DS1302
#define uchar unsigned char
//寄存器宏定义
#define WRITE_SECOND              	0x80
#define WRITE_MINUTE        			0x82
#define WRITE_HOUR                  0x84
#define READ_SECOND                	0x81
#define READ_MINUTE                 0x83
#define READ_HOUR                  	0x85
#define WRITE_PROTECT             	0x8E
 
//位寻址寄存器定义
sbit ACC_7 = ACC^7;
sbit SCLK = P0^0;        // DS1302时钟信号         7脚
sbit DIO= P0^1;          // DS1302数据信号         6脚
sbit CE = P0^2;          // DS1302片选                 5脚
 
//地址、数据发送子程序
void Write1302 ( unsigned char addr,dat )    
{
	unsigned char i,temp;
	CE=0;         //CE引脚为低,数据传送中止
	SCLK=0;       //清零时钟总线
	CE = 1;       //CE引脚为高,逻辑控制有效
	//发送地址
	for ( i=8; i>0; i-- ) //循环8次移位
	{    
		SCLK = 0;
		temp = addr;
		DIO = (bit)(temp&0x01); //每次传输低字节
		addr >>= 1;             //右移一位
		SCLK = 1;
	}
	
	//发送数据
	for ( i=8; i>0; i-- )
	{    
	     SCLK = 0;
	     temp = dat;
	     DIO = (bit)(temp&0x01);         
	     dat >>= 1;                  
	     SCLK = 1;
	}
	SCLK=1;
	CE = 0;        
}
 
//数据读取子程序
unsigned char Read1302 ( unsigned char addr )
{
       unsigned char i,temp,dat1,dat2;
       CE=0;          
       SCLK=0;            
       CE = 1; 
       //发送地址
       for ( i=8; i>0; i-- )                      //循环8次移位
       {    
              SCLK = 0;
              temp = addr;
              DIO = (bit)(temp&0x01);          //每次传输低字节
              addr >>= 1;                              //右移一位
              SCLK = 1;
       }
       //读取数据
       for ( i=8; i>0; i-- )
       {
              ACC_7=DIO;
              SCLK = 1;
             ACC>>=1;
              SCLK = 0;
       }
		SCLK=1;    
       CE=0;
       dat1=ACC;
       dat2=dat1/16;                           //数据进制转换
       dat1=dat1%16;                         //十六进制转十进制
       dat1=dat1+dat2*10;
       return (dat1);
}
 
//初始化DS1302(选择性使用)
void init1302(void)   
{
	
	Write1302 (WRITE_PROTECT,0X00);  //禁止写保护
	Write1302 (WRITE_SECOND,0x50);   //秒位初始化
	Write1302 (WRITE_MINUTE,0x59);   //分钟初始化
	Write1302 (WRITE_HOUR,0x23);     //小时初始化
	//Write1302 (0x80,0x80);      //时钟暂停
	//Write1302 (0x86,0x13);		//日初始化
	//Write1302 (0x88,0x03);		//月初始化
	//Write1302 (0x8c,0x09);		//年初始化
	Write1302 (WRITE_PROTECT,0x80);  //允许写保护
}
#endif

/*读程序Read1302(0x81)
0x81,0x83,0x85,0x87,0x89,0x8d
秒    分   时   日   月   年
*/
/*Write1302 (0x80,0x80);      //时钟暂停
Read1302()读出来的数是十进制数,而Write1302()写进的数必须是16进制的
*/


⌨️ 快捷键说明

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