第四届蓝桥杯省赛 智能灌溉系统
- 首先,新建一个keil工程
- 一定记得main.c,iic.c要添加到文件夹中…!
图一
否则文件将无法执行。
(ps: 有时候是单片机板子的问题,如下图,当时的情况是led灯全亮了,smg不亮)(我有什么办法,俺只能挨个排查呀!!)(排查现有模块。发现中断√ smg√ 初始化√)(只有添加一些绝对正确的特征判断程序的执行情况,就比如让特定的LED灯亮)
后面发现LED灯也不亮(只有两种可能:1.程序未执行到这里(不可能!!!!) 2.板子坏了)然后再继续判断
······ - 遇见按键一次,自加多次的问题.
你能看出是什么错误麽? 现状描述:
这也太神奇了吧,同样都是damp–,一个按键一次,自减一次,一个自减多次
真的过于神奇:没注释的部分会按键一次自减多次
注释的部分就是正常的
揭秘:
是因为吧cont 错写成了count
这是两个不同的变量
有这个事件也可以得出
以后百度搜不到的问题,也许你目前想的这里并没有问题
去寻找一下
其他可能的错误
第五届 简易温度检测
多个 if 与 else if的问题
1,从字面上理解if为如果,就是如果这种情况,如果那种情况。
2,else if 不是上一个条件的前提下,如果是这个条件。
3,区别1:if无论是否满足条件都会向下执行,知道程序结束,else if 满足一个条件就会停止执行。
4,区别2:由于if都会执行一遍,则可能会同一个需要判断的事件,会进入2个if语句中,出现错误,而else if就不会发生这样的事情。
这样写成else if的形式,就不容易程序同时执行两次
局部变量初始值的问题
- 有关按键不灵敏的问题
没有写key = 0,就死翘翘了…,后面的判断情况不起作用。
原因:
C语言中,定义局部变量时如果未初始化,则值是随机的,这是为什么呢?
定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。
c语言中只有局部变量在未赋初值时,才是随机数,全局变量和静态变量未赋初值时编译器会自动将其初始化为0。局部变量是分配在堆栈上的,而全局变量和静态变量是分配在数据段中的。这个跟程序的内存分配是有关系的。
3. 灯光闪烁时间问题
4.读温度的时间不能太长
这样800ms就读不出来,试试0300ms
这是10ms读取一次的效果:
3000ms的读取效果:
数码管无闪烁
但是led几乎没亮
这样就可以亮
经过很多次的测验,发现很多时候不是空格的问题
因此,控制变量很重要,要记录下俩对应的程序和现象
结果:
400ms的不能亮,800ms能亮
(猜测1:是读取温度需要750ms,恰好跳过了中断
猜测2: 400ms太短,程序执行到这里来的时候,标志位又变了
(大概程序就是再写了温度后,LED不太正常的亮了)
{所以以后不能随意的更改代码,改一次,一定要记住更改内容,变化对象!)
揭秘:
800 是200,400,800的公倍数,如果用if else语句,就会造成选择结构,满足其中一个,就不会进入另一个继续判断。
就会造成flag标志位不产生变化。
一个优秀的程序员对这些简单的语句用的是炉火纯青,淋漓尽致啊