我们现在把定时器0就当做一个外设,
[1]、在外设对应头文件中,比如timer0.h中,声明一个结构体变量类型,如下图图所示,里面包含了3个函数指针,也可以在结构体中定义变量,比如浮点数,比如数组等等 。不过定时器用不着 。这里就只有函数指针了 。

[2]、在外设对应的源文件中,比如timer0.c中,定义一个Timer0_t类型的结构体变量,并同时赋值,注意顺序不能错,因为前面定义的是函数指针,所以我们只需要用对应的函数名称赋值就好,这种做法,也可以称呼为注册回调函数.这些回调函数因为是通过结构体变量来调用,所以前面请加static修饰,表示只能在本文件中使用,如果是其他文件要使用,请直接通过结构体变量来调用,这就达到了封装的目的 。

很多人不明白回调函数,这里简单提一下,将函数名称作为参数传递给函数指针,通过函数指针来调用该函数的功能,赋值的过程,就是注册回调函数.如果不注册,那么函数指针为null,指向空地址,就会出问题,我们定义的这个函数就是回调函数 。
[3]、在外设对应头文件中,请一定写上 externTimer0_t timer0,表示外部文件可以调用 timer0结构体 。
[4]、如果需要调用定时器的这些函数,只需要通过timer0结构来调用,如下所示,timer0.Init(TIMER_VALUE),
另外,VS Code的智能补全非常棒,你只需要输入结构体变量timer0.里面的函数或变量全部都出来了,如果这样封装,那么编辑代码体验也很棒 。

根据结构体封装的思想,我再多举两个例子,假如对DHT11温湿度传感器进行封装,封装哪些会比较合理呢?如下所示
计算的湿度和温度浮点数,必不可少 。
【单片机代码模块化设计思想浅谈 单片机课程设计小结】单总线40bits源数据,根据实际需求,如果你是和上位机通信,也必须发送这个源数据,那么就封装在这里,如果不需要,可以不封装 。
读取湿度和温度的函数必须要封装.

调用的时候,就可以通过如下方式,通过串口打印出源数据和计算后的温湿度数据

推荐阅读
- Axure查看页面代码的详细操作方法。
- 办公室撩妹套路,代码都为你准备好了
- 0xc004c003,小编教你Win10激活失败并提示错误代码0xC004C003的解决方法
- 0xc004C012,小编教你win10激活错误代码0xc004f074
- 0xC004C004,小编教你Win10系统激活失败提示错误代码0xc004f074
- 0xC004C4A2,小编教你win10激活失败提示错误代码0x8007007B
- 工学,工学是什么
- 0xD0000272,小编教你解决Win10激活失败提示错误代码0xC004C003
- 0x8007007B,小编教你win10激活系统失败错误代码0x8007007B
- 查看Axure页面的代码的操作方法。
