-
工程的搭建
- stc_config.h的编写
- (输出)display模块的编写(1ms或者2ms的一个display定时器显示)
- 独立按键key模块的编写(CH文件)
- 定时器的编写(5-10ms的按键扫描)(设定每秒执行几次)
- 计数变量int类型,count
- 标志位bit类型,Flag
- main函数的完善
-
矩阵按键
-
芯片的一般如何进行通讯?
- 类型
- 温度:DS18B20。(功能:读取温度)
- 时钟:DS1302。(功能:读取时钟,写入时钟)
- 数模/模数转换器。PCF8591。(数字转模拟,模拟转数字。)
- 模数:(3.7V →(模数)8位(256阶级0-5V)(5V/256 = ),→0000 0001→0.019V,195→3.7V)
- 反过来,数模也是如此,给予一个(8位5V)195的数,他会输出3.7V.
- 如何和这些芯片通信。
- 回归到最基础,初始化,写入,读出。
- 最开始,我们执行这些操作,是命令式。eg: 我要写入,写入的数据。
- 后来,采用了寄存器的方式。eg:我要写入,写入的地址,地址的数据。(读取,读取的地址,读取的数据。)
- 回归到最基础,初始化,写入,读出。
-
单总线
- 比赛会提供驱动文件,关于内部通讯方式,了解即可。
- 从数据手册去了解通讯协议(初学可以通过网上的视频)(比赛编程题不考,但是客观题可能考,目前可能有点难理解,简单了解后期加强)
- 数据手册的构成(主要介绍,电气特性,使用方法,涉及知识)
- 如何去看(带着目标去看)——使用他的功能
- 初始化,写入,读出。→时序图
- 写入的方式是命令式还是寄存器式
- 使用的流程是什么。
- DS18B20的使用方法(编程题会考)命令式的一个芯片
- 检查延时,检查头文件的引脚,替换头文件内的头文件
- 编写getTemp函数
- 初始化(BB 44)
- 读温度 (BB CE) ,然后读回,A,B
- 处理数据
- 合并数据
- 转化成10进制的温度数据
- 四舍五入
-
DS18B20的内部结构(数据手册)
-
编写程序。
- 程序编码原则
- 代码永远是先给人看的,然后再给机器看的。
- 永远做好整理。
- 状态机
-
独立按键:
-
——每10ms,进行一次状态判断。
现态 事件 跳转条件 次态
(现态所要做的事情)
-
未按下 KEY==0 第一次按下
-
第一次按下 KEY==0 正真的按下
KEY!=0 未按下
-
正真的按下 通知程序(Flag) KEY==0 持续的按下
KEY!=0 未按下
-
持续的按下 KEY!=0 未按下
-
-
-
功能状态机
-
按照功能(界面)来分类:工作界面,设置界面
现态 事件 跳转条件 次态
工作界面 检查温度区间,检查温度(LED)设置按键 设置界面设置界面 输入上下限的温度,并检查保存 设置按键 工作界面
-
-
编写程序
- 用什么来表示状态(变量+宏定义)
- 如何来选择状态(在主函数中使用switch来选择)
- 如何执行事件(单独实现一个while(1)函数)
- 完成事件,
- 完成下一个状态的框架,以及显示(123(设置),567)
-
编写缓冲区。
- 构建空间(数组)。下标。
- 编写操作
- 添加数据
- 将数据传到指定位置
- 临界点
- 删除所有数据
- 考虑显示的问题
- 和其他外设共享数据位。
- 单独控制一个灯的时候,可能导致其他的灯不见了
- L2,亮(P0)→L1亮(P0) 【两者互不干扰】
- 解决方法:数据缓存 → 显存
- 单独控制一个灯的时候,可能导致其他的灯不见了
- 闪烁(软件定时器)(起延时的作用)
- 设定变量以及定时器内的计数--。
- 初始化:
- 先检测定时器有没有被使用
- 设置计数变量为自己所需的延时事件。
- 不停检测计数是否归零,归零的话,就说明时间到了,可以执行所要的事件了。
1.模块--数码管,按键,温度
2.框架--状态机,缓冲器,软件定时器。
———— →2016年的模拟题综合练习←