本帖最后由 liujieshui 于 2020-4-14 11:00 编辑
软件开发第二讲 - LED闪烁(定时器、面向对象程序结构)
二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用硬件家园设计的PCB,自行打板焊接; 方法3:向硬件家园购买。
三、程序功能 1、将通过Delay延时实现LED闪烁的代码结构调整为面向对象结构; 2、用定时器实现LED闪烁。
四、硬件部分
五、面向对象知识 面向对象是软件开发方法,是相对于面向过程来讲的。通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。
1、结构体 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 常用的定义方法: typedef struct { 变量; 指针; 函数指针; } 结构体名称_t;
2、指针 指针是地址,指向内存中的变量。 常用的定义方法:数据类型 * 指针名; 3、函数指针 函数指针是指向函数的指针变量。 常用的定义方法:返回值类型 ( * 指针变量名) ([ 形参列表]);
六、编程说明 - 面向对象程序结构 1、文件结构如下:
main.c -> 主函数文件,包含main函数等; Public.c -> 公共函数文件,包含Delay延时函数等; Sys_init -> 系统初始化函数,包含GPIO初始化函数等; LED.c -> LED外设函数,包含LED打开、关闭函数等。
2、主函数如下:
运行流程: 通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO的初始化,接着进入主循环,延时500ms将运行指示灯翻转,实现LED闪烁功能。
3、源代码 版权需要,这部分内容,请在微信公众号阅读。
七、定时器
工作流程:通过寄存器配置定时器的工作模式。设定定时值。定时器启动后,定时器在时钟源的驱动下向下计数,当计数到0时,中断标志位TF0置位,触发定时器中断,此时可以重新设定时值或自动重装定时值,重新计数,周而复始。 如果定时器中断开启了,CPU会停下手头的工作,转而去运行定时器中断函数,中断函数运行完之后,CPU继续干手头的工作。
八、中断概念 1、中断存在的意义 为了提高CPU快速处理紧急事件的能力,比如按键中断、定时任务、故障报警、接口通信等。 2、中断概念 举个例子说明: 码农A在全神贯注的撸代码,突然,手机铃声响起,追求已久的女神竟然打电话过来了,然后快速的接听了电话,接听完电话,码农A继续撸代码。。。 主循环 -> 码农A撸代码 手机铃声 -> 中断标志位 接听电话 -> 中断处理 中断返回 - >码农A继续撸代码 九、编程说明 - 定时器 1、文件结构如下:
main.c -> 主函数文件,包含main函数等; Public.c -> 公共函数文件,包含Delay延时函数等; Sys_init -> 系统初始化函数,包含GPIO初始化函数等; LED.c -> LED外设函数,包含LED打开、关闭函数等。 Timer0.c -> 定时器函数,包含定时器初始化,中断函数等 2、主函数如下: 运行流程: 通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO与定时器0的初始化,接着进入主循环,CPU闲着。间隔一定时间进入定时器中断处理函数,实现LED闪烁功能。
3、定时器中断函数 版权需要,这部分内容,请在微信公众号阅读。
4、源代码 版权需要,这部分内容,请在微信公众号阅读。 说明:公众号文章附了源代码下载链接。
十、直播说明 固定周六21:00在B站进行单片机实战教学直播,搜索硬件家园。
实战项目计划:
1、STC15单片机实战项目; 正在进行
2、STM32+GPRS 物联网实战项目;
3、基于STM8的太阳能对锂电池充电实战项目;
4、
原文出处:硬件家园(微信公众号 - yjjy168168168)刘杰编辑
|