基于51单片机数字时钟,网上一般都是用51单片机+ds1302做的精度没有我这个好,这次是采用DS12CR887时钟芯片,1602液晶显示,经过本人测试成功.特发布在51黑电子论坛.
完整源码下载:
51-clock.rar
(75.05 KB, 下载次数: 37)
DS12CR887的驱动程序:
- /*
- * RTC.c
- *
- * Created: 12/3
- * Author: 詹磊
- */
- #include"File_h\main.h"
- #include"File_h\LCD1602.h"
- #include"File_h\key.h"
- #include"File_h\RTC.h"
- //-------------------------------------------//
- //函数名:写DS12CR887数据函数
- //入口:Addre:所写数据的地址
- // Data:需要写入的数据
- //出口:Void
- //功能:写DS12CR887内数据
- //-------------------------------------------//
- void WriteDS12CR887(unsigned char Addre,unsigned char Data)
- {
- DS12CR887_DS=1;
- DS12CR887_RW=1;
- DS12CR887_AS=1;
- DS12CR887_DataPutIO=Addre;
- DS12CR887_CS=0;
- DS12CR887_AS=0;
- DS12CR887_DataPutIO=Data;
- DS12CR887_RW=0;
- DS12CR887_RW=1;
- DS12CR887_CS=1;
- DS12CR887_AS=1;
- }
- //-------------------------------------------//
- //函数名:读DS12CR887数据函数
- //入口:Addre:所读数据的地址
- //出口:unsigned char :所读出的数据
- //功能:读DS12CR887内数据
- //-------------------------------------------//
- unsigned char ReadDS12CR887(unsigned char Addre)
- {
- unsigned char ds_date;
- DS12CR887_RW=1;
- DS12CR887_DS=1;
- DS12CR887_AS=1;
- DS12CR887_DataPutIO=Addre;
- DS12CR887_CS=0;
- DS12CR887_AS=0;
- DS12CR887_DataPutIO=0xff;
- DS12CR887_DS=0;
- ds_date=DS12CR887_DataPutIO;
- DS12CR887_DS=1;
- DS12CR887_CS=1;
- DS12CR887_AS=1;
- return ds_date;
- }
- //-------------------------------------------//
- //函数名:时钟芯片始化
- //入口:Void
- //出口:Void
- //功能:配置相关寄存器等
- //-------------------------------------------//
- void RTC_Init()
- {
- /*
- WriteDS12CR887(0x00,0x57);
- WriteDS12CR887(0x02,0x59);
- WriteDS12CR887(0x04,0x23);
- WriteDS12CR887(0x06,0x07);
- WriteDS12CR887(0x07,0x30);
- WriteDS12CR887(0x08,0x12);
- WriteDS12CR887(0x09,0x01);
- */
- ///*
- WriteDS12CR887(0x00,57);
- WriteDS12CR887(0x02,59);
- WriteDS12CR887(0x04,23);
- WriteDS12CR887(0x06,07);
- WriteDS12CR887(0x07,30);
- WriteDS12CR887(0x08,12);
- WriteDS12CR887(0x09,01);
- //*/
- WriteDS12CR887(0x0A,0x20);
- WriteDS12CR887(0x0B,0x06);
- }
- //-------------------------------------------//
- //函数名:读时钟数据函数
- //入口:*tp:所读时间数据的结构体指针
- // *dp:所读日期数据的结构体指针
- //出口:Void
- //功能:读时钟数据
- //-------------------------------------------//
- void GetRTC_Data(TimeData *tp,DateData *dp)
- {
- tp->second=ReadDS12CR887(0x00);
- tp->minute=ReadDS12CR887(0x02);
- tp->hour=ReadDS12CR887(0x04);
- dp->day=ReadDS12CR887(0x06);
- dp->date=ReadDS12CR887(0x07);
- dp->month=ReadDS12CR887(0x08);
- dp->year=ReadDS12CR887(0x09);
- }
- //-------------------------------------------//
- //函数名:调时间数据函数
- //入口:*tp:所写时间数据的结构体指针
- //出口:Void
- //功能:调时间数据
- //-------------------------------------------//
- void WriteRTC_TimeData(TimeData *tp)
- {
- WriteDS12CR887(0x00,tp->second);
- WriteDS12CR887(0x02,tp->minute);
- WriteDS12CR887(0x04,tp->hour);
- }
- //-------------------------------------------//
- //函数名:调日期数据函数
- //入口:*dp:所写日期数据的结构体指针
- //出口:Void
- //功能:调日期数据
- //-------------------------------------------//
- void WriteRTC_DateData(DateData *dp)
- {
- WriteDS12CR887(0x06,dp->day);
- WriteDS12CR887(0x07,dp->date);
- WriteDS12CR887(0x08,dp->month);
- WriteDS12CR887(0x09,dp->year);
- }
- //-------------------------------------------//
- //函数名:调闹钟数据函数
- //入口:*atp:所写闹钟数据的结构体指针
- //出口:Void
- //功能:调闹钟数据
- //-------------------------------------------//
- void WriteRTC_AlarmData(TimeData *atp)
- {
- WriteDS12CR887(0x01,atp->second);
- WriteDS12CR887(0x03,atp->minute);
- WriteDS12CR887(0x05,atp->hour);
- }
复制代码
按键驱动程序:
|