key.c

来自「单片机C语言程序」· C语言 代码 · 共 58 行

C
58
字号
#include "key.h"
#include "config.h"

volatile uint8 KeyCurrent,KeyOld,KeyNoChangedTime;
volatile uint8 KeyPress,KeyDown,KeyUp,KeyLast;
volatile uint8 KeyChangeable;

void Timer0Init(void)
{
	EA = 0;
	TMOD &= 0xf0;
	TMOD |= 0x01;
	TH0 = 0xdc;	//定时中断约5ms
	ET0 = 1;	//TIMER0中断允许
	TR0 = 1;	//开始计数
	EA = 1;
}

void KeyInit(void)
{
	KeyIO = 0xff;
	KeyCurrent = 0;
	KeyOld = 0;
	KeyNoChangedTime = 0;
	KeyPress = 0;
	KeyDown = 0;
	KeyUp = 0;
	KeyLast = 0;
	KeyChangeable = 1;
	Timer0Init();
}

void Timer0ISP(void) interrupt 1
{
	TH0 = 0xdc;	//timer0 溢出中断约5ms
	if(0 == KeyChangeable)
		return;
	KeyCurrent = ~(KeyIO);
	if(KeyCurrent != KeyOld)
	{
		KeyNoChangedTime = 0;
		KeyOld = KeyCurrent;
		return;
	}
	else
	{
		KeyNoChangedTime++;
		if(KeyNoChangedTime >= 1)
		{
			KeyNoChangedTime=1;
			KeyPress = KeyOld;
			KeyDown |= (~KeyLast) & KeyPress;
			KeyUp |= KeyLast & (~KeyPress);
			KeyLast = KeyPress;
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?