初级会员

- 积分
- 166
- 金钱
- 166
- 注册时间
- 2018-11-16
- 在线时间
- 58 小时
|
10金钱
本帖最后由 ljshow 于 2019-8-5 00:41 编辑
#include "key.h"
#include "delay.h"
void KEY_Init(void) //初始化设置
{
RCC->AHB1ENR|=1<<8; //使能PORTI时钟;
GPIO_Set(GPIOI,PIN0|PIN1,GPIO_MODE_IN,0,0,GPIO_PUPD_PD); //PI0,PI1设置下拉
GPIO_Set(GPIOI,PIN2|PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PD); //PI2,PI3设置下拉
GPIO_Set(GPIOI,PIN4|PIN5,GPIO_MODE_IN,0,0,GPIO_PUPD_PU); //PI4,PI5设置上拉
GPIO_Set(GPIOI,PIN6|PIN7,GPIO_MODE_IN,0,0,GPIO_PUPD_PU); //PI6,PI7设置上拉 PI0~PI3置0,PI4~PI7置1 既11110000,0xF0
}
u8 Key_scan(void)
{
u8 Key_val =0; // 按键扫描返回值初始化为0
u32 a;
u8 temp;
/*=========================按键扫描=========================*/
GPIOI_SET1();//设置输出引脚电平I7~I0为11110000
delay_ms(10);
GPIOI->ODR=0X000F;
if(((GPIOI->IDR)&0xf0)==0X0080) //读取按键是否按下
{
delay_ms(10); // 10ms延时消抖
if(((GPIOI->IDR)&0xf0)==0X0080)
{
GPIOI_SET2();//设置输出引脚电平I7~I0为00001111
delay_ms(10);
GPIOI->ODR=0X00F0;
temp = ((GPIOI->IDR)&0x000f) ;
switch(temp)
{
case 0x08: Key_val=1;break;
case 0x04: Key_val=2;break;
case 0x02: Key_val=3;break;
case 0x01: Key_val=4;break;
default : Key_val=0;break;
}
}
}
if(((GPIOI->IDR)&0xf0)==0X0040) //读取按键是否按下
{
delay_ms(10); // 10ms延时消抖
if(((GPIOI->IDR)&0xf0)==0X0040)
{
GPIOI_SET2();//设置输出引脚电平I7~I0为00001111
GPIOI->ODR=0X00F0;
temp = ((GPIOI->IDR)&0x000f) ;
switch(temp)
{
case 0x08: Key_val=5;break;
case 0x04: Key_val=6;break;
case 0x02: Key_val=7;break;
case 0x01: Key_val=8;break;
default : Key_val=0;break;
}
}
}
if(((GPIOI->IDR)&0xf0)==0X0020) //读取按键是否按下
{
delay_ms(10); // 10ms延时消抖
if(((GPIOI->IDR)&0xf0)==0X0020)
{
GPIOI_SET2(); //设置输出引脚电平I7~I0为00001111
GPIOI->ODR=0X00F0;
temp = ((GPIOI->IDR)&0x000f) ;
switch(temp)
{
case 0x08: Key_val=9;break;
case 0x04: Key_val=10;break;
case 0x02: Key_val=11;break;
case 0x01: Key_val=12;break;
default : Key_val=0;break;
}
}
}
if(((GPIOI->IDR)&0xf0)==0X0010) //读取按键是否按下
{
delay_ms(10); // 10ms延时消抖
if(((GPIOI->IDR)&0xf0)==0X0010)
{
GPIOI_SET2(); //设置输出引脚电平I7~I0为00001111
GPIOI->ODR=0X00F0;
temp = ((GPIOI->IDR)&0x000f) ;
switch(temp)
{
case 0x08: Key_val=13;break;
case 0x04: Key_val=14;break;
case 0x02: Key_val=15;break;
case 0x01: Key_val=16;break;
default : Key_val=0;break;
}
}
}
return Key_val;
}
void GPIOI_SET1(void)
{
GPIO_Set(GPIOI,PIN0|PIN1,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU); //PI0,PI1设置上拉
GPIO_Set(GPIOI,PIN2|PIN3,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU); //PI2,PI3设置上拉
GPIO_Set(GPIOI,PIN4|PIN5,GPIO_MODE_IN,0,0,GPIO_PUPD_PD); //PI4,PI5设置下拉
GPIO_Set(GPIOI,PIN6|PIN7,GPIO_MODE_IN,0,0,GPIO_PUPD_PD); //PI6,PI7设置下拉
}
void GPIOI_SET2(void)
{
GPIO_Set(GPIOI,PIN0|PIN1,GPIO_MODE_IN,0,0,GPIO_PUPD_PD); //PI0,PI1设置下拉
GPIO_Set(GPIOI,PIN2|PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PD); //PI2,PI3设置下拉
GPIO_Set(GPIOI,PIN4|PIN5,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU); //PI4,PI5设置上拉
GPIO_Set(GPIOI,PIN6|PIN7,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU); //PI6,PI7设置上拉
}
|
|