⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 nRF24L01详细编程资料
💻 C
字号:
//ICC-AVR application builder : 2006-02-12 14:00:00
// Target : ATmega48
// Crystal: 1.000Mhz
// Author:  jackyan

#include "iom48v.h"
#include "macros.h"
#include "Defs.h"
#include "I2C.h"
#include "var.h"
#include "eeprom.h"

extern uword ADRead(ubyte chal);

ubyte key(void)
{
	ubyte keyT;
	uword ADBuf2=0;
	
	ADBuf2=ADRead(3);

	keyT=NULL_KEY;

	if(((0x0000<ADBuf2)||(0x0000==ADBuf2))&&(ADBuf2<0x0030))
			keyT=Bright_Dw;
	
	if((0x00a0<ADBuf2)&&(ADBuf2<0x0120))
			keyT=Bright_Up;
	
	if((0x01f0<ADBuf2)&&(ADBuf2<0x0230))
			keyT=Contrast_Up;
	
	if((0x02d0<ADBuf2)&&(ADBuf2<0x0320))
			keyT=Contrast_Dw;
	
	if((0x0350<ADBuf2)&&(ADBuf2<0x0380))
			keyT=ModeKey;
	
	EEPROM_WRITE(0x20, ADBuf2);		// test ads value of key
	return keyT;
}



void keyLog(void)
{
	KeyTemp=key();
	
	if(KeyBuf==KeyTemp) 	// 去抖动,连续两次读键相同,认为按键状态有效
		{
		KeyValue=KeyBuf;	//	取按键值
		KeyTemp=0;			//	清除本次扫描结果
		if(KeyValue==KeyValue2) 	// 读取的按键值和先前的值相同,是同一按键,为连击。 
			{
			if(chk(Flag,bitKeyContinue))		// 允许连击
				{
				if(KeepKeyCnt!=0)
					{
					clr(Flag,keybhits);		// 连击计数未到
					KeepKeyCnt--; 		// 连击计数器
					}
				else //(KeepKeyCnt==0)//&&(bitADError==0)) // AD 异常下,锁定按键
					{ 
					chKeyVal=KeyValue;	//	连击按键有效
					set(Flag,keybhits);		// 有按键闭合
					}
				}
			else
				{ 	// 不允许连击,认为没有按键闭合
				clr(Flag,keybhits);
				clr(Flag,bitKeepKeyL);
				KeepKeyCnt=255;
				clr(Flag,bitKeepKeyKeep);	// 非连击中				
				}
			}
		else
			{	//	读取的按键与先前闭合的按键不同,有新的按键
			chKeyVal=KeyValue2=KeyValue; 		
			KeepKeyCnt=255;
			clr(Flag,bitKeyContinue);
			set(Flag,keybhits);
			clr(Flag,bitKeepKeyL);
			}
		}

	else
		{	//	连续2次读取的按键状态不同,只保留第2次的结果
		KeyBuf=KeyTemp;
		chKeyVal=NULL_KEY;
		KeepKeyCnt=255;
		clr(Flag,keybhits);
		clr(Flag,bitKeepKeyKeep);
		clr(Flag,bitKeepKeyL);
		}
}

⌨️ 快捷键说明

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