You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

177 lines
3.8 KiB

#include "key.h"
#include "delay.h"
void Key4x4_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;//KEY0-KEY1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖóÉÉÏÀ­ÊäÈë
GPIO_Init(GPIOB, &GPIO_InitStructure);//³õʼ»¯GPIOE4,3
}
u8 Key_Scan(void)
{
u16 temp;
u8 ucBackValue=16;
PBout(1) = 0;
PBout(0) = 1;
PBout(10) = 1;
PBout(11) = 1;
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0)
{
delay_ms(20);
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0)
{
temp=GPIO_ReadInputData(GPIOA)&0x00F0;
switch(temp)
{
case 0x00E0:
ucBackValue = 15;break;
case 0x00D0:
ucBackValue = 11;break;
case 0x00B0:
ucBackValue = 0;break;
case 0x0070:
ucBackValue = 10;break;
default:break;
}
while(temp!=0x00F0)
{
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
}
}
}
PBout(1) = 1;
PBout(0) = 0;
PBout(10) = 1;
PBout(11) = 1;
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0)
{
delay_ms(20);
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0)
{
temp=GPIO_ReadInputData(GPIOA)&0x00F0;
switch(temp)
{
case 0x00E0:
ucBackValue = 12; break;
case 0x00D0:
ucBackValue = 3; break;
case 0x00B0:
ucBackValue = 2; break;
case 0x0070:
ucBackValue = 1; break;
default:break;
}
while(temp!=0x00F0)
{
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
}
}
}
PBout(1) = 1;
PBout(0) = 1;
PBout(10) = 0;
PBout(11) = 1;
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0)
{
delay_ms(20); // ��ʱ�����ٶ�
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0) //����������ٴθ�4λȷ������ȫ1
{
temp=GPIO_ReadInputData(GPIOA)&0x00F0; //�����˴ΰ�����ֵ
switch(temp)
{
case 0x00E0:
ucBackValue = 13; break;
case 0x00D0:
ucBackValue = 5; break;
case 0x00B0:
ucBackValue = 4; break;
case 0x0070:
ucBackValue = 3; break;
default:break;
}
while(temp!=0x00F0) //�ȴ������ſ�
{
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
}
}
}
//====��4����0==========
PBout(1) = 1;
PBout(0) = 1;
PBout(10) = 1;
PBout(11) = 0;
temp=GPIO_ReadInputData(GPIOA); //���������ڵõ���ֵ
temp=temp&0x00F0; //���ε�4λ
if (temp!=0x00F0) //�����4λ��ȫ��1
{
delay_ms(20); // ��ʱ�����ٶ�
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
if (temp!=0x00F0) //����������ٴθ�4λȷ������ȫ1
{
temp=GPIO_ReadInputData(GPIOA)&0x00F0;
switch(temp)
{
case 0x00E0:
ucBackValue = 14; break;
case 0x00D0:
ucBackValue = 9; break;
case 0x00B0:
ucBackValue = 8; break;
case 0x0070:
ucBackValue = 7; break;
default:break;
}
while(temp!=0x00F0) //�ȴ������ſ�
{
temp=GPIO_ReadInputData(GPIOA);
temp=temp&0x00F0;
}
}
}
return ucBackValue;
}