基于51單片機數字時鐘,網上一般都是用51單片機+ds1302做的精度沒有我這個好,這次是采用DS12CR887時鐘芯片,1602液晶顯示,經過本人測試成功.特發布在51黑電子論壇.
完整源碼下載:
51-clock.rar
(75.05 KB, 下載次數: 37)
2017-3-16 02:52 上傳
點擊文件名下載附件
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);
- }
復制代碼
按鍵驅動程序:
|