您的位置 首页 国产IC

51单片机完成显现器显现日历与时钟和温度的规划

51单片机实现显示器显示日历与时钟和温度的设计-温度传感器采用18B20日历与时钟,温度分时切换显示,采用8位共阳数码管数据输出P1, 位码驱动P2也可以采用12864LCD显示,该程序暂时没写。

程序功用:日历,时钟,温度显现(测温代码暂没加上,加上后程序将超越4k,留意芯片型号选用),温度传感器选用18B20日历与时钟,温度分时切换显现,选用8位共阳数码管数据输出P1, 位码驱动P2也能够选用12864LCD显现,该程序暂时没写。
 

#include

#include

#define unchar unsigned char

#define unint unsigned int

unchar code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,

0Xbf,0x9c,0xc6,0x7f,0xff}; //数码管字形表,0-9,-,o,C,。,灭

unchar code rili1997code[]={0x2,0x5,0x5,0x1,0x3,0x6,0x1,0x4,0x0,0x2,0X5,0x0}; //1996年12个月的月份星期校对码

unchar TImecnt=19; //守时中止计数器

unchar TImeadd1=0; //时刻加1判别

unchar newday=0; //日期加1判别

unchar week;//星期

unchar data date[]={9,12,9};

unchar data TIme[]={11,59,55};

unchar data wendu[]={14,19,116}; //wendu[0]=10为负,显现-;wendu[0] =14为正,符号位不显现, 原理参阅数码管字形表

//wendu[1]是整数温度值,wendu[2]/10是“°”显现,wendu[2]/10+1显现C,wendu[2]%110是小数点后的温度值

unchar t=150; //延时常数

unchar cnt=0; //显现操控计数器

//#define SSL 0x7f //秒低位段码地址

//#define SSH 0XBF //秒高位段码地址

//#define _L 0XDF //8位数码管显现,分钟与秒之间的-分隔符

//#define MML 0XEF //以下同

//#define MMH 0XF7

//#define _H 0XFB //8位数码管显现,小时与分钟之间的-分隔符

//#define HHL 0XFD

//#define HHH 0XFE

sbit TImeset=P3^2; //时刻调整键

sbit dateset=P3^3; //日历调整键

sbit add=P3^4; //加调整

sbit dec=P3^5; //减调整

//日期加1函数

//当日期有进位时调用,判别年,月,日的最大值

void dateadd1(unchar i)

{

{ unchar j=0;

switch(i)

{ case 0:if(date[0]==99) //年选用低2位表明

date[0]=0;

else

date[0]++;break;

case 1:if(date[1]==12)

date[1]=1;

else

date[1]++;break;

case 2:

switch(date[1])

{case 4: //4,6,9,11月的最大天数是30

case 6:

case 9:

case 11:if(date[2]==30)

{date[2]=1;

j++; //j++表明月份加1,以下同

}

else

{date[2]++; }

break;

case 1: //1,3,5,7,8,10,12月的最大天数是31

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: if(date[2]==31)

{date[2]=1; j++; }

else

date[2]++; break;

case 2:if(date[0]%400==0) //2月份需求判别是否是闰年

{if(date[2]==29) //能被400整除的世编年是闰年

{date[2]=1;j++; } //闰年2月29天,月份加1

else

date[2]++;break;

}

else

{if(date[0]%4==0) //非世编年,能被4整除是闰年

{if(date[2]==29)

{date[2]=1;j++; }

else

date[2]++; break;

}

else

{if(date[2]==28) //非闰年2月28天

{date[2]=1;j++;}

else

date[2]++; break;

}

}

default:break;

}

if(j)

{ if(date[1]==12) //假如进位的月份是12月,置月份date[1]为1

date[1]=1;

else

date[1]++;

}

} }

}

void datedec1(unchar i)

{ unchar j=0;

switch(i)

{ case 0: if(date[0]==0)

date[0]=99;

else

date[0]–;break;

case 1:if(date[1]==0)

date[1]=12;

else

date[1]–;break;

case 2:

switch(date[1])

{ case 4: //4,6,9,11月的最大天数是30

case 6:

case 9:

case 11:if(date[2]==0)

date[2]=30;

else

date[2]–;

break;

case 1: //1,3,5,7,8,10,12月的最大天数是31

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: if(date[2]==0)

date[2]=31;

else

date[2]–; break;
来历;21ic

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/343838.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部