
基于51单片机的pcf8563实时时钟完整代码
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本项目提供了一套完整的基于51单片机和PCF8563芯片设计的实时时钟系统代码。该代码实现了时间数据读写、日期计算等功能,适用于需要精确计时的应用场景。
#define F0 0
void setup() {
display_index = 0;
AUXR = 0x80; // T0时钟无分频
TMOD = 0x01; // Timer0 设置为模式1(16位定时器)
TH0 = (Timer0_Reload / 256); // 定时器取其高低8位为状态值
TL0 = (Timer0_Reload % 256);
ET0 = 1; // Timer0 中断允许
TR0 = 1; // 启动定时器T0
EA = 1; // 打开总中断
ReadRTC(); //读取时钟
ReadRTC1();
if (second >= 60 || minute >= 60 || hour >= 24) {
F0 = 1;
}
if(F0 == 1){
second=0;
minute=0;
hour = 12;
WriteRTC();
}
if(day>=32||week>=8||month>=13 || year >= 100) {
F0 = 2;
}
if(F0 == 2){
day=6; week=3; month=6;
year = 18;
WriteRTC1();
}
if(minute1 >= 60|| hour1>=24) {
minute1 = 30;
hour1 =7;
WriteRTC2();
}
if(week1>=8){
WriteRTC3();
}
DisplayRTC();
KeyHoldCnt=0; //键按下计时
KeyCode=0; //给用户使用的键码, 有效范围为1~16
IO_KeyState = 0;
IO_KeyState1 = 0;
IO_KeyHoldCnt = 0;
cnt50ms=0;
zhuangtai=0;
KeyCode0=0;
tuinao=0;
minute2=61;
naofu=0;//控制闹钟加1和分钟同步
xunhuan = 0;
while(1) {
if(B_1ms){
B_1ms = 0;
if(++msecond >=500){ //每秒更新时间
msecond = 0;
ReadRTC();
DisplayRTC();
if(minute == 0 && second==0) { //整点报时
led1= !led1;
if(hour==hour1){
minute2 = minute1;
ReadRTC2();
}
} else {
led1= 1;
}
if(second == 0){ //闹钟实现块
msecond1++;
if(msecond1 >=60) {msecond1 = 0;}
if(minute==minute2){
ReadRTC2();
minute2 += (naofu ? 5 : 1);
naofu = !naofu;
}
}
}
KeyHoldCnt++; //键按下计时
}
}
}
全部评论 (0)


