基于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.执行的代码不要过长

posted @ 2023-12-16 22:41  Jiang-Tang  阅读(134)  评论(0)    收藏  举报  来源