视频演示:
单片机源程序如下:
- #include <LiquidCrystal.h>//文件包含
- #include <DS3231.h>//文件包含
- #include <Wire.h>//文件包含
- /***********定义**********/
- DS3231 Clock;
- bool Century = false;
- bool h12;
- bool PM;
- byte year,month,date,DoW,hour,minute,second;
- LiquidCrystal lcd(12,11,2,3,4,5,6,7,8,9,10);//构造函数,创建一个LiquidCrystal的实例
- /*************函数包装***************/
- void LcdCommandWrite(int value)
- {
- digitalWrite(12,LOW);//给12脚低电平 单片机发送指令
- digitalWrite(11,LOW);//给11脚低电平 进行写操作
- for(int i=3; i<=10;i++)//利用循环写入数据
- {
- digitalWrite(i,value&01);//利用与运算传输数据
- value>>=1;//数据右移
- }
- /**************高电平转低电平 液晶模块执行命令******************/
- digitalWrite(2,LOW);//给2脚低电平
- delayMicroseconds(1);//使程序暂停指定的一段时间(单位:微秒)
- digitalWrite(2,HIGH);//给2脚高电平
- delayMicroseconds(1);//使程序暂停指定的一段时间(单位:微秒)
- digitalWrite(2,LOW);//给2脚低电平
- delayMicroseconds(1);//使程序暂停指定的一段时间(单位:微秒)
- }
- /****************************************************************/
- void setup() {
- // put your setup code here, to run once:
- Wire.begin();//启动I2C(IIC)
- Clock.setSecond(0);//设置秒
- Clock.setMinute(24);//设置分钟
- Clock.setHour(22);//设置小时
- Clock.setDoW(5);//设置星期几
- Clock.setDate(17);//设置日期
- Clock.setMonth(8);//设置月份
- Clock.setYear(18);//设置年份
- delay(100);//延时
- LcdCommandWrite(0x38);//8位 双行显示 5*7点阵
- delay(20);//延时
- }
- /*****************函数打包*******************/
- void LCD_SET_XY(int x,int y)//设置坐标
- {
- int address;//定义
- if(x==0)address = 0x80+y;//判断 情况一
- else address = 0xC0+y;//情况二
- LcdCommandWrite(address);//函数调用
- }
- /*******************显示时间************************/
- void Pritime()
- {
- int second,minute,hour,data,month,year,dow,temperature;//定义
- second=Clock.getSecond();//返回时间的秒
- minute=Clock.getMinute();//返回时间的分钟
- hour=Clock.getHour(h12,PM);//返回时间的小时
- date=Clock.getDate();//返回时间的日期
- month=Clock.getMonth(Century);//返回时间的月份
- year=Clock.getYear();//返回时间的年份
- dow=Clock.getDoW();//返回时间的星期
- temperature=Clock.getTemperature();//温度的返回值
- lcd.setCursor(0,0);//光标移动到第一行第一列
- lcd.print("20");//显示20
- if(year>=10)//判断
- {
- lcd.print(year,DEC);//显示年份
- }
- else
- {
- lcd.print("0");//显示0
- lcd.print(year,DEC);//显示年份
- }
- lcd.print('-');//显示-
- lcd.setCursor(5,0);//光标移动到第一行第六列
- if(month>=10)//判断
- {
- lcd.print(month,DEC);//显示月份
- }
- else
- {
- lcd.print("0");//显示0
- lcd.print(month,DEC);//显示月份
- }
- lcd.print('-');//显示-
- lcd.setCursor(8,0);//光标移动到第一行第九列
- if(date>=10)//判断
- {
- lcd.print(date,DEC);//显示日期
- }
- else
- {
- lcd.print("0");//显示0
- lcd.print(date,DEC);//显示日期
- }
- lcd.setCursor(11,0);//光标移动到第一行第十二列
- switch(dow)//选择结构
- {
- case 1:
- lcd.print("Mon");//显示Mon
- break;//跳出
- case 2:
- lcd.print("Tue");//显示Tue
- break;//跳出
- case 3:
- lcd.print("Wed");//显示Wed
- break;//跳出
- case 4:
- lcd.print("Thu");//显示Thu
- break; //跳出
- case 5:
- lcd.print("Fri");//显示Fri
- break; // 跳出
- case 6:
- lcd.print("Sat");//显示Sat
- break; //跳出
- case 7:
- lcd.print("Sun");//显示Sun
- break; //跳出
- }
- LCD_SET_XY(1,0);//光标移到第二行第一列
- if (hour>=10)//判断
- {
- lcd.print(hour,DEC);//显示小时
- }
- else
- {
- lcd.print("0");//显示0
- lcd.print(hour,DEC);//显示小时
- }
- lcd.print(':');//显示:
- LCD_SET_XY(1,3);//光标移到第二行第四列
- if (minute>=10)//判断
- {
- lcd.print(minute,DEC);//显示分钟
- }
- else
- {
- lcd.print("0");//显示0
- lcd.print(minute,DEC);//显示分钟
- }
- lcd.print(':');//显示:
- LCD_SET_XY(1,6);//光标移到第二行第七列
- if (second>=10)//判断
- {
- lcd.print(second,DEC);//显示秒
- }
- else
- {
- lcd.print("0");//显示0
- lcd.print(second,DEC);//显示秒
- }
- LCD_SET_XY(1,12);//光标移到第二行第十三列
- lcd.print(temperature);//显示温度
- lcd.write(0xdf);//显示温度单位
- lcd.print("C");//显示C
- }
- void Tictime()
- {
- LCD_SET_XY(1,2);//光标移到第二行第三列
- lcd.print(' ');//显示' '
- LCD_SET_XY(1,5);//光标移到第二行第六列
- lcd.print(' ');//显示' '
- }
- void loop() {
- // put your main code here, to run repeatedly:
- unsigned long Rt=millis()%1000;
- if(Rt<500)//每500ms闪烁一次
- {
- Pritime();
- }
- else
- {
- Tictime();
- }
- }
复制代码
所有资料51hei提供下载:
万年历.rar
(5.46 MB, 下载次数: 89)
|