STM32 - 实用矩阵键盘

更新时间:2024-04-11 04:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实用矩阵键盘程序 // PA0~PA3行控制线 // PA4~PA7列控制线

#include #include \#include \

#define KEY_X (0X0F << 0) #define KEY_Y (0XF0 << 0)

unsigned char const Key_Tab[4][4]=//键盘编码表 {

{'D','C','B','A'}, {'#','9','6','3'}, {'0','8','5','2'}, {'*','7','4','1'} };

//没有得到键值返回0,否则返回相应的键值 unsigned char Get_KeyValue(void) {//使用线反转法

u8 i=5,j=5;

u16 temp1,temp2;

RCC->APB2ENR|=1<<2; //使能PORTA时钟 RCC->APB2ENR|=1<<0; //开启辅助时钟

AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24] AFIO->MAPR|=0X04000000; //关闭JTAG

GPIOA->CRL&=0XFFFF0000;

GPIOA->CRL|=0X00003333; //PA0~PA3 推挽输出

GPIOA->CRL&=0X0000FFFF; //PA4~PA7 输入 GPIOA->CRL|=0X44440000; //PA4~PA7默认上拉

GPIOA->ODR&=~KEY_X ; //PA0~PA3置0

if(((GPIOA->IDR >> 4) & 0X0F)<0x0f) // 读取PA12~PA15的值 {

delay_ms(70); //按键消抖 if((GPIOA->IDR >>4 & 0x0f)<0x0f) temp1=(GPIOA->IDR >>4 & 0x0f); switch(temp1)

{

case 0x0e:j=0;break; case 0x0d:j=1;break; case 0x0b:j=2;break; case 0x07:j=3;break; default:break; } }

GPIOA->CRL&=0X0000FFFF;

GPIOA->CRL|=0X33330000; //PA4~PA7 推挽输出

GPIOA->CRL&=0XFFFF0000; //PA0~PA3 输入 GPIOA->CRL|=0X00004444; //PA0~PA4 默认下拉

GPIOA->ODR&=~KEY_Y; //PA4~PA7置0

if((GPIOA->IDR & 0x0f)<0x0f) {

temp2=(GPIOA->IDR & 0x0f); switch(temp2) { case 0x0e:i=0;break; case 0x0d:i=1;break; case 0x0b:i=2;break; case 0x07:i=3;break; default:break; } }

if((i==5)||(j==5)) return 0; else

return (Key_Tab[i][j]); }

本文来源:https://www.bwwdw.com/article/mmyp.html

Top