按键控制LED流水灯模式定时器时钟

目录

1.定时器

2. STC89C52定时器资源

3.定时器框图

4. 定时器工作模式

5.中断系统

1)介绍

2)流程图:​编辑

3)STC89C52中断资源

4)定时器和中断系统

5)定时器的相关寄存器

6.按键控制LED流水灯模式


1.定时器

介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成

作用:

1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作

2)替代长时间的Delay,提高CPU的运行效率和处理速度(避免按键不灵敏)

) 

2. STC89C52定时器资源

定时器个数:3个(T0T1T2), T0 和 T1 与传统的51单片机兼容,T2是此型号单片机增加的资源

注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的

3.定时器框图

提供计数单元的时钟脉冲                               时钟计数                              产生中断,执行定时任务

定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行 

4. 定时器工作模式

STC89C52T0T1均有四种工作模式:

  模式013位定时器/计数器

  模式116位定时器/计数器(常用)

  模式28位自动重装模式

  模式3:两个8位计数器

工作模式1框图:

1)TH0 TL0 计数系统最多可以存65535

2)TF0为标志位,通过标志位向中断系统申请中断

3)时钟提供脉冲,一个脉冲使计数系统加 1 ,当计数系统到达65535后会溢出(计数系统为 0 )通过TF0产生中断

4)/12或/6 为分频   如:12MHZ/12 ==1 MHZ

SYSclk:系统时钟,即晶振周期,本开发板上的晶振为12MHz  (system clock)

T0 Pin :单片机外部接口 

当有外部引脚来提供时钟时,定时器为计数器                 

5.中断系统
1)介绍

2)流程图:
3)STC89C52中断资源

中断源个数:8个(外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、定时器2中断、外部中断2、外部中断3

中断优先级个数:4

中断号:

注意:中断的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的中断资源,例如中断源个数不同、中断优先级个数不同等等

4)定时器和中断系统

为了方便理解,这里使用的中断系统图是传统51单片机的图,STC89C52的中断系统图可参考手册

从左下往右分别为 非门(数据取反) 或门(有1 则为1) 与门(有0则为0)

5)定时器的相关寄存器

寄存器是连接软硬件的媒介,在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式寄存器相当于一个复杂机器的“操作按钮”

 

6.按键控制LED流水灯模式
#include <REGX52.H>
#include"Timer0.h"            //main.c
#include"Key.h"
#include<INTRINS.H>unsigned char KeyNum,LEDMode;
void main()
{P2=0xfe;Timer0Init();while(1){KeyNum=Key();if(KeyNum){if(KeyNum==1){LEDMode++;if(LEDMode>=2)LEDMode=0;}	}}
}
void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		TH0 = 0xFC;		T0Count++;if(T0Count>=500){T0Count=0;if(LEDMode==0)P2=_crol_(P2,1);if(LEDMode==1)P2=_cror_(P2,1);}
}
#include <REGX52.H>
void Timer0Init(void)		//Timer0.c
{TMOD &= 0xF0;		TMOD |= 0x01;		TL0 = 0x18;		TH0 = 0xFC;		TF0 = 0;	TR0 = 1;ET0=1;EA=1;PT0=0;
}
#ifndef    ___Timer0__     //防止重定义
#define ___Timer0__        //Timer0.hvoid Timer0Init(void);		#endif
#include <REGX52.H>    //Key.c
#include"Delay.h"unsigned char Key()
{unsigned char KeyNumber = 0;if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}return KeyNumber;
}
#ifndef    ___Key__ //防止重定义
#define ___Key__    //Key.hunsigned char Key();#endif
#include <REGX52.H>void Delay(unsigned int xms)		//延时 xms ms{unsigned char i, j;
while(xms)
{i = 2;j = 239;do{while (--j);} while (--i);xms--;
}
}
#ifndef __Delay_H  //防止重定义
#define __Delay_H  //Delay.hvoid Delay(unsigned int xms);	#endif

注意:可位寻址可以对单独的位进行赋值(TCON),不可位寻址只能整体赋值(TMOD)

谢谢观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个最简单的comsol斜坡稳定性分析例子——详细步骤

一个最简单的comsol斜坡稳定性分析例子——详细步骤 标准模型例子—详细步骤 线弹性模型下的地应力平衡预应力与预应变、土壤塑性和安全系数求解的辅助扫描

七月记录上半

7.5 运行mysql脚本 mysql -u root -p 数据库名 < 脚本名 7.6 使用screen在服务器后台长期运行一个程序&#xff1a; screen -S 窗口名&#xff1a;创建窗口 执行程序脚本 ctrlad&#xff1a;退出窗口 screen -ls &#xff1a;查看所有窗口 screen -r 窗口号 &#…

SpringBoot整合Easy-Es最佳实践

文章目录 1.1 部署ES和Kibana1.2 SpringBoot整合ES及配置1.2.1 引入相关依赖1.2.2 YML相关配置 1.3 索引CRUD1.3.1 索引托管自动挡1.3.1.1 配置实体模板1.3.1.2 配置启动模式 1.3.2 索引手动挡1.3.2.1 配置启动模式1.3.2.2 配置实体模板1.3.2.3 创建索引1.3.2.4 查询索引1.3.2.…

【INTEL(ALTERA)】为什么在设计迁移后,无法在Nios II BSP 编辑器中找到 DDR3 作为内存区域

目录 说明 解决方法 说明 将设计从 Quartus II 14.1 及以下迁移到 Quartus prime 17.0 时&#xff0c;DDR3 不再被识别为Nios II BSP 编辑器区域中的内存区域。 解决方法 迁移设计后&#xff0c;从 Qsys 设计中移除 DDR3 IP&#xff0c;然后将其再次添加。生成 Qsys 文件后…

车牌号查车辆信息-车牌号查车辆信息接口-汽车API接口

接口简介&#xff1a;输入车牌号&#xff0c;返回车辆相关信息&#xff08;无车主信息&#xff09;。初始登记日期、上险日期、保险到期时间、车架号、品牌这些数据会返回&#xff0c;其他数据不一定全部返回&#xff0c;,详细参数请查看返回接口文档 一般在新车上险或过户后第…

微信小程序消息通知(一次订阅)

在微信公众平台配置通知模版 通过wx.login获取code发送给后端 let that this // 登陆codewx.login({success: function (res) {if (res.code) {// 发送code到后端换取openid和session_keythat.setData({openCode: res.code})console.log(that.data.openCode, openCode);// 调…

数学系C++(六七)

目录 * &指针与地址 void指针 指针可以等于&#xff1a; const 指向常量的指针 const int *px 常指针 int * const px 指向常量的常指针const 类型标识符 * const 指针名 指针加减&#xff1a; 指针恒等式 函数指针【待续】 指针型函数&#xff1a; 指向函数的…

大数据之路 读书笔记 Day4 数据同步

回顾&#xff1a; Day 3 总结了无限客户端的日志采集 大数据之路 读书笔记 Day 3Day 2总结了浏览器端的日志采集 大数据之路 读书笔记 Day 2 数据同步 阿里数据体系中的数据同步&#xff0c;主要指的是在不同的数据存储系统之间进行数据的传输与更新&#xff0c;以保证数据的一…

【代码随想录_Day26】56 合并区间 738 单调递增的数字

Day26 OK&#xff0c;今日份的打卡&#xff01;第二十六天 以下是今日份的总结合并区间单调递增的数字 以下是今日份的总结 56 合并区间 738 单调递增的数字 今天的题目难度不低&#xff0c;尽量还是写一些简洁代码 ^ _ ^ 合并区间 思路&#xff1a; 先排序&#xff0c;按…

reactor和proactor模型

Reactor模型是非阻塞的同步IO模型。在主线程中也就是IO处理单元中&#xff0c;只负责监听文件描述符上是否有事件发生&#xff0c;有的话就立即将事件通知工作线程&#xff0c;将socket可读可写事件放入请求队列&#xff0c;交给工作线程处理。 总而言之就是主线程监听有事件发…

apk反编译修改教程系列-----修改apk 解除软件限制功能 实例操作步骤解析_3【二十二】

在前面的几期博文中有过解析去除apk中功能权限的反编译步骤。另外在以往博文中也列举了修改apk中选项功能权限的操作方法。今天以另外一款apk作为演示修改反编译去除软件功能限制的步骤。兴趣的友友可以参考其中的修改过程。 课程的目的是了解apk中各个文件的具体作用以及简单…

debain系统使用日志

账号 vboxuser changeme ssh远程登录vbox虚拟机 https://www.cnblogs.com/BuzzWeek/p/17557981.html Terminal su - root changeme sudo apt-get update sudo apt-get -y install openssh-server #启动sshd systemctl status sshd 设置允许ssh登录vbox虚拟机 参考&#xf…

【密码学】什么是密码?什么是密码学?

一、密码的定义 根据《中华人民共和国密码法》对密码的定义如下&#xff1a; 密码是指采用特定变换的方法对信息等进行加密保护、安全认证的技术、产品和服务。 二、密码学的定义 密码学是研究编制密码和破译密码的技术科学。由定义可以知道密码学分为两个主要分支&#x…

69.WEB渗透测试-信息收集- WAF、框架组件识别(9)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;68.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;8&#xff09; 有无waf存在&am…

GESP C++一级真题

PDF图片1-7 点赞❤️关注&#x1f60d;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f64f;

DPDK源码分析之(1)libmbuf模块

DPDK源码分析之(1)libmbuf模块 Author&#xff1a;OnceDay Date&#xff1a;2024年7月2日 漫漫长路&#xff0c;有人对你笑过嘛… 全系列文档可参考专栏&#xff1a;源码分析_Once-Day的博客-CSDN博客 参考文档&#xff1a; DPDK downloadGetting Started Guide for Linux…

JAVA中的for-each(增强型for循环)

Java 8及之后的版本中与for-each循环&#xff08;也称为增强型for循环&#xff09;和数组处理结合使用时&#xff0c;它可能类似于Lambda表达式或流&#xff08;Stream&#xff09;API中的上下文。 举例&#xff1a; public class ArrLength {public static void main(String…

CGAL计算凸包(OSG进行可视化)

目录 一、什么是凸包 二、运行步骤 1、安装依赖项 2、编译osg库 3、运行代码 4、运行截图 一、什么是凸包 凸包是计算几何中的一个基本概念,用来描述一个点集的最小凸包围形。具体来说,给定一个点集,凸包是包含该点集的最小凸多边形或凸多面体。 二维凸包:在二维平面…

迭代器模式在金融业务中的应用及其框架实现

引言 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需要暴露该对象的内部表示。在金融业务中&#xff0c;迭代器模式可以用于遍历复杂的数据结构&#xff0c;如交易…

算法-常见数据结构设计

文章目录 1. 带有setAll功能的哈希表2. LRU缓存结构3. O(1)时间插入删除随机(去重)4. O(1)时间插入删除随机(不去重)5. 快速获取数据流中的中位数6. 最大频率栈7. 全O(1)结构8. LFU缓存结构 本节的内容比较难, 大多是leetcodeHard难度级别的题目 1. 带有setAll功能的哈希表 哈希…