📄 clock.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 + -