DS3231高精度时钟程序代码(单片机STC89c52RC与1602显示)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//DS3231,经测试,日期,时间,星期,温度可以用1602显示#in elude
#in elude vintrin s.h>
#defi ne uchar un sig ned char
#defi ne uint un sig ned int
#define yh 0x80 //第一行的初始位置
#defi ne er 0x80+0x40 // 第二行初始位置
sbit wr=P1A1;
sbit rs=P1A。;
sbit en=卩2人5;
sbit SDA=P3A6; //模拟I2C数据传送位 SDA
sbit SCL=P3A7; //模拟I2C时钟控制位 SCL sbit INT=P3A2;
sbit key1=P1A7; // 功能键,修改键
sbit
key2=P3A4;
// 上调键
sbit
key3=P3A5;
// 下调键
sbit RESET=P3A3;
bit ack;
// 应答标志位
#define DS3231 _WriteAddress 0xD0 // 器件写地址
#define DS3231 _ReadAddress 0xD1
// 器件读地址
#define DS3231
_SECOND 0x00 // 秒
#define DS3231 _MINUTE 0x01 // 分
#define DS3231 _HOUR 0x02 // 时
#define DS3231 _WEEK 0x03 // 星期#define DS3231 _DAY 0x04 // 日
#define DS3231
_MONTH 0x05 // 月#define DS3231 _YEAR 0x06 // 年
// 闹铃 1
#define DS3231 _SALARM1ECOND 0x07 // 秒#define DS3231 _ALARM1MINUTE 0x08 // 分#define DS3231 _ALARM1HOUR 0x09 // 时
#define DS3231 _ALARM1WEEK 0x0A
// 星期 / 日
// 闹铃 2
#define DS3231 _ALARM2MINUTE 0x0b // 分
#define DS3231 _ALARM2HOUR
0x0c // 时
可编辑
#define DS3231_TEMPERATUREH 0x11
#define DS3231_TEMPERATUREL 0x12 uchar
a,miao,shi,fen,ri,yue,nian,week,temp1,temp2,key1n,temp; uchar code tab1[]={"2017- - FRI"}; uchar code tab2[]={" : : ."};
uchar HEX2BCD(uchar val) //B 码转换为 BCD 码
{
uchar k;
k=(val)/10*16+(val)%10; return k;
}
uchar BCD_Decimal(uchar bcd)
{
uchar Decimal; Decimal=bcd>>4;
return(Decimal=Decimal*10+(bcd&=0x0F));
#define DS3231_ALARM2WEEK #define DS3231_CONTROL #define DS3231_STATUS #define BSY #define OSF
0x0d // 星期 / 日
0x0e // 控制寄存器 0x0f // 状态寄存器
2 // 忙
7
// 振荡器停止标志
#define DS3231_XTAL
0x10 // 晶体老化寄存器
// 温度寄存器高字节 // 温度寄存器低字节 (8 位 ) (高 2 位 )
}
void delayus(uint us)
{
while (us--);
}
void Start_I2C()
{
SDA=1; // 发送起始条件的数据信号 delayus(1);
SCL=1;
delayus(5); // 起始条件建立时间大于 4.7us, 延时SDA=0; // 发送起始信号
delayus(5); //起始条件锁定时间大于4阳
SCL=0; //钳住 I2C 总线,准备发送或接收数据
delayus(2);
}
void Stop_I2C()
{
SDA=0; // 发送结束条件的数据信号
delayus(1); // 发送结束条件的时钟信号
SCL=1; // 结束条件建立时间大于 4us delayus(5);
SDA=1; // 发送 I2C 总线结束信号
delayus(4);
}
void SendByte(uchar c)
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt ++)
{
if((c< SDA=1; else SDA=0; delayus(1); SCL=1; 数据位 delayus(5); SCL=0; // 要传送的数据长度为 8 位 // 判断发送 位 // 置时钟线为高,通知被控器开始接收 //保证时钟咼电平周期大于 4阳