-
单片机扫描键盘按键板 Protel99se设计硬件原理图PCB文件.zip
2021-02-06 16:50:16单片机扫描键盘按键板 Protel99se设计硬件原理图PCB文件,包括完整的原理图PCB文件,板子大小为175x80mm,2层板。可用Protel或 Altium Designer(AD)软件打开或修改,已经制板验证使用,可作为你产品设计的参考。 -
基于89C52单片机的独立按键原理图
2021-01-19 18:28:24先附上矩阵键盘的原理图: 在使用据矩阵键盘时,J5 排针处的跳帽连接 1 脚和 2 脚,使所有按键的有效端口全部连接至 I/O 口。 具体的扫描方式为: 先把P3^0~P3^7高四位和第四位赋不一样的电平值,当确定有键按... -
51单片机按键计数器程序_MCS-51单片机4×4矩阵按键的扫描
2021-01-17 21:45:39以金沙滩工作室的STC89C52单片机开发板为例,记录学习51单片机的笔记,本文章主要讲解了4×4矩阵按键的扫描,教材是金沙滩工作室(www.kingst.org )宋雪松老师编著的...矩阵按键及其原理图1是单片机开发板上的...以金沙滩工作室的STC89C52单片机开发板为例,记录学习51单片机的笔记,本文章主要讲解了4×4矩阵按键的扫描,教材是金沙滩工作室(www.kingst.org )宋雪松老师编著的《手把手教你学51单片机-C语言版》,所用的开发板是教材配套开发板。在这里推荐一下宋老师的这套教材,感觉还是蛮不错的。下面是该文章的目录:
1.矩阵按键及其原理
2.矩阵按键的消抖
1.矩阵按键及其原理
图1是单片机开发板上的矩阵按键的实物图,图2是矩阵按键的电路原理图。以4×4矩阵按键为例,总共包含了16个按键,包括数字0~9、四个方向键(上下左右)、ESC键和回车键,当然在使用过程中可以定义这些按键为其他功能,灵活多变。
图2 4×4矩阵按键的电路图 16个按键占用P2的8个IO口,见上图2,KeyOut1~KeyOut4为输出引脚,KeyIn1~KeyIn4为读取引脚。KeyOut1~KeyOut4均输出高电平时,由于全部KeyIn引脚最上面与+5V接通,故无论某个按键是否按下,KeyIn1~KeyIn4读取到的均为高电平(逻辑1),无法判断是否有按键按下/弹起,当其中的某个KeyOut引脚输出低电平(逻辑0)时,按下该行的某个按键,那么这个按键对应的keyIn引脚将读取到低电平,从而可以在程序中判断某个按键是否被按下。
例如,现在使KeyOut3引脚为0,其余KeyOut引脚为1,那么当按键K12按下时,KeyIn4引脚直接与KeyOut3引脚连通,将其电平拉低,P2.7就可以读取到0,那么就可以判断K12(右键)被按下了。
2.矩阵按键的消抖和扫描
由于按键的机械特性,按键存在“抖动”的情况,比如,当按下某个键的瞬间,这个键可能还会来回抖动几次,当然这种抖动是手指感觉不出来的,但它确实会影响读取到的电平的高低,相反,按键弹起的瞬间,也会存在抖动的情况。如图3,按键抖动通常只持续不到10ms,按下到弹起的整个过程通常持续100ms以上,所以需要进行消抖处理。
图3 按键的抖动 在这里,按键消抖的思路定义一个4X4的二维数组 keybuf[4][4]和keysta[4][4]
unsigned char keybuff[4][4] = { {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF} }; //定义在中断函数内 unsigned char KeySta[4][4] = { {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, }; //定义为全局变量
keybuf[4][4]中每一个元素代表了对应按键在某个瞬间的状态,初始化为0xFF(0b11111111),就意味着开始每个按键均为弹起状态。
设置定时/计数器T0的定时时长为1ms,每次中断,就选中keybuff其中一行,依次将该行的四个元素左移一位,并将对应的KeyInx(x = 1, 2, 3, 4)的值写入数组元素的最低位,如此就需要4ms完成四行按键的扫描,但是,通常抖动的时间在10ms左右,那么干脆就在16ms内判断某个按键是否被稳定的按下或者弹起,若在16ms中读取到的某个按键的状态均为0或者1,那么就可以判断这个按键已经被稳定地按下或者弹起了,这时,就将存储按键状态的二维数组KeySta[4][4]中对应的按键的状态置为0或者1。
下面是部分示例代码(定义KeyScan函数专门用于按键的扫描,它在T0的中断函数内被调用)。
#include<reg52.h> sbit KeyOut4 = P2^0; sbit KeyOut3 = P2^1; sbit KeyOut2 = P2^2; sbit KeyOut1 = P2^3; sbit KeyIn1 = P2^4; sbit KeyIn2 = P2^5; sbit KeyIn3 = P2^6; sbit KeyIn4 = P2^7; unsigned char KeySta[4][4] = { {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1} }; unsigned char code KeyCodeMap[4][4] = { { 0x31, 0x32, 0x33, 0x26 }, //数字键 1、数字键 2、数字键 3、向上键 { 0x34, 0x35, 0x36, 0x25 }, //数字键 4、数字键 5、数字键 6、向左键 { 0x37, 0x38, 0x39, 0x28 }, //数字键 7、数字键 8、数字键 9、向下键 { 0x30, 0x1B, 0x0D, 0x27 } //数字键 0、ESC 键、 回车键、 向右键; }; void KeyScan() { static unsigned char KeyBuff[4][4] = { {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF} }; static unsigned char row = 0; unsigned char col; KeyBuff[row][0] = (KeyBuff[row][0] << 1) | KeyIn1; KeyBuff[row][1] = (KeyBuff[row][1] << 1) | KeyIn2; KeyBuff[row][2] = (KeyBuff[row][2] << 1) | KeyIn3; KeyBuff[row][3] = (KeyBuff[row][3] << 1) | KeyIn4; for (col = 0; col < 4; col++) { if ((KeyBuff[row][col]) & 0x0F == 0x0F) { KeySta[row][col] = 1; } else if ((KeyBuff[row][col] & 0x0F) == 0x00) { KeySta[row][col] = 0; } } row++; row = row & 0x03; switch (row) { case 0: KeyOut4 = 1; KeyOut1 = 0; break; case 1: KeyOut1 = 1; KeyOut2 = 0; break; case 2: KeyOut2 = 1; KeyOut3 = 0; break; case 3: KeyOut3 = 1; KeyOut4 = 0; break; default: break; } }
-
同时按住多个按键的识别;矩阵键盘扫描原理详解——单片机191216
2019-12-16 17:38:13矩阵键盘扫描原理详解 根据原理图 键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。 一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现...矩阵键盘扫描原理详解
根据原理图
键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。
现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?
当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。
首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;
其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。
/*****************************************************************************/
PS:同时按住S5,S6也是可以识别的。
首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;
其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1001(0x09),如果我们的键盘布局已经确定,那么0x09就代表S5,S6的值了。
/**************************************************************************/
/*
功能:矩阵键盘扫面,按键显示键值程序
作者:siriuszxn
*/
#include "reg51.h"
#define KEYPORT = P1unsigned char i;
unsigned char Keynum;
unsigned char Line; //行
unsigned char Mask;
unsigned char Col; //列
unsigned char ScanCode;unsigned char code psegs_table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F
void delay_ms(unsigned int t) //ms延时程序
{
unsigned char i;
unsigned int x;
x=t;
while(x--)
{
for(i=0;i<113;i++);
}
}
/* 键盘扫描程序 */
void keyscan()
{
while (1) //循环扫描键盘
{
P1 = 0xff; //开始
Line = 1;
Mask = 0x01;for(i = 0; i < 4; i++)
{
P1 = ~Mask;ScanCode = P1 & 0xf0;
if (ScanCode != 0xf0)
{
delay_ms(5);
}ScanCode = P1 & 0xf0;
switch(ScanCode)
{
case 0xe0:Col=1;break;
case 0xd0:Col=2;break;
case 0xb0:Col=3;break;
case 0x70:Col=4;break;
default :Col=0;break;
}if (Col > 0)
{
//根据行列计算键值
Keynum = (Line - 1) * 4 + Col;
//通过P0口接数码管显示
P0 = psegs_table[Keynum-1];while(1)
{
ScanCode = P1 & 0xf0;
if(ScanCode == 0xf0)
{
break;
}
}
Mask <<= 1;
Line++;
}
}
}
}void main()
{
while(1)
{
keyscan();
}
}
————————————————
版权声明:本文为CSDN博主「zxnsirius」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zxnsirius/article/details/51088946 -
4x4矩阵键盘工作原理及扫描程序_51单片机独立按键和矩阵按键实现
2020-12-30 18:38:04我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状态。 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号 如下图所示: 如图所示,...独立按键实验
按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时,
开关断开。我们开发板上使用的按键及内部简易图如下图所示
管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状态。
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号
如下图所示:
如图所示,按键闭合式不会立刻稳定的接通,断开时也不会一下子断开,会伴随一些抖动。抖动的时间长短有按键特性决定,一般为5Ms到10ms.按键抖动会引起按键被误读多次。为了确保 CPU 对按键的一次闭合仅作一次处理,必须进行消抖。
消抖
消抖可分为硬件消抖和软件消抖。为了使电路更加简单,通常采用软件消抖。
一般来说一个简单的按键消抖就是先读取按键的状态, 如果得到按键按下之后, 延时 10ms, 再次读取按键的状态,如果按键还是按下状态,那么说明按键已经按下。 其中延时 10ms 就是软件消抖处理。
消抖过程(软件)
1,先设置 IO 口为高电平(由于开发板 IO 都有上拉电阻,所以默认 IO 为高电平)。
2,读取 IO 口电平确认是否有按键按下。
3,如有 IO 电平为低电平后,延时几个毫秒。
4,再读取该 IO 电平,如果任然为低电平,说明对应按键按下。
5,执行相应按键的程序。
键盘
键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。独立按键用的就是独立键盘。
实现原理
原理图:
独立按键电路构成是由各个按键的一个管脚连接在一起接地,按键其他引脚分别接到单片机 IO 口。
单片机的 IO 口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,独立按键的一端接地,另一端与单片机的某个 I/O 口相连,开始时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是否变为低电平,当按键闭合时,即相当于该 I/O 口通过按键与地相连,变成低电平,程序一旦检测到 I/O 口变为低电平则说明按键被按下,然后执行相应的指令。
由图可以看出,单片机的管脚(p1,p3,等管脚)都接有上拉电阻,上拉电阻接高电平。因此我们在消抖检测时,若按键以已经按下,则管脚接地,变为低电平,若管脚为低电平,则说明按键已经按下,执行LED灯点亮的步骤。
代码实现
#include <reg52.h> #include <intrins.h> typedef unsigned char u8; //重定义全局字符型变量 typedef unsigned int u16; //重定义全局整型变量 sbit LED=P2^0 ; //LED接P2口 sbit K1=P3^1; //按键k1接p3口,也可以是其他管脚 /*延时函数*/ void dealy(u16 i) { while(i--); } /*独立按键执行函数 */ void KeyProcess() { if(K1==0){ dealy(1000); //一个int型的所占的时间大约为10微妙,所以乘1000大约为10ms. if(K1==0){ //消抖后仍为低电平,则执行点亮进程 LED=~LED; //为了让LED产生明暗变化 } while(!K1); //判断按键是否松开,假如松开,则K1为真,加!为假,则循环结束跳出循环 } } void main() { LED=0; //初始时灯位熄灭状态(LED原理), while(1) { KeyProcess(); } }
矩阵按键实验
- 前面我们讲到独立按键,接下来我们引入独立按键。为什么引入矩阵按键?
独立键盘与单片机连接时,每一个按键都需要单片机的一个 I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的 I/O 口资源。单片机系统中 I/O 口资源往往比较宝贵,多个按键时为了减少 I/O 口引脚。 - 4 * 4键盘的工作原理
矩阵按键原理图
开发板上将 16 个按
键排成 4 行 4 列,第一行将每个按键的一端连接在一起构成行线,第一列将每
个按键的另一端连接在一起构成列线,这样便一共有 4 行 4 列共 8 根线,我们将
这 8 根线连接到单片机的 8 个 I/O 口上,通过程序扫描键盘就可检测 16 个
键。- 矩阵按键的消抖
1.检查按键是否按下
由原理图可知,独立按键和矩阵按键是有所不同的。独立按键的各个按键一端接引脚,一端并联在一起接地。所以检测按键是否按下只需要看单片机的管脚是否为低电平即可。而矩阵按键,他们的两端分别并联在一起,
每一行(共4行)并联在一起接高位管脚上(7~4),每一列(共4列)并联在一起接到低位管脚上(3~0)。
所以检测方法有所不同。
一般情况下有两种方法。
方法一:
逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。逐行扫描的时间是非常快的,肉眼难以观察。
举个例子,假设此时p7管脚为低电平,那么第一行按键的一段都为低电平,另一端分别连接低4位的管脚,只有当某一个开关按下,低4位的管脚与其中一个低电平的管脚连接变为低电平,所以只要查看低4位那个管脚为低电平就可以确定那个按键以按下。其他三行同理,每一行依次不断进行。
方法二:
行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。相当于第一次确定列,第二次确定行,行列交叉形成点,这个点就是我们要找的已经闭合的按键。- 静态数码管显示按键
如图,每一个按键可用一个键值来代替,让对应的键值号来作为静态数码管的段选,从而实现按下按键显示数字的效果。- 代码实现
采用第二种行列扫描的检测方法
#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define GPIO_DIG P0 //宏定义p0口(静态显示数码管对应的管脚) #define GPIO_KEY P1 //矩阵按键对应管脚 u8 KeyValue; //用来存放读取到的键值 u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值 /*延时·函数*/ void delay(u16 i) { while(i--); } /*检测按键是否按下,消抖,读取键值*/ void KeyDown(void) { char a=0; GPIO_KEY=0x0f; //0x0f转化为为二进制为0000 1111,即矩阵按键的八个管脚,高位为低电平(0),低位为高电平(1) if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay(1000);//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { /*对列进行测试(高位低电平,低位高电平)*/ GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; //对应管脚高低电平0000 0111,第0列 case(0X0b): KeyValue=1;break; //对应管脚高低电平0000 1011,第1列 case(0X0d): KeyValue=2;break; //对应管脚高低电平0000 1101,第2列 case(0X0e): KeyValue=3;break;//对应管脚高低电平0000 1110,第3列 } /*对行进行测试(低位高电平,高位低电平)*/ GPIO_KEY=0XF0; switch(GPIO_KEY) { /*上一行对应的列号加上相应有规律的字号就等于按键号,可由原理图查看*/ case(0X70): KeyValue=KeyValue;break; //对应管脚高低电平0111 0000,第0行 case(0Xb0): KeyValue=KeyValue+4;break; //对应管脚高低电平1011 0000,第1行 case(0Xd0): KeyValue=KeyValue+8;break;//对应管脚高低电平1101 0000,第2行 case(0Xe0): KeyValue=KeyValue+12;break; //对应管脚高低电平1110 0000,第0行 } } } while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测(只有当按键松开时矩阵连接的管脚高位和低位才会互换继续检测行。否则进行循环延迟) { delay(100); a++; } } /*主函数*/ void main() { while(1) { KeyDown(); //按键判断函数 GPIO_DIG=~smgduan[KeyValue]; // } }
-
矩阵键盘扫描原理详解——单片机
2019-04-23 10:50:26矩阵键盘扫描原理详解 根据原理图 键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低...矩阵键盘扫描原理详解
根据原理图
键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。/*
功能:矩阵键盘扫面,按键显示键值程序
作者:siriuszxn
*/
#include "reg51.h"
#define KEYPORT = P1unsigned char i;
unsigned char Keynum;
unsigned char Line; //行
unsigned char Mask;
unsigned char Col; //列
unsigned char ScanCode;unsigned char code psegs_table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F
void delay_ms(unsigned int t) //ms延时程序
{
unsigned char i;
unsigned int x;
x=t;
while(x--)
{
for(i=0;i<113;i++);
}
}
/* 键盘扫描程序 */
void keyscan()
{
while (1) //循环扫描键盘
{
P1 = 0xff; //开始
Line = 1;
Mask = 0x01;for(i = 0; i < 4; i++)
{
P1 = ~Mask;ScanCode = P1 & 0xf0;
if (ScanCode != 0xf0)
{
delay_ms(5);
}ScanCode = P1 & 0xf0;
switch(ScanCode)
{
case 0xe0:Col=1;break;
case 0xd0:Col=2;break;
case 0xb0:Col=3;break;
case 0x70:Col=4;break;
default :Col=0;break;
}if (Col > 0)
{
//根据行列计算键值
Keynum = (Line - 1) * 4 + Col;
//通过P0口接数码管显示
P0 = psegs_table[Keynum-1];while(1)
{
ScanCode = P1 & 0xf0;
if(ScanCode == 0xf0)
{
break;
}
}
Mask <<= 1;
Line++;
}
}
}
}void main()
{
while(1)
{
keyscan();
}
}
---------------------
作者:zxnsirius
来源:CSDN
原文:https://blog.csdn.net/zxnsirius/article/details/51088946
版权声明:本文为博主原创文章,转载请附上博文链接! -
4x4矩阵键盘工作原理及扫描程序_单片机人机交互矩阵按键
2021-01-02 19:30:14按键是一种常开型按钮开关,与单片机的常见接法如图所示。按键未按下时两个触点断开,单片机I/O口输入高电平;当按键闭合时,I/O口输入低电平。一、按键讲解当I/O口为P0口时,由于没有内部上拉电阻,所以必须外接上... -
4x4矩阵键盘工作原理及扫描程序_【单片机自学】5.独立按键与矩阵键盘
2020-12-29 01:07:481独立按键独立按键模块位置示意图硬件连接原理:图1.2独立按键原理图把对应的端口赋值高电平,即“1”,按键按下,端口被拉低至低电平,即“0”,通过检测该端口的电平即可判断按键是否按下。去抖分析:按键是机械... -
c语言学 判断按键_MCS-51单片机4×4矩阵按键的扫描
2020-12-11 06:57:09以金沙滩工作室的STC89C52单片机开发板为例,记录学习51单片机的笔记,本文章主要讲解了4×4矩阵按键的扫描,教材是金沙滩工作室(www.kingst.org )宋雪松老师编著的...矩阵按键及其原理图1是单片机开发板上的... -
单片机学习笔记——按键和LED复用扫描程序
2019-12-14 10:11:56在我们的实际产品开发过程中,为了节省成本,常常会采用按键和LED复用,从而达到节省IO口的目的。很多刚刚碰到这种情况的工程师,可能会不知道如何处理,PS:大神请自动略过...一、按键和LED复用原理图如下: LED... -
PIC单片机实现NTC热敏电阻温控器(原理图及源代码)
2019-01-21 03:01:42用PIC单片机实现对NTC热敏电阻和DS18B20的数据采集与处理,按键扫描与响应,并在LCD断码屏显示,是风机盘管温控器的完整实现(原理图及源代码) -
蓝桥杯单片机——独立按键、矩阵按键
2020-07-08 18:11:58当按键按下时,相应的P30-33口输入为低电平,由此编写独立按键扫描函数。 矩阵按键 跳线帽需要短接J5口的1和2引脚,按键能使用16个(即上图中S4-S19)。矩阵按键的扫描方法可采用行列扫描法,分为两步: 将行的输出... -
51单片机之矩阵按键
2019-07-20 13:57:14区别:矩阵按键为4*4即16个按键,如果都采用独立按键的解法,那么需要占用16个I/O接口,对于单片机而言是极大的浪费。 工作原理: 先见下图: 他有两种识别方式:逐行扫描、行列扫描。 (1)逐行扫描: 通俗... -
51单片机NOKIA5110屏幕按键手机模仿
2017-11-29 10:02:47这是一个基于普通51单片机和SIM800A模块的按键手机模拟的代码,附原理图,看完代码,你就可以掌握NOKIA5110屏幕的使用方法,矩阵按键在中断中扫描,检索字符串等等技能! -
【51单片机】矩阵按键
2020-09-09 10:28:34其原理图如下: 矩阵按照是如何检测哪个按下的呢? 矩阵按键分为行和列,没有按键按下的时候,行和列是断开的,而当某一个按键按下时,改按键对应的行和列就会短接,电平会变成相同;由于矩阵键盘中没有电阻,所以... -
单片机与DSP中的PIC单片机人机接口4×4行列式键盘的工作原理
2020-11-14 05:58:17但是,在占用相同的I/O端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多,其原理图如图1所示。 图1 4×4行列式键盘的原理图 实际的工程中,可能会使用PIC16C5X这种通用的可编程的键盘、显示... -
51单片机LCD1602显示矩阵按键键值
2019-02-11 18:24:16矩阵按键原理图 矩阵按键怎么变成独立按键 方法一: 逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一... -
51单片机外设之——按键的检测(快速识别)
2018-04-30 12:46:49而现在介绍的按键扫描法是“快速识别”方法(以独立按键为例,因为矩阵键盘的扫描与独立按键类似)。 首先附上按键的原理图: 用跳帽连接排针 J5 的2脚与3脚,将键盘设置为独立按键(只有S4~S7有效)。此时,S4~S7... -
PIC单片机4×4行列式键盘的工作原理解析
2021-01-19 18:12:17但是,在占用相同的I/O端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多,其原理图如图1所示。 图1 4×4行列式键盘的原理图 实际的工程中,可能会使用PIC16C5X这种通用的可编程的键盘、... -
51单片机学习记录(7) “矩阵按键
2020-08-07 10:53:01首先还是让我们先看一下原理图 可以看的出来,矩阵按键的连接方式 矩阵按键是由P1口控制的 P1口的高四位(P17–P14)控制着矩阵按键的行 P1口的低四位(P13–P10)控制着矩阵按键的列 行列扫描 这里为了判断具体是哪个... -
4x4矩阵键盘工作原理及扫描程序_基于proteus的51单片机开发实例24-矩阵键盘(行列式键盘)...
2021-01-03 14:38:371.2. 设计思路我们在前面已经学习过独立按键,在独立按键电路中,一个按键连接单片机的一位I/O端口。这样通过检测I/O的状态就能很方便的识别该按键是否按下。这种电路的优点是:电路简单,程序简单,缺点是一个... -
单片机学习————矩阵按键与8*8点阵
2019-12-02 22:41:39逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二: ... -
51单片机外设之——按键的检测(带有标志位的按键识别法)
2018-04-30 12:14:11先附上矩阵键盘的原理图: 在使用据矩阵键盘时,J5 排针处的跳帽连接 1 脚和 2 脚,使所有按键的有效端口全部连接至 I/O 口。 具体的扫描方式为: 先把P3^0~P3^7高四位和第四位赋不一样的电平值,当确定有键按下时... -
4x4矩阵键盘工作原理及扫描程序_4*4 矩阵键盘工作原理
2020-12-30 14:27:32在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵 形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种... -
独立式键盘与矩阵键盘原理逐行扫描法与行列互换法 键盘编码器芯片74C922.ppt
2020-01-14 00:50:46单片机原理及应用;第4 章2--- 键盘;一.独立式按键与矩阵式按键原理;一.独立式按键与矩阵式键盘原理; 按键在闭合和断开瞬间会因弹簧开关的变形而产生电压波动现象其按键抖动波形如图 ;二. 逐行扫描法与行列互换法;二.... -
疑问----单片机矩阵键盘行列反转扫描法
2019-10-06 05:16:29矩阵键盘和独立键盘原理图: 原理:对于图右侧的矩阵键盘,把P3口的低四位(P3.0 ~ P3.3)和高四位(P3.4 ~ P3.7)分别置1,只要有按键被按下,那么与之对应的P3口某一位将由高电平被拉低,两次分别测得了行值和...