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

📄 ds1302.c

📁 ds1302计时器原代码
💻 C
字号:
#include <reg51.h>
#include <stdio.h>

typedef unsigned char   byte;

sbit ds_clk=P1^1;
sbit ds_io =P1^2;
sbit ds_rst=P1^3;

#define WRITE_ENABLE()      write_ds1302(7,0x00)
#define WRITE_DISABLE()     write_ds1302(7,0x80)
#define CHARGE_ENABLE()     write_ds1302(8,0xAA)
#define CLOCK_START()       write_ds1302(0,read_ds1302(0)&0x7F)

void write_ds1302(byte adr, byte val) {
    byte i;
    
	ds_clk = 0;
    ds_rst = 0;
    ds_rst = 1;
    adr = (adr << 1) | 0x80;    // 1 ram/ck a4 a3 a2 a1 a0 rd/wr
    for (i=8;i;i--) {
        ds_io  = (adr&0x01)?1:0;
        ds_clk = 1;
        ds_clk = 0;
        adr  >>= 1;
    }
    for (i=8;i;i--) {
        ds_io  = (val&0x01)?1:0;
        ds_clk = 1;
        ds_clk = 0;
        val  >>= 1;
    }
    ds_rst = 0;
    ds_clk = 1;
}
byte read_ds1302(byte adr) {
    byte i,val;

    ds_clk = 0;
    ds_rst = 0;
    ds_rst = 1;
    adr = (adr << 1) | 0x81;    // 1 ram/ck a4 a3 a2 a1 a0 rd/wr
    for (i=8;i;i--) {
        ds_io  = (adr&0x01)?1:0;
        ds_clk = 1;
        ds_clk = 0;
        adr  >>= 1;
    }
    ds_io  = 1;	// pull high
    for (i=8;i;i--) {
        val>>=1;
        if (ds_io) val|=0x80;
        ds_clk = 1;
        ds_clk = 0;
    }
    ds_rst = 0;
    ds_clk = 1;
    return val;
}
code byte RTCC_INIT[]={
    //ss   mm   hh   DD   MM   WW   YY
    0x80,0x59,0x23,0x01,0x01,0x07,0x02
};
void main(void) {
    byte i;
    byte buf[7];
    WRITE_DISABLE();
    for (i=0;i<7;i++) write_ds1302(i,RTCC_INIT[i]);
    CLOCK_START();

    while (1) {
        for (i=0;i<7;i++) buf[i]=read_ds1302(i);
        for (i=0;i<7;i++) printf("%02bX ",buf[i]);
        printf("\n");
    }
}                              

⌨️ 快捷键说明

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