資源簡介
基于51單片機的萬年歷設計,使用C語言編碼,以及使用芯片的相關介紹,附帶參考論文,相關軟件的安裝。
代碼片段和文件信息
/*
*******************************************************************************
*?文件名:DS1302.c
*?描??述:實時時鐘芯片DS1302驅動模塊
*?版本號:v1.0.0
*?備??注:
*******************************************************************************
*/
#include?
sbit?DS1302_CE?=?P1^6;
sbit?DS1302_CK?=?P1^4;
sbit?DS1302_IO?=?P1^5;
struct?sTime?{??//日期時間結構體定義
????unsigned?int??year;??//年
????unsigned?char?mon;???//月
????unsigned?char?day;???//日
????unsigned?char?hour;??//時
????unsigned?char?min;???//分
????unsigned?char?sec;???//秒
????unsigned?char?week;??//星期
};
/*?發送一個字節到DS1302通信總線上?*/
void?DS1302ByteWrite(unsigned?char?dat)
{
????unsigned?char?mask;
????
????for?(mask=0x01;?mask!=0;?mask<<=1)??//低位在前,逐位移出
????{
????????if?((mask&dat)?!=?0)?//首先輸出該位數據
????????????DS1302_IO?=?1;
????????else
????????????DS1302_IO?=?0;
????????DS1302_CK?=?1;???????//然后拉高時鐘
????????DS1302_CK?=?0;???????//再拉低時鐘,完成一個位的操作
????}
????DS1302_IO?=?1;???????????//最后確保釋放IO引腳
}
/*?由DS1302通信總線上讀取一個字節?*/
unsigned?char?DS1302ByteRead()
{
????unsigned?char?mask;
????unsigned?char?dat?=?0;
????
????for?(mask=0x01;?mask!=0;?mask<<=1)??//低位在前,逐位讀取
????{
????????if?(DS1302_IO?!=?0)??//首先讀取此時的IO引腳,并設置dat中的對應位
????????{
????????????dat?|=?mask;
????????}
????????DS1302_CK?=?1;???????//然后拉高時鐘
????????DS1302_CK?=?0;???????//再拉低時鐘,完成一個位的操作
????}
????return?dat;??????????????//最后返回讀到的字節數據
}
/*?用單次寫操作向某一寄存器寫入一個字節,reg-寄存器地址,dat-待寫入字節?*/
void?DS1302SingleWrite(unsigned?char?reg?unsigned?char?dat)
{
????DS1302_CE?=?1;???????????????????//使能片選信號
????DS1302ByteWrite((reg<<1)|0x80);??//發送寫寄存器指令
????DS1302ByteWrite(dat);????????????//寫入字節數據
????DS1302_CE?=?0;???????????????????//除能片選信號
}
/*?用單次讀操作從某一寄存器讀取一個字節,reg-寄存器地址,返回值-讀到的字節?*/
unsigned?char?DS1302SingleRead(unsigned?char?reg)
{
????unsigned?char?dat;
????
????DS1302_CE?=?1;???????????????????//使能片選信號
????DS1302ByteWrite((reg<<1)|0x81);??//發送讀寄存器指令
????dat?=?DS1302ByteRead();??????????//讀取字節數據
????DS1302_CE?=?0;???????????????????//除能片選信號
????
????return?dat;
}
/*?用突發模式連續寫入8個寄存器數據,dat-待寫入數據指針?*/
void?DS1302BurstWrite(unsigned?char?*dat)
{
????unsigned?char?i;
????
????DS1302_CE?=?1;
????DS1302ByteWrite(0xBE);??//發送突發寫寄存器指令
????for?(i=0;?i<8;?i++)?????//連續寫入8字節數據
????{
????????DS1302ByteWrite(dat[i]);
????}
????DS1302_CE?=?0;
}
/*?用突發模式連續讀取8個寄存器的數據,dat-讀取數據的接收指針?*/
void?DS1302BurstRead(unsigned?char?*dat)
{
????unsigned?char?i;
????
????DS1302_CE?=?1;
????DS1302ByteWrite(0xBF);??//發送突發讀寄存器指令
????for?(i=0;?i<8;?i++)?????//連續讀取8個字節
????{
????????dat[i]?=?DS1302ByteRead();
????}
????DS1302_CE?=?0;
}
/*?獲取實時時間,即讀取DS1302當前時間并轉換為時間結構體格式?*/
void?GetRealTime(struct?sTime?*time)
{
????unsigned?char?buf[8];
????
????DS1302BurstRead(buf);
????time->year?=?buf[6]?+?0x2000;
????time->mon??=?buf[4];
????time->day??=?buf[3];
????time->hour?=?buf[2];
????time->min??=?buf[1];
????time->sec??=?buf[0];
????time->week?=?buf[5];
}
/*?設定實時時間,時間結構體格式的設定時間轉換為數組并寫入DS
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A.SH.?????12800??2017-12-08?19:30??00使用前必讀\Thumbs.db
?????文件??????59392??2017-07-09?18:31??00使用前必讀\使用前必讀.doc
?????文件??????17781??2018-03-17?21:33??01源程序(源文件+Word版)\Word版.docx
?????文件???????4296??2018-10-20?22:36??01源程序(源文件+Word版)\源程序-keil4可打開\DS1302.c
?????文件???????7363??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\DS1302.LST
?????文件???????8266??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\DS1302.OBJ
?????文件???????2930??2018-03-31?23:48??01源程序(源文件+Word版)\源程序-keil4可打開\DS18B20.c
?????文件???????5440??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\DS18B20.LST
?????文件???????5691??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\DS18B20.OBJ
?????文件??????????0??2017-07-23?09:46??01源程序(源文件+Word版)\源程序-keil4可打開\keyboard.c
?????文件????????723??2017-12-26?17:59??01源程序(源文件+Word版)\源程序-keil4可打開\keyboard.LST
?????文件????????261??2017-12-26?17:59??01源程序(源文件+Word版)\源程序-keil4可打開\keyboard.OBJ
?????文件???????1949??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\Lcd1602.c
?????文件???????3956??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\Lcd1602.LST
?????文件???????4849??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\Lcd1602.OBJ
?????文件??????10254??2018-10-29?11:02??01源程序(源文件+Word版)\源程序-keil4可打開\main.c
?????文件??????17939??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\main.LST
?????文件??????20556??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\main.OBJ
?????文件???????6376??2009-05-07?14:37??01源程序(源文件+Word版)\源程序-keil4可打開\STARTUP.A51
?????文件??????14048??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\STARTUP.LST
?????文件????????749??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\STARTUP.OBJ
?????文件??????33231??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷
?????文件???????8214??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷.hex
?????文件????????105??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷.lnp
?????文件??????46192??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷.M51
?????文件????????505??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷.plg
????.......????144367??2019-01-01?00:00??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷.uvopt
?????文件??????13892??2017-12-31?17:46??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷.uvproj
????.......????144380??2018-11-10?23:01??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷_uvopt.bak
?????文件??????14062??2017-12-26?17:59??01源程序(源文件+Word版)\源程序-keil4可打開\萬年歷_uvproj.bak
............此處省略144個文件信息
評論
共有 條評論