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

📄 clock.c

📁 基于MB95F168气体检漏仪软件代码
💻 C
字号:
#include "c8051f200.h"
#include "Led.h"

#define uchar unsigned char
sbit SCLK = P0 ^ 0;
sbit IO = P0 ^ 3;
sbit RSTB = P0 ^ 5;
sbit LedLOAD=P0^1;

unsigned char Clock_yr, Clock_mn, Clock_date, Clock_week, Clock_hr, Clock_min, Clock_sec;

/**************************** 函数原型说明 ****************************/
void clkwritebyte(uchar ClkAdd,uchar ClkData); // 时钟字节写入函数
void ramwritebyte(); // RAM字节写入函数
unsigned char rbyte_3w(); // 字节读取函数
void reset_3w(); // 复位函数
void wbyte_3w(uchar); // 字节写入函数
void initialize_DS1302(); // DS1302初始化函数
void ReadClkRegs(); // 显示时钟寄存器内容函数
void burstramrd(); // 多字节突发方式读取RAM函数
void burstramwr(); // 多字节突发方式写入RAM函数
/***************************** 复位函数 ******************************/
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;
        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;
        TmpByte <<= 7;
        R_Byte >>= 1;
        R_Byte |= TmpByte;
    }
    return R_Byte;
}


/************************* 显示时钟寄存器内容函数 ***********************/
void ReadClkRegs()
{
    // 读取时钟寄存器的内容
    reset_3w();
    wbyte_3w(0xBF); // 以多字节突发方式读取时钟数据
    Clock_sec = rbyte_3w(); // 秒
    Clock_min = rbyte_3w(); // 分
    Clock_hr = rbyte_3w(); // 小时
    Clock_date = rbyte_3w(); // 日期
    Clock_mn = rbyte_3w(); // 月份
    Clock_week = rbyte_3w(); // 星期
    Clock_yr = rbyte_3w(); // 年
    reset_3w();
}

/**************************** DS1302初始化函数 **************************/
void initialize_DS1302()
{
	LedLOAD = 1;//禁止max7219使能

    reset_3w();
    wbyte_3w(0x8e); // 写保护控制寄存器
    wbyte_3w(0); // 允许写入
    reset_3w();
    wbyte_3w(0x90); // 涓流充电控制寄存器
    wbyte_3w(0x0b); // 不允许充电
    reset_3w();

    wbyte_3w(0xbe); // 以多字节突发方式写入时钟数据(8个字节)

    wbyte_3w(Clock_sec);
    wbyte_3w(Clock_min);
    wbyte_3w(Clock_hr);
    wbyte_3w(Clock_date);
    wbyte_3w(Clock_mn);
    wbyte_3w(Clock_week);
    wbyte_3w(Clock_yr);
    wbyte_3w(0); // 以多字节突发方式写入时钟数据时
    // 必须对写保护控制寄存器写入0值
    reset_3w();
}

⌨️ 快捷键说明

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