STM32矩阵键盘程序44Word文档下载推荐.docx
《STM32矩阵键盘程序44Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《STM32矩阵键盘程序44Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
u8KeyValue=0;
if((GPIO_ReadInputData(GPIOA)&
0xff)!
=0x0f)
Delay_ms(10);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
switch(GPIO_ReadInputData(GPIOA)&
0xff)
case0x11:
KeyValue=1;
break;
case0x21:
KeyValue=5;
case0x41:
KeyValue=9;
case0x81:
KeyValue=13;
break;
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
case0x12:
KeyValue=2;
case0x22:
KeyValue=6;
case0x42:
KeyValue=10;
case0x82:
KeyValue=14;
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
case0x14:
KeyValue=3;
case0x24:
KeyValue=7;
case0x44:
KeyValue=11;
case0x84:
KeyValue=15;
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
case0x18:
KeyValue=4;
case0x28:
KeyValue=8;
case0x48:
KeyValue=12;
case0x88:
KeyValue=16;
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|
GPIO_Pin_7);
while((GPIO_ReadInputData(GPIOA)&
=0x0f);
returnKeyValue;
return0;
/*--------------------------------THEEND--------------------------------------------*/
/*--------------------------------------------------------------------------------------*矩阵键盘驱动
*文件:
keyboard.h
*编写人:
LiuHui
*描述:
扫描4x4矩阵键盘输入,并返回键值
*适用范围:
驱动为ST3.5库编写,适用于STM32F10x系列单片机
*所用引脚:
PA0-PA7
*编写时间:
2013年11月22日
*版本:
1.0
#ifndef__KEYBOARD_H
#define__KEYBOARD_H
voidKeyBoard_Init(void);
u8Read_KeyValue(void);
#endif
/*----------------------------------THEEND------------------------------------------*
#include"
stm32f10x.h"
voidKeyBoard_Init(void)
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&
GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_Init(GPIOB,&
GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);
//³
õ
Ê
¼
»
¯
PA,PB
voidDelay_ms(inttime){
inti=0;
while(time--)
{
i=12000;
while(i--);
}
u8KeyValue=1;
if((GPIO_ReadInputData(GPIOB)&
Delay_ms(10);
GPIO_SetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
switch(GPIO_ReadInputData(GPIOB)&
KeyValue=0;
GPIO_SetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6);
GPIO_SetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
//while((GPIO_ReadInputData(GPIOB)&
uint16_ttable[]={0xEB,0x28,0xB3,0xBA,0x78,0xDA,0xDB,0xA8,0xFB,0xFA};
intmain(){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
KeyBoard_Init();
intkeyvalue=Read_KeyValue();
GPIO_Write(GPIOA,table[keyvalue]);
/*while
(1){
inti;
for(i=0;
i<
10;
i++){
GPIO_Write(GPIOA,table[i]);
Delay_ms(500);
}*/
/*u8keyvalue;
for(inti=0;
;
KeyBoard_Init();
keyvalue=Read_KeyValue();
GPIO_Write(GPIOA,table[keyvalue]);
}*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
=0x73)
//在这个程序下为什么无论是GPIO_ReadInputData(GPIOB)&
=0x73还是GPIO_ReadInputData(GPIOB)&
0xff)==0x73都能往下运行,而在屏蔽Delay_ms(10)后则只能运行一种,是因为这个Delay_ms(10)对if里的判断有影响吗?
GPIO_Write(GPIOA,0x33);
Read_KeyValue();