完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
前言
此题目是学院的一个科技竞赛题目,科技含量比较低,但是重在贴近生活,而且比较考验同学的编程能力,设计思路灵活,也算一个中肯的题目。 本篇博客中,依旧按照从拿到题目到完成题目的顺序进行介绍,重难点,博主会进行强调,或者单独列写博客。程序编写思路简单,但是代码量较大,属于提升类项目。 题目原型 题目分析及思路 材料采购 实际制作 遇到困难及解决方法 精彩代码片段分享 思路亮点分享 个人总结 1.题目原型 2.题目分析及思路(先介绍基础部分) 具有可设置定时功能:通过外部输入设备,设定时间(用什么作为输入设备,设定时间逻辑如何编写) 具有可设置的倒计时功能:联系STM32定时器的闹钟中断 具有可设置的预约功能:我的理解是,定时开启,定时关闭。 具有蓝牙遥控功能:我的理解是,通过蓝牙可以设定上述所有参数。 隐含要求:供电电路,显示屏,蓝牙通信,stm32定时器 基本功能思路 3.材料选型 主控芯片:STM32F103C8T6 外部输入设备,我选择是基本的普通按键,而非矩阵按键(占用引脚资源少) 显示屏:IIC通信的OLED屏幕。(如果要求炫酷,可以选用LCD彩色屏或者串口屏) 蓝牙:HC-05就可以 降压模块:12V转5V降压模块。 12V充电电池。 以上材料,就可以完成基本功能了。 完成提升功能所需材料: 直流电转交流电模块、继电器、3.3V微型电池,大电容,EEPROM模块(可有可无) 4.实际制作: 整个题目核心在于定时器的选择,我选择c8t6的外部晶振作为时钟源。(有很多同学声称c8t6硬件不支持定时功能,通过查询手册,博主发现它是完全能满足要求的) 实际制作第一步:焊接c8t6,连接显示屏和按键。获取定时器当前时间,并且在显示屏上显示(注意将单位秒转换为年月日,就是万年历的知识)。编写显示屏定时显示程序,编写通过按键更改时间(长按轮询,短按确认),并且显示相关提示语。 实际制作第二步:将杜邦线连接的线路改接到洞洞板上(上一步只是核实操作可行性),完善功能1,2 ,3(就是对于数据的录入,保存,设定,这里涉及到秒中断和闹钟中断) 实际制作第三步:添加蓝牙模块,通过蓝牙发送时间,注意蓝牙调试方式以及stm32中对于数据的处理方式(存储空间有限,调取方式应当简单),以及数据协议的设定。可以不设定协议,但是传输距离稍远,发送数据的可靠性就未知了。 实际制作第四步:添加单独供电电路,在电池插头与降压模块间使用了一个大电容,降低电压波动,防止突然上电+静电将芯片烧掉。并且,在提升功能中,掉电保存,可以通过ADC采集电压,当电压低于3.3V时,将当前的所有数据写入保存区中(eeprom模块或者用c8t6的flash模拟eeprom),由于电容作用,电压降低的时间得以延长。 实际制作第五步:融合基本功能,需要注意的是,各个外设之间不能重复,或者冲突。 实际制作第六步:系统掉电数据不丢失,可以采用EEPROM模块或者直接采用FLASH模拟eeprom(我采用的后一种),在网上有很多教程,我给上一个链接:https://www.cnblogs.com/HongYi-Liang/p/9047255.html ,希望对大家有帮助。 实际制作第七步:保存5组数据,你可以选择设立5个数据存放区,通过数据发送的标识位,将不同数据存放到不同缓冲区。重点是,如何将数据给一一写入定时器中呢?这是重点,我采用的办法是对5组数据进行比较,将最小的数据优先写进去,等到一次闹钟触发之后,根据标志位的变化,从而写挑选写一个比较小的数据写进去的。 实际制作第八步:交流电调光调速功能。这个要求给的很模糊,后来给出,需要根据模电只是进行完成,小编搭建了一个简单电路(搜索一下,相关博客也有很多),搭配直流电转交流电的模块(贵)。 用继电器作为用电设备,演示所有功能。 5.遇到的困难以及解决方法 困难1.文件容易弄混淆:我的解决办法是,一个工程,建一个文件夹,在各个文件下建立文本内文件,描述当前代码的进度以及实现的功能和缺点。如果只是改变了参数,那就在文本文件中写下某个参数对应的效果。如果从代码架构和编程思维上,有了改变,那么就单独建立文件夹,如此,就不容易混淆。 困难2.实现最多5组数据之间保存,并且准确应用:我的解决办法是,在数据的协议中,包含我将要发送数据的组数,据此在单片机内开辟存储空间,做到空间的高效利用。通过不同标志位区分,将数据存放到缓冲区,通过年月日数字进行冒泡排序法,然后重新弄存放数据,记录五组数据的编号,从小到大。将最小的数据存放进去,设定标志位,等到时间到来,触发中断,取消标志位,将第二小的数据存放进去,以此类推。 困难3.蓝牙设定数据与按键设定数据,是采用直接复制粘贴的关系,还是共用统一存储空间的关系呢?我采用的是后者,如果单独从编程难度上,前者更简单,但是,后者,才更接近实际工程需要,而且,C8T6的flash实在有限,不确定后续是否会增加功能。(极大考验了个人思维能力) 困难4.外观设计:无论实际怎样,外观始终都第一印象。前期忙着实现功能,不咋注重,后期才一发现,有点丑。外观设计与实际效果,最好二者兼顾。后来重新布局,才解决了这个问题。 6.精彩代码片段分享 数据判断: 稍后留下代码链接。 7.思路亮点分析: 信息交互,采用共用数据缓存区的方式,简短,高效。 对于传输精度有要求的项目,自己设计了通信协议。 通过ADC采集到电压变化,从而提前向FLASH中写入数据,而不是每输入一次数据,就向EEPROM中写入一次数据(为了保证数据实时性,代码会非常冗余) 在OLED屏幕上设计了一些简单的界面,增加量人性化提示语,以及“功能目录”。 个人总结:一个人独立做项目,非常锻炼个人能力,编程思路清晰,整个作品的每一个细节,突然出现的问题,都能比较快速的找到解决方案,但是,就小编个人而言,这样挺耗费时间的,如果有团队,大家一起讨论,集思广益,能更简短的搞定难题,但是,也存在人到心不到的情况,值得考虑。只有难题,才会激发自己去思考,只有思考了,才能更容易获得快乐和成长。 如果工程量比较大,那么,小编建议,可以写一份操作手册,或者使用说明,当间隔几天,也能快速重新找回思路。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4130 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3221 浏览 1 评论
2747 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2175 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14939 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3084浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1892浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2064浏览 3评论
1976浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2165浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 22:31 , Processed in 0.746231 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1348