c语言闰年的判断条件DS1302,DS1302驱动程序(平年和闰年天数自动调整)

/*********************************************************************************

1.本程序能够显示年,月,日,时,分,

秒,星期七个参数.

2.时间和日期可调。可分别完成年,月,日,时,分,

秒六个参数的调整。支持平年和闰年天数的自动调整。

实验名称:时钟芯片DS12C887演示程序

晶振:内部  8M

接线方法:

1.PA0-PA2分别接DS1302的CS,TADA,SLK.

*********************************************************************************/

#include#include#define uchar unsigned char

#define uint unsigned int

#define ds1302_PIN             PINA&BIT(PA1)

#define ds1302_DDR             DDRA

#define ds1302_DDR_OUT         ds1302_DDR|=BIT(PA0)|BIT(PA1)|BIT(PA2)

#define ds1302_DDR_IN          ds1302_DDR&=~(BIT(PA1)|BIT(PA2))

#define ds1302_PORT            PORTA

#define ds1302_RST_H        ds1302_PORT|= BIT(PA0)  //片选

#define ds1302_RST_L        ds1302_PORT&= ~BIT(PA0)

#define ds1302_DAT_H        ds1302_PORT|= BIT(PA1)  //数据

#define ds1302_DAT_L        ds1302_PORT&= ~BIT(PA1)

#define ds1302_CLK_H        ds1302_PORT|= BIT(PA2)  //时钟

#define ds1302_CLK_L        ds1302_PORT&= ~BIT(PA2)

const char start_time[]={0x00,0x00,0x00,0x01,0x01,0x07,0x06};   //初始值;

char month_p[13]={0,31,28,31,30,31,30,31,31,30,31,30,31,};//平年

char month_y[13]={0,31,29,31,30,31,30,31,31,30,31,30,31,};//闰年

uchar second=0;

uchar minute=0;

uchar hour=0;

uchar day=1;

uchar month=1;

uchar year=6;

uchar week=7;

uchar month_max=0;//每月最大天数

/****************DS1302子程序***********************/

void ds1302_inputbyte(uchar CD)  //写入一字节数据

{

uchar i,mid=0;

for (i=8;i>0;i--)

{

mid=CD&0x01;

if (mid==0)

ds1302_DAT_L;

else

ds1302_DAT_H ;

ds1302_CLK_H ;

ds1302_CLK_L ;

CD=CD>>1;

}

}

uchar ds1302_outputbyte(void)  //读取一字节数据

{

uchar i,mid=0;

for (i=8;i>0;i--)

{

ds1302_DDR_IN;

mid=mid>>1;

if ((ds1302_PIN)==0)

mid&=~BIT(PB7);

else

mid|=BIT(PB7);

ds1302_DDR_OUT;

ds1302_CLK_H ;

ds1302_CLK_L ;

}

return(mid);

}

void w1302(uchar ucAddr,uchar ucDa)   //写入数据

{

ds1302_DDR_OUT ;

ds1302_RST_L;

ds1302_CLK_L;

ds1302_RST_H;

ds1302_inputbyte(ucAddr);

ds1302_inputbyte(ucDa);

ds1302_CLK_H ;

ds1302_RST_L;

}

uchar r1302(uchar ucAddr)        //读取数据

{

uchar ucDa;

ds1302_DDR_OUT ;

ds1302_RST_L;

ds1302_CLK_L ;

ds1302_RST_H ;

ds1302_inputbyte(ucAddr);

ucDa=ds1302_outputbyte();

ds1302_CLK_H ;

ds1302_RST_L;

return(ucDa);

}

//设置初始时间

//格式:秒,分,时,日,月,星期,年

void set1302()

{

uchar i;

uchar ucaddr=0x80;

w1302(0x8e,0x00);//写允许

w1302(0x90,0xa6);//打开充电功能

for (i=0;i<7;i++)

{

w1302(ucaddr,start_time[i]);

ucaddr+=2;

}

w1302(0x8e,0x80);//写禁止

}

//读取当前时间

void get1302()

{

uchar i=0,ucaddr=0x81;

uchar uctimer[6];

char sec1,day1,mon1,year1,min1,hour1;

for (i=0;i<7;i++)

{

uctimer[i]=r1302(ucaddr);

ucaddr+=2;

}

sec1=uctimer[0];//十进制到二进制的调整

second=((sec1&0x70)>>4)*10+(sec1&0x0f);

min1=uctimer[1];

minute=((min1&0x70)>>4)*10+(min1&0x0f);

hour1=uctimer[2];

hour=((hour1&0x30)>>4)*10+(hour1&0x0f);

day1=uctimer[3];

day=((day1&0x30)>>4)*10+(day1&0x0f);

mon1=uctimer[4];

month=((mon1&0x10)>>4)*10+(mon1&0x0f);

week=uctimer[5];

year1=uctimer[6];

year=((year1&0x70)>>4)*10+(year1&0x0f);

}

void second_set()   //调秒

{

w1302(0x8e,0x00);

w1302(0x80,((second/10)<<4)+(second%10));

w1302(0x8e,0x80);

}

void minute_set()  //调分

{

w1302(0x8e,0x00);

w1302(0x82,((minute/10)<<4)+(minute%10));

w1302(0x8e,0x80);

}

void hour_set()  //调时

{

w1302(0x8e,0x00);

w1302(0x84,((hour/10)<<4)+(hour%10));

w1302(0x8e,0x80);

}

void year_set()  //调年

{

year++;

if (year>69)

year=6;

if (year%4==0)

month_max=month_y[month];

else

month_max=month_p[month];

if (day>month_max)

day=month_max;

day_set();

w1302(0x8e,0x00);

w1302(0x8c,((year/10)<<4)+(year%10));

w1302(0x8e,0x80);

}

void month_set()  //调月

{

month++;

if (month>12)

month=1;

if (year%4==0)

month_max=month_y[month];

else

month_max=month_p[month];

if (day>month_max)

day=month_max;

day_set();

w1302(0x8e,0x00);

w1302(0x88,((month/10)<<4)+(month%10));

w1302(0x8e,0x80);

}

void day_set()  //调日

{

uchar i=0;

uchar j=0;

uchar month_m=0;

uint day_n=0;

day_n=0;

for (i=6;i  {

if (i   {

if (i%4==0)

day_n=day_n+366;

else

day_n=day_n+365;

}

if (i==year)

{

if (month>1)

{

for (j=1;j      {

if (year%4==0)

month_m=month_y[j];

else

month_m=month_p[j];

day_n=day_n+month_m;

}

}

}

}

if (year%4==0)

month_max=month_y[month];

else

month_max=month_p[month];

if (day>month_max)

day=1;

week=(day_n+day-1)%7;

if (week==0)

week=7;

w1302(0x8e,0x00);

w1302(0x86,((day/10)<<4)+(day%10));

w1302(0x8a,week);

w1302(0x8e,0x80);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 图片切割代码,Android用clip剪切图像资源

使用clip剪切图像资源可以做进度条&#xff0c;图像慢慢展开的效果&#xff0c;他使用以下几个属性来控制效果&#xff1a;android:drawable&#xff1a;指定要剪切的原图像。android:clipOrientation&#xff1a;截取的方向。可取的值&#xff1a;horizontal和vertical。分别表…

android gradle错误,Android studio gradle错误与顶级异常

我最近更新了我的Android Studio,从那以后我的项目没有构建...我得到错误,如下面的错误:Error Code:1Output:UNEXPECTED TOP-LEVEL EXCEPTION:com.android.dx.cf.iface.ParseException:class name (org/pervasivesystems/mobilehealth/activities/AppSettingsActivity$AppSetti…

Android中列表动态删除item,如何删除Android ExpandableListView中某个group item的child item?...

自定义了一个expandablelistview 想要删除其中的子项list使用remove方法把list中的指定项删除了11-09 21:04:20.585: I/MainActivity(13557): childData[{child_textsecond}, {child_textthird}]但是在expandablelistview界面显示中&#xff0c;并没有变化,并且还有list溢出报错…

android 首页广告显示不出来的,android – Admob插页式广告(全屏)不会显示

您没有为interstitialAd调用loadAd().广告插播广告应在您展示广告之前加载.interstitialAd.loadAd(adRequest);你也应该在调用show()之前检查它是否已加载.它可能无法立即使用,您可能希望在调用show之前提前加载它.if(mInterstitial.isLoaded()){mInterstitial.show();AdReques…

android新建项目错误,新建Android项目出错

新建Android项目出以下的错误&#xff1a;C:\Users\txxs\workspace\4sd\res\values\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name Theme.AppCompat.Light.[2016-11-23 11:57:46 - 4sd][2016-11-23 11:57:46 - 4sd] …

android 图片 切换,Android 应用开发笔记 - 切换图片(ImageSwitcher)

在面板拖拽图标&#xff0c;然后更改相关属性(Properties)&#xff0c;如下&#xff1a;android:id"id/imgSwit01"android:layout_width"wrap_content"android:layout_height"wrap_content" />ImageSwitcher使用的是setFactory()方法&#xf…

android layout.inflater,Android - LayoutInflater

在实际开发中LayoutInflater这个类还是非常有用的&#xff0c;它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件&#xff0c;并且实例化&#xff1b;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。具体作…

android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)

Android提供了一个XML驱动的框架&#xff0c;用于为应用程序创建系统样式的PreferenceScreen.(3.0/API 11 以前)是这样使用的看代码&#xff1a;mypreference.xmlandroid:key"PREF_AUTO_REFRESH"android:defaultValue"true"android:summary"select to…

wps 将html转为word,用WPS快速将网页内容转换为WORD文档

当过学生的都知道&#xff0c;有时查找资料&#xff0c;看到图文并茂的网页想要把它Copy在WORD文档中&#xff0c;那么图片和文字相互参杂&#xff0c;想要保存下来很复杂&#xff0c;但是如果用WPS的话&#xff0c;一切就会很简单的&#xff0c;下面来看看WPS是怎么办到的。1.…

鸿蒙明年可以在手机上用吗,华为王成录:鸿蒙已满足在手机上使用,明年一二月份向部分用户开放...

在2019年的华为开发者大会上&#xff0c;华为消费者业务CEO余承东正式对外发布了基于微内核的分布式操作系统-HarmonyOS(鸿蒙OS)&#xff0c;余承东表示&#xff0c;鸿蒙OS的出发点和Android、iOS都不一样&#xff0c;它是一款全新的基于微内核的面向全场景的分布式操作系统&am…

go语言 doc转换html,go语言使用wkhtmltopdf工具将html转成pdf

最近收到网友的提问后端怎么把html转成pdf文件&#xff0c;于是我就把我以前做的例子发出来给大家参考一下&#xff0c;如果对你有帮助的话请点个赞1.首先选择适合自己的系统下载wkhtmltopdf工具mac下载后安装成功会自动添加到环境变量 直接执行 wkhtmltopdf -V 测试是否安装成…

java sound 多线程同一音频文件_Java在编程语言中占据何等优势?

现在是信息时代&#xff0c;出现了各种各样的行业&#xff0c;在这些众多行业里面&#xff0c;程序员算是高薪职业。在国内程序员的薪水要比其他行业高一些。也正是如此高薪的诱惑和充满挑战性的工作&#xff0c;令程序员近几年来成为了备受欢迎的职业。程序员日常的工作大多是…

dlna和miracast可以共存吗_高考化学必备之离子共存问题

发生复分解反应&#xff11;、有气体产生。H与CO32ˉ、HCO3ˉ、SO32ˉ、HSO3ˉ、S2ˉ、HSˉ等不能共存如CO32-、S2-、HS-、HSO3-、等易挥发的弱酸的酸根与H不能大量共存&#xff0c;主要是由于CO32-&#xff0b;2H&#xff1d;CO2↑&#xff0b;H2O、HS-&#xff0b;H&#xff…

html向上浮动的方式,JS 实现Div向上浮动的实现代码

Html 及 JS 代码如下&#xff1a;复制代码 代码如下:style"position: absolute; width: 100px;">我们var newsOne document.getElementById("newsOne");newsOne.style.bottom 0;newsOne.style.left window.screen.availWidth - 100;var bottom 0;fu…

perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)

它是默认带有现代行为的 Perl 5&#xff0c;将为以后更大的变化奠定基础。来源&#xff1a;https://linux.cn/article-12349-1.html作者&#xff1a;Brian D Foy译者&#xff1a;Xingyu.Wang(本文字数&#xff1a;5043&#xff0c;阅读时长大约&#xff1a;8 分钟)近日 召开的 …

html文档加载,html加载

SQL中进行Join操作时&#xff0c;可以按照以下步骤进行优化。为了方便说明&#xff0c;设表A和表B&#xff0c;且A、B表都有个名为name的列。对A、B表进行join操作。 估计表的大小。 根据每次加载数据的大小&#xff0c;来估计表大小。 也可以在Hive的数据库存储路径下直接查看…

spark将rdd转为string_八、Spark之详解Tranformation算子

RDD中的所有转换(Transformation)算子都是延迟加载的&#xff0c;也就是说&#xff0c;它们并不会直接计算结果。相反的&#xff0c;它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时&#xff0c;这些转换才会真正运行…

html的过渡属性,CSS3属性transition(过渡)多属性详解

transform呈现的是一种变形结果&#xff0c;而transition呈现的是一种过渡&#xff0c;通俗点说就是一种动画转换过程&#xff0c;如渐显、渐弱、动画快慢等。transition和transform是两种不同的动画模型。transition属性是一个简写属性&#xff0c;用于设置四个过渡属性transi…

2021年呼和浩特高考段考成绩查询,2019届呼和浩特市高三段考成绩排名分析

原标题&#xff1a;2019届呼和浩特市高三段考成绩排名分析不忘初心 天道酬勤╳✎校对&#xff1a;刘姝坤✎文稿&#xff1a;王涛老师✎声明&#xff1a;如有转载请联系并注明出处好乐(巨人)教育2019高三普文理集训段考班火热招生中全呼市唯一一家吃住学一体封闭式管理的学校唯一…

dj打碟怎么学_学DJ要不要去培训学校?

酒吧学DJ打碟他有很多种的说法&#xff0c;有些酒吧他是自己招学生&#xff0c;当这样的酒吧在现今是挺少的&#xff0c;也有&#xff0c;但要求很高。还有一种就是说你自己在酒吧里上班的人自己招私人徒弟什么的&#xff0c;那也是就学DJ打碟&#xff0c;那一搬酒吧都是怎么学…