|
本帖最后由 lliuxin88 于 2016-10-24 14:29 編輯
#include "stm32f10x.h"
#include "keyscan.h"
#include"stm32f10x_rcc.h"
#include"stm32f10x_gpio.h"
#include"systick.h"
/**********************************************************
****************** 配置GPIO輸出口**************************
**********************************************************/
void keyscan_OUTInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //通用接口配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD ,ENABLE); //初始化PD引腳時鐘
GPIO_InitStructure.GPIO_Pin = JPA|JPB|JPC; // 按鍵檢測
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/**********************************************************
****************** 配置GPIO輸入口**************************
**********************************************************/
void keyscan_INInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //通用接口配置
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD ,ENABLE); //初始化PD引腳時鐘
GPIO_InitStructure.GPIO_Pin = JPD|JPE|JPF|JPG; // 按鍵檢測
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/**********************************************************
****************** 配置LED GPIO輸出口*********************
**********************************************************/
void LED_GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //通用接口配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //初始化PB引腳時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; // 按鍵檢測
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/**********************************************************
********************* 鍵盤檢測*****************************
**********************************************************/
void key_scan(void)
{
uint8_t KEY=0;
keyscan_INInit();
keyscan_OUTInit();
LED_GPIOInit();
SysTick_Init();
GPIO_SetBits(GPIOB, GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
/************************檢測第一行********************************************/
GPIO_Write(GPIOD,GPIOD->ODR|0xfeff); //置低JPA
if((GPIOD->IDR&0x7800)!=0x7800)
{
Delay_ms(20); //sysTick 延時子程序(去抖程序)20ms
if((GPIOD->IDR&0x7800)!=0x7800)
{
//KEY=0;
switch (GPIOD->IDR&0x7800){
case 0x7000:
KEY=3;
break;
case 0x6800:
KEY=6;
break;
case 0x5800:
KEY=9;
break;
case 0x3800:
KEY='#';
break;
default:
break;
}
while((GPIOD->IDR&0x7800)!=0x7800){ //等待鍵盤釋放
GPIOD->IDR&=0x7800;
}
if(KEY==3)
GPIO_ResetBits(GPIOB, GPIO_Pin_7); //燈亮
}
}
keyscan_INInit();
keyscan_OUTInit();
LED_GPIOInit();
/************************檢測第二行******************************************/
//Delay_ms(2);
GPIO_Write(GPIOD,GPIOD->ODR|0xfdff); //置低JPB
if((GPIOD->IDR&0x7800)!=0x7800)
{
Delay_ms(20); //sysTick 延時子程序(去抖程序)20ms
if((GPIOD->IDR&0x7800)!=0x7800)
{
//KEY=0;
switch (GPIOD->IDR&0x7800){
case 0x7000:
KEY=2;
break;
case 0x6800:
KEY=5;
break;
case 0x5800:
KEY=8;
break;
case 0x3800:
KEY=0;
break;
default:
break;
}
while((GPIOD->IDR&0x7800)!=0x780000){ //等待鍵盤釋放
GPIOD->IDR&=0x7800;
}
if(KEY==2)
GPIO_ResetBits(GPIOB, GPIO_Pin_6); //燈亮
}
}
keyscan_INInit();
keyscan_OUTInit();
LED_GPIOInit();
/************************檢測第三行******************************************/
//Delay_ms(2);
GPIO_Write(GPIOD,GPIOD->ODR|0xfbff); ////置低JPC
if((GPIOD->IDR&0x7800)!=0x7800)
{
Delay_ms(20); //sysTick 延時子程序(去抖程序) 20ms
if((GPIOD->IDR&0x7800)!=0x7800)
{
//KEY=0;
switch (GPIOD->IDR&0x7800)
{
case 0x7000:
KEY=1;
break;
case 0x6800:
KEY=4;
break;
case 0x5800:
KEY=7;
break;
case 0x3800:
KEY='*';
break;
default:
break;
}
while(GPIOD->IDR&0x7800!=0x7800){ //等待鍵盤釋放
GPIOD->IDR&=0x7800;
}
if(KEY==1)
GPIO_ResetBits(GPIOB, GPIO_Pin_5); //燈亮
}
}
}
|
-
-
JP.zip
2016-10-24 14:29 上傳
點擊文件名下載附件
38.11 KB, 下載次數: 10
|