/******************** (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); 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&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 = 13;break; case 0x0034: ucBackValue = 6;break; case 0x002c: ucBackValue = 5;break; case 0x001c: ucBackValue = 4;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 = 12; break; case 0x0034: ucBackValue = 3; break; case 0x002c: ucBackValue = 2; break; case 0x001c: ucBackValue = 1; 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 = 14; break; case 0x0034: ucBackValue = 9; break; case 0x002c: ucBackValue = 8; break; case 0x001c: ucBackValue = 7; 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 = 15; break; case 0x0034: ucBackValue = 11; break; case 0x002c: ucBackValue = 0; break; case 0x001c: ucBackValue = 10; break; default:break; } while(temp!=0x003c) //�ȴ������ſ� { temp=GPIO_ReadInputData(GPIOA); temp=temp&0x003c; } } } return ucBackValue; } //°´¼ü´¦Àíº¯Êý //·µ»Ø°´¼üÖµ //mode:0,²»Ö§³ÖÁ¬Ðø°´;1,Ö§³ÖÁ¬Ðø°´; //0£¬Ã»ÓÐÈκΰ´¼ü°´Ï //1£¬KEY0°´Ï //2£¬KEY1°´Ï //3£¬KEY3°´Ï WK_UP //×¢Òâ´Ëº¯ÊýÓÐÏìÓ¦ÓÅÏȼ¶,KEY0>KEY1>KEY_UP!! u8 KEY_Scan(u8 mode) { static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾ if(mode)key_up=1; //Ö§³ÖÁ¬°´ if((IN==0||OUT==0)) { delay_ms(10);//È¥¶¶¶¯ if(IN==0)return IN_PRES; else if(OUT==0)return OUT_PRES; }else if(OUT==1&&IN==1)key_up=1; return 0;// ÎÞ°´¼ü°´Ï }