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

📄 ds1302.c

📁 基于51单片机设计的用1602 显示数字钟 频率计 歌曲
💻 C
字号:
//#include	<at89x51.h>		
#define uchar unsigned char
sbit SCLK = P0^1;
sbit IO = P0^2;
sbit RSTB = P0^3;
/**************************** 函数原型说明 ****************************/
void	clkwritebyte();			// 时钟字节写入函数
uchar	rbyte_3w();				// 字节读取函数
void	reset_3w();				// 复位函数
void	wbyte_3w(uchar); 		// 字节写入函数
void	initialize_DS1302(uchar sec,uchar min,uchar hr,uchar date,uchar mn,uchar dy,uchar yr);	// DS1302初始化函数
void	disp_clk_regs(uchar);	// 显示时钟寄存器内容函数
/***************************** 复位函数 ******************************/
void reset_3w() {
   SCLK = 0;
   RSTB = 0;
   RSTB = 1;
}
/****************************** 字节写入函数 ***************************/
void wbyte_3w(uchar W_Byte) {
uchar i;
	for(i = 0; i < 8; ++i) {
		IO = 0;
		if(W_Byte & 0x01) IO = 1;
		SCLK = 0;
		SCLK = 1;           //一次上升沿写一位,zwj注
		W_Byte >>= 1;
    }
}
/****************************** 字节读取函数 ****************************/
uchar rbyte_3w()
 {
uchar i;
uchar R_Byte;
uchar TmpByte;

	R_Byte = 0x00;
	IO = 1;
	for(i=0; i<8; ++i) {
		SCLK = 1;
		SCLK = 0;
		TmpByte = (uchar)IO;//读IO口。zwj注
		TmpByte <<= 7;
		R_Byte >>= 1;
		R_Byte |= TmpByte; 
	}
	return R_Byte;
}
/**************************** 时钟字节写入函数 *************************/
void clkwritebyte() 
{
uchar ClkAdd;
uchar ClkData;
	
	ClkAdd = ((ClkAdd * 2) | 0x80); 	// 时钟数据写入命令
	reset_3w();
	wbyte_3w(ClkAdd);
	wbyte_3w(ClkData);
	reset_3w();
}
/**************************** DS1302初始化函数 **************************/
void initialize_DS1302(uchar sec,uchar min,uchar hr,uchar date,uchar mn,uchar dy,uchar yr)
 {
	reset_3w();
	wbyte_3w(0x8e);				// 写保护控制寄存器
	wbyte_3w(0);				// 允许写入
	reset_3w();
	wbyte_3w(0x90);				// 涓流充电控制寄存器
	wbyte_3w(0xab);				// 允许充电, 双二极管, 8K 电阻
	reset_3w();
    wbyte_3w(0xbe);				// 以多字节突发方式写入时钟数据(8个字节)
	wbyte_3w(sec);
    wbyte_3w(min);
	wbyte_3w(hr);
	wbyte_3w(date);
	wbyte_3w(mn);
	wbyte_3w(dy);
	wbyte_3w(yr);
	wbyte_3w(0);				// 以多字节突发方式写入时钟数据时
     reset_3w();             
}
      void initialize_DS1302a()//(uchar sec,uchar min,uchar hr,uchar date,uchar mn,uchar dy,uchar yr)
 {
	reset_3w();
	wbyte_3w(0x8e);				// 写保护控制寄存器
	wbyte_3w(0);				// 允许写入
	reset_3w();
	wbyte_3w(0x90);				// 涓流充电控制寄存器
	wbyte_3w(0xab);				// 允许充电, 双二极管, 8K 电阻
	reset_3w();
    wbyte_3w(0xbe);				// 以多字节突发方式写入时钟数据(8个字节)
	/*wbyte_3w(sec);
    wbyte_3w(min);
	wbyte_3w(hr);
	wbyte_3w(date);
	wbyte_3w(mn);
	wbyte_3w(dy);
	wbyte_3w(yr);*/
	wbyte_3w(0);				// 以多字节突发方式写入时钟数据时
     reset_3w();             
}
           

⌨️ 快捷键说明

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