/******************** (C) COPYRIGHT 2013 CEPARK�๦�ܿ���ѧϰ��******************** * �ļ��� ��key4x4.c * ���� ������Ӧ�ú����� * ʵ��ƽ̨��CEPARK�๦�ܿ���ѧϰ�� * Ӳ�����ӣ�------------------------- * | PB8 - H4 | * | PB9 - H3 | * | PB10 - H2 | * | PB11 - H1 | * | PB12 - L4 | * | PB13 - L3 | * | PB14 - L2 | * | PB15 - L1 | * ------------------------- * ��汾 ��ST3.5.0 **********************************************************************************/ #include "key.h" #include "delay.h" /* * ��������Key_GPIO_Config * ���� �����ð����õ���I/O�� * ���� ���� * ��� ���� */ void Key4x4_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /*���������˿ڵ�ʱ��*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 ; 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); } 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&0x003c; //���ε�4λ if (temp!=0x003c) //�����4λ��ȫ��1 { delay_ms(20); // ��ʱ�����ٶ� temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; if (temp!=0x003c) //����������ٴθ�4λȷ������ȫ1 { temp=GPIO_ReadInputData(GPIOA)&0x003c; //�����˴ΰ�����ֵ switch(temp) { case 0x0038: ucBackValue = 12;break; case 0x0034: ucBackValue = 13;break; case 0x002c: ucBackValue = 14;break; case 0x001c: ucBackValue = 15;break; default:break; } while(temp!=0x003c) //�ȴ������ſ�����ʼ��Ȼ��ִ�� { temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; } } } //====�ڶ�����0========== PBout(1) = 1; PBout(0) = 0; PBout(10) = 1; PBout(11) = 1; temp=GPIO_ReadInputData(GPIOA); //���������ڵõ���ֵ temp=temp&0x003c; //���ε�4λ if (temp!=0x003c) //�����4λ��ȫ��1 { delay_ms(20); // ��ʱ�����ٶ� temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; if (temp!=0x003c) //����������ٴθ�4λȷ������ȫ1 { temp=GPIO_ReadInputData(GPIOA)&0x003c; //�����˴ΰ�����ֵ switch(temp) { case 0x0038: ucBackValue = 3; break; case 0x0034: ucBackValue = 6; break; case 0x002c: ucBackValue = 9; break; case 0x001c: ucBackValue = 11; break; default:break; } while(temp!=0x003c) //�ȴ������ſ� { temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; } } } //====��3����0========== PBout(1) = 1; PBout(0) = 1; PBout(10) = 0; PBout(11) = 1; temp=GPIO_ReadInputData(GPIOA); //���������ڵõ���ֵ temp=temp&0x003c; //���ε�4λ if (temp!=0x003c) //�����4λ��ȫ��1 { delay_ms(20); // ��ʱ�����ٶ� temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; if (temp!=0x003c) //����������ٴθ�4λȷ������ȫ1 { temp=GPIO_ReadInputData(GPIOA)&0x003c; //�����˴ΰ�����ֵ switch(temp) { case 0x0038: ucBackValue = 1; break; case 0x0034: ucBackValue = 4; break; case 0x002c: ucBackValue = 7; break; case 0x001c: ucBackValue = 10; break; default:break; } while(temp!=0x003c) //�ȴ������ſ� { temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; } } } //====��4����0========== PBout(1) = 1; PBout(0) = 1; PBout(10) = 1; PBout(11) = 0; temp=GPIO_ReadInputData(GPIOA); //���������ڵõ���ֵ temp=temp&0x003c; //���ε�4λ if (temp!=0x003c) //�����4λ��ȫ��1 { delay_ms(20); // ��ʱ�����ٶ� temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; if (temp!=0x003c) //����������ٴθ�4λȷ������ȫ1 { temp=GPIO_ReadInputData(GPIOA)&0x003c; switch(temp) { case 0x0038: ucBackValue = 2; break; case 0x0034: ucBackValue = 5; break; case 0x002c: ucBackValue = 8; break; case 0x001c: ucBackValue = 0; break; default:break; } while(temp!=0x003c) //�ȴ������ſ� { temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; } } } return ucBackValue; }