软件开发第二讲 - LED闪烁(定时器、面向对象程序结构)——用户刘工程师撰稿

发布时间:2020-03-23 阅读量:1650 来源: 我爱方案网 作者: 刘杰

【编者按】设计PCB,单片机语言,通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO的初始化,接着进入主循环,延时500ms将运行指示灯翻转,实现LED闪烁功能。可应用在实现交通灯、荧光棒、灯牌等产品,实现技术产品化。


一、工具链接


1、Keil c51 UV4

https://yunpan.360.cn/surl_yrIfYYmeRFk

2、STC-ISP下载软件

https://yunpan.360.cn/surl_yxH4CuUUvI3

 

二、学习板获取方式


方法1:自己设计PCB,自行打板焊接;

方法2:用作者设计的PCB,自行打板焊接。


1.png



三、程序功能


1、将通过Delay延时实现LED闪烁的代码结构调整为面向对象结构;

2、用定时器实现LED闪烁。

 

四、硬件部分


2.png


五、面向对象知识


面向对象是软件开发方法,是相对于面向过程来讲的。通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式;


单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。

 

1、结构体

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。


常用的定义方法:

typedef struct

{

  变量;

  指针;

  函数指针;

} 结构体名称_t;

 

2、指针

指针是地址,指向内存中的变量。

常用的定义方法:数据类型 * 指针名;


3、函数指针

函数指针是指向函数的指针变量。

常用的定义方法:返回值类型 ( * 指针变量名) ([形参列表]);

 

六、编程说明 - 面向对象程序结构


1、文件结构如下:

 

3.png


main.c  -> 主函数文件,包含main函数等;

Public.c -> 公共函数文件,包含Delay延时函数等;

Sys_init -> 系统初始化函数,包含GPIO初始化函数等;

LED.c    -> LED外设函数,包含LED打开、关闭函数等。

 

2、主函数如下:

 

 4.png

 

 

 

运行流程:

通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO的初始化,接着进入主循环,延时500ms将运行指示灯翻转,实现LED闪烁功能。

 

3、源代码

版权需要,这部分内容,请在微信公众号阅读。

 

七、定时器


5.png


工作流程:通过寄存器配置定时器的工作模式。设定定时值。定时器启动后,定时器在时钟源的驱动下向下计数,当计数到0时,中断标志位TF0置位,触发定时器中断,此时可以重新设定时值或自动重装定时值,重新计数,周而复始。 如果定时器中断开启了,CPU会停下手头的工作,转而去运行定时器中断函数,中断函数运行完之后,CPU继续干手头的工作。

 

八、中断概念

     

1、中断存在的意义

为了提高CPU快速处理紧急事件的能力,比如按键中断、定时任务、故障报警、接口通信等。


2、中断概念

举例:码农A在全神贯注的撸代码,突然,手机铃声响起,追求已久的女神竟然打电话过来了,然后快速的接听了电话,接听完电话,码农A继续撸代码。

  

主循环     -> 码农A撸代码

手机铃声   -> 中断标志位

接听电话   -> 中断处理

中断返回   - >码农A继续撸代码

     

 

九、编程说明 - 定时器


1、文件结构如下:

 6.png

 

main.c  -> 主函数文件,包含main函数等;

Public.c -> 公共函数文件,包含Delay延时函数等;

Sys_init -> 系统初始化函数,包含GPIO初始化函数等;

LED.c    -> LED外设函数,包含LED打开、关闭函数等。

Timer0.c -> 定时器函数,包含定时器初始化,中断函数等

 

2、主函数如下:


7.png


运行流程:


通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO与定时器0的初始化,接着进入主循环,CPU闲着。间隔一定时间进入定时器中断处理函数,实现LED闪烁功能。

 

3、定时器中断函数

版权需要,这部分内容,请在微信公众号阅读。


4、源代码

版权需要,这部分内容,请在微信公众号阅读。

      

十、观看视频


地址: https://live.bilibili.com/21988510

 

别具一格的单片机实战项目免费教学,以产品为导向,一起做项目的形式,加qq 1273755275拉入学习交流群。
开源项目,开发工具,技术资料以及更多原创技术文章,请关注微信公众号:硬件家园 yjjy168168168

 

作者:刘杰,在软硬件技术上有10年的经验,在单片机的经验更是突出,解决过多个单片机难题,可接单片机和软件开发等项目。目前在开讲单片机的教学,教程会在我爱方案网更新,敬请期待!


相关资讯
革新辅助电源设计:1700V SiC MOSFET赋能20-200W高效系统​

在电机驱动、电动汽车、快速充电和可再生能源系统中,低功耗辅助电源常被视为"幕后功臣"——尽管其功率等级远低于主功率系统,却直接影响着整套设备的可靠性与能效。面对提升可靠性、缩小体积、降低成本、规避供应链风险等多重挑战,设计人员亟需突破传统设计局限的创新解决方案。Wolfspeed全新推出的工业级 C3M0900170x 与车规级认证(AEC-Q101) E3M0900170x 碳化硅MOSFET系列,正为20-200W辅助电源设计提供关键赋能,助力工程师在性能与成本的博弈中开辟新路径。

安森美Hyperlux SG:攻克全局快门三大痛点 (高性能、高效率、低功耗)​

在当今高速成像应用中,如机器视觉、自主导航、增强/虚拟现实(AR/VR/MR)和条码扫描,传统的卷帘快门图像传感器往往力不从心,会因运动模糊或空间失真严重影响图像质量。为克服这些挑战并精准“冻结”快速运动的物体,具备全局快门特性的先进CMOS图像传感器成为关键选择。安森美深知工程师在为高速应用筛选最优全局快门传感器时需权衡大量参数(如分辨率、光学格式、帧率、功耗、动态范围、全局快门效率GSE及信噪比SNR等)以及高级功能(如同步触发、嵌入式自动曝光、ROI选择),因此开发了创新的Hyperlux SG系列产品。

常关型SiC Combo JFET结构

安森美SiC Combo JFET技术通过创新性集成常开型SiC JFET与低压Si MOSFET,构建出高性能共源共栅(cascode)结构,攻克了SiC器件常开特性的应用瓶颈。该方案兼具SiC材料的高压处理能力、超低导通电阻(RDS(on))与卓越热性能,以及Si MOSFET的易控常关特性,为大电流应用(如固态断路器、高功率开关系统)和多器件并联场景提供突破性的功率密度与效率解决方案。

920nm问世+低红曝优选:IR:6技术精准匹配多元红外应用场景

IR:6红外芯片通过实质性的技术创新,显著提升了在面部识别、智能传感器和节能系统等应用中的关键性能(亮度、效率和图像质量)。它在人眼不可见的红外领域展现出卓越表现,特别是在安防领域以更高亮度、更低功耗和更优画质设定了新的距离覆盖和可靠性标准。

工业电动化浪潮:充电器设计的效率与尺寸挑战

工业设备加速迈向电动化,对稳健、高效、适应性强的电池充电器需求激增。无论是手持工具还是重型机械,充电器必须应对严苛环境和全球通用电压输入(120-480 Vac),并优先满足小型化、轻量化及被动散热的设计要求。在这一关键任务中,功率因数校正(PFC)级的拓扑选择至关重要,它直接影响着系统效率、尺寸和成本。本文将剖析现代工业充电设计的核心挑战,重点对比传统升压 PFC 与日益流行的图腾柱 PFC 拓扑方案,并探讨碳化硅(SiC)MOSFET 如何颠覆性地赋能高效率解决方案,为工程师提供清晰的设计指导。