查看: 1589|回复: 0

[经验] STC15单片机实战项目软件开发第二讲 - LED闪烁(定时器,面...

[复制链接]
  • TA的每日心情
    开心
    2020-1-8 09:17
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-4-14 11:04:52 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 liujieshui 于 2020-4-14 11:00 编辑

    软件开发第二讲 - LED闪烁(定时器、面向对象程序结构)


    二、学习板获取方式
      方法1:自己设计PCB,自行打板焊接;
      方法2:用硬件家园设计的PCB,自行打板焊接;
      方法3:向硬件家园购买。

    STC15实战项目 - 样机图.PNG

    三、程序功能
    1、将通过Delay延时实现LED闪烁的代码结构调整为面向对象结构;
    2、用定时器实现LED闪烁。

    四、硬件部分

    图1 - LED灯.PNG

    五、面向对象知识
    面向对象是软件开发方法,是相对于面向过程来讲的。通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式
       单片机C语言的面向对象编程,是利用结构体,将变量、指针、函数等进行封装,达到编程更加方便、程序可读性更好、方便移植等目的。

    1、结构体
    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
    常用的定义方法:
    typedef struct
    {
      变量;
      指针;
      函数指针;
    } 结构体名称_t;

    2、指针
      指针是地址,指向内存中的变量。
      常用的定义方法:数据类型 * 指针名;
    3、函数指针
      函数指针是指向函数的指针变量。
      常用的定义方法:返回值类型 ( * 指针变量) ([形参列表]);

    六、编程说明 - 面向对象程序结构
    1、文件结构如下:


    图2 - 面向对象程序结构.PNG

    main.c  -> 主函数文件,包含main函数等;
         Public.c -> 公共函数文件,包含Delay延时函数等;
         Sys_init -> 系统初始化函数,包含GPIO初始化函数等;
         LED.c    -> LED外设函数,包含LED打开、关闭函数等。

    2、主函数如下:


    图3 - 主函数.PNG

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

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

    七、定时器

    图4 - 定时器.PNG

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

    八、中断概念
         1、中断存在的意义
    为了提高CPU快速处理紧急事件的能力,比如按键中断、定时任务、故障报警、接口通信等。
    2、中断概念
       举个例子说明:
       码农A在全神贯注的撸代码,突然,手机铃声响起,追求已久的女神竟然打电话过来了,然后快速的接听了电话,接听完电话,码农A继续撸代码。。。
       主循环     -> 码农A撸代码
       手机铃声   -> 中断标志位
       接听电话   -> 中断处理
       中断返回   - >码农A继续撸代码
         
    九、编程说明 - 定时器
    1、文件结构如下:

    图5 - 定时器程序结构.PNG

    main.c  -> 主函数文件,包含main函数等;
         Public.c -> 公共函数文件,包含Delay延时函数等;
         Sys_init -> 系统初始化函数,包含GPIO初始化函数等;
         LED.c    -> LED外设函数,包含LED打开、关闭函数等。
        Timer0.c -> 定时器函数,包含定时器初始化,中断函数等
    2、主函数如下:
        图6 - 主函数.PNG
    运行流程:
      通过结构体Hardware_Init的函数指针调用系统初始化函数,完成GPIO与定时器0的初始化,接着进入主循环,CPU闲着。间隔一定时间进入定时器中断处理函数,实现LED闪烁功能。

    3、定时器中断函数
    版权需要,这部分内容,请在微信公众号阅读。

    4、源代码
    版权需要,这部分内容,请在微信公众号阅读。
    说明:公众号文章附了源代码下载链接。


    直播说明
    固定周六21:00在B站进行单片机实战教学直播,搜索硬件家园。

    实战项目计划:
    1、STC15单片机实战项目;           正在进行
    2、STM32+GPRS 物联网实战项目;
    3、基于STM8的太阳能对锂电池充电实战项目;
    4、

    原文出处:硬件家园(微信公众号 - yjjy168168168)刘杰编辑


    图7 - 定时器中断函数.PNG
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-18 13:55 , Processed in 0.131120 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.