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

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

【编者按】设计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年的经验,在单片机的经验更是突出,解决过多个单片机难题,可接单片机和软件开发等项目。目前在开讲单片机的教学,教程会在我爱方案网更新,敬请期待!


相关资讯
车规晶振选型指南:3分钟破解ADAS时钟稳定性难题

在汽车电子智能化、网联化与电动化深度融合的浪潮中,车载时钟系统的精度与可靠性正成为决定整车性能的核心命脉。作为电子架构的"精准心跳之源",车规级晶振的选型直接影响ADAS感知、实时通信、动力控制等关键功能的稳定性。面对严苛路况、极端温差及十年以上的生命周期挑战,工程师亟需兼具高稳定性与强抗干扰能力的时钟解决方案——小扬科技将聚焦车规级晶体/晶振核心参数,3分钟助您精准锁定最优型号。

破局图像传感器选型难题:成像性能、系统兼容与工具支持的协同​

在技术创新的浪潮中,图像传感器的选型是设计与开发各类设备(涵盖专业与家庭安防系统、机器人、条码扫描仪、工厂自动化、设备检测、汽车等)过程中的关键环节。选择最适配的图像传感器需要对众多标准进行复杂的综合评估,每个标准都直接影响最终产品的性能和功能。从光学格式(Optical Format)和动态范围(Dynamic Range),到色彩滤波阵列(CFA)、像素类型、功耗及特性集成,这些考量因素多样且相互交织、错综复杂。

破解时钟难题:5大场景下压控晶振选型黄金法则(附参数对照表)

压控晶振(VCXO)作为频率调控的核心器件,已从基础时钟源升级为智能系统的"频率舵手"。通过变容二极管与石英晶体的精密耦合,实现电压-频率的线性转换,其相位噪声控制突破-160dBc/Hz@1kHz,抖动进入亚纳秒时代(0.15ps)。在5G-A/6G预研、224G光通信及自动驾驶多传感器同步场景中,VCXO正经历微型化(2016封装)、多协议兼容(LVDS/HCSL/CML集成)及温漂补偿算法的三重技术迭代。

核心差异剖析:晶振 vs. 实时时钟芯片(RTC) - 脉冲源与时间管理者的角色划分

在电子设备的精密计时体系中,晶体振荡器与实时时钟芯片如同时间系统的"心脏"与"大脑":晶振通过石英晶体的压电效应产生基础频率脉冲,为系统注入精准的"生命节拍";而实时时钟芯片则承担时序调度中枢的角色,将原始频率转化为可追踪的年月日时分秒,并实现闹钟、断电计时等高级功能。二者协同构建现代电子设备的"时间维度"。

无人机的“眼”与“脑”:解密自主导航与感知核心技术

无人机已不再是简单的飞行器,而是集成了尖端感知与决策能力的空中智能载体。其核心系统——特别是自主导航与感知技术——是实现其在测绘、巡检、农业、物流、安防等多个领域高效、精准作业的关键。本文将深入剖析无人机如何通过这些核心技术“看见”、“思考”并“规划”路径,实现真正意义上的自主飞行能力。