LED闪烁(定时器)

定时器

STC15L2K32S2有3个定时器/计数器

定时器/计数器0、定时器/计数器1、定时器/计数器2

寄存器配置方法跟89C52的差不多,具体可看手册

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

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

程序

在LED闪烁(面向对象编程结构)的工程上添加Timer0.c和Timer0.h文件

Timer0.c:

定时器每隔5ms进入一次中断处理函数,Timer0.usMCU_Run_Timer变量++,加100次时,说明经过了500ms,就让指示灯翻转

定时器在满足要求的情况下,定时时间越长越好,中断过于频繁的话,会影响 CPU 的效率。

/* Includes ------------------------------------------------------------------*/
#include <main.h>/* Private define-------------------------------------------------------------*//* Private variables----------------------------------------------------------*/
static void Timer0_Init();
/* Public variables-----------------------------------------------------------*/
Timer0_t Timer0 =
{0,Timer0_Init
};
/* Private function prototypes------------------------------------------------*//*
* @name   Timer0_Init
* @brief  定时器0初始化
* @param  None
* @retval None
*/
static void Timer0_Init()      //5毫秒@11.0592MHz
{AUXR &= 0x7F;     //定时器时钟12T模式TMOD &= 0xF0;      //设置定时器模式TL0 = 0x00;       //设置定时初值TH0 = 0xEE;        //设置定时初值TF0 = 0;       //清除TF0标志TR0 = 1;      //定时器0开始计时
}/*
* @name   Timer0_isr
* @brief  定时器0中断处理函数(5ms中断一次)
* @param  None
* @retval None
*/
void Timer0_isr() interrupt 1
{Timer0.usMCU_Run_Timer++;if(Timer0.usMCU_Run_Timer >= Timer0_500ms){Timer0.usMCU_Run_Timer = 0;Run_LED.Run_LED_Flip();}
}
/********************************************************End Of File
********************************************************/

Timer0.h:

头文件里定义枚举类型,提供不同的定时时间选择,也可以用#define来宏定义;结构体里的变量记得在Timer0.c文件中初始化

#ifndef __TIMER0_H_
#define __TIMER0_H_//定义枚举类型,提供不同的定时时间
typedef enum
{Timer0_50ms = (uint16_t)10,Timer0_100ms = (uint16_t)20,Timer0_500ms = (uint16_t)100,Timer0_1s = (uint16_t)200
}Timer0_Value_t;//定义结构体类型
typedef struct
{uint16_t volatile usMCU_Run_Timer;void (*Timer0_Init)();
}Timer0_t;/* extern variables-----------------------------------------------------------*/
extern Timer0_t Timer0;
/* extern function prototypes-------------------------------------------------*/ #endif
/********************************************************End Of File
********************************************************/

Sys_Init.c:

系统初始化函数Sys_Init中分别调用GPIO、上电指示、定时器0和中断初始化函数,其中上电延时是从产品角度上为了让硬件系统稳定,不要一上电就立马开始处理数据,上电指示是为了在调试过程中如果单片机重启了,会有个提示,有利于我们知道哪一步造成重启,进行排错

/* Includes ------------------------------------------------------------------*/
#include <main.h>/* Private define-------------------------------------------------------------*//* Private variables----------------------------------------------------------*/
static void GPIO_Init();
static void Power_ON_Indication();
static void Sys_Init();
static void IE_Init();
/* Public variables-----------------------------------------------------------*/
Hardware_Init_t Hardware_Init =
{GPIO_Init,Power_ON_Indication,Sys_Init,IE_Init
};
/* Private function prototypes------------------------------------------------*//*
* @name   GPIO_Init
* @brief  GPIO初始化
* @param  None
* @retval None
*/
static void GPIO_Init()
{//M1    M0//0     0       准双向口//0     1       推挽输出//1     0       高阻输入//1     1       开漏//P34、P35设置为推挽输出P3M1 = 0x00;    //0000 0000P3M0 = 0x30;    //0011 0000P34 = 0;        //关闭运行指示灯P35 = 0;        //关闭PWM灯//P5P5M1 = 0x00;     //0000 0000P5M0 = 0xFF;     //1111 1111//M2415为高电平,打开PMOS开关,为外设供电P54 = 1;
}/*
* @name   Power_ON_Indication
* @brief  上电指示
* @param  None
* @retval None
*/
static void Power_ON_Indication()
{uint8_t i = 5;while(i--){//LED灯亮Run_LED.Run_LED_ON();//延时100毫秒Public.Delay_ms(100);//LED灯灭Run_LED.Run_LED_OFF();//延时100毫秒Public.Delay_ms(100); }
}/*
* @name   IE_Init
* @brief  初始化中断
* @param  None
* @retval None
*/
static void IE_Init()
{ET0 = 1;    //开启定时器0中断EA = 1;     //开启总中断
}/*
* @name   Sys_Init
* @brief  系统初始化
* @param  None
* @retval None
*/
static void Sys_Init()
{Public.Delay_ms(10);                            //上电后先等待硬件稳定Hardware_Init.GPIO_Init();                      //GPIO口初始化Hardware_Init.Power_ON_Indication();            //上电指示Timer0.Timer0_Init();                           //定时器0初始化Hardware_Init.IE_Init();                        //中断初始化
}
/********************************************************End Of File
********************************************************/

main.c:

主函数里调用系统初始化函数,开启定时器定时

/******************************************************************************* @file    main.c * @author  * @version V1.0* @date    2022-xx-xx* @Conpany * @project STC15实战项目
*******************************************************************************//* Includes ------------------------------------------------------------------*/
#include <main.h>/* Private define-------------------------------------------------------------*//* Private variables----------------------------------------------------------*//* Public variables-----------------------------------------------------------*//* Private function prototypes------------------------------------------------*//*
* @name   main
* @brief  主函数
* @param  void
* @retval int
*/
int main(void)
{   //系统初始化Hardware_Init.Sys_Init();//系统主循环while(1){}
}
/********************************************************End Of File
********************************************************/

STC15单片机-LED闪烁(定时器)相关推荐

  1. STC15单片机-LED闪烁(面向对象程序结构)

    LED闪烁(面向对象程序结构) 将LED闪烁(延时等待)的程序修改为面向对象的程序结构,C语言面向对象主要由结构体和函数指针实现 以后也都采用这种程序设计方法 面向对象知识 面向对象是软件开发方法,是 ...

  2. 义隆单片机c语言例程,简单的义隆单片机LED闪烁C程序

    简单的义隆单片机LED闪烁C程序 fxhfxh 1726 10 朋友要求做一个由15个发光二极管并联组成的闪烁发光装置,要求价格尽量低,用3V纽扣电池供电,没有开关,只有一个按键.找来找去,目前只发现 ...

  3. 单片机led闪烁代码_单片机、555实现LED闪烁电路

    有朋友在后台发消息,希望设计一个LED闪烁电路,闪烁频率为2Hz,想了解LED闪烁的电路原理是什么,下面解答一下,看看有没有写的很通俗易懂.要设计一个闪烁电路,闪烁频率为2Hz,即500ms亮灭交替. ...

  4. 单片机led闪烁代码_单片机驱动LED发光二极管的电路以及编程

    一.单片机驱动单个发光二极管 1.电路 代码: 1.点亮单个LED二极管 #include<reg51.h> sbit LED1=P1^0:void main(void){LED1=1:w ...

  5. 基于STC15W4K32单片机仿真《定时器0实现LED闪烁》

    1. 编 程 软 件:keil5版本 2.仿 真 软 件:Proteus8.12 3.单片机选型:STC15W4K32S4 4.学 习 目 标:学习定时器0 的使用 5.程 序 文 件 : /**** ...

  6. STC15单片机-GPIO模式介绍以及LED灯闪烁

    GPIO 1.说明 GPIO,英文全称 General-purpose input/output,即通用型输入输出,是单片机中最常用的外设之一. 2.设置模式 ​ STC15系列单片机最多有62个I/ ...

  7. Proteus:单片机定时器中断(LED闪烁)

    题目概述: 单片机定时器中断(LED闪烁). 编程: #include <reg51.h> #define uchar unsigned char #define uint unsigne ...

  8. c语言控制led闪烁次数,单片机C语言程序设计之定时器控制4个LED滚动闪烁

    描述 通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力.通过定时器控制4只LED滚动闪烁系统的设计,掌握定时/计数器的使用方法,和简单程序的编写,最终提高 ...

  9. 51单片机实验 LED半秒闪烁 定时器0方式2 中断实现

    51单片机实验 LED半秒闪烁 定时器0方式2 中断实现 实验目的: P1.0接一个发光管,实现亮半秒灭半秒, 要求使用定时器0工作方式2,中断实现. C语言代码: #include "at ...

  10. STC89C52单片机 LED灯闪烁

    LED闪烁 循环语句 循环语句 (1)while(条件表达式){语句} 只有当 while 后面圆括号内条件表达式的值为真时,程序才会重复执行花括号内语句,当条件表达式为假时则不执行花括号内语句. ( ...

最新文章

  1. kalilinux安装VMware Tools(水文)
  2. RDKit | 基于RDKit和化学信息学探索化学空间
  3. Delphi中流对象 TStream
  4. 汇编中的length(返回利用dup定义的数组中的元素个数,即重复操作符dup前的count值)
  5. java文件编译_【java】javac编译多个有依赖关系的java文件为class文件
  6. Git Bash的一些命令和配置
  7. android include 点击事件,Android编程之include文件的使用方法
  8. 判断系统大小端方法分析与总结
  9. 一加7 Pro详细配置规格曝光:售价妥妥破5000
  10. Java中的关键字volatile解析
  11. mysql客户sqlyog_MySQL客户端工具 SQLyog
  12. uni-app 无网络图标不显示问题解决
  13. C++源文件的编译流程简介
  14. ListView适配器
  15. ajax谷歌浏览器提示等待超时,调用谷歌浏览器爬虫,selenium webdriver等设置等待时间和超时时间...
  16. 第一天:外企面试英语口语常用语
  17. Roberts、Prewitt、Sobel、Laplacian、LoG 和 Canny 边缘检测算子(MATLAB自写函数实现)
  18. Linux学习-28-用户间切换相关命令
  19. 如何将PDF制作成电子书
  20. 关于jquery md5插件的使用问题

热门文章

  1. Win10能聊微信不能上网的解决方案
  2. UI设计的色彩搭配及原则
  3. SPSS实战:多因素方差分析(以随机区组设计为例)
  4. [技术讨论]关于前几天发布的京东bug上的问题分析
  5. 10个超实用的微信小程序 | 值得推荐的微信小程序
  6. 屏幕录制工具LICEcap,截屏生成GIF图
  7. php怎么在图片上加文字居中,php GD库为图片添加文字且自动换行,水平居中
  8. LM74700-Q1
  9. c语言 实现音乐旋律播放
  10. 大写数字时钟电脑壁纸下载