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

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

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


相关资讯
日系晶振平替方案!YXC国产温补晶振交期缩短50%

在高精度雷达和导航应用领域中,时钟稳定性和精准定位是两大关键因素。由于雷达系统需要精确测量目标的距离、速度和方位,而导航系统则要求高精度地确定位置和规划路径,因此这些应用都对时钟信号的精度提出了极高要求。

芯控未来:破局AI时代的触觉交互密码

当指尖划过屏幕成为数字时代的基础语言,触控技术正在书写人机交互的新篇章。Canalys最新数据显示,全球PC市场在2024年实现3.9%的企稳增长后,2025年将迎来AI PC换机潮与Windows 10停服的双重催化,预计触控设备市场规模将突破百亿美元。在这场交互革命中,触控板已从外围配件进化为生产力核心组件——更精准的轨迹捕捉、更具实感的力度反馈、更智慧的生物识别,正在重新定义"指尖生产力"的边界。兆易创新凭借在电容触控领域十余年的技术积淀,以GSM3765/3766芯片组为支点,撬动这场触觉体验的全面升级。

工业5.0时代,AMR如何实现人机共舞?解析安森美的安全设计密码

在工业4.0向工业5.0跨越的进程中,自主移动机器人(AMR)正从“效率工具”蜕变为“智慧伙伴”。随着制造业对“以人为本”和“可持续性”的追求升级,AMR的设计核心已从单纯的自动化转向安全性与人机协作的深度融合。然而,高速移动的机械臂、复杂环境中的动态障碍物,以及突发外力冲击,仍对工人安全和设备稳定性构成挑战。如何在提升生产力的同时,让AMR像人类一样“感知风险、快速决策”?安森美(onsemi)通过传感、运动控制与智能照明的系统性创新,为这一难题提供了前瞻性答案。

气压感知破局者:兆易创新以“3高1低1优”战略重塑MEMS传感器生态

在万物互联的时代,传感器如同数字世界的“末梢神经”,悄然推动着智能生活的每一次革新。作为MEMS气压传感器领域的革新力量,兆易创新正以颠覆性技术突破行业边界——从实现水下100米精准测量的防水型GDY1122,到功耗低至微安级的节能标杆GDY1121,其产品矩阵以“高精度、高集成、高灵敏度”的硬核实力,攻克复杂环境下的感知难题。在慕尼黑上海电子展的聚光灯下,这家中国芯片企业不仅展示了10ATM防水等级的尖端方案,更通过“3高1低1优”战略,将MEMS传感器推向智能穿戴、工业监测、应急救援等领域的核心舞台。

知冷知热,更知“芯”:TCXO让时钟信号无惧温度挑战

在各种电子设备中,晶振作为时钟信号的核心元件,其精度直接决定了系统的稳定性。由于石英晶体及周边电路元件受温度变化影响会发生热膨胀和参数漂移,晶振的频率往往随温度波动而偏移,从而影响整体性能。