矩阵键盘驱动代码

此代码仅提供了代码思路,具体移植应用可以私信博主。

key.c:

#include "stm32f10x.h"
#include "key.h"
#include "led.h"
#include "sys.h" 
#include "delay.h"

u16 keyz=0;

void KEY_Init(void) 
{ 
 	GPIO_InitTypeDef GPIO_InitStructure;
 	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOC, &GPIO_InitStructure);	
}

u8 keyscan(void)
{ 
	uint8_t LIE,HANG,k,i=0;
	
	GPIO_Write(GPIOC, 0xF0);                           
	if((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)          
	{
	  delay_ms(40);                                     
	   if((GPIO_ReadInputData(GPIOC)&0xF0)!=0xF0)       
	   {
		   LIE=GPIO_ReadInputData(GPIOC);                
		   HANG=LIE;                                     
		   LIE=~LIE;                                     
		   LIE=LIE&0XF0;                                  
		   
			 for(i=0;i<4&&((HANG&0xF0)!=0xF0);i++)         
		   {                                              
		       GPIO_Write(GPIOC, (HANG&0xF0)|(0x01<

key.h:

#ifndef __KEY_H
#define __KEY_H	 
#include "sys.h"

#define  PortD   (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
#define KEY0  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_0)
#define KEY1  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)
#define KEY2  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2)
#define KEY3  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)
#define KEY4  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_4)
#define KEY5  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_5)
#define KEY6  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6)
#define KEY7  GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_7)

#define KEY0_PRES 1	
#define KEY1_PRES	2	
#define KEY2_PRES	3	
#define KEY3_PRES 4	
#define KEY4_PRES	5	
#define KEY5_PRES	6	
#define KEY6_PRES 7	
#define KEY7_PRES	8	

void KEY_Init(void);
u8 keyscan(void);
u8 keyhandle(void);

#endif

你可能感兴趣的:(stm32,stm32,单片机,c语言)