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

📄 test_key.c

📁 采用32位嵌入式芯片SPCE3200(凌阳)设计的开发板,具有多媒体功能。其中包含了网络、SD卡、TV、UART等是全部十个C程序。
💻 C
字号:
//====================================================================================
//文 件 名:Test_Key.c
//功能描述: Key测试
//维护记录: 		V1.0	by wangtao <wangtao@sunnorth.com.cn>
//====================================================================================
#include "SystemHeader.h"

#define		KEY_CNT		4										// 按键数量
#define		KEY_X		190										// 按键图形的左上角坐标
#define		KEY_Y		200
#define		KEY_H		20										// 按键的边长
#define		KEY_S		10										// 按键间隙

unsigned int GetKey()
{
	unsigned int Ret = 0;
	if((*P_IOB_GPIO_INPUT & 0x0300) != 0)
		Ret = ((*P_IOB_GPIO_INPUT & 0x0300) >> 6);
	if((*P_IOA_GPIO_INPUT & 0x0003) != 0)
	{
		Ret |= *P_IOA_GPIO_INPUT;
	}
	return Ret;
}

short Test_Key(void)
{
	short x, y;
	short Ret = 0;
	int i;
	unsigned int KeyCode;
			
	*P_GPIO_CLK_CONF = C_GPIO_CLK_EN | C_GPIO_RST_DIS;
	*P_IOA_GPIO_SETUP = 0x03030000;								// IOA1、IOA0下拉输入
	*P_IOB_GPIO_SETUP |= 0x03030000;							// IOB1、IOB0下拉输入
	*P_IOB_GPIO_SETUP &= ~0x00000300;
	*P_IOB_GPIO_SETUP |= 0x00003C00;							// IOB2、IOB2、IOB3, IOB5输出,初始输出低电平
	*P_IOB_GPIO_SETUP &= ~0x0000003C;
	
	TFT_SetBGColor(0x0001);
	TFT_SetWindow(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);

	TFT_SetBGColor(COLOR_WHITE);
	TFT_SetWindow(40, 40, 279, 169);
	TFT_SetColor(COLOR_RED);
	TFT_Rectangle(0, 0, 239, 129, PAINT_HOLLOW);
	TFT_SetColor(COLOR_BLUE);
	TFT_SetTextPos(30, 10);
	TFT_Print("测试开发板上的四个按键\n");
	TFT_SetTextPos(18, 40);
	TFT_Print("请将J10的IOA0和IOA1跳线拔掉");
	TFT_SetTextPos(18, 60);
	TFT_Print("       并短接J17跳线");
	TFT_SetTextPos(30, 90);
	TFT_Print("点击屏幕的任意位置返回");

	TFT_SetBGColor(COLOR_BLACK);
	TFT_SetWindow(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);

	x = KEY_X;
	y = KEY_Y;
	TFT_SetColor(COLOR_CYAN);
	for(i=0; i<KEY_CNT; i++)
	{
		TFT_Rectangle(x, y, x+KEY_H-1, y+KEY_H-1, PAINT_HOLLOW);
		x += KEY_H+KEY_S;
	}

	x = KEY_X+2;
	y = KEY_Y+2;
	TFT_SetColor(COLOR_MAGENTA);
	for(i=0; i<KEY_CNT; i++)
	{
		TFT_Rectangle(x, y, x+KEY_H-5, y+KEY_H-5, PAINT_SOLID);
		x += KEY_H+KEY_S;
	}

	x = KEY_X + KEY_H/2;
	y = KEY_Y + KEY_H/2;
	TFT_SetColor(COLOR_WHITE);
	for(i=0; i<KEY_CNT; i++)
	{
		TFT_Circle(x, y, KEY_H/2-4, PAINT_SOLID);
		x += KEY_H+KEY_S;
	}
		
	KeyCode = 0x0000;
	while(1)
	{
		if(GetKey() != KeyCode)
		{
			KeyCode = GetKey();
			for(i=0; i<KEY_CNT; i++)
			{
				if(KeyCode & (0x0001 << i))
				{
					*P_IOB_GPIO_SETUP |= (0x0004 << i);
					x = KEY_X+(KEY_H+KEY_S)*i+2;
					y = KEY_Y+2;
					TFT_SetColor(COLOR_GREEN);
					TFT_Rectangle(x, y, x+KEY_H-5, y+KEY_H-5, PAINT_SOLID);
					TFT_SetColor(COLOR_YELLOW);
					x = KEY_X+(KEY_H+KEY_S)*i+KEY_H/2;
					y = KEY_Y + KEY_H/2;
					TFT_Circle(x, y, KEY_H/2-4, PAINT_SOLID);
					Ret |= (0x01<<i);
				}
				else
				{
					*P_IOB_GPIO_SETUP &= (~(0x0004 << i));
					x = KEY_X+(KEY_H+KEY_S)*i+2;
					y = KEY_Y+2;
					TFT_SetColor(COLOR_MAGENTA);
					TFT_Rectangle(x, y, x+KEY_H-5, y+KEY_H-5, PAINT_SOLID);
					TFT_SetColor(COLOR_WHITE);
					x = KEY_X+(KEY_H+KEY_S)*i+KEY_H/2;
					y = KEY_Y + KEY_H/2;
					TFT_Circle(x, y, KEY_H/2-4, PAINT_SOLID);
				}
			}
		}
		Touch_Get(&x, &y);
		if(x!=-1)
		{
			for(i=0; i<1000000; i++);
			break;
		}
	}
	TFT_SetBGColor(0x0001);
	TFT_SetWindow(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
	if(Ret == 0x0f)
		Ret = 1;
	else
		Ret = 0;
	return Ret;
}

⌨️ 快捷键说明

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