0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于51单片机+18B20温度传感器+12864LCD显实现显示器显示日历与时钟和温度的设计方案

基于51单片机+18B20温度传感器+12864LCD显实现显示器显示日历与时钟和温度的设计方案

来源: elecfans
2021-01-28
类别:工业控制
eye 17
文章创建人 拍明

原标题:51单片机实现显示器显示日历与时钟和温度的设计方案

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

  1.jpg

  #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;



责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案