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

📄 key.c

📁 一个使用ARM7控制16*32点阵LED的程序,主控芯片为2131
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
** 函数名称 :key()
** 函数功能 :按键检测程序
*********************************************************************************************************
*/
//#include "key.h" 

#include "config.h"
struct
{
	uint8 key1;    //主控制键,0:横向显示汉字,1:纵向显示汉字,2:横向显示字母,3:纵向显示字母
	uint8 key2;	 //副控制键,与key1联合使用,key1在前,
				 //0:显示第一组汉字,1:显示第二组汉字,2:显示第三组汉字,3:显示第四组汉字;4:循环显示
				 //0:显示第一组字母,1:显示第二组字母,2:显示第三组字母,3:显示第四组字母;4:循环显示
	uint8 key3;	 //暂时不使用
	uint8 key4;  //暂时不使用
	uint8 key5;  //按下纵向显示串口接受的数据,再次按下横向显示串口接受的数据,第三次按下退出
	uint8 key6;  //按下查询串口,接受数据。再次按下退出
} KeyTabStruct={0,0,0,0,0,0};

extern uint8 FristHanzi[];
extern uint8 SecondHanzi[];
extern uint8 ThirdHanzi[];
extern uint8 FourthHanzi[];
extern uint8 Fristzimu[];
extern uint8 Secondzimu[];
extern uint8 Thirdzimu[];
extern uint8 Fourthzimu[];
extern uint8 snd[];

extern uint8 FristHanzi_H[];
extern uint8 SecondHanzi_H[];
extern uint8 ThirdHanzi_H[];
extern uint8 FourthHanzi_H[];


const uint32 KEY1 = 1 << 16;		// P0.16连接KEY1
const uint32 KEY2 = 1 << 17;		// P0.17连接KEY2
const uint32 KEY3 = 1 << 18;		// P0.18连接KEY3
const uint32 KEY4 = 1 << 19;		// P0.19连接KEY4
const uint32 KEY5 = 1 << 20;		// P0.20连接KEY5
const uint32 KEY6 = 1 << 21;		// P0.21连接KEY6
const uint32 KEY7 = 0x3F << 16;     // 判断是否有键按下时使用

/*
*********************************************************************************************************
** 函数名称 :void Delay5MS( void )
** 函数功能 :延时5毫秒函数,用于检测按键,延时去抖
** 跳线说明 :
*********************************************************************************************************
*/
void Delay5MS( void )
{
	uint16 i=5552;
	while(i--);
}
/*
*********************************************************************************************************
** 函数名称 :key()
** 函数功能 :检测按键,有键按下,返回1,否则返回0
** 跳线说明 :把JP8的KEY跳线短接
*********************************************************************************************************
*/
uint8 key_jiance(void)
{
	//uint32 key;
	//key=;
	if((IO0PIN & KEY7) != KEY7)
	return 1;                   //有按键时返回1
	else return 0;
}

/*
*********************************************************************************************************
** 函数名称 :uint8 key_scan (void)
** 函数功能 :检测按键,返回按键值
** 跳线说明 :把JP8的KEY跳线短接
*********************************************************************************************************
*/
uint8 key_scan (void)
{
	uint8 key,key1;
		if ((IO0PIN & KEY1) == 0)	key=1;
		if ((IO0PIN & KEY2) == 0)	key=2;
		if ((IO0PIN & KEY3) == 0)	key=3;
		if ((IO0PIN & KEY4) == 0)	key=4;
		if ((IO0PIN & KEY5) == 0)	key=5;
		if ((IO0PIN & KEY6) == 0)	key=6;
	while(1)
	{
		key1=key_jiance();
		if( !key1 )
	    	return( key);
	}
}


/********************************************************************************************************
** 函数名称 :NUM1_PROC()
** 函数功能 :1# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM1_PROC(void)
{
	KeyTabStruct.key2=0;
	KeyTabStruct.key3=0;
	KeyTabStruct.key4=0;
	KeyTabStruct.key5=0;
	KeyTabStruct.key6=0;
	KeyTabStruct.key1++;
	//if(KeyTabStruct.key1!=0)
	//CCR = 0x01;             //启动RTC,在时钟修改模式下误按1号键时,退出时钟修改,不承认新设定的值

	if(KeyTabStruct.key1>4)
	KeyTabStruct.key1=0;
}


/********************************************************************************************************
** 函数名称 :NUM2_PROC()
** 函数功能 :2# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM2_PROC(void)
{
	KeyTabStruct.key2++;
			if(KeyTabStruct.key2>4)KeyTabStruct.key2=0;
}

/********************************************************************************************************
** 函数名称 :NUM3_PROC()
** 函数功能 :3# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM3_PROC(void)
{
	//KeyTabStruct.key3=1;
}


/********************************************************************************************************
** 函数名称 :NUM4_PROC()
** 函数功能 :4# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM4_PROC(void)
{
	//KeyTabStruct.key4=1;
}

/********************************************************************************************************
** 函数名称 :NUM5_PROC()
** 函数功能 :5# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM5_PROC(void)
{
	KeyTabStruct.key5 +=1;
	if(KeyTabStruct.key5>2)KeyTabStruct.key5=0;
}

/********************************************************************************************************
** 函数名称 :NUM6_PROC()
** 函数功能 :6# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM6_PROC(void)
{
	KeyTabStruct.key6 ^=1;
}


/********************************************************************************************************
** 函数名称 :KEY_PROC()
** 函数功能 :键盘处理函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
uint8 KEY_PROC(void)
{	uint8 key;
	key=key_jiance();
	if(!key)       // 延时去抖程序
		return 0;
	Delay5MS();
	if(key)
		key=key_scan();
	if (key==0) return 0;
	switch(key)
	{
	case 1:	NUM1_PROC();
					break;
	case 2:	NUM2_PROC();
					break;
	case 3:	NUM3_PROC();
					break;
	case 4:	NUM4_PROC();
					break;
	case 5:	NUM5_PROC();
					break;
	case 6:	NUM6_PROC();
					break;
	default:
		break;
	}
	return 1;
}
/********************************************************************************************************
** 函数名称 :TimeChangeQueren(week,hour,min)
** 函数功能 :时间修改确认函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void TimeChangeQueren(uint8 week,uint8 hour,uint8 min)
{
	PREINT = Fpclk / 32768 - 1;	// 设置基准时钟分频器
	PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
	
	CCR   = 0x00;	// 禁止时间计数器
	//YEAR  = 2006;
	//MONTH = 11;
	//DOM   = 1;
	DOW   = week;
	HOUR  = hour;
	MIN   = min;
	//SEC   = 59;
	
	CIIR = 0x01;	// 设置秒值的增量产生1次中断
	CCR  = 0x01;	// 启动RTC
}
/********************************************************************************************************
** 函数名称 :void Timechange( void )
** 函数功能 :时间修改函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void Timechange( void )
{
	uint8 week,hour,min;

	CCR=0;          //时间计数器都被禁止,这时可对其初始化

	week=Time[8];
	hour=Time[9]*10+Time[10];
	min=Time[11]*10+Time[12];
	switch(KeyTabStruct.key2)
	{
		case 1:                 //修改星期
			if(KeyTabStruct.key3)
			{
				week++;
				if(week>7)week=1;
				KeyTabStruct.key3=0;
			}
			if(KeyTabStruct.key4)
			{
				week--;
				if(week==0)week=7;
				KeyTabStruct.key4=0;
			}
			break;
		case 2:					//修改小时
			if(KeyTabStruct.key3)

⌨️ 快捷键说明

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