完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
入口参数说明:
#include “D:ICC51CmmICC.H” #define OUT_SCK ***i(DDRD,0) #define OUT_SIO ***i(DDRD,1) #define OUT_RST ***i(DDRD,2) #define IN_SIO cbi(DDRD,1) #define SET_SCK ***i(PORTD,0) #define SET_SIO ***i(PORTD,1) #define SET_RST ***i(PORTD,2) #define CLR_SCK cbi(PORTD,0) #define CLR_SIO cbi(PORTD,1) #define CLR_RST cbi(PORTD,2) #define GET_SIO gbi(PIND,1) ---------------------------------------------------------------------- 待定参数说明: #define DELAY() {NOP();NOP();NOP();} ---------------------------------------------------------------------- 对外变量说明: ---------------------------------------------------------------------- 对外函数说明: ---------------------------------------------------------------------- 10101010101010101010101010101010101010101010101010101010101010101010*/ #ifndef DS1302_H #define DS1302_H #include “D:ICC_HCmmICC.H” #define DELAY() {NOP();NOP();NOP();NOP();NOP();NOP();} //uint8 DS1302Second; //uint8 DS1302Minute; //uint8 DS1302Hour; //uint8 DS1302Day; //uint8 DS1302Month; //uint8 DS1302Year; //uint8 DS1302SecLow; //uint8 DS1302MinLow; //uint8 DS1302HourLow; //uint8 DS1302DayLow; //uint8 DS1302MonLow; //uint8 DS1302YearLow; //uint8 DS1302SecHi; //uint8 DS1302MinHi; //uint8 DS1302HourHi; //uint8 DS1302DayHi; //uint8 DS1302MonHi; //uint8 DS1302YearHi; uint8 operData; #define data0 (bool)operData&0x01 //#define data7 (bool)operData&0x80 /*-------------------------------------------------------------------- 函数名称:DS1302写一个字节 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ void writeByte(void) { uint8 i; OUT_SIO; DELAY(); for(i=0;i《8;i++) { CLR_SCK; if(data0) SET_SIO; else CLR_SIO; SET_SCK; operData = operData》》1; } } /*-------------------------------------------------------------------- 函数名称:DS1302读一个字节 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ void readByte(void) { uint8 i; IN_SIO; SET_SCK; for(i=0;i《8;i++) { operData = operData》》1; CLR_SCK; DELAY(); //delay50us(1); if(GET_SIO) operData |= 0x80; SET_SCK; } } /*-------------------------------------------------------------------- 函数名称:DS1302充电参数 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ void setChargePrmt(void) { CLR_SCK; SET_RST; operData=0X90; writeByte(); operData=0XA4; writeByte(); /* the following sentence here is not indispensable, but insert this sentence here can prevent ariseing error! because when start operating,RST must keep low level! */ CLR_RST; } /*-------------------------------------------------------------------- 函数名称:DS1302关写保护 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ void closeWP(void) { CLR_RST; CLR_SCK; SET_RST; operData=0X8E; writeByte(); operData=0X80; CLR_SIO; writeByte(); /* the following sentence here is not indispensable, but insert this sentence here can prevent ariseing error! because when start operating,RST must keep low level! */ CLR_RST; } /*-------------------------------------------------------------------- 函数名称:DS1302开写保护 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ void openWP(void) { CLR_RST; CLR_SCK; SET_RST; operData=0X8E; writeByte(); operData=0X00; CLR_SIO; writeByte(); /* the following sentence here is not indispensable, but insert this sentence here can prevent ariseing error! because when start operating,RST must keep low level! */ CLR_RST; } /*-------------------------------------------------------------------- 函数名称:DS1302的一个完整写操作 函数功能: 注意事项:无 提示说明:无 输 入: 返 回:无 --------------------------------------------------------------------*/ void write(uint8 addr,uint8 dat) { CLR_RST; //before SCL change to low level, RST must keep low level CLR_SCK; SET_RST; //CLR_SCK; //also ok!!! //CLR_RST; //SET_RST; //CLR_RST; //error //SET_RST; //CLR_SCK; operData=0X80|(addr《《1); writeByte(); operData=dat; writeByte(); /* the following sentence here is not indispensable, but insert this sentence here can prevent ariseing error! because when start operating,RST must keep low level! */ CLR_RST; } /*-------------------------------------------------------------------- 函数名称:DS1302的一个完整读操作 函数功能: 注意事项:无 提示说明:无 输 入: 返 回:无 --------------------------------------------------------------------*/ uint8 read(uint8 cmd) { //CLR_RST; CLR_SCK; SET_RST; operData=(cmd《《1)|0x81; writeByte(); readByte(); /* the following sentence here is not indispensable, but insert this sentence here can prevent ariseing error! because when start operating,RST must keep low level! */ CLR_RST; return(operData); } /*-------------------------------------------------------------------- 函数名称:DS1302读时间 函数功能: 注意事项:无 提示说明:无 输 入: 返 回:无 --------------------------------------------------------------------*/ void DS1302_getTime(uint8 *buf) { uint8 hourAdr=2,minuteAdr=1,secondAdr=0; buf[0]=read(secondAdr); buf[0]=changeHexToInt(buf[0]); buf[1]=read(minuteAdr); buf[1]=changeHexToInt(buf[1]); buf[2]=read(hourAdr); buf[2]=changeHexToInt(buf[2]); //DS1302_speaTime(); } /*-------------------------------------------------------------------- 函数名称:DS1302读日期 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ //void DS1302_getDate(void) //{ // //} /*-------------------------------------------------------------------- 函数名称:DS1302拆时间 函数功能: 注意事项:无 提示说明:低层将时间拆好,方便上层调用 输 入:无 返 回:无 --------------------------------------------------------------------*/ //void DS1302_speaTime(void) //{ // speaData(DS1302Second,2); // DS1302SecHi=dataElem[1]; // DS1302SecLow=dataElem[0]; // // speaData(DS1302Minute,2); // DS1302MinHi=dataElem[1]; // DS1302MinLow=dataElem[0]; // // speaData(DS1302Hour,2); // DS1302HourHi=dataElem[1]; // DS1302HourLow=dataElem[0]; //} /*-------------------------------------------------------------------- 函数名称:DS1302拆日期 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ //void DS1302_speaDate(void) //{ // //} /*-------------------------------------------------------------------- 函数名称:DS1302设置时间 函数功能: 注意事项:无 提示说明:无 输 入: 返 回:无 --------------------------------------------------------------------*/ void DS1302_setTime(uint8 hour,uint8 minute,uint8 second) { uint8 hourAdr=2,minuteAdr=1,secondAdr=0; hour=changeIntToHex(hour); minute=changeIntToHex(minute); second=changeIntToHex(second); openWP(); write(hourAdr,hour); write(minuteAdr,minute); write(secondAdr,second); closeWP(); } /*-------------------------------------------------------------------- 函数名称:DS1302设置日期 函数功能: 注意事项:无 提示说明:无 输 入: 返 回:无 --------------------------------------------------------------------*/ //void DS1302_setDate(uint8 year,uint8 month,uint8 day) //{ // //} /*-------------------------------------------------------------------- 函数名称:DS1302初始化 函数功能: 注意事项:无 提示说明:无 输 入:无 返 回:无 --------------------------------------------------------------------*/ void DS1302_init(void) { OUT_SCK; OUT_SIO; OUT_RST; openWP(); setChargePrmt(); closeWP(); } #endif |
|
|
|
只有小组成员才能发言,加入小组>>
750 浏览 0 评论
1135 浏览 1 评论
2515 浏览 5 评论
2852 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2701 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1018浏览 3评论
181浏览 2评论
447浏览 2评论
358浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
445浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 06:17 , Processed in 1.075537 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号