視頻演示:
單片機源程序如下:
- #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)
2018-10-15 00:10 上傳
點擊文件名下載附件
|