51单片机外设之——矩阵键盘(传统法一)

发布者:快乐的旅程最新更新时间:2018-06-22 来源: eefocus关键字:51单片机  矩阵键盘 手机看文章 扫描二维码
随时随地手机看文章

前面提到了独立按键,可见,独立按键是由矩阵键盘分离而来的。接下来看的是 4*4 的矩阵键盘,这里使用的还是上节所使用的,延时消抖检测。 
先附上矩阵键盘的原理图: 
这里写图片描述 
在使用据矩阵键盘时,J5 排针处的跳帽连接 1 脚和 2 脚,使所有按键的有效端口全部连接至 I/O 口。 
具体的扫描方式为: 
先把P3^0~P3^7高四位和第四位赋不一样的电平值,当确定有键按下时,检测按下的是哪一行或哪一列(原本高电平的四位中有一位会变低电平),再将高四位和第四位赋与上一次相反的电平。再检测,即可找到所按下的按键。

实例为:把S4~S19 这16个按键,从上到下、从左至右,分别设置为1~16不同的键值,当S4按下时,数码管显示为 1;当S19按下时,数码管显示为16。 
其核心代码如下(数码管段码,显示函数等变量的定义,请参照前面给出的数码管的博文):

uchar temp;                                         //用于存储 P3 口的状态

uchar key_value = 0;                                //键值的定义

void matrixKeyScan()

{

    P3 = 0x0f;                                      //设置P3高四位为0,第四位为1

    temp = P3;                                      //用一个变量存储P3口的状态,以免外界影响P3口,从而造成扫描有误

    if(temp != 0x0f)

    {

        delay10ms();

        if(temp!= 0x0f)                             //确定有键按下

        {       

            switch(temp)                            //查看P3(temp)的状态

            {

                case 0x0e :key_value = 1; break;    //按下的为第一行

                case 0x0d :key_value = 5; break;    

                case 0x0b :key_value = 9; break;    

                case 0x07 :key_value = 13;break;    //按下的为第四行

            }   

        }   

        P3 = 0xf0;                                  //再将 P3 口重新赋值,高四位为1,第四位为0

        temp = P3;

        if(temp != 0xf0)

        {

            switch(temp)

            {

                case 0xe0 : key_value +=3 ; break;   //按下的是第四列,键值key_value加3

                case 0xd0 : key_value +=2 ; break;

                case 0xb0 : key_value +=1 ; break;

                case 0x70 : key_value +=0 ; break;   //按下的是第一列,键值key_value加0

            }

        }

        while(P3 != 0xf0);                           //松手检测,因为最近的一次赋值是P3 = 0xf0

    }

}


void main()

{

    while(1)

    {

        matrixKeyScan();                             //在主函数中调用矩阵键盘扫描函数

        if(key_value > 9)                            //判断键值,并显示

        { 

            dspbuf[1] = key_value%10;  

            dspbuf[0] = key_value/10;

        }

        else

        {

            dspbuf[0] = key_value;

            dspbuf[1] = 10;                           //若键值小于10,则十位不显示,只显示个位,段码数组第10个为消影

        } 

        display();                                    //数码管显示函数

    }

}

注:在此我们基于的是89C52单片机的按键扫描,但是对于蓝桥杯指定开发板平台(CT107D)所用的单片机为STC15F2K61S2,它与STC89C52在矩阵键盘的区别的是:前者没有P3^6和P3^7这两个 I/O 口,他们分别用P4^2,P4^4代替,具体的可以就参照STC15F2K61S2芯片手册(其他的区别大致有:它的运行速度比51单片机快,工作时可以选择是否分频;它的中断模式比51多,一些 I/O 口有其他功能等等……)。

这里有几点需要注意: 
1、在编程时,主函数尽可能少的进行一些数据处理等操作,主函数主要用来调用其他的函数。 
2、若使用的是STC15F2K61S2单片机,则在给 P3 口的两次赋值和高四位的电平检测阶段,需要将P4^2,P4^4单独列出来,与其余6个P3引脚的 I/O 口一起检测,并且在使用P4^2,P4^4之前,需要进行sbit位定义,以及 P4 引脚的寻址(srf P4 = 0xC0)。 
3、P3口的第二次赋值,应该也囊括在第一个 if 语句之中,因为只有当确定按下之后,才会开始行与列的扫描,行、列扫描是对于一次按键的扫描,所以不可分开。

未完待续……


关键字:51单片机  矩阵键盘 引用地址:51单片机外设之——矩阵键盘(传统法一)

上一篇:51单片机的4x4矩阵键盘扫描例程(C51)
下一篇:51单片机外设之——按键的检测(带有标志位的按键识别法)

推荐阅读最新更新时间:2024-03-16 16:06

嵌入式学习笔记1——51单片机之预备知识
1. TTL电平:高+5V(有电) 低0V(没电)。 2. RS232电平: 计算机串口 高-12V 低+12V, 所以单片机与计算机通信时要加电平转换芯片max232。 3. 概念:C51就是开发51单片机的C语言。 4. C51的数据类型扩展定义(即除了C中int 、char等之外): (1) sfr:特殊功能寄存器声明(一般情况编程时用不到) (2) sfr16:sfr的16位数据声明(一般情况编程时用不到) (3) sbit: 特殊功能位声明 (4) bit: 位变量声明 例:sfr SCON = 0x98; sfr16 T2 = 0xCC; sbit OV =PSW^2; sbit l
[单片机]
51单片机软件抗干扰的技术误区
单片机 中存在这样一种广泛流传的误解:在MCS-51系列单片机中,只要用指令使程序从起始地址开始执行,就可以复位单片机,摆脱干扰。通过一个简单的实验,揭示了软件复位的可靠方法。   有的单片机(如8098)有专门的复位指令,某些增强型MCS-51系统单片机虽然没有复位指令,但片内集成了WATCHDOG电路,故抗干扰也不成问题。而普及型MCS-51系列单片机(如8031和8032)既然无复位指令,又不带硬件WATCHDOS,如果没有外接硬件WATCHDOG电路,就必须采用软件抗干扰技术。常用的软件抗干扰技术有:软件陷阱、指令冗余、软件WATCHDOG等,它们的作用是在系统受干扰时能及时发现,再用软件的方法使系统复位。所谓软件复位
[单片机]
51单片机-LED部分(2)
8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。 C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include #include #define uchar unsigned char uchar x, temp; sbit buzzer = P2 ^ 3; void delayms(uchar z); void main() { temp = 0xfe; while(1) {
[单片机]
一种基于51单片机控制的数字视频混合器
近几年,数字电视技术发展很快,数字视频混合器可以将两路或多数数字视频信号按照一定的算法混合成一路或多路数字视频信号。作为数字视频信号的基本处理单元,该混合器在数字电视节目的编辑制作和播控传输系统中具有举足轻重的作用。 本文介绍的基于单片机控制的数字视频键控混合器具有以下特点:内含两级串联的键控混合器,可以在主信号中键两入两路附加数字信号,如时钟台标或各种字幕标识;可以远程遥控,也可现场按键控制;可以随时更新和保存系统配置,改变系统功能和技术参数;该系统稳定可靠,对掉电、死机等异常现象有自复位能力。 整个系统包括硬件和软件两部分,硬件包括数字混合部分和单片机控制部分。 1 数字混合部分 输入的数字信号有背景信号、键控信号和填
[单片机]
51单片机多机通信电路图及C语言程序
多机通信电路图 此处,U1作为主机,U2为从机1,U3为从机2。 多机通信C语言程序 (1)主机程序 #include #include #define _SUCC_ 0x0f//数据传送成功 #define _ERR_ 0xf0//数据传送失败 unsigned charTable ={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char Buff ; //数据缓冲区 unsigned char temp=0xff; sbit KEY1=P1^6; sbit KEY2=P1^7; //unsigned char addr; //延时1ms函数 void de
[单片机]
<font color='red'>51单片机</font>多机通信电路图及C语言程序
51单片机之定时器/计数器应用实例(方式0、1、2、3)
硬件:STC89C52RC 开发工具:Keil uVision4 对于刚接触单片机的同学来说可能会对定时器/计数器的应用很蒙圈,特别是初值的计算和各种定时方式的选择。下面希望能给你带来一个清晰的思路。 定时器:一般用于软件计时,给定时器设置一个时间,时间到了系统停止当前的工作跳转到事先定义好的定时器中断函数里,函数里可以做一些周期性的事情。 计数器:一般用于检测外来脉冲信号,给计数器设置一个次数,次数到了系统停止当前的工作跳转到事先定义好的计数器中断函数里,函数里做相应的事情。 先说一下相关的寄存器,也可以直接跳过,看后面的实例分析。 配置定时器或者计数器就是对相应的寄存器进行赋值,下面是相关的寄存器描述:
[单片机]
<font color='red'>51单片机</font>之定时器/计数器应用实例(方式0、1、2、3)
8051单片机的寄存器是什么样的
CPU中使用寄存器来临时存储信息,这些信息可以是要处理的数据,也可以是指向要获取的数据的地址。在8051单片机中,有一种数据类型是8位,从MSB(最高有效位)D7到LSB(最低有效位)D0。对于8 位数据类型,任何大于 8 位的数据类型都必须在处理之前分成 8 位块。 8051中使用最广泛的寄存器是 A(累加器)、B、R0-R7、DPTR(数据指针)和 PC(程序计数器)。所有这些寄存器都是 8 位的,除了 DPTR和 PC。 一、8051中的存储寄存器 我们将在这里讨论以下类型的存储寄存器: 1.累加器; 2.寄存器; 3.B寄存器; 4.数据指针 (DPTR); 5.程序计数器 (PC); 6.堆栈指针 (SP)。 (
[单片机]
80<font color='red'>51单片机</font>的寄存器是什么样的
基于8051单片机和SC1128芯片实现病房呼叫系统的设计
传统的病房呼叫系统普遍采用有线式,不仅布线安装繁琐、维护不便、利用率低,而且实时性差。虽然无线式呼叫系统没有布线问题,但它的可靠性差,而且无线电波会干扰其它医疗仪器设备,目前大多数医院不采用无线呼叫系统。 随着电力载波技术的发展,应用低压电力线作为传输媒质,采用扩频、数字编码、单片机控制等技术实现病房呼叫已成为可能。本文运用电力载波技术设计了一种病房呼叫系统。 1 病房呼叫系统的基本要求 临床求助呼叫是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断或护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士, 并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系
[单片机]
基于80<font color='red'>51单片机</font>和SC1128芯片实现病房呼叫系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved