【Proteus仿真】Arduino UNO + PCF8563 +LCD1602时间显示

【Proteus仿真】Arduino UNO + PCF8563 +LCD1602时间显示


  • Proteus仿真
    在这里插入图片描述

所需库

  • Rtc_Pcf8563库
    在这里插入图片描述
  • LiquidCrystal库
    在这里插入图片描述
  • 编译信息
1
2
3
4
5
6
7
使用 1.0  版本的库 Wire 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire 
使用 1.0.3 版本的库 Rtc_Pcf8563 在文件夹: C:\Users\Administrator\Documents\Arduino\libraries\Rtc_Pcf8563
使用 1.0.7 版本的库 LiquidCrystal 在文件夹: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal
"C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "d:\\arduino\\MyHexDir/PCF8563.ino.elf"
项目使用了 4710 字节,占用了 (14%) 程序存储空间。最大为 32256 字节。
全局变量使用了301字节,(14%)的动态内存,余留1747字节局部变量。最大为2048字节。

程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <Wire.h>
#include <Rtc\_Pcf8563.h>//点击这里会自动打开管理库页面: http://librarymanager/All#Rtc\_Pcf8563
/\* add the lcd support \*/
#include <LiquidCrystal.h>//点击这里会自动打开管理库页面: http://librarymanager/All#LiquidCrystal

//init the real time clock
Rtc_Pcf8563 rtc;

/\* initialize the library objects \*/
// LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LiquidCrystal lcd(4 ,9 ,5 ,6 ,7 ,8);


const long interval = 1000;//设置延时时间间隔

unsigned long previousMillis = 0;

void setup()
{
pinMode(LED_BUILTIN, OUTPUT);//板载led灯
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);//初始化LCD1602,16代表每行可显示16个字符,2代表可显示的行数

/\*\*程序第一次烧录时,需要设定一次开始的时间到pcf8563里面\*\*/
//Proteus仿真可以不用初始化pcf8563,会主动读取电脑系统时间。
//在仿真时也可以启用,则会从下面的设置时间开始运行并显示。
/\*
// rtc.initClock();
// rtc.setDate(2, 1, 1, 0, 22); //日,周,月,世纪,年
// rtc.setTime(14, 25, 40); //hr, min, sec
\*/
}

void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));//状态翻转
/\*\*下面是显示具体时-分-秒\*\*/
lcd.setCursor(4, 1);
// lcd.print(rtc.formatTime(RTCC\_TIME\_HM));//显示格式00:00
lcd.print(rtc.formatTime());//显示格式:14:39:22
/\*\*下面是显示日期\*\*/
lcd.setCursor(3,0);
lcd.print(rtc.formatDate(RTCC_DATE_ASIA));//显示格式:2022年1月2日
// lcd.print(rtc.formatDate()); //显示格式:/00/00/00
previousMillis = currentMillis;
}
}


仿真资源和程序代码

1
2
3
链接:https://pan.baidu.com/s/197U6q1LmUN7uZ1NAm8BOuQ 
提取码:yyuq

添加星期内容部分显示代码

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <Wire.h>
#include <Rtc\_Pcf8563.h>//点击这里会自动打开管理库页面: http://librarymanager/All#Rtc\_Pcf8563
/\* add the lcd support \*/
#include <LiquidCrystal.h>//点击这里会自动打开管理库页面: http://librarymanager/All#LiquidCrystal

//init the real time clock
Rtc_Pcf8563 rtc;

/\* initialize the library objects \*/
// LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LiquidCrystal lcd(4 ,9 ,5 ,6 ,7 ,8);


const long interval = 1000;//设置延时时间间隔

unsigned long previousMillis = 0;

void setup()
{
pinMode(LED_BUILTIN, OUTPUT);//板载led灯
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);//初始化LCD1602,16代表每行可显示16个字符,2代表可显示的行数

/\*\*程序第一次烧录时,需要设定一次开始的时间到pcf8563里面\*\*/
//Proteus仿真可以不用初始化pcf8563,会主动读取电脑系统时间。
//在仿真时也可以启用,则会从下面的设置时间开始运行并显示。
/\*
// rtc.initClock();
//程序第一次烧录时,设定一次开始的时间。
// rtc.setDate(2, 1, 1, 0, 22); //日,周,月,世纪,年
// rtc.setTime(14, 25, 40); //hr, min, sec
\*/
}

void loop()
{
unsigned char \*week1;
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));//状态翻转
/\*\*下面是显示具体时-分-秒\*\*/
lcd.setCursor(3, 1);
// lcd.print(rtc.formatTime(RTCC\_TIME\_HM));//显示格式00:00
lcd.print(rtc.formatTime());//显示格式:14:39:22
lcd.setCursor(13, 0); //星期显示
switch(rtc.getWeekday()){
case 7: lcd.print("Sun");break;
case 6: lcd.print("Sat");break;
case 5: lcd.print("Fri");break;
case 4: lcd.print("Thu");break;
case 3: lcd.print("Wed");break;
case 2: lcd.print("Tue");break;
case 1: lcd.print("Mon");break;
default :lcd.print("---");break;
}
/\*\*下面是显示日期\*\*/
lcd.setCursor(2,0);
lcd.print(rtc.formatDate(RTCC_DATE_ASIA));//显示格式:2022年1月2日
// lcd.print(rtc.formatDate()); //显示格式:/00/00/00
previousMillis = currentMillis;
}
}


乐观者在灾祸中看到机会; 悲观者在机会中看到灾祸。