单片机独立按键和矩阵按键

合集下载

单片机按键模块设计

单片机按键模块设计

单片机按键模块设计一、硬件设计1、按键的类型选择按键的类型有很多种,常见的有机械按键和触摸按键。

机械按键通过金属触点的闭合和断开来产生电信号,具有成本低、可靠性高的优点,但寿命相对较短,容易产生抖动。

触摸按键则通过电容感应或电阻感应来检测触摸动作,寿命长、外观美观,但成本相对较高,且容易受到外界干扰。

在一般的单片机应用中,机械按键通常是更经济实用的选择。

2、按键的连接方式按键可以采用独立式连接或矩阵式连接。

独立式连接适用于按键数量较少的情况,每个按键单独连接到单片机的一个 I/O 口上,这种方式简单直观,但占用的 I/O 口资源较多。

矩阵式连接则适用于按键数量较多的情况,通过将按键排列成矩阵形式,利用行线和列线的交叉点来识别按键,大大节省了 I/O 口资源,但编程相对复杂。

以 4×4 矩阵按键为例,我们需要 8 个 I/O 口,其中 4 个作为行线,4 个作为列线。

当某个按键被按下时,对应的行线和列线会接通,通过扫描行线和列线的状态,就可以确定被按下的按键。

3、上拉电阻的使用为了保证单片机能够正确检测按键的状态,通常需要在按键连接的I/O 口上加上拉电阻。

上拉电阻将I/O 口的电平拉高,当按键未按下时,I/O 口处于高电平;当按键按下时,I/O 口被拉低为低电平。

上拉电阻的阻值一般在10KΩ 左右。

4、消抖处理由于机械按键在按下和释放的瞬间,触点会产生抖动,导致单片机检测到的电平不稳定。

为了消除这种抖动,通常采用软件消抖或硬件消抖的方法。

软件消抖是在检测到按键状态变化后,延迟一段时间(一般为10ms 20ms),再次检测按键状态,如果状态保持不变,则认为按键有效。

这种方法简单易行,但会增加程序的执行时间。

硬件消抖则是通过在按键两端并联电容或使用专用的消抖芯片来实现。

电容可以吸收触点抖动产生的尖峰脉冲,使电平稳定。

但硬件消抖会增加硬件成本和电路复杂度。

二、软件编程1、按键扫描程序在软件编程中,需要编写按键扫描程序来检测按键的状态。

独立按键

独立按键

软件消抖
if(k1==0) //检测按键K1是否按下 { delay(1000); //消除抖动 一般大约10ms if(k1==0) //再次判断按键是否按下 { 语句; }
软件编程
下载程序后按下K1按键可以对D1小灯状态取反。 #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit k1=P3^1; //定义P31口是k1 sbit led=P2^0; //定义P20口是led void delay(u16 i) { while(i--); }
按键处理函数 void keypros() { if(k1==0) //检测按键K1是否按下 { delay(1000); //消除抖动 一般大约10ms if(k1==0) //再次判断按键是否按下 { led=~led; //led状态取反 } while(!k1); //检测按键是否松开 } }
独立按键原理
(2)矩阵按键
为了减少I/O口的占用,通常将按键排列成矩阵 形式,即每条水平和垂直直线在交叉处不直接连通, 而是通过一个按键加以连接。
2. 独立按键原理
按键在闭合和断开时,触点会存在抖动现象。由 于机械触点的弹性作用,一个按键在闭合时不会马上 稳定地接通,断开时不会立即断开。
为了避免这种现象而做的措施就是按键消抖。消抖方法 分为:硬件消抖、软件消抖。
独立按键实验
1.按键介绍
2.独立按键原理 3.编写独立按键控制程序
工程图示按键
键盘的分类
键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用源自硬件编码器实现,如计算机键盘。靠软件编
程来识别称为非编码键盘。单片机组成的各系统中,用

自学单片机之矩阵按键

自学单片机之矩阵按键

矩阵按键1.1矩阵按键连接图:1.2矩阵按键扫描原理:1.3矩阵按键与独立按键转换:看电路图,只用将某一个IO 口写0 ,即可组成独立按键。

1.4 程序实例:矩阵4 x4共十六个按键按顺序按下,数码管分别显示0~F。

#include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 KeyValue;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ÏÔʾ0~FµÄÖµvoid delay(u16 i){while(i--);}void KeyDown(void){char a=0;GPIO_KEY=0x0f; // 低四位写高高四位写0if(GPIO_KEY!=0x0f)//判断是否有按键按下{delay(1000);//延时10ms消抖if(GPIO_KEY!=0x0f)//确认是否真的有按键按下{GPIO_KEY=0X0F; // 再次高四位写0 低四位写1 去干扰开始列扫描此时按键任然是按下状态switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}GPIO_KEY=0XF0; //第二步开启行扫描高四位写1 低四位写0switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0)) //判断按键是否松开{delay(1000); //延时消抖a++; //设定一个强制退出条件}}}}void main(){LSA=0;LSB=0;LSC=0;while(1){KeyDown();GPIO_DIG=smgduan[KeyValue];}}。

独立键盘电路

独立键盘电路
独立键盘电路知识点目录1综述 独立键盘电路1.综述
2
键盘是单片机不可缺少的输入设备,在单片机应用系统中,常使用按键或者键盘 控制系统的工作状态或向系统内部输入数据。
全编码键盘 键盘
非编码键盘
独立式键盘 矩阵式键盘
1.综述
3
➢ 编码键盘:键盘闭合键的识别由专用硬件实现。
➢ 非编码键盘:键盘闭合键的识别由软件实现。
当松开按键后,线路断开,无电流流过,此时KeyIn1和+5V是等电位,为高 电平。
这样我们就可以通过KeyIn1这个接口的电平高低来判断是否有按键按下。
2.独立键盘电路
6
独立式按键程序查询方式和中断方式的接口电路
2.独立键盘电路
4
独立式键盘就是各个按键相互独立,每一个按键各接一根I/O接口线,彼此独立, 单片机通过向此I/O口发出读指令来得到当前按键的状态。原理图如图1所示。
图1 独立键盘电路原理图
2.独立键盘电路
5
工作原理:
4条输入线接到单片机的I/O口上,当按键K1按下时,+5V电源通过R1和K1进 入GND形成一条通路,此时全部电压都加到了电阻R1上,从而导致KeyIn1引脚为 低电平;
非编码键盘结构简单,成本低廉,在单片机中得到广泛应用。
➢ 独立式键盘特点:电路配置灵活,软件结构简单,但每个按键必须占用一根 I/O线,占用硬件资源较多,因此适用于按键比较少的场合。
➢ 矩阵式键盘特点:矩阵式键盘的按键设置在行、列的交叉点上。键盘中按键数 量较多时,为了减少I/O口的占用,通常采用矩阵式键盘。

单片机按键模块设计(二)

单片机按键模块设计(二)

单片机按键模块设计(二)引言概述:本文将介绍单片机按键模块设计的相关内容。

按键模块在嵌入式系统中被广泛应用,能够方便地实现对系统的控制和操作。

本文将从五个大点进行阐述,包括按键模块原理介绍、按键类型选择、按键电路设计、按键功能实现和按键模块调试。

通过详细介绍和分析,将帮助读者更好地理解和使用单片机按键模块。

正文:1. 按键模块原理介绍- 按键模块是通过触发按键开关来产生不同信号的模块。

它由按键开关和其它电路组成,可以实现按键信号的检测和处理。

- 常见的按键模块原理包括矩阵式按键、独立式按键和编码式按键。

每种原理都有其适用的场景和特点。

2. 按键类型选择- 按键的类型包括机械按键和触摸按键。

机械按键通常使用弹簧结构,稳定可靠,适用于精确操作。

触摸按键使用电容或电阻感应原理,触摸灵敏,外观简洁。

- 在选择按键类型时,需要根据具体应用场景和用户需求,综合考虑按键的性能、可靠性、成本等因素。

3. 按键电路设计- 按键电路设计要考虑按键的接入、滤波、去抖动等问题。

接入问题包括按键引脚的连接和布局。

滤波问题可以通过外部电容电路实现,防止因按键抖动引起的干扰。

去抖动问题可以通过软件或硬件的方式解决,确保按键信号的稳定和准确。

4. 按键功能实现- 按键的功能实现可以通过编程来完成。

根据按键的不同组合或按下时间等条件,可以触发不同的功能操作。

- 常见的按键功能包括开关控制、菜单选择、模式切换等。

通过编程,可以灵活地定制按键功能,满足不同应用的需求。

5. 按键模块调试- 按键模块的调试主要包括按键动作测试、按键信号检测和按键功能验证。

通过合理的测试和验证,可以确保按键模块的正常工作。

- 调试可以通过示波器、调试工具等设备来实现。

通过观察按键信号的波形和分析按键功能的实现情况,可以排查和解决可能存在的问题。

总结:本文从按键模块原理介绍、按键类型选择、按键电路设计、按键功能实现和按键模块调试五个大点进行了详细阐述。

通过本文的介绍,读者可以了解到单片机按键模块设计的基本原理和实现方法,从而能够更好地应用于具体的嵌入式系统中。

单片机控制系统按键的类型

单片机控制系统按键的类型

012 3 0
456 7 1
8 9 10 11 2
12 13 14 15 3
0 123
图7.5 矩阵式键盘结构
+5 V
矩阵式键盘中,行、列线分别连接到按键开关的两 端,行线通过上拉电阻接到+5V上。当无键按下时,行 线处于高电平状态;当有键按下时,行、列线将导通, 此时,行线电平将由与此行线相连的列线电平决定。这 是识别按键是否按下的关键。然而,矩阵键盘中的行线、 列线和多个键相连,各按键按下与否均影响该键所在行 线和列线的电平,各按键间将相互影响,因此,必须将 行线、列线信号配合起来作适当处理,才能确定闭合键 的位置。
图7.8是一种简易键盘接口电路,该键盘是由8051 P1口 的高、低字节构成的4×4键盘。键盘的列线与P1口的高4位 相连,键盘的行线与P1口的低4位相连,因此,P1.4P1.7是 键输出线,P1.0P1.3是扫描输入线。图中的4输入与门用于 产生按键中断,其输入端与各列线相连,再通过上拉电阻接 至+5 V电源,输出端接至8051的外部中断输入端。
2. 矩阵式键盘按键的识别 识别按键方法很多,其中最常见的方法是扫描法。下 面以图7.5中8号键的识别为例来说明扫描法识别按键的过程。 按键按下时,与此键相连的行线与列线导通,行线在 无键按下时处在高电平。显然,如果让所有的列线也处在 高电平,那么,按键按下与否不会引起行线电平的变化, 因此,必须使所有列线处在低电平。只有这样,当有键按 下时,该键所在的行电平才会由高电平变为低电平。CPU 根据行电平的变化,便能判定相应的行有键按下。8号键按 下时,第2行一定为低电平。然而,第2行为低电平时,能 否肯定是8号键按下呢?
(3) 求按键位置。根据前述键盘扫描法,进行逐 列置0扫描。图7.6中,32个键的键值分布如下(键值 由4位十六进制数码组成,前两位是列的值,即A口数 据,后两位是行的值,即C口数据,X为任意值):

单片机开关元器件名称

单片机开关元器件名称

单片机开关元器件名称引言:在单片机系统中,开关元器件起着至关重要的作用。

它们可以控制电路的开关状态,实现信号的输入和输出。

本文将介绍几种常见的单片机开关元器件,包括按键开关、拨动开关、光电开关以及磁敏开关。

一、按键开关按键开关是单片机系统中最常见的开关元器件之一。

它们通常由金属片、弹簧、触点等组成。

按键开关可以分为矩阵按键和独立按键两种类型。

矩阵按键可以将多个按键通过行和列的组合方式连接到单片机的I/O口上,实现多个按键共用一个I/O口的功能。

独立按键则每个按键都连接到单片机的一个独立的I/O口上。

二、拨动开关拨动开关是一种常用的手动开关元器件,它可以实现电路的开关和切换功能。

拨动开关通常由一根或多根摇杆连接到触点上,通过拨动摇杆来改变触点的接通状态。

拨动开关常用于控制电路的开关、模式选择等场景中。

三、光电开关光电开关是利用光电效应工作的一种开关元器件。

它由发光二极管和光敏二极管组成。

发光二极管发出的光线被光敏二极管接收,当光线被遮挡时,光敏二极管的电阻值发生变化,从而改变开关的状态。

光电开关常用于检测物体的存在与否、计数等应用中。

四、磁敏开关磁敏开关是一种利用磁场变化来实现开关动作的元器件。

它通常由磁敏材料和触点组成。

当磁敏材料受到外部磁场的影响时,其电阻值发生变化,从而导致触点的状态改变。

磁敏开关常用于磁场检测、安全开关等应用中。

五、总结单片机开关元器件在电路设计中起着重要的作用。

按键开关、拨动开关、光电开关和磁敏开关都是常见的开关元器件。

它们各自具有不同的特点和应用场景,可以满足不同的需求。

在实际应用中,我们需要根据具体的需求选择适合的开关元器件,并合理设计电路,确保其正常工作。

通过合理使用开关元器件,我们可以实现单片机系统的功能拓展、信号输入和输出控制等功能。

六、参考文献[1] 赵鸿飞. 单片机技术及应用[M]. 清华大学出版社, 2014.[2] 杨剑波. 单片机原理与应用[M]. 电子工业出版社, 2017.[3] 刘新平, 赵莉. 单片机原理与应用[M]. 清华大学出版社, 2018.。

实验5-独立键盘和矩阵键盘

实验5-独立键盘和矩阵键盘

实验5 独立键盘和矩阵键盘一、实验目的1、学会用C语言进行独立按键应用程序的设计。

2、学会用C语言进行矩阵按键应用程序的设计。

二、实验内容1、独立按键:对四个独立按键编写程序:当按k1时,8个LED同时100ms闪烁;当按k2时,8个LED从左到右流水灯显示;当按k3时,8个LED从右到左流水灯显示;当按k4时,8各LED同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭;2、矩阵按键:采用键盘扫描方式,顺序按下矩阵键盘后,在一个数码管上顺序显示0~F,采用静态显示即可。

3、提高部分(独立按键、定时器、数码管动态扫描):编写程序,实现下面的功能。

用数码管的两位显示一个十进制数,变化范围为00~59,开始时显示00,每按一次k1,数值加1;每按一次k2,数值减1;每按一次k3,数值归零;按下k4,利用定时器功能使数值开始自动每秒加1;再按一次k4,数值停止自动加1,保持显示原数。

三、实验步骤1、硬件连接(1)使用MicroUSB数据线,将实验开发板与微型计算机连接起来;(2)在实验开发板上,用数据线将相应接口连接起来;2、程序烧入软件的使用使用普中ISP软件将HEX文件下载至单片机芯片内。

查看结果是否正确。

四、实验结果——源代码1. #include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;#define LED P2sbit key1=P3^1;sbit key2=P3^0;sbit key3=P3^2;sbit key4=P3^3;const char tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; u8 code begMid[]={0x7e, 0xbd,0xdb,0xe7, 0xdb, 0xbd, 0x7e}; void Delay(u16 i){ while(i--);}void KeyDown(){u8 i;if(key2==0){Delay(1000);if(key2==0){for(i=0;i<8;i++){LED=tab[i];Delay(50000);}while(!key2);}LED=0xff;}else if(key1==0){Delay(1000);if(key1==0)for(i=0;i<3;i++){LED=0x00;Delay(10000);LED=0xff;Delay(10000);}}}}void Int0Init(){IT0=1;EX0=1;EA=1;}void Int1Init(){IT1=1;EX1=1;EA=1;} void main(){Int0Init();Int1Init();while(1){KeyDown();}}void Int0() interrupt 0{u8 i;if(key3==0){Delay(1000);if(key3==0)for(i=7;i>=0;i--){LED=tab[i];Delay(50000);}}}}void Int1() interrupt 2{u8 i;if(key4==0){Delay(1000);if(key4==0){for(i=0;i<=6;i++){LED=begMid[i];Delay(50000);}}}}2.#include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 KeyValue;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//??0~F?? void delay(u16 i){while(i--);}void KeyDown(void){char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f){delay(1000);if(GPIO_KEY!=0x0f){GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0)){delay(1000);a++;}}}}void main(){LSA=0;LSB=0;LSC=0;while(1){KeyDown();GPIO_DIG=smgduan[KeyValue];}}3.#include <reg52.h>typedef unsigned int u16;typedef unsigned char u8;#define KEYPORT P3sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit key1=P3^1;sbit key2=P3^0;sbit key3=P3^2;sbit key4=P3^3;u16 t;u8 sec;u8 DisplayData[2];u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void Time1Init(){TMOD |= 0x10;TH1=0Xd8;TL1=0Xf0;EA=1;ET1=1;}void delay(u16 i){while(i--); }void DigDisplay(){u8 i;for(i=0;i<2;i++){switch(i){case 0:LSA=0;LSB=0;LSC=0;break;case 1:LSA=1;LSB=0;LSC=0;break;}P0=DisplayData[i];delay(100);P0=0x00;}}void datapros(){DisplayData[0]=smgduan[sec%10];DisplayData[1]=smgduan[sec/10];}void main(){Time1Init();while(1){if(key4==0){delay(1000);if(key4==0){TR1=!TR1;while(key4==0);}}if(key3==0){delay(1000);if(key3==0){sec=0;while(key3==0);}}if(key2==0){delay(1000);if(key2==0){sec--;while(key2==0);}}if(key1==0){delay(1000);if(key1==0){sec++;while(key1==0);}}}}void Time1() interrupt 2{TH1=0Xd8;TL1=0Xf0;t++;if(t==100){t=0;sec++;if(sec>=60){sec=0;}}datapros();DigDisplay();}五、实验体会——结果分析1、独立按键:位定义四个按键key1、key2、key3、key4,宏定义LED为P2口,tab数组保存流水灯D0-D7依次点亮的数值,begMid数组保存流水灯同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭的赋值方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机按键(独立按键和矩阵按键)
独立按键
常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如图8-6 所示。

图8-6 独立式按键原理图
4 条输入线接到单片机的IO 口上,当按键K1 按下时,+5V 通过电阻R1 然后再通过按键K1 最终进入GND 形成一条通路,那么这条线路的全部电压都加到了R1 这个电阻上,KeyIn1 这个引脚就是个低电平。

当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V 就应该是等电位,是一个高电平。

我们就可以通过KeyIn1 这个IO 口的高低电平来判断是否有按键按下。

这个电路中按键的原理我们清楚了,但是实际上单片机IO 口内部,也有一个上拉电阻的存在。

我们的按键是接到了P2 口上,P2 口上电默认是准双向IO 口,我们来简单了解一下这个准双向IO 口的电路,如图8-7 所示。

图8-7 准双向IO 口结构图
首先说明一点,就是我们现在绝大多数单片机的IO 口都是使用MOS 管而非三极管,但用在这里的MOS 管其原理和三极管是一样的,因此在这里我用三极管替代它来进行原理讲解,把前面讲过的三极管的知识搬过来,一切都是适用的,有助于理解。

图8-7 方框内的电路都是指单片机内部部分,方框外的就是我们外接的上拉电阻和按键。

这个地方大家要注意一下,就是当我们要读取外部按键信号的时候,单片机必须先给该引脚写“1”,也就是高电平,这样我们才能正确读取到外部按键信号,我们来分析一下缘由。

当内部输出是高电平,经过一个反向器变成低电平,NPN 三极管不会导通,那么单片机IO 口从内部来看,由于上拉电阻R 的存在,所以是一个高电平。

当外部没有按键按下将电平拉低的话,VCC 也是+5V,它们之间虽然有2 个电阻,但是没有压差,就不会有电流,线上所有的位置都是高电平,这个时候我们就可以正常读取到按键的状态了。

当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么
单片机的内部IO 口就是个低电平,这个时候,外部虽然也有上拉电阻的存在,但是两个电阻是并联关系,不管按键是否按下,单片机的IO 口上输入到单片机内部的状态都是低电平,我们就无法正常读取到按键的状态了。

这个和水流其实很类似的,内部和外部,只要有一边是低电位,那么电流就会顺流而下,由于只有上拉电阻,下边没有电阻分压,直接到GND 上了,所以不管另外一边是高还是低,那电平肯定就是低电平了。

从上面的分析就可以得出一个结论,这种具有上拉的准双向IO 口,如果要正常读取外部信号的状态,必须首先得保证自己内部输出的是1,如果内部输出0,则无论外部信号是1还是0,这个引脚读进来的都是0。

矩阵按键
在某一个系统设计中,如果需要使用很多的按键时,做成独立按键会大量占用IO 口,因此我们引入了矩阵按键的设计。

如图8-8 所示,是我们的KST-51 开发板上的矩阵按键电路原理图,使用8 个IO 口来实现了16 个按键。

图8-8 矩阵按键原理图
如果独立按键理解了,矩阵按键也不难理解,那么我们一起来分析一下。

图8-8 中,一共有4 组按键,我们只看其中一组,如图8-9 所示。

大家认真看一下,
如果KeyOut1 输出一个低电平,KeyOut1 就相当于是GND,是否相当于 4 个独立按键呢。

当然这时候KeyOut2、KeyOut3、KeyOut4 都必须输出高电平,它们都输出高电平才能保证与它们相连的三路按键不会对这一路产生干扰,大家可以对照两张原理图分析一下。

图8-9 矩阵按键变独立按键示意图。

相关文档
最新文档