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

📄 key.c

📁 使用AVR单片机实现的万年历功能,其中使用了ds1302和1602
💻 C
字号:
#include "key.h"

void KeyInit(void)
{
	//设置引脚的输入模式和输出模式
	keyInputPortInputMode;
	keyInputPortPullUp;
	keyOutputPortOutputMode;
	keyOutputPortInit;

	keyMask = 0xF0;   //屏蔽码,没有按键时为0xF0
	keyValue = 0x00;  //初始化键值为0
	keyState = 0x00;  //初始化按键状态为第0歌状态
}
/************************************************
函数unsigned char FindKeyValue (void)用于查找键值
************************************************/
unsigned char FindKeyValue (void)
{
	unsigned keyReturn;    //返回的键值,并初始化为无键值
	keyReturn = 0;			

	switch (keyState)
	{
	case keyState0:
		keyOutput2 = 1;			//第二行置高电平
		keyOutput1 = 0;			//第一行置低电平,扫描第一行

		keyValue = keyInput & keyMask;	//读取键值

		if(keyValue != keyMask)			//如果有键按下,则进入状态1
		{
			keyState = keyState1;
		}
		else							//否则第一行置高电平,第二行置低电平,扫描第二行
		{
			keyOutput1 = 1;
			keyOutput2 = 0;
			keyValue = keyInput & keyMask;   //读取键值

			if(keyValue != keyMask)			//如果有键按下,则进入状态1
			{
				keyState = keyState1;
			}
			else							//否则第二行也置高电平
			{
				keyOutput2 = 1;
			}

		}

		break;
		
	case keyState1:

		if (keyValue == (keyInput & keyMask))	//如果读取的按键值和上次一样,则进入状态2,并判断按键,否则进入状态0
		{
			keyState = keyState2;

			if (keyOutput1)
			{
				switch(keyValue)
				{
				case 0b11100000:
					keyReturn = key1;
					break;

				case 0b11010000:
					keyReturn = key2;
					break;

				case 0b10110000:
					keyReturn = key3;
					break;

				case 0b01110000:
					keyReturn = key4;
					break;

				};

			}
			else
			{
				switch(keyValue)
				{
				case 0b11100000:
					keyReturn = key5;
					break;

				case 0b11010000:
					keyReturn = key6;
					break;

				case 0b10110000:
					keyReturn = key7;
					break;

				case 0b01110000:
					keyReturn = key8;
					break;

				};
			}

		}
		else
		{
			keyState = keyState0;
		}

		break;

	case keyState2:         //状态2中判断按键是否已经释放,如果已经释放则返回状态0
		
		keyOutput1 = 0;
		keyOutput2 = 0;

		if ((keyInput & keyMask) == keyMask)
		{
			keyState = keyState0;
		}

		break;
		
	};
	
	return keyReturn;//返回读取的键值
}







⌨️ 快捷键说明

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