基于上位机控制的液晶电子时钟设计

张开发
2026/4/16 1:39:14 15 分钟阅读

分享文章

基于上位机控制的液晶电子时钟设计
一、系统概述与核心功能1. 系统定位本设计打破传统电子钟“按键调时”的物理局限采用“上位机PC/平板电脑 下位机STM32嵌入式端”的架构。上位机软件拥有友好的图形界面GUI负责向嵌入式端发送高精度的北京时间指令下位机STM32接收指令后驱动液晶屏幕LCD1602或OLED实时显示时间并内置RTC时钟晶振确保掉电或断连后的精准走时。该系统适用于实验室设备、桌面摆件或需要在PC端集中管理的计时场景。2. 核心功能模块模块功能描述上位机控制开发PC端软件C#/Python/Qt提供直观的GUI时间设置面板一键同步系统时间或手动输入时分秒串口/网络通信上位机通过USB转TTL串口或局域网UDP/TCP向下位机发送时间校准指令下位机主控STM32F103C8T6作为主控接收上位机指令解析并更新RTC实时时钟寄存器液晶显示驱动LCD1602经典字符屏或0.96寸OLED实时刷新显示“HH:MM:SS”格式的时间字符串掉电走时板载32.768kHz晶振配合STM32内部RTC配合纽扣电池确保PC端断连或断电后时间依然精准二、硬件设计方案1. 核心硬件选型模块型号关键参数接口方式主控MCUSTM32F103C8T672MHz Cortex-M3内置RTC实时时钟外设64KB Flash20KB RAM核心控制器液晶显示LCD1602 / 0.96寸OLEDLCD16025V供电HD44780驱动I2C转接板OLED3.3VI2C接口自发光I2C1PB6/PB7通信接口CH340/CP2102 USB转TTL将PC端的USB接口虚拟为COM串口波特率设定为9600或115200USART1PA9/TX, PA10/RX时钟源32.768kHz无源晶振专用于RTC外设提供精准的1秒计时基准OSC32_IN/OUT电源与后备Micro USB CR1220电池USB供电5V转3.3VCR1220纽扣电池专门给VBAT引脚供电实现RTC掉电保持电源管理2. 硬件电路设计要点通信连接PC端USB插入USB转TTL模块模块的TX接STM32的PA10RXRX接PA9TXGND共地。RTC后备电池STM32的VBAT引脚串联一个普通的1N4148二极管防止电流倒灌烧坏USB电源后连接到CR1220纽扣电池的正极。液晶接口LCD1602通常需要5V逻辑电平需注意STM32的I2C引脚PB6/PB7最好配置为“开漏输出Open-Drain”并外接上拉电阻至5V或者使用带有电平转换的I2C转接板。三、软件设计与核心代码1. 通信协议设计上位机 ↔ 下位机为了保证通信的可靠性和易解析性我们制定一套简单的**“帧头 数据 帧尾”**协议指令格式#HH:MM:SS\n例如#12:30:45\n含义#为起始符HH为两位数小时MM为分钟SS为秒\n换行符为结束符。优点上位机发送的是人类可读的ASCII字符串下位机用C语言字符串函数极易解析。2. 下位机核心代码基于STM32标准库2.1 USART串口中断接收与协议解析我们利用STM32的串口接收中断RXNE来逐字节拼接来自上位机的指令。#includestm32f10x.h#includestring.h// 定义接收缓冲区uint8_trx_buffer[16];uint8_trx_index0;uint8_ttime_update_flag0;// 时间更新标志位// USART1中断服务函数voidUSART1_IRQHandler(void){uint8_trx_data;if(USART_GetITStatus(USART1,USART_IT_RXNE)!RESET){rx_dataUSART_ReceiveData(USART1);// 读取接收到的字节// 判断是否是帧头 #if(rx_data#){rx_index0;// 重置缓冲区索引重新开始接收rx_buffer[rx_index]rx_data;}// 判断是否是帧尾 \n (换行符)elseif(rx_data\n){rx_buffer[rx_index]rx_data;rx_buffer[rx_index]\0;// 添加字符串结束符time_update_flag1;// 置位更新标志通知主循环处理时间}// 普通数据字符存入缓冲区else{if(rx_index15){// 防止数组溢出rx_buffer[rx_index]rx_data;}}USART_ClearITPendingBit(USART1,USART_IT_RXNE);}}2.2 时间解析与RTC设置函数当主循环检测到time_update_flag后调用此函数将字符串转换为整数并写入STM32的内部RTC寄存器。#includertc.h// 解析上位机指令并设置RTC时间voidParse_And_Set_RTC(uint8_t*cmd_str){uint8_thour,min,sec;// 使用C标准库 sscanf 轻松提取时间// 格式匹配 #12:30:45\nif(sscanf((char*)cmd_str,#%02d:%02d:%02d,hour,min,sec)3){RTC_TimeTypeDef RTC_TimeStructure;// 配置时间结构体RTC_TimeStructure.RTC_Hourshour;RTC_TimeStructure.RTC_Minutesmin;RTC_TimeStructure.RTC_Secondssec;RTC_TimeStructure.RTC_H12RTC_H12_AM;// 设为12小时制上午或改为24小时制// 将时间写入STM32的RTC硬件寄存器RTC_SetTime(RTC_Format_BIN,RTC_TimeStructure);// 可选向上位机回传一条确认消息表示时间已同步USART_SendString(RTC Updated OK!\r\n);}else{USART_SendString(Invalid Cmd!\r\n);}}2.3 液晶显示刷新主循环逻辑#includelcd1602.h// 或 oled.h// 主函数核心逻辑intmain(void){// ...省略系统时钟初始化、GPIO/USART/RTC/LCD初始化...while(1){// 1. 检测上位机是否发来了新的时间指令if(time_update_flag){time_update_flag0;// 清除标志位Parse_And_Set_RTC(rx_buffer);// 解析并更新RTC}// 2. 每秒读取一次RTC硬件时间并显示在液晶屏上staticuint32_tlast_tick0;if(HAL_GetTick()-last_tick1000){last_tickHAL_GetTick();RTC_TimeTypeDef current_time;RTC_GetTime(RTC_Format_BIN,current_time);// 拼接显示字符串chardisp_str[16];sprintf(disp_str,Time: %02d:%02d:%02d,current_time.RTC_Hours,current_time.RTC_Minutes,current_time.RTC_Seconds);LCD1602_ShowString(0,0,disp_str);// 在液晶第一行显示}}}3. 上位机软件设计思路C# WinForms示例上位机不需要复杂的算法只需一个简单的窗体应用程序提供一个文本框和按钮。usingSystem;usingSystem.IO.Ports;usingSystem.Windows.Forms;namespacePC_Clock_Controller{publicpartialclassForm1:Form{SerialPortserialPortnewSerialPort();publicForm1(){InitializeComponent();// 初始化串口绑定到COM3需在设备管理器中查看serialPort.PortNameCOM3;serialPort.BaudRate9600;serialPort.Open();}// “一键同步系统时间”按钮点击事件privatevoidbtnSync_Click(objectsender,EventArgse){DateTimenowDateTime.Now;// 获取当前PC系统时间// 拼接协议指令例如#14:30:25\nstringcmd$#{now.Hour:00}:{now.Minute:00}:{now.Second:00}\n;if(serialPort.IsOpen){serialPort.Write(cmd);// 发送指令MessageBox.Show(时间已成功发送至下位机);}}}}参考代码 上位机控制的液晶电子时钟提供VBC语言程序www.youwenfan.com/contentcst/124083.html四、系统调试与扩展1. 调试步骤阶段操作工具硬件调试测量32.768kHz晶振是否起振纽扣电池电压是否≥2.8V示波器、万用表通信测试PC端发送#12:00:00\n用示波器抓取PA10(RX)引脚波形串口助手、示波器显示测试观察LCD/OLED是否能稳定刷新时间不会频繁闪烁或乱码肉眼观察掉电测试拔掉USB线5分钟后重新插上观察液晶显示时间是否连续实际测试2. 扩展功能加入网络自动对时NTP在下位机侧集成ESP8266 Wi-Fi模块STM32定期通过TCP协议向互联网NTP服务器请求标准时间彻底脱离PC上位机。加入温湿度显示在STM32的I2C总线上挂接SHT30传感器在液晶第二行滚动显示“Temp: 25.5C Hum: 60%”。加入倒计时/闹钟功能上位机软件增加“倒计时设定”面板STM32接收后驱动板载蜂鸣器进行闹铃提醒。五、总结基于上位机控制的液晶电子时钟巧妙地将PC丰富的人机交互能力与嵌入式系统的实时执行能力相结合。通过自定义串口协议PC端能够毫秒级地完成对下位机时钟的精准“对表”。这种设计不仅提升了用户体验更为后续接入物联网IoT功能打下了坚实的软件架构基础。

更多文章