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

1. 项目简介 这是基于stm32设计的一个指针式电子钟+万年历小项目,采用3.5寸的lcd屏显示时钟,日历、温度、天气,支持触摸屏调整设置时间,设置闹钟,查看日历等等。整体项目主要是技术点就是lcd屏的图形绘制。比如: 时钟的时针绘制、分针、秒针、表盘、日历绘制等等。
时钟的时间是直接采用stm32本身的rtc时钟,室内的室温数据采用ds18b20温度传感器获取,stm32芯片的具体型号是stm32f103zet6,只要是stm32f1系列的开发板,代码都是可以通用的。
lcd显示屏采用的正点原子的3.5寸tft显示屏,支持8080时序,自带触摸屏功能,触摸屏是电阻屏,驱动芯片是xpt2046,spi接口,通信非常方便。
stm32f103zet6带有fsmc功能,可以输出8080时序,本项目里驱动lcd屏就采用fsmc控制的,效率比较高。
主界面如下:
项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/63897554
项目视频演示地址: https://live.csdn.net/v/182594
2. 项目功能介绍 下面对每个子功能页面做详细讲解。
2.1 实时时钟页面 在lcd屏上方显示表盘、分针、时针、 秒针、刻度、更改时钟时间方块,并实现分针、时针、秒针的移动,在实时时钟下方同步显示数字时钟。
运用触摸屏功能实现时钟设置功能,点击“+” “-”至设置时钟方块,跳出设置时钟界面,即可开始设置时钟与日期;点击“+”“-”至设置闹钟方块,跳出设置闹钟界面,即可开始设置闹钟。
2.2 日历页面 在lcd屏中部显示日期、星期、天气、实时温度,在lcd屏下方显示日历、左右两边显示黄历,并在日历上重点突出今天的日期。
3. 项目实现主要程序讲解 3.1 流程图 3.2 ds18b2.c 代码 下面列出ds18b20温度传感器主要代码.
#include ds18b20.h#include delay.h ​//复位ds18b20void 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/0u8 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;i<=8;i++) { j=ds18b20_read_bit(); dat=(j1); } return dat;}//写一个字节到ds18b20//dat:要写入的字节void ds18b20_write_byte(u8 dat) { u8 j; u8 testb; ds18b20_io_out(); //set pg11 output; for (j=1;j>1; 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<7) { th=~th; tl=~tl; temp=0; //温度为负 }else temp=1; //温度为正 tem=th; //获得高八位 temdelta_y)distance=delta_x; //选取基本增量坐标轴 else distance=delta_y; for(t=0;tdistance) { xerr-=distance; urow+=incx; } if(yerr>distance) { yerr-=distance; ucol+=incy; } } } ​​//在指定位置画一个指定大小的圆//(x,y):中心点//r :半径void lcddraw_circle(u16 x0,u16 y0,u8 r,u16 color){ int a,b; int di; a=0;b=r; di=3-(r<<1); //判断下个点位置的标志 while(a


续航一辈子,无需电池的手机已经初具雏形
LCD驱动工作原理 ,基于51单片机LCD底层时序程序该如何编写?
AI批改作文哪家强?英语老师亲测讯飞智能学习机更高效
那些你不知道的无线路由器功能
焊锡膏和松香有什么区别
基于STM32设计的指针式电子钟与日历
极客黑科技 与无人机完全不同的飞行体验
物联网水资源监测系统在商业建筑中的4种应用
线性电源LDO基础知识(一):压降Dropout Voltage
估值高达400亿美元的中国铁塔主要的业务范围有哪些?
为什么电容的大小是定义为Q/U,而不是U/Q?
机器视觉入门经典书籍推荐
一款新型的环形导轨输送线,其优点是什么
电瓶修复技术:电池串联均衡是否会影响寿命
轨道飞行器首次通过近日点,距离太阳7700万公里
如何区分有源晶振与无源晶振
无人机Kestrel系统优化自主物体探测系统
关于非洲猪瘟实验室检测设备清单操作详细介绍
提高PLC程序运行有什么方法
区块链和人工智能将如何影响着第四次工业革命