初级会员

- 积分
- 70
- 金钱
- 70
- 注册时间
- 2017-4-16
- 在线时间
- 19 小时
|

楼主 |
发表于 2018-6-7 22:25:04
|
显示全部楼层
[mw_shl_code=c,true]#include "ScanKey.h"
#include "delay.h"
#include "led.h"
//°′¼ü3õê¼»ˉoˉêy
u16 keyz=0;
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//ê1ÄüPORTAê±Öó
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
GPIO_InitStructure.GPIO_Pin = KEYOUT; //¾ØÕó¼üÅìμÄDD
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éèÖÃ3éíÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = KEYIN; //¾ØÕó¼üÅìμÄáD
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //éèÖÃ3ééÏà-êäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,KEYIN);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //¾ØÕó¼üÅìμÄáD
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //éèÖÃ3ééÏà-êäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
REAL_OUT_L;
}
u8 KEY_Scan(void)
{
u16 LIE,HANG,k,i=0;
GPIO_Write(GPIOA, 0xf000); //B0-B3êä3öμí B4-B7éèÖÃÎa¸ßμçÆ½ 1111 0000 0000 0000
if((GPIO_ReadInputData(GPIOA)&0xF000)!=0xF000) //óD°′¼ü°′Ï ò»¶¨»áê1Ä3¸öμçÆ½±äμí 1110 0000 0000 0000
{
delay_ms(20); //Ïû¶¶
if((GPIO_ReadInputData(GPIOA)&0xF000)!=0xF000) //Ôù′ÎÅD¶ÏêÇ·ñ°′Ï 1110 0000¿Ï¶¨2»μèóú1111 0000
{
LIE=GPIO_ReadInputData(GPIOA)&0xff00; //¶áè¡°′¼ü°′ÏÂoóμÃμ½μÄ′úÂë áD£o1110 0000 0000 0000
HANG=LIE; //½«′úÂë¸′ÖÆ¸øDD DD£o1110 0000
LIE=~LIE; //½«¼üÂëè¡·′ áD£o0001 1111
LIE=LIE&0Xf000; //μÃμ½ áD£o0001 0000
for(i=0;i<4&&((HANG&0xF000)!=0xF000);i++) // DD£o1110 0000êÇ·ñμèóú1111 0000
// 2»μèóúÔò½øDDѰÕòÏàó|μÄ£¬μèóúÔòìø1yforÑ-»·
{ //¶áμ½Ö®Ç°¼ì2aμ½ÎaμíμÄáD±ä¸ßÔòíË3ö
GPIO_Write(GPIOA, (HANG&0xF000)|(0x0100<<i)); //½øDDDDé¨Ã裬Öe′ν«DD¿úÏßà-¸ß£¬áD±£3ÖÎa°′ÏÂê±μÄ×′ì¬
delay_ms(1);
HANG=GPIO_ReadInputData(GPIOA)&0xff00; //¶áè¡IO¿ú£¬óÃòÔÅD¶ÏêÇ·ñé¨Ãèμ½DD×ø±ê
}
HANG&=0x0F00; //½«DDÖμè¡3ö
k=LIE|HANG; //DDáDÏà¼óÔòμÃμ½¼üÂë
GPIO_Write(GPIOA, 0xF000); //D0-D3à-μí£¬D4-D7à-¸ß£¬′Ë′|óÃà′½«DDáD×′ì¬3õê¼»ˉÎaÎ′°′ÏÂê±μÄ×′ì¬
while((GPIO_ReadInputData(GPIOA)&0xF000)!=0xF000) //ÅDêí·Å,μ±Ã»êí·Åê±oòò»Ö±Ñ-»·
{
delay_ms(20); //oóÑØÏû¶¶£¬ê±¼äDè3¤ò»μ㣬D¡°′¼üÏû¶¶ê±¼ä¿éòÔ¶ìò»μ㣬′ó°′¼ü¶¶¶ˉÑÏÖØÏû¶¶Dè3¤ò»μã
}
REAL_OUT_H; //ÕæÕyêí·Åo󣬰ÑÕæêDZê־λà-μí¡£
k=(k>>8)&0x00ff;
return k; //·μ»Ø¼üÂë
}
}
else REAL_OUT_L; return 0x0000; //ÎT¼ü°′ÏÂ,·μ»Ø0
//return 0;
}
void RealPRES(void)
{
TIM_Cmd(TIM5,DISABLE);//óD°′¼üμÄê±oò£¬1رն¨ê±Æ÷5
GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_SET);
Backlight_ON; //′ò¿a±31aμÆ
TIM_Cmd(TIM5,ENABLE); //Æô¶ˉÎT2ù×÷ê±ÏT¶¨ê±Æ÷
}
u8 KEY_Value(void)
{
u16 key_1;
keyz=KEY_Scan();
if(keyz!=0x0000)
{
//keyz=0x88;
switch(keyz)//keyz
{
case 0x11: key_1=KEY13_PRES;RealPRES();break;
case 0x21: key_1=KEY14_PRES;RealPRES();break;
case 0x41: key_1=KEY15_PRES;RealPRES();break;
case 0x81: key_1=KEY16_PRES;RealPRES();break;
case 0x12: key_1=KEY9_PRES ;RealPRES();break;
case 0x22: key_1=KEY10_PRES;RealPRES();break;
case 0x42: key_1=KEY11_PRES;RealPRES();break;
case 0x82: key_1=KEY12_PRES;RealPRES();break;
case 0x14: key_1=KEY5_PRES ;RealPRES();break;
case 0x24: key_1=KEY6_PRES ;RealPRES();break;
case 0x44: key_1=KEY7_PRES ;RealPRES();break;
case 0x84: key_1=KEY8_PRES ;RealPRES();break;
case 0x18: key_1=KEY1_PRES ;RealPRES();break;
case 0x28: key_1=KEY2_PRES ;RealPRES();break;
case 0x48: key_1=KEY3_PRES ;RealPRES();break;
case 0x88: key_1=KEY4_PRES ;RealPRES();break;
default:break;
}
}
return key_1;
}
[/mw_shl_code]
[mw_shl_code=c,true]#ifndef __SCANKEY_H
#define __SCANKEY_H
#include "sys.h"
#define KEYOUT GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11 //DDÏß
#define KEYIN GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 //áDÏß
#define KEY1_PRES 0X01; //¼üÖμ
#define KEY2_PRES 0X02;
#define KEY3_PRES 0X03;
#define KEY4_PRES 0X04;
#define KEY5_PRES 0X05;
#define KEY6_PRES 0X06;
#define KEY7_PRES 0X07;
#define KEY8_PRES 0X08;
#define KEY9_PRES 0X09;
#define KEY10_PRES 0X0A;
#define KEY11_PRES 0X0B;
#define KEY12_PRES 0X0C;
#define KEY13_PRES 0X0D;
#define KEY14_PRES 0X0E;
#define KEY15_PRES 0X0F;
#define KEY16_PRES 0X10;
#define REAL_OUT_H GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define REAL_OUT_L GPIO_ResetBits(GPIOB,GPIO_Pin_5)
void KEY_Init(void); //IO3õê¼»ˉ
u8 KEY_Scan(void); //°′¼üé¨Ãèoˉêy
u8 KEY_Value(void);
#endif[/mw_shl_code]
|
|