找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5226|回复: 5
收起左侧

Arduino DS3231 1602万年历源码与视频演示

[复制链接]
ID:382628 发表于 2018-10-15 00:12 | 显示全部楼层 |阅读模式
视频演示:
0.png

单片机源程序如下:
  1. #include <LiquidCrystal.h>//文件包含
  2. #include <DS3231.h>//文件包含
  3. #include <Wire.h>//文件包含
  4. /***********定义**********/
  5. DS3231 Clock;
  6. bool Century = false;
  7. bool h12;
  8. bool PM;
  9. byte year,month,date,DoW,hour,minute,second;
  10. LiquidCrystal lcd(12,11,2,3,4,5,6,7,8,9,10);//构造函数,创建一个LiquidCrystal的实例

  11. /*************函数包装***************/
  12. void LcdCommandWrite(int value)
  13. {
  14.   digitalWrite(12,LOW);//给12脚低电平 单片机发送指令
  15.   digitalWrite(11,LOW);//给11脚低电平 进行写操作
  16.   for(int i=3; i<=10;i++)//利用循环写入数据
  17.   {
  18.     digitalWrite(i,value&01);//利用与运算传输数据
  19.     value>>=1;//数据右移
  20.     }
  21.     /**************高电平转低电平 液晶模块执行命令******************/
  22.     digitalWrite(2,LOW);//给2脚低电平
  23.     delayMicroseconds(1);//使程序暂停指定的一段时间(单位:微秒)
  24.     digitalWrite(2,HIGH);//给2脚高电平
  25.     delayMicroseconds(1);//使程序暂停指定的一段时间(单位:微秒)
  26.     digitalWrite(2,LOW);//给2脚低电平
  27.     delayMicroseconds(1);//使程序暂停指定的一段时间(单位:微秒)
  28.   }
  29.   /****************************************************************/
  30. void setup() {
  31.   // put your setup code here, to run once:
  32. Wire.begin();//启动I2C(IIC)
  33. Clock.setSecond(0);//设置秒
  34. Clock.setMinute(24);//设置分钟
  35. Clock.setHour(22);//设置小时
  36. Clock.setDoW(5);//设置星期几
  37. Clock.setDate(17);//设置日期
  38. Clock.setMonth(8);//设置月份
  39. Clock.setYear(18);//设置年份
  40. delay(100);//延时
  41. LcdCommandWrite(0x38);//8位 双行显示 5*7点阵
  42. delay(20);//延时
  43. }
  44. /*****************函数打包*******************/
  45. void LCD_SET_XY(int x,int y)//设置坐标
  46. {
  47.   int address;//定义
  48.   if(x==0)address = 0x80+y;//判断 情况一
  49.   else address = 0xC0+y;//情况二
  50.   LcdCommandWrite(address);//函数调用
  51.   }
  52.   /*******************显示时间************************/
  53. void Pritime()
  54. {
  55.   int second,minute,hour,data,month,year,dow,temperature;//定义
  56.   second=Clock.getSecond();//返回时间的秒
  57.   minute=Clock.getMinute();//返回时间的分钟
  58.   hour=Clock.getHour(h12,PM);//返回时间的小时
  59.   date=Clock.getDate();//返回时间的日期
  60.   month=Clock.getMonth(Century);//返回时间的月份
  61.   year=Clock.getYear();//返回时间的年份
  62.   dow=Clock.getDoW();//返回时间的星期

  63.   temperature=Clock.getTemperature();//温度的返回值

  64. lcd.setCursor(0,0);//光标移动到第一行第一列
  65. lcd.print("20");//显示20
  66. if(year>=10)//判断
  67. {
  68.   lcd.print(year,DEC);//显示年份
  69.   }
  70.   else
  71.   {
  72.     lcd.print("0");//显示0
  73.     lcd.print(year,DEC);//显示年份
  74.     }
  75.     lcd.print('-');//显示-

  76.     lcd.setCursor(5,0);//光标移动到第一行第六列
  77.     if(month>=10)//判断
  78.     {
  79.       lcd.print(month,DEC);//显示月份
  80.       }
  81.       else
  82.       {
  83.         lcd.print("0");//显示0
  84.         lcd.print(month,DEC);//显示月份
  85.         }
  86.         lcd.print('-');//显示-

  87.         lcd.setCursor(8,0);//光标移动到第一行第九列
  88.         if(date>=10)//判断
  89.         {
  90.           lcd.print(date,DEC);//显示日期
  91.           }
  92.           else
  93.           {
  94.             lcd.print("0");//显示0
  95.             lcd.print(date,DEC);//显示日期
  96.             }
  97.     lcd.setCursor(11,0);//光标移动到第一行第十二列
  98.     switch(dow)//选择结构
  99.     {
  100.       case 1:
  101.        lcd.print("Mon");//显示Mon
  102.        break;//跳出
  103.       case 2:
  104.        lcd.print("Tue");//显示Tue
  105.        break;//跳出
  106.       case 3:
  107.        lcd.print("Wed");//显示Wed
  108.        break;//跳出
  109.       case 4:
  110.        lcd.print("Thu");//显示Thu
  111.        break; //跳出
  112.       case 5:
  113.        lcd.print("Fri");//显示Fri
  114.        break; //  跳出
  115.       case 6:
  116.        lcd.print("Sat");//显示Sat
  117.        break; //跳出
  118.       case 7:
  119.        lcd.print("Sun");//显示Sun
  120.        break;  //跳出
  121.       }
  122.   LCD_SET_XY(1,0);//光标移到第二行第一列
  123.    if (hour>=10)//判断
  124.    {
  125.     lcd.print(hour,DEC);//显示小时
  126.     }        
  127.     else
  128.     {
  129.       lcd.print("0");//显示0
  130.       lcd.print(hour,DEC);//显示小时
  131.       }
  132.    lcd.print(':');//显示:

  133.    LCD_SET_XY(1,3);//光标移到第二行第四列
  134.      if (minute>=10)//判断
  135.        {
  136.         lcd.print(minute,DEC);//显示分钟
  137.         }   
  138.         else
  139.         {
  140.           lcd.print("0");//显示0
  141.           lcd.print(minute,DEC);//显示分钟
  142.           }
  143.        lcd.print(':');//显示:
  144.        LCD_SET_XY(1,6);//光标移到第二行第七列
  145.         if (second>=10)//判断
  146.         {
  147.           lcd.print(second,DEC);//显示秒
  148.           }   
  149.           else
  150.           {
  151.             lcd.print("0");//显示0
  152.             lcd.print(second,DEC);//显示秒
  153.             }
  154.          LCD_SET_XY(1,12);//光标移到第二行第十三列
  155.          lcd.print(temperature);//显示温度
  156.          lcd.write(0xdf);//显示温度单位
  157.          lcd.print("C");//显示C
  158. }
  159. void Tictime()
  160. {
  161.   LCD_SET_XY(1,2);//光标移到第二行第三列
  162.   lcd.print(' ');//显示' '
  163.   LCD_SET_XY(1,5);//光标移到第二行第六列
  164.   lcd.print(' ');//显示' '
  165.   }
  166. void loop() {
  167.   // put your main code here, to run repeatedly:
  168. unsigned long Rt=millis()%1000;
  169.   if(Rt<500)//每500ms闪烁一次
  170.   {
  171.     Pritime();
  172.     }
  173.     else
  174.     {
  175.       Tictime();
  176.       }
  177. }
复制代码

所有资料51hei提供下载:
万年历.rar (5.46 MB, 下载次数: 85)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:382628 发表于 2018-10-15 03:08 | 显示全部楼层
admin 发表于 2018-10-15 01:41
头文件能分享下吗?

arduino的头文件都是可以从编译工具上下载的,应该不需要分享吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表