基于STM32设计的指针式电子钟与日历

您所在的位置:网站首页 pp指针式日历 基于STM32设计的指针式电子钟与日历

基于STM32设计的指针式电子钟与日历

2023-10-13 16:27| 来源: 网络整理| 查看: 265

1. 项目简介

这是基于STM32设计的一个指针式电子钟+万年历小项目,采用3.5寸的LCD屏显示时钟,日历、温度、天气,支持触摸屏调整设置时间,设置闹钟,查看日历等等。整体项目主要是技术点就是LCD屏的图形绘制。比如: 时钟的时针绘制、分针、秒针、表盘、日历绘制等等。

时钟的时间是直接采用STM32本身的RTC时钟,室内的室温数据采用DS18B20温度传感器获取,STM32芯片的具体型号是STM32F103ZET6,只要是STM32F1系列的开发板,代码都是可以通用的。

LCD显示屏采用的正点原子的3.5寸TFT显示屏,支持8080时序,自带触摸屏功能,触摸屏是电阻屏,驱动芯片是XPT2046,SPI接口,通信非常方便。

STM32F103ZET6带有FSMC功能,可以输出8080时序,本项目里驱动LCD屏就采用FSMC控制的,效率比较高。

主界面如下:

image-20211231110615969image-20211231110615969

项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/63897554

项目视频演示地址: https://live.csdn.net/v/182594

2. 项目功能介绍

下面对每个子功能页面做详细讲解。

2.1 实时时钟页面

在LCD屏上方显示表盘、分针、时针、 秒针、刻度、更改时钟时间方块,并实现分针、时针、秒针的移动,在实时时钟下方同步显示数字时钟。

image-20211231112132730image-20211231112132730

运用触摸屏功能实现时钟设置功能,点击“+” “-”至设置时钟方块,跳出设置时钟界面,即可开始设置时钟与日期;点击“+”“-”至设置闹钟方块,跳出设置闹钟界面,即可开始设置闹钟。

image-20211231112305798image-202112311123057982.2 日历页面

在LCD屏中部显示日期、星期、天气、实时温度,在LCD屏下方显示日历、左右两边显示黄历,并在日历上重点突出今天的日期。

image-20211231112355785image-202112311123557853. 项目实现主要程序讲解3.1 流程图image-20211231112512719image-202112311125127193.2 ds18b2.c 代码

下面列出DS18B20温度传感器主要代码.

#include "ds18b20.h" #include "delay.h" //复位DS18B20 void DS18B20_Rst(void) { DS18B20_IO_OUT(); //SET PG11 OUTPUT DS18B20_DQ_OUT=0; //拉低DQ DelayUs(750); //拉低750us DS18B20_DQ_OUT=1; //DQ=1 DelayUs(15); //15US } //等待DS18B20的回应 //返回1:未检测到DS18B20的存在 //返回0:存在 u8 DS18B20_Check(void) { u8 retry=0; DS18B20_IO_IN(); //SET PG11 INPUT while (DS18B20_DQ_IN&&retry=200)return 1; else retry=0; while (!DS18B20_DQ_IN&&retry=240)return 1; return 0; } //从DS18B20读取一个位 //返回值:1/0 u8 DS18B20_Read_Bit(void) { u8 data; DS18B20_IO_OUT(); //SET PG11 OUTPUT DS18B20_DQ_OUT=0; DelayUs(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN(); //SET PG11 INPUT DelayUs(12); if(DS18B20_DQ_IN)data=1; else data=0; DelayUs(50); return data; } //从DS18B20读取一个字节 //返回值:读到的数据 u8 DS18B20_Read_Byte(void) { u8 i,j,dat; dat=0; for (i=1;i1; if (testb) { DS18B20_DQ_OUT=0; // Write 1 DelayUs(2); DS18B20_DQ_OUT=1; DelayUs(60); } else { DS18B20_DQ_OUT=0; // Write 0 DelayUs(60); DS18B20_DQ_OUT=1; DelayUs(2); } } } //开始温度转换 void DS18B20_Start(void) { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc); // skip rom DS18B20_Write_Byte(0x44); // convert } //初始化DS18B20的IO口 DQ 同时检测DS的存在 //返回1:不存在 //返回0:存在 u8 DS18B20_Init(void) { RCC->APB2ENR|=1CRH|=0X00003000; GPIOG->ODR|=1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3