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

📄 gsm-

📁 GSM室温监控系统
💻
字号:
#ifndef DS1302_H
#define DS1302_H
#include "common.h"
//设置时间,time[0]-time[6]数据存放顺序为:秒,分,时,日,月,星期,年
unsigned char times[7]={00,30,23,12,6,6,10};
sbit SCLK=P2^5;
sbit IO=P2^6;
sbit RST=P2^7;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;

/*================================================================*/
/*	                向1302当前地址处写入1字节数据	              */
/*================================================================*/
void write_1302_byte(unsigned char d)
{
    unsigned char i;
    ACC=d;              //将8位数据写入ACC
    for(i=8;i>0;i--)    //循环8次将ACC8位数据从低位到高位写入1302
    {   
        IO=ACC0;	    //将ACC的最低位转送到IO口
        SCLK=1;         //上升沿写入1位数据
        SCLK=0;
        ACC=ACC>>1;	    //将ACC次低位变为最低位
    }
}
/*=================================================================*/

/*=================================================================*/
/*	            从1302的当前地址处读出1字节数据	                   */
/*=================================================================*/
unsigned char read_1302_byte(void)
{
    unsigned char i;
    for(i=8;i>0;i--)
    {
        ACC=ACC>>1;
        ACC7=IO;
        SCLK=1; //时钟下降沿读1位数据
        SCLK=0;
        
    }
    return (ACC);
}
/*=================================================================*/

/*================================================================*/
/*	                将数据Data写入1302寄存器add处	              */
/*================================================================*/
void write_1302_reg(unsigned char add,unsigned char d)
{
    RST= 0;
    SCLK=0;
    RST= 1;
    write_1302_byte(add);	//将1302的指针移到add处
    write_1302_byte(d);	    //往add处写入数据
    SCLK=1;
    RST=0;              //停止写数据
}
/*=================================================================*/

/*==================================================================*/
/*	                    读寄存器add处的值	                        */
/*==================================================================*/
unsigned char read_1302_reg(unsigned char add)
{
    unsigned char d;
    RST=0;
    SCLK=0;
    RST=1;
    write_1302_byte(add);
    d=read_1302_byte();
    SCLK=1;
    RST=0;
    return (d);
}
/*=================================================================*/

/*===========================================================================================*/
/*	            设置时间,time[0]-time[6]数据存放顺序为:秒,分,时,日,月,星期,年	             */
/*===========================================================================================*/
void write_1302_time(unsigned char *time)
{
    unsigned char add=0x80;	    //地址add初值(秒),偶数地址为只写
    unsigned char i;
    unsigned char timeBCD[7];   //用以存放time数据的BCD码值
    bdata unsigned char l,h; 	//单位变量,分别存放时间数据(8421BCD码)的低4位和高4位
	//bdata 变量保存在ram的位寻址区,范围0-7
    for(i=0;i<7;i++)            //将时间数据转为BCD码放入timeBCD中
    {
        l=time[i]%10;
        h=time[i]/10;
        timeBCD[i]=h*16+l;
    }    
    write_1302_reg(0x8e,0x00);	    //禁止写
    for(i=0;i<7;i++)
    {
        write_1302_reg(add,timeBCD[i]); //将时间数据写入1302对应的寄存器
        add+=2;                         //地址移动,确保地址为偶数
    }
    write_1302_reg(0x8e,0x80);          //允许写
}
/*===========================================================================================*/

/*=================================================================================================*/
/*	                                        读取当前时间	                                       */
/*=================================================================================================*/
void read_1302_time(unsigned char time[])
{
    unsigned char i;
    unsigned char add=0x81;         //设置地址add初值(秒),奇数为只读
    bdata unsigned char l,h; 	    //单位变量,分别存放时间数据(8421BCD码)的低4位和高4位,用以进行十进制转换
	write_1302_reg(0x8e,0x00);  //禁止写
    for(i=0;i<7;i++)
    {
        time[i]=read_1302_reg(add);	//将时间数据(8421BCD码)从1302对应的寄存器中读出
        l=time[i]&0x0f;	        //l存放time的低4位,即个位
        h=(time[i]>>4)&0x0f;    //h存放time的高4位,即十位
        time[i]=h*10+l;         //时间数据以十进制形式放进time[i]中
        add+=2;	                //地址移动,确保地址为奇数
    }
}

#endif


⌨️ 快捷键说明

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