基于单片机的万年历设计 联系客服

发布时间 : 星期六 文章基于单片机的万年历设计更新完毕开始阅读a142267e03d276a20029bd64783e0912a3167c21

.

主程序流程图开始系统初始化是否调整时间Y时间调整子程序NY闹钟、事件设置子程序NLCD1602显示是否设置时间结束

图5.1 主程序流程图

(2)子程序流程图

系统从主程序开始执行,分别调用各个子程序,其中子程序包括DS1302子程序,DHT11子程序和LCD1602子程序等。 (1)DS1302芯片子程序流程图

DS1302为实时时钟芯片,可以提供秒、分、时、日、月、年及星期等信息,具有软件自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。从DS1302中可以读出年、月、日、时、分、秒等信息。图5.2为DS1302芯片的子程序流程图:

;..

.

DS1302子程序流程图开始初始化DS1302DS1302开始震荡从DS1302中读出年、月、日、时、分、秒

图5.2 DS1302子程序流程图

(2)DHT11子程序流程图

DHT11为温湿度传感器,可以实时显示环境中的温湿度。其数据由8位湿度整数数据,8位湿度小数数据,8位温度整数数据和8位温度小数数据以及8位校验和数据。DHT11子程序流程图如5.3所示:

DHT11子程序流程图开始发出读命令读取湿度读取温度读取校验和校验数据是否出错?Y丢弃当前数据N结束

图5.3 DHT11子程序流程图

;..

.

(3)LCD1602子程序流程图

LCD1602显示时,也要先进行初始化,紧接着读指令,读完之后写指令,再对数据进行读写,然后显示出来,其流程图如图5.4所示。

LCD1602子程序库程图开始开始初始化初始化读写指令读写指令读写数据读写数据返回返回

图5.4 LCD1602显示屏子程序流程图

六、实验目的

1.学会并掌握可keil软件的使用;

2.学会并掌握Altium Designer软件的使用; 3.实现万年历的基本功能;

4.通过实验巩固单片机相关知识和检验自身动手能力

七、实验内容

本次实验使用STC89C52单片机作为主控芯片,使用DS1302芯片作为时钟芯片,在LCD1602显示屏上显示,并可以设置闹钟和事件提醒功能,此外还可以进行室内温湿度的检测和显示,最终完成万年历的设计。

八、实验步骤

1.查询资料,确定主控芯片、温湿度传感器、时钟芯片以及LCD1602显示屏的使用说明。

2.根据功能要求进行硬件电路的设计,使用Altium Designer软件设计电路。整个电路分为主控芯片控制模块、LCD1602显示模块、按键设置模块、蜂鸣器电

;..

.

路模块以及DHT11温湿度传感器模块。硬件电路图如图1所示:

图8.1:硬件电路图

3.根据电路图编写C语言代码: 代码如下:

#include

#define uchar unsigned char #define uint unsigned int #define lcddata P0

#define readalarmsecond 0xc7 //定义从 DS1302 中读闹钟秒值的命令字节 #define writealarmsecond 0xc6 //定义往 DS1302 中写闹钟秒值的命令字节 #define readalarmminute 0xc5 //定义从 DS1302 中读闹钟分值的命令字节 #define writealarmminute 0xc4 //定义往 DS1302 中写闹钟分值的命令字节 #define readalarmhour 0xc3 //定义从 DS1302 中读闹钟小时值命令字节 #define writealarmhour 0xc2 //定义往 DS1302 中写闹钟小时值命令字节

#define readeventday 0xd7 //定义从 DS1302 中读事件提醒日期值的命令字节

#define writeeventday 0xd6 //定义往 DS1302 中写事件提醒日期值的命令字节

#define readeventmonth 0xd5 //定义从 DS1302 中读事件提醒月份值的命令字节

#define writeeventmonth 0xd4 //定义往 DS1302 中写事件提醒月份值的命令字节

#define readeventyear 0xd3 //定义从 DS1302 中读事件提醒年份值的命令字节

#define writeeventyear 0xd2 //定义往 DS1302 中写事件提醒年份值的命

;..