資源簡介
名稱:基于51單片機的萬年歷(電路圖請參見Proteus仿真文件)
主要元器件:51單片機,DS1302,蜂鳴器
環(huán)境:keil4,proteus7.8(仿真)
主要功能:
1)使用液晶顯示器,能實時顯示年、月、日、星期、時、分、秒;(2)可以顯示農(nóng)歷日期;
(3)能夠顯示是閏年還是平年,具有閏年補償功能,平年閏年準(zhǔn)確無誤;
(4)可以設(shè)定鬧鐘功能;
(5)掉電不復(fù)位,日期和時間可調(diào);

代碼片段和文件信息
#include“ds1302.h“
//---DS1302寫入和讀取時分秒的地址命令---//
//---秒分時日月周年?最低位讀寫位;-------//
uchar?code?READ_RTC_ADDR[7]?=?{0x81?0x83?0x85?0x87?0x89?0x8b?0x8d};?
uchar?code?WRITE_RTC_ADDR[7]?=?{0x80?0x82?0x84?0x86?0x88?0x8a?0x8c};
//---DS1302時鐘初始化201年5月1日星期二12點00分00秒。---//
//---存儲順序是秒分時日月周年存儲格式是用BCD碼---//
uchar?TIME[7]?=?{0?0?0x12?0x10?0x05?0x02?0x19};
/*******************************************************************************
*?函?數(shù)?名?????????:?Ds1302Write
*?函數(shù)功能 ???:?向DS1302命令(地址+數(shù)據(jù))
*?輸????入?????????:?addrdat
*?輸????出?????????:?無
*******************************************************************************/
void?Ds1302Write(uchar?addr?uchar?dat)
{
uchar?n;
RST?=?0;
_nop_();
SCLK?=?0;//先將SCLK置低電平。
_nop_();
RST?=?1;?//然后將RST(CE)置高電平。
_nop_();
for?(n=0;?n<8;?n++)//開始傳送八位地址命令
{
DSIO?=?addr?&?0x01;//數(shù)據(jù)從低位開始傳送
addr?>>=?1;
SCLK?=?1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
_nop_();
SCLK?=?0;
_nop_();
}
for?(n=0;?n<8;?n++)//寫入8位數(shù)據(jù)
{
DSIO?=?dat?&?0x01;
dat?>>=?1;
SCLK?=?1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
_nop_();
SCLK?=?0;
_nop_();
}
?
RST?=?0;//傳送數(shù)據(jù)結(jié)束
_nop_();
}
/*******************************************************************************
*?函?數(shù)?名?????????:?Ds1302Read
*?函數(shù)功能 ???:?讀取一個地址的數(shù)據(jù)
*?輸????入?????????:?addr
*?輸????出?????????:?dat
*******************************************************************************/
uchar?Ds1302Read(uchar?addr)
{
uchar?ndatdat1;
RST?=?0;
_nop_();
SCLK?=?0;//先將SCLK置低電平。
_nop_();
RST?=?1;//然后將RST(CE)置高電平。
_nop_();
for(n=0;?n<8;?n++)//開始傳送八位地址命令
{
DSIO?=?addr?&?0x01;//數(shù)據(jù)從低位開始傳送
addr?>>=?1;
SCLK?=?1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
_nop_();
SCLK?=?0;//DS1302下降沿時,放置數(shù)據(jù)
_nop_();
}
_nop_();
for(n=0;?n<8;?n++)//讀取8位數(shù)據(jù)
{
dat1?=?DSIO;//從最低位開始接收
dat?=?(dat>>1)?|?(dat1<<7);
SCLK?=?1;
_nop_();
SCLK?=?0;//DS1302下降沿時,放置數(shù)據(jù)
_nop_();
}
RST?=?0;
_nop_(); //以下為DS1302復(fù)位的穩(wěn)定時間必須的。
SCLK?=?1;
_nop_();
DSIO?=?0;
_nop_();
DSIO?=?1;
_nop_();
return?dat;
}
/*******************************************************************************
*?函?數(shù)?名?????????:?Ds1302Init
*?函數(shù)功能 ???:?初始化DS1302.
*?輸????入?????????:?無
*?輸????出?????????:?無
*******************************************************************************/
void?Ds1302Init()
{
uchar?n;
Ds1302Write(0x8E0X00); ?//禁止寫保護(hù),就是關(guān)閉寫保護(hù)功能
for?(n=0;?n<7;?n++)//寫入7個字節(jié)的時鐘信號:分秒時日月周年
{
Ds1302Write(WRITE_RTC_ADDR[n]TIME[n]);
}
Ds1302Write(0x8E0x80); ?//打開寫保護(hù)功能
}
/*******************************************************************************
*?函?數(shù)?名?????????:?Ds1302ReadTime
*?函數(shù)功能 ???:?讀取時鐘信息
*?輸????入?????????:?無
*?輸????出?????????:?無
*******************************************************************************/
void?Ds1302ReadTime()
{
uchar?n;
for?(n=0;?n<7;?n++)//讀取7個字節(jié)的時鐘信號:分秒時日月周年
{
TIME[n]?=?Ds1302Read(READ_RTC_ADDR[n]);
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\
?????文件??????????19??2019-05-30?12:26??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\ExtDll.iex
?????文件????????6343??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\ds1302.LST
?????文件????????5849??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\ds1302.OBJ
?????文件??????????64??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\ds1302.__i
?????文件????????3309??2019-05-30?07:45??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\ds1302.c
?????文件?????????534??2016-10-11?08:55??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\ds1302.h
?????文件????????6620??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\lcd.LST
?????文件????????3518??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\lcd.OBJ
?????文件??????????61??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\lcd.__i
?????文件????????3639??2017-04-09?17:36??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\lcd.c
?????文件?????????965??2016-10-11?08:55??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\lcd.h
?????文件???????12275??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\main.LST
?????文件???????13034??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\main.OBJ
?????文件????????7675??2019-05-09?17:15??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\main.SDI
?????文件????????6771??2019-05-30?12:26??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\main.c
?????文件??????????13??2019-05-09?17:15??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\main.hex
?????文件???????19409??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro
?????文件???????21648??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.M51
?????文件????????1097??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.build_log.htm
?????文件????????4433??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.hex
?????文件??????????51??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.lnp
?????文件?????????400??2019-05-30?12:31??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.plg
?????文件???????73894??2019-03-25?08:57??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.uvgui
?????文件???????92095??2020-04-18?16:42??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.uvgui.asus
?????文件???????73325??2019-03-25?08:56??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.uvgui.bak
?????文件????????7010??2020-04-18?16:41??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.uvopt
?????文件???????14589??2020-04-18?16:41??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro.uvproj
?????文件???????59543??2019-05-30?12:28??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro_uvopt.bak
?????文件???????13548??2019-05-09?17:13??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\pro_uvproj.bak
?????目錄???????????0??2019-05-30?12:31??DS1302時鐘LCD1602顯示(可以按鍵設(shè)置時鐘)\電子萬年歷仿真\
............此處省略3個文件信息
- 上一篇:網(wǎng)盤搜索引擎 1.3.rar
- 下一篇:USB公頭封裝
評論
共有 條評論