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

📄 ds1302.h

📁 mcs51系列单片机常用芯片使用头文件(包含MAX7219,DS18B20,DS1302,AT93C46,IC电话卡
💻 H
字号:
/*******************************************************************************
*  标题:  ds1302头文件                                                         *
*  日期:  2007-3-25                                                            *
*  版本:  1.0                                                                  *
*  作者:  无名                                                                 *
*  邮箱:  djrljf@163.com                                                       *
*  QQ  : 403499014                                                            *
********************************************************************************
********************************************************************************
* 【版权】 Copyright(C)无名        All Rights Reserved                         *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#ifndef	_ds1302_H 				      // 防止_ds1302_H被重复引用

#define	_ds1302_H

#include "at89x52.h"
//==============================================================
//默认设置,使用时根据实际布线修改DIN CLK LOAD
#define clk P2_2            //时钟输入线
#define io P2_1             //信号线
#define rst P2_0            //复位线(低电平有效)
//==============================================================

#define uchar unsigned char
#define uint unsigned int


#define   readC             0x01  //读命令附加数,与命令数相加
#define   writeC            0x00  //写命令附加数,与命令数相加

#define   clockBurst        0xbe  //时钟多字节,写入此命令时可以连续读取8个寄存器字节
#define   ramBurst          0xfe  //RAM多字节(写入此命令后可以连续操作31个RAM寄存器)
#define   trickleCharger    0x90  //涓流充电
#define   control           0x8e  //控制写入0X80时为写保护,写入0时可以写入数据

#define   year              0x8c  //年份寄存器
#define   mon               0x88  //月份寄存器
#define   date              0x86  //日期寄存器
#define   hour              0x84  //小时寄存器
#define   min               0x82  //分钟寄存器
#define   sec               0x80  //秒寄存器(最高位为震荡使能位)
#define   day               0x8a  //星期寄存器


//==============================================================
//写数据            
//==============================================================
void write(uchar temp)
     {
	 uchar i;
	 temp=(temp);
	 for(i=0;i<8;i++)
	    {
		if((temp&0x01)==1)io=1;
		else io=0;
		clk=1;
		temp=(temp>>1);
		clk=0;
		}
    }
//==============================================================
//读数据
//==============================================================
uchar read()
     {
	 uchar i,temp=0,temp1=0;
	 io=1;
	 temp=io;
	 for(i=1;i<8;i++)
	    {
		clk=1;
		clk=0;
		temp1=io;
		temp=(temp|(temp1<<i));
		}
	 return temp;
	 }
//==============================================================
//指定地址写数据
//==============================================================	
extern void writeBite(uchar addr,uchar dat)
     {
	 clk=0;
	 rst=0;
	 rst=1;
	 write((addr+writeC));
	 write(dat);
	 rst=0;
	 clk=1;
	 }
//==============================================================
//指定地址读
//==============================================================
extern uchar readBite(uchar addr)
     {
	 uchar temp=0;
	 clk=0;
	 rst=0;
	 rst=1;
	 write((addr+readC));
	 temp=read();
	 rst=0;
	 clk=1;
	  return temp;
     }
//==============================================================
//连续写8位寄存器数据
//==============================================================

extern void writeMultiBite(uchar *word)
     {
	 uchar i;
	 clk=0;
	 rst=0;
	 rst=1;
	 write((clockBurst+writeC));
	 for(i=0;i<8;i++)
	     {write(*(word+i));}
     rst=0;
	 clk=1;
	 }
//==============================================================
//从寄存器连续数据到指定地址
//==============================================================
extern void readMultibit(uchar no,uchar *addr)
     {
	 uchar i,temp=0;
	 clk=0;
	 rst=0;
	 rst=1;
	 write((clockBurst+readC));
	 for(i=0;i<no;i++)
	     {
		 temp=read();
		 *(addr+i)=temp;
		 }
	 rst=0;
	 clk=1;
     }
//==============================================================
//写连续数据到内部RAM(30)
//==============================================================
extern void writeRAM(uchar no,uchar *word)
     {
	 uchar i;
	 clk=0;
	 rst=0;
	 rst=1;
	 write((ramBurst+writeC));
	 for(i=0;i<no;i++)
	    {write(*(word+i));}
	 rst=0;
	 clk=1;
	 }
//==============================================================
//从内部RAM(30)读连续数据到指定地址
//==============================================================
extern void readRAM(uchar no,uchar *addr)
     {
	 uchar i,temp=0;
	 clk=0;
	 rst=0;
	 rst=1;
	 write((ramBurst+readC));
	 for(i=0;i<no;i++)
	     {
		 temp=read();
		 *(addr+i)=temp;
		 }
	 rst=0;
	 clk=1;
     }
//==============================================================
//初始化1302
//==============================================================
extern void init1302()
     {
	 writeBite(trickleCharger,0xa4);
	 writeBite(control,0);
     }
#endif

⌨️ 快捷键说明

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