赞
踩
一、读者阅读须知
程序设计赛题图片引自CSDN博主@阁中听雨,但程序为作者本人所写,程序能实现赛题的99%的功能,默认读者会调用定时器,NE555,DS1302,PCF8951,IIC,IO模式的调用数码管,LED灯驱动程序,温控电阻等程序,不在这些程序写注释。本人是刚入门51单片机半年的菜菜,代码有些长,代码加注释一共700多行,如有差错和改进之处,请在评论区与我交流。
二、赛题
三、程序逻辑图
四、在编程中遇到的问题和改进方法
问题一:平均数计算问题
改进方法:经过作者的数种方法,发现此种方法最为实用,方法如图所示,T_dat1为计算触发温度平均数的变量,T_dat为实时触发温度的数值,count为触发温度的次数,dat_f1为计算触发湿度平均数的变量,dat_f为实时触发湿度的数值,coun1t为触发湿度的次数。
问题二:在触发温湿度界面,实时温度大于温度参数时,L4亮灭不及时
原因:在Read_Temperature()中Delay(1000)只执行while(t--),直至把1000减完
改进方法:在Read_Temperature()中Delay(1000)中加上LED_Control(),在Delay执行时,执行LED亮灭控制,如图所示
问题三:在触发温湿度界面,数码管亮度变小
原因:与问题二类似,在Read_Temperature()中Delay(1000)只执行while(t--),直至把1000减完
改进方法:在Read_Temperature()中Delay(1000)中加上LED_Control(),在Delay执行时,执行数码管显示控制,如图所示,state为记录触发状态的变量,当state为1时,湿度大于等于10%,小于等于90%。
state为2时,湿度小于10%,或大于90%。
四、作者对已完成代码的认为的不足之处
一是没有融会贯通C语言的传参操作,导致定义全局变量过多。二是在解决问题二时,在不同函数中,加入LED_Control()。
五、具体实现代码
已上传至本博客
或通过百度网盘分享的文件:23年省赛题 2…
链接:https://pan.baidu.com/s/1cn627_Y5JzHGdWmKQ0ex4A?pwd=bzot
提取码:bzot
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。