基于51单片机的定时器扫描按键的方法

本文基于STC89C52RC单片机,主要阐述按键扫描的定时器方法

定时器的拓展方法

我们先介绍在定时器数量不够的时候要怎样带来拓展它,已知此法可直接跳过

定时器的作用就是计时在一定时间后进入中断执行特定的代码

只要我们定时器初始化时设定一个足够小的时间,再在定时器中断函数中定义局部变量来记录进入定时器的次数,达到多少次就执行一个函数,就可以满足定时器的拓展功能

代码部分(定时器初始化基本时间)

这里给大家一个容易记忆的方法

T---Timer(计时器)

L---Low(低位) , H---High(高位)

E---Enable(使能,允许)

F---Full(溢出)

A---All(全部)

R---Run---启动的意思,也就是定时器跑起来

#include <REGX52.H>//定时器的初始化

void Timer0_Init(void)	//1ms
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x66;		    //设置定时初值
	TH0 = 0xFC;		    //设置定时初值
	TF0 = 0;	    //Timer full
	ET0=1;          //Enable Timer 0
	EA=1;           //Enable All
	PT0=0;          //中断优先级
	TR0 = 1;        // Timer0 Run 启动计时器
}

主函数的定时器中断


void Timer0_Routine(void) interrupt 1 //中断程序代码1ms
{
	static unsigned int T0Count1=0,T0Count2=0,T0Count3=0,T0Count4=0;//静态占据空间,定义的是计数值
	TL0=0x66;//定时器高低位重新赋值
	TH0=0xFC;//因为配置的时候不是自动重载模式
	T0Count1++;//每进入一次定时器中断1号计数值加一
	if(T0Count1>=20)//20ms执行一次
	{   
		T0Count1=0;//时间到了就要清零进行下一次计数
		//这里可以写要执行的代码或一个已经写好的函数
	}
	T0Count2++;
	if(T0Count2>=2)//2ms
	{   
		T0Count2=0;
		//与上方同理
	}
}
此方法的注意事项

1.在定时中进入的函数不要有延时的函数

2.执行的代码不要过长

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值