STM8“线反转式”扫描矩阵键盘

本文介绍了使用STM8通过线反转法实现扫描矩阵键盘的方法。在接线图中,行引脚设为推挽输出低电平,列引脚设为上拉输入。当有按键按下时,特定列引脚电压降低,通过检测输出寄存器变化确定按下键所在列。随后反转输入输出,再次检测确定行信息。最终结合行和列信息得出键值。
摘要由CSDN通过智能技术生成

线反转法接线图如下。其原理简单来说就是:

四个行引脚推挽输出低电平(置0), 四个列引脚上拉输入,

如果有按键按下,会连通行与列,导致某个列引脚电压被拉低,故输出寄存器不再是0X0F,而是0X0E,0X0D,0X0B,0X07,

这样就判断出了那一列被按下。

此时反转输入输出,用同样的方法监测那一行被按下。

最后返回键值。

v2-28e6140af0b5a71475bef15f4fffe6d8_b.jpg

v2-376aa678f5e01f0542036744b6972907_b.jpg

v2-ca40fc7fc03c286bf5012a594cff78af_b.jpg


        //------------------------------header------------------------------------------
#include "iostm8s208mb.h"
//------------------------------common datatype---------------------------------
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
//------------------------------macros------------------------------------------
#define LCDRS       PF_ODR_ODR0
#define LCDRW       PF_ODR_ODR3
#define LCDEN       PF_ODR_ODR4
#define LCDDATA     PB_ODR
#define KeyPortIn   PC_IDR
#define KeyPortOut  PC_ODR
//------------------------------function declare--------------------------------
void GPIO_init(void);
void delay(u16 count);
void LCD_init(void);
void LCD_write(u8 data,u8 cmd_flag);
void LCD_display(void);
void LCD_lr_DIS(u8 line,u8 row,u8 z);
u8 KEY_scan(void);
//------------------------------------------------------------------------------
u8 line1[]="==4*4 Keyboard==";
u8 line2[]=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值