基于LPC1768 Cortex-M3的DS1302万年历
/*基于LPC1768 Cortex-M3的DS1302万年历*/
/************控制引脚**************
SCL P0.26
I/O P0.24
RST P0.25
***********************************/ #include"LPC17xx.h"
#include"ds1302.h"
#include"delay.h"
volatile uint16_t time_data[7]={ 0x2012,0x4,0x5,0x25,0x14,0x11,0x00 }; //年,星期,月,日,时,分,秒 (初始时间)
volatile uint8_t write_add[7]={ 0x8c,0x8a,0x88,0x86,0x84,0x82,0x80 };
volatile uint8_t read_add[7]= { 0x8d,0x8b,0x89,0x87,0x85,0x83,0x81 };
uint8_t table_time_dis[22];
/*------------------DS1302复位--------------------*/ void DS1302_RESET(void)
{
DS1302_SCLK_OUT;
DS1302_CE_OUT;
DS1302_SCLK_CLR;
DS1302_CE_CLR;
Time3_delay_us(10);
DS1302_SCLK_SET;
}
/*-----------------写单字节指令------------------*/ void Write_Single_byte(uint8_t wdate)
{
uint8_t i;
DS1302_GPIO0_OUT;
DS1302_CE_SET;
for(i=0;i<8;i++)
{
if(wdate&0x01)
{
DS1302_GPIO0_SET;
}
else
{
DS1302_GPIO0_CLR;
}
DS1302_SCLK_CLR;
Time3_delay_us(10);
DS1302_SCLK_SET;
Time3_delay_us(10);
wdate >>= 1;
}
}
/*-----------------读单字节指令------------------*/
uint8_t Read_Single_byte(void)
{
uint8_t i;
uint8_t rdata = 0x00;
DS1302_GPIO0_IN;
DS1302_CE_SET;
for(i=0;i<8;i++)
{
DS1302_SCLK_SET;
Time3_delay_us(10);
DS1302_SCLK_CLR;
Time3_delay_us(10);
rdata >>=1;
if(DS1302_GPIO0_Read)
{
rdata |= 0x80;
}
}
return rdata;
}
/*------------------DS1302写-------------------*/
void Write_DS1302(uint8_t add,uint8_t wdate)
{
DS1302_CE_CLR;
DS1302_SCLK_CLR;
DS1302_CE_SET;
Write_Single_byte(add);
Write_Single_byte(wdate);
DS1302_SCLK_SET;
DS1302_CE_CLR;
}
/*------------------DS1302读-------------------*/ uint8_t Read_DS1302(uint8_t add) {
uint8_t rdata;
DS1302_CE_CLR;
DS1302_SCLK_CLR;
DS1302_CE_SET;
Write_Single_byte(add);
rdata = Read_Single_byte();
DS1302_SCLK_SET;
DS1302_CE_CLR;
return (rdata);
}
/**********************************************
写一个对时函数设置时钟要不芯片不会运行
***********************************************/
void time_inint(void)
{
uint8_t i;
Write_DS1302(0x8e,0x00); //关写保护
for(i=0;i<7;i++)
{
Write_DS1302(write_add[i],time_data[i]);
}
Write_DS1302(0x8e,0x80); //开写保护
}
/**********************************************
读时钟函数
***********************************************/
void read_time(void)
{
uint8_t i;
for(i=0;i<7;i++)
{
time_data[i]=Read_DS1302(read_add[i]);
}
}
/**********************************************
时间处理
***********************************************/ void time_program(void)
{
uint8_t i;
for(i=0;i<7;i++) //16进制转10进制
{
time_data[i]=(time_data[i]>>0)%16+
(time_data[i]>>4)%16*10+
(time_data[i]>>8)%16*100+
(time_data[i]>>12)%16*1000;
}
table_time_dis[21]=time_data[1]%10+ '0'; //星期
table_time_dis[20]=time_data[1]/10+ '0';
table_time_dis[19]=47;
table_time_dis[18]=time_data[6]%10 + '0'; //秒
table_time_dis[17]=time_data[6]/10 + '0';
table_time_dis[16]=58;
table_time_dis[15]=time_data[5]%10+ '0'; //分
table_time_dis[14]=time_data[5]/10+ '0';
table_time_dis[13]=58;
table_time_dis[12]=time_data[4]%10+ '0'; //时
table_time_dis[11]=time_data[4]/10+ '0';
table_time_dis[10]=47;
table_time_dis[9]=time_data[3]%10+ '0'; //日
table_time_dis[8]=time_data[3]/10+ '0';
table_time_dis[7]=45;
table_time_dis[6]=time_data[2]%10+ '0'; //月
table_time_dis[5]=time_data[2]/10+ '0';
table_time_dis[4]=45;
table_time_dis[3]=time_data[0]%10 + '0'; //年
table_time_dis[2]=time_data[0]/10 + '0';
table_time_dis[1]=0+ '0';
table_time_dis[0]=2+ '0';
}
本文档为【基于LPC1768 Cortex-M3的DS1302万年历】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。