📄 基于芯片ds12887的电子时钟日历系统设计和制作.txt
字号:
DS12887的驱动程序的头文件:
#ifndef _DS12887_H_
#define _DS12887_H_
#include "absacc.h" //声明外部地址必须加此头文件
#include <reg52.h>
#define SECONDS XBYTE[0x7f00]
#define SECONDSALARM XBYTE[0x7f01]
#define MINUTES XBYTE[0x7f02]
#define MINUTESALARM XBYTE[0x7f03]
#define HOURS XBYTE[0x7f04]
#define HOURSALARM XBYTE[0x7f05]
#define DAYOFWEEK XBYTE[0x7f06]
#define DAYOFMONTH XBYTE[0x7f07]
#define MONTH XBYTE[0x7f08]
#define YEAR XBYTE[0x7f09]
#define REGA XBYTE[0x7f0A]
#define REGB XBYTE[0x7f0B]
#define REGC XBYTE[0x7f0C]
//#define REGD XBYTE[0x7f0D]
sbit CS_12887 = P2^7; //CS
//the defination of function
#define YEAR_i 7
#define MONTH_i 1
#define DAYOFMONTH_i 6
#define DAYOFWEEK_i 6
#define HOURS_i 14
#define HOURSALARM_i 8
#define MINUTES_i 12
#define MINUTESALARM_i 1
#define SECONDS_i 50
#define SECONDSALARM_i 5
extern void DS12887_init();
extern void Read_12887(unsigned char * date);
#endif
DS12887的驱动程序的源文件:
#include <DS12887.h>
void Read_12887(unsigned char * date)
{
* date = SECONDS;
*(date+1)=SECONDSALARM;
*(date+2)=MINUTES;
*(date+3)=MINUTESALARM;
*(date+4)=HOURS;
*(date+5)=HOURSALARM;
*(date+6)=DAYOFWEEK;
*(date+7)=DAYOFMONTH;
*(date+8)=MONTH;
*(date+9)=YEAR;
*(date+12)=REGC;
}
开启和关闭晶振:
if(Aclock==1)//表示不是在调整时钟期间+
{
REGA=0x0F;//把晶振关了
}
else if(Aclock==0)//表示不是在调整时钟期间
{
REGA=0x2F;//把晶振开了
}
根据按键调整时间:
case 1://修改年
read_date[9]++;
YEAR=read_date[9];
break;
case 2://修改月
read_date[8]++;
if(read_date[8]==13)
read_date[8]=1;
MONTH=read_date[8];
break;
……
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -