之前是好的。矩阵键盘输入显示显示无连接。怎么回事?

矩阵键盘这个代码不懂了,_百度知道一种键盘矩阵分析结构及方法
专利名称一种键盘矩阵分析结构及方法
技术领域本发明涉及一种键盘矩阵分析结构及方法,具体涉及矩阵键盘阵列的分析结构与方法。
背景技术键盘是最常见的计算机输入设备,它广泛应用于微型计算机和各种终端设备上。 计算机操作者通过键盘向计算机输入各种指令、数据,指挥计算机的工作。计算机的运行情况输出到显示器,操作者可以很方便地利用键盘和显示器与计算机对话,对程序进行修改、 编辑,控制和观察计算机的运行。在笔记本电脑的开发过程中,键盘作为外界和电脑交互的主要手段,键盘相关功能的开发对于整个系统的开发起着决定性的作用。矩阵键盘由行线和列线交织而成,按键位于行线和列线的交点上,以行线与列线所构成的键盘矩阵的结构对应于实际键盘的按键。电脑通过行线发出信号,通过列线读取信号,从而确定某个按键的位置。因此只有键盘的行线和键盘接口的行线连接到一起,键盘的列线与键盘接口的列线连接到一起,键盘才能正常工作。针对键盘接口,需要特定的键盘与之匹配,如果定做与之匹配的键盘需要额外的时间与费用。因此通常使用另外一种方法对任意一个键盘找出键盘的行线和列线,然后通过转接的方式把键盘的行线与键盘接口的行线连接,把键盘的列线与键盘接口的列线连接。现有技术中通常使用以下方法分析键盘的行线与列线按下某个按键,测量所有的行线与列线的电压变化情况,确定该键对应的行线和列线,并保存数据;把所有按键的行线与列线测量完毕后,再根据测量后的所有数据来推断哪些是行线,哪些是列线。这种方法工作量大,消耗大量的时间与精力,效率低。
本发明要解决的技术问题是,提供一种键盘矩阵分析结构与方法,高效的分析整个键盘矩阵的行线、列线与空闲线,操作简便,并大大缩短分析时间,降低开发成本。为解决上述技术问题,本发明提供一种键盘矩阵分析结构,包括主控制芯片、键盘接口、LED显示板、COM 口通信模块与模式切换按键。其中,主控制芯片,接收键盘接口与模式转换开关的信号,负责运算以及控制系统进行扫描、分析并显示结果;键盘接口,连接键盘与主控制芯片;LED显示板,接收主控制芯片的输出信号,显示按键所在的行与列与键盘行列分析的结果;COM 口通信模块,接收主控制芯片的输出信号,输出分析结果至电脑, 并更新主控制芯片的程序;模式转换开关,负责系统在扫描模式与分析模式之间切换。当系统工作于扫描模式下,按下任意一个按键后,LED显示板显示该按键所在的行和列,COM 口通信模块把行列信息发送至电脑;按下键盘上的所有按键后,转换系统工作模式,使系统工作于显分析模式下,根据扫描模式下得到的所有按键的行列信息分析键盘的行线、列线与空闲线,并通过LED显示板显示,同时把键盘的行列信息通过COM 口通信模块发送到电脑。LED显示板上的每个LED灯都连接一行线或一列线,且每个键盘按键都连接一行线与一列线,因此当系统工作于扫描模式时,按下任意一个按键后,有2个LED灯被点亮,其中一个LED灯连接一行线,另一个LED灯连接一列线,且一行线或列线连接的LED灯越多表示该行线或列线连接的键盘按键数越多。模式转换开关使用自锁按键开关,弹出自锁按键开关时,自锁按键开关连接高电平,系统工作于扫描模式,按下自锁按键开关时,自锁按键开关接地,系统工作于分析模式。基于以上的键盘矩阵分析结构,本发明还提出了键盘矩阵的分析方法,具体包括以下步骤1、判断系统是否处于扫描模式,若系统工作于分析模式,则弹出模式转换开关;2、逐个按下键盘上的所有按键,每按下一个按键,代表该按键所在的行与列的LED 灯被点亮,松开按键后,该LED灯熄灭,同时按键的位置信息将传输到COM 口通信模块;3、按下模式转换开关,使系统工作于分析模式;4、输出行线与列线的分析结果至LED显示板与COM 口通信模块,LED显示板上显示键盘上的行线与列线的分布,代表行线的LED灯被点亮,代表列线的LED灯熄灭,代表空闲线的LED灯闪烁;同时,通过COM 口通信模块,行线与列线的分析结果传输至电脑。当系统处于扫描模式时,对所有行线与列线标号,并设置任意一行线或列线的引脚为低电平,其他行线或列线的引脚为高电平;计算所有行线与列线的引脚的电平,判断按下的按键是否在引脚设置为低电平的行线或列线上,并检测由高电平变为低电平的引脚, 记录引脚为低电平的两个引脚的标号。当系统处于分析模式时,信息库L用来记录已经分析的行线与列线的状态,暂存库T用来备份信息库L中的信息,根据含有最多按键的线判断出行线、列线与空闲线,并在信息库L中把分析过的线的状态置1,继续进行以下步骤1)判断信息库中是否均为1 若信息库中均为1,则输出并显示结果;否则进行步骤2);2)把信息库中的信息备份至暂存库中;3)根据当前的行线或列线确定行线R与列线C,并在信息库中记录新增的已经分析的行线R与列线C的状态;4)判断当前的信息库与暂存库中的信息是否一致若不一致,重复步骤3);若一致,从未分析的线中任选一根线,设为行线或列线,并在信息库L中把该线的状态置1,继续进行步骤1);5)将行线、列线与空闲线的信息输出至LED显示板,通过LED灯显示,被点亮的 LED灯表示该LED灯连接的线为行线,熄灭的LED灯表示该LED灯连接的线为列线,闪烁的 LED灯表示该LED灯连接的线为空闲线,同时,将行列信息输出至电脑。本发明的技术效果是只需按下一个按键就能获得该按键的位置信息,按下所有按键后就能获得键盘矩阵的布局,具体为判断出行线、列线与空闲线。整个分析过程时间短,效率高,操作简便。其次,利用本发明提供的键盘矩阵分析结构与方法,PC厂商在组装之前对键盘进行测试,检测键盘矩阵是否能正常工作,检测键盘与给出的矩阵图是否一致。 另外,利用本发明提供的键盘矩阵分析结构与方法,还可以进行键盘的故障检测,当键盘接上笔记本电脑后,在没有按下按键时如果已有LED灯被点亮,说明有按键发生黏连故障;如果按下任意一个按键后,所有LED灯仍然处于熄灭状态,说明有按键无法闭合。最后,根据本发明提供的一种键盘矩阵分析结构与方法,适用于分析任何矩阵键盘,使用范围广。
图1为本发明提供的键盘矩阵分析结构硬件系统结构图;图2为本发明提供的键盘矩阵分析结构电路结构图;图3为本发明提供的键盘矩阵分析方法操作流程图;图4为本发明提供的键盘矩阵分析方法中系统处于扫描模式下的操作流程图;图5为本发明提供的键盘矩阵分析方法中系统处于显示分析结果模式下的流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。图1为本发明提供的键盘矩阵分析结构的硬件系统结构图如图1所示,本发明提供的键盘矩阵分析结构包括以下结构1、主控制芯片103,接收键盘接口 102与模式转换开关105的信号,负责运算与控制按键的扫描定位、行列分析,同时控制LED显示板104显示行列分析的结果并发送分析结果至电脑107上。2、键盘接口 102,连接键盘101与主控制芯片103。3、LED显示板104,接收主控制芯片103的输出信号,显示按键所在的行与列,以及键盘行列分析的结果。4、COM 口通信模块106,接收主控制芯片103的输出信号,输出行列分析结果至电脑107,并更新主控制芯片103的程序。5、模式转换开关105,负责系统在扫描模式与分析模式之间转换。图2为本发明提供的键盘矩阵分析结构电路结构图。如图2所示,作为较佳实施方式,键盘矩阵分析结构包括1、主控制芯片201,其引脚个数大于或等于40,且内含的Flash可存放的扩展数据大于或等于100字节,且代码大于或等于5000字节。主控制芯片201的第32至第39引脚的POO至P07 口与1个显示单元303连接,并连接至键盘接302的第1至第8引脚;主控制芯片201的第1至第8引脚的PlO至P17 口与另一个显示单元303连接,并连接至键盘接口 302的第17至第M引脚;主控制芯片201的第21至第28引脚的P20至P27 口与显示单元303连接,并连接至键盘接口 302的第9至第16引脚。主控制芯片201的第9引脚连接复位信号RESET ;第10引脚连信号RXD ;第11引脚连接信号T)(D ;第17引脚连接模式转换信号M0DE_SW ;第18,19引脚连接电容C7、C8与晶体Y2,组成系统的时钟电路;第20弓| 脚接地;第40引脚连接高电平VCC。2、显示单元303,其包含8个电阻R与8个发光二极管D,且每个电阻R都与一个发光二极管D串联连接,构成显示元素结构,8个显示元素结构并联连接,且一端连接高电平VCC,构成显示单元303,另一端则与主控制芯片上的POO至P07或PlO至P17或P20至 P27连接。3、模式转换开关304,其采用1个自锁按键开关S4,弹出自锁按键开关时,自锁按键开关连接高电平,系统工作于扫描模式,按下自锁按键开关时,自锁按键开关接地,系统工作于分析模式。4、COM 口传输模块,其由9芯接口 305与芯片306组成,第1与第2引脚通过电容 C4与第3引脚连接,并通过电容C6与高电平VCC连接;第4引脚通过电容C2与第5引脚连接;第6引脚通过电容C5接地;第7引脚连接9芯接口 305的第2引脚;第8引脚连接9 芯接口 305的第3引脚;第10引脚连接信号RXD,H 11引脚连接信号TXD,H 15引脚接地; 第16引脚接高电平VCC。其中,9芯接口 305中第2、3引脚分别连接芯片306的第7、8引脚,且第5引脚接地。5、复位电路307,由开关S2、电阻R9与电容Cl组成,且开关S2与电容Cl并联连接,一端连接高电平,另一端连接电阻R9后接地,开关S2与电容Cl并联连接后与电阻R9 的连接处输出信号为复位信号RESET。6、供电电路308中,其包括一个串联连接的电源PI、开关Si、发光二极管D25和电阻R26,其中,电源Pl与电阻似6的连接处接地,开关Sl与发光二极管D25的连接处输出信号为高电平VCC,为整个系统提供工作电压。作为最佳实施方式,主控制芯片301为芯片STC8958,芯片306为MAX232芯片,且所有电阻阻值均为1000欧姆,所有发光二极管D耐压为5伏,电容Cl为20微法,电容C2 至C6均为1微法,电容C7、C8为30微法,晶振Y2的振动频率为12M,电源Pl供电电压为5伏。本发明还提供了一种基于上述键盘矩阵分析结构的分析方法。图3为本发明提供的键盘矩阵分析方法操作流程图。如图3所示,本具体实施方式
提供的键盘矩阵分析方法包括以下步骤步骤S301,判断系统是否工作于扫描模式,若系统工作于分析模式,则弹出模式转换开关;步骤S302,逐个按下键盘上的所有按键,每按下一个按键,代表该按键所在的行与列的LED灯被点亮,松开按键后,该LED灯熄灭,同时连接该LED灯的行线与列线的标号信息将传输到COM 口通信模块;步骤S303,按下模式转换开关,使系统工作于分析模式;步骤S304,输出行线与列线的分析结果至LED显示板与COM 口通信模块,LED显示板上显示键盘上的行线与列线的分布,代表行线的LED灯被点亮,代表列线的LED灯熄灭, 代表空闲线的LED灯闪烁;同时,通过COM 口通信模块,行线与列线的分析结果传输至电脑。当系统工作于扫描模式下,按下任意一个键盘按键后,LED显示板显示该按键所在的行和列,COM 口通信模块把相应的行列信息发送至电脑;按下键盘上的所有按键后,转换系统工作模式,使系统工作于分析模式下,根据扫描模式下的所有按键的位置信息分析键盘的行线、列线与空闲线,并通过LED显示板显示,同时把键盘的行列信息通过COM 口通信模块发送到笔记本电脑。图4为本发明提供的键盘矩阵分析方法中系统处于扫描模式下的操作流程图。
如图2所示本发明提供的键盘矩阵分析结构中包括M个LED灯,因此行线与列线的总数为24,把所有行线与列线标号1,2,3......24,依次进行以下步骤,如图4所示步骤S401,设置参数i为1 ;步骤S402,设置标号为i的引脚为低电平0,其他所有行线与列线的引脚为高电平 1 ;步骤S403jE M个引脚分成三组,每8个引脚的电平组成一个8位的二进制数,则 24个引脚的电平依次组成3个二进制数SUM1、SUM2与SUM3 ;步骤S404,判断SUM1、SUM2与SUM3是否满足以下条件(SUM1/SUM2/SUM3+1 && (i% 8)) % OxFF = 0若满足上述等式,表示此时没有按键按下,所有行线与列线的电平均未发生变化, 使参数i加上1,并判断此时参数i是否小于24,若i小于或等于M,则再进行第S403步; 若i大于对,从第S401步重新扫描;若不满足上述等式,表示此时有按键被按下,进行步骤S405 ;步骤S405,按下的按键与标号为i的引脚连接,导致另一根线的引脚变为低电平, 检测由高电平变为低电平的引脚,获得该引脚对应的行线或列线的标号j,在两根为低电平的行线与列线i与j中,一根为行线,另一根为列线,且二者对应的LED灯被点亮,显示该按键所在的位置;步骤S406,记录该按键与对应的行线与列线的标号信息。当系统处于扫描模式时,系统重复的扫描M根线,在扫描过程中的任意时刻按下任意一个按键后,则会判断出该按键的对应的行线或列线的信息。在上述扫描模式下的第S405步的等式中,%表示取模运算,8表示取i除以 8后的余数,&&表示二进制数的左移运算,且低位补零,1&& (i%8)表示把1左移(i% 8)位,且低位补零,OxFF为十六进制数,对应于二进制数的。当按下一个按键并设置任意一个引脚为低电平0后,为计算简便,根据所有引脚的电平得到3个8位的二进制数SUM1、SUM2与SUM3,若该按键与该低电平的引脚对应的行线或列线是相互连接的,则导致有另一个引脚由高电平变为低电平,即SUMl或SUM2或 SUM3会发生变化,若该按键与该低电平的引脚对应的行线或列线不是相互连接的,则SUMl 或SUM2或SUM3保持不变,因此通过第S405步的等式判断SUMl、SUM2与SUM3是否发生变化。若设置i = 3,则得到SUM1、SUM2与SUM3,与二进制数1000相加,判断相加后的结果是否能被二进制数整除,若能整除,表示M个引脚的电平中,只有标号为3的引脚为低电平,即按下的按键与该低电平的引脚对应的行线或列线不是相互连接的;若不能整除,表示M个引脚的电平中,除标号为3的引脚为低电平外,有另一个引脚为低电平,即按下的按键与该低电平的引脚对应的行线或列线是相互连接的,通过检测所有引脚电平即可获得另一个低电平的引脚j。当系统处于扫描模式时,利用以下表格记录扫描结果
1.一种键盘矩阵分析结构,其特征在于,包括主控制芯片,接收键盘接口与模式转换开关的信号,负责运算以及控制系统进行扫描、 分析并显示结果;键盘接口,连接键盘与所述主控制芯片;LED显示板,接收所述主控制芯片的输出信号,显示按键所在的行与列,以及键盘行列分析的结果;COM 口通信模块,接收所述主控制芯片的输出信号,输出分析结果至电脑,更新所述主控制芯片的程序;模式转换开关,负责系统在扫描模式与分析模式之间切换。
2.如权利要求1所述的键盘矩阵分析结构,其特征在于,所述主控制芯片内置存储器, 其存储容量为存放的扩展数据大于或等于100字节,且可存放的代码大于或等于5000字节。
3.如权利要求1所述的键盘矩阵分析结构,其特征在于,所述主控制芯片的通用I/O引脚等于或大于对。
4.如权利要求1所述的键盘矩阵分析结构,其特征在于,所述LED显示板包括电阻与发光二极管。
5.如权利要求4所述的键盘矩阵分析结构,其特征在于,一个电阻与一个发光二极管串联连接,形成一显示元素,八个所述显示元素并联连接,形成一显示单元,所述显示单元的一端连接高电平,另一端连接所述主控制芯片。
6.如权利要求1所述的键盘矩阵分析结构,其特征在于,所述模式转换开关为自锁按键开关。
7.如权利要求6所述的键盘矩阵分析结构,其特征在于,弹出所述自锁按键开关时,所述自锁按键开关连接高电平,系统工作于扫描模式,按下所述自锁按键开关时,所述自锁按键开关接地,系统工作于分析模式。
8.一种采用如权利要求1所述的键盘矩阵分析结构进行键盘矩阵分析的方法,包括以下步骤1)判断系统是否处于扫描模式,若系统工作于分析模式,则弹出所述模式转换开关;2)逐个按下键盘上的所有按键,每按下一个按键,代表该按键所在的行与列的LED灯被点亮,松开按键后,该LED灯熄灭,同时连接该LED灯的行线与列线的标号信息将传输到 COM 口通信模块;3)按下模式转换开关,使系统工作于分析模式;4)输出行线与列线的分析结果至LED显示板与COM口通信模块,LED显示板上显示键盘上的行线与列线的分布,代表行线的LED灯被点亮,代表列线的LED灯熄灭,代表空闲线的LED灯闪烁;同时,通过COM 口通信模块,行线与列线的分析结果传输至电脑。
9.如权利要求8所述的键盘矩阵分析方法,其特征在于,当系统处于扫描模式时,对所有行线与列线标号并设置电平,计算所有行线与列线的引脚的电平,判断按下的按键是否在引脚设置为低电平的行线或列线上,并检测引脚的电平变化,记录为低电平的两个引脚的标号。
10.如权利要求9所述的键盘矩阵分析方法,其特征在于,对所有行线与列线标号后,设置任意一行线或列线的引脚为低电平,其他行线或列线的引脚为高电平。
11.如权利要求8所述的键盘矩阵分析方法,其特征在于,当系统处于分析模式时,信息库L用来记录已经分析的行线与列线的状态,暂存库T用来备份信息库L中的信息,根据含有最多按键的线判断出行线、列线与空闲线,并在信息库L中把分析过的线的状态置1, 继续进行以下步骤1)判断信息库中是否均为1若信息库中均为1,则输出并显示结果;否则进行步骤2);2)把信息库中的信息备份至暂存库中;3)根据当前的行线或列线确定行线R与列线C,并在信息库中记录新增的已经分析的行线R与列线C的状态;4)判断当前的信息库与暂存库中的信息是否一致若不一致,重复步骤3);若一致,从未分析的线中任选一根线,设为行线或列线,并在信息库L中把该线的状态置1,继续进行步骤1);5)将行线、列线与空闲线的信息输出至LED显示板,通过LED灯显示,被点亮的LED灯表示该LED灯连接的线为行线,熄灭的LED灯表示该LED灯连接的线为列线,闪烁的LED灯表示该LED灯连接的线为空闲线,同时,将行列信息输出至电脑。
一种键盘矩阵分析结构,包括主控制芯片,负责接收键盘接口与模式转换开关的信号,控制系统进行扫描、分析并显示结果;键盘接口,连接键盘与主控制芯片;LED显示板,接收主控制芯片的输出信号,显示按键所在的行与列以及键盘行列分析的结果;COM口通信模块,接收主控制芯片的输出信号,输出分析结果至电脑,并更新主控制芯片的程序;模式转换开关,负责系统在扫描模式与分析模式之间切换。利用该键盘矩阵分析结构及分析方法,系统在扫描模式下按下一个按键就能获得该按键的位置信息,按下所有按键后系统进入分析模式,输出键盘行线、列线与空闲线的分布信息。整个分析过程时间短,效率高,操作简便。
文档编号G06F3/02GKSQ
公开日日 申请日期日 优先权日日
发明者朱跃强 申请人:南京百敖软件股份有限公司【新手求助】矩阵键盘检测问题 - 单片机论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
【新手求助】矩阵键盘检测问题
22:38:51  
& & 最近在编程序时,发现书本上写的矩阵键盘检测步骤是:先将某一行置0,其他行与列全部置1,然后扫描键盘端口值并与0xf0按位相与,当检测到按位与后的值与0xf0不同后,说明改行有键被按下,延时后再次检测,如果与之前一样,则读取与键盘相连的端口的值,用switch case语句对比,得出哪个键被按下了。用同样的方法再检测其他行。
& & 这个方法可行,但是我觉得太麻烦,直接扫描键盘,将读取后的值与switch case语句中的值比较就行了,为什么还要一行行检测呢?我试了我的方法,不行。但是我想不通为什么,请高手帮忙解释,谢谢了。
09:08:31  
如果一个I/O口就接一个按键,的确可以直接检测I/O口,就知道哪个按键按下,但如果需要较多按键时,此法会浪费很多I/O口,不合适。
所以需要进行扫描的方式,即节约I/O口,又扩展建盘。
以4X4键盘为例,P3口八个I/o口分四条列线,四条行线,各线都有四个按键,一条线上的端口值变化,可由四个按键中的任意一个按下实现,故需要多行扫描的方式。
另外还有线反转法扫描键盘,你可以看看。& & 目前我知道的8个I/O口最多接的为36个按键。
12:23:12  
请查看 反转扫描法。
15:53:49  
谢谢了,不过用以下程序为什么不行呢?
void keyscan()
& & & & //P3=0
& & & & temp=P3;
& & & & temp=temp&0xf0;
& & & & if(temp!=0xf0)
& & & & & & & & delay10ms();
& & & & & & & & temp=P3;
& & & & & & & & temp=temp&0xf0;
& & & & & & & & if(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & {case 0xee:
& & & & & & & & & & & & & & & & key=1;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xde:
& & & & & & & & & & & & & & & & key=2;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xbe:
& & & & & & & & & & & & & & & & key=3;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x7e:
& & & & & & & & & & & & & & & & key=4;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xed:
& & & & & & & & & & & & & & & & key=5;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xdd:
& & & & & & & & & & & & & & & & key=6;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xbd:
& & & & & & & & & & & & & & & & key=7;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x7d:
& & & & & & & & & & & & & & & & key=8;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xeb:
& & & & & & & & & & & & & & & & key=9;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xdb:
& & & & & & & & & & & & & & & & key=10;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xbb:
& & & & & & & & & & & & & & & & key=11;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x7b:
& & & & & & & & & & & & & & & & key=12;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xe7:
& & & & & & & & & & & & & & & & key=13;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xd7:
& & & & & & & & & & & & & & & & key=14;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xb7:
& & & & & & & & & & & & & & & & key=15;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x77:
& & & & & & & & & & & & & & & & key=16;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & while(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & }
& & & & & & & & desplay(key);& & & &
& & & & }& & & &
15:58:58  
补充说明以下:为什么用以下程序不行呢?
void keyscan()
& & & & temp=P3;//直接读取P3口的值
& & & & temp=temp&0xf0;
& & & & if(temp!=0xf0)/*
判断是否有按键按下,如果有键按下,P3.5~P3.7肯定有低电平,
所以temp不等于0xf0;*/
& & & & & & & & delay10ms();
& & & & & & & & temp=P3;
& & & & & & & & temp=temp&0xf0;
& & & & & & & & if(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & {case 0xee:
& & & & & & & & & & & & & & & & key=1;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xde:
& & & & & & & & & & & & & & & & key=2;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xbe:
& & & & & & & & & & & & & & & & key=3;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x7e:
& & & & & & & & & & & & & & & & key=4;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xed:
& & & & & & & & & & & & & & & & key=5;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xdd:
& & & & & & & & & & & & & & & & key=6;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xbd:
& & & & & & & & & & & & & & & & key=7;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x7d:
& & & & & & & & & & & & & & & & key=8;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xeb:
& & & & & & & & & & & & & & & & key=9;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xdb:
& & & & & & & & & & & & & & & & key=10;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xbb:
& & & & & & & & & & & & & & & & key=11;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x7b:
& & & & & & & & & & & & & & & & key=12;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xe7:
& & & & & & & & & & & & & & & & key=13;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xd7:
& & & & & & & & & & & & & & & & key=14;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0xb7:
& & & & & & & & & & & & & & & & key=15;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & case 0x77:
& & & & & & & & & & & & & & & & key=16;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & while(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & }
& & & & & & & & desplay(key);& & & &
& & & & }& & & &
18:46:01  
我不知道这样说对不对,矩阵键盘没按下时相当悬空,如果你想使用矩阵键盘,那么你应该先置某一I/O为低电平,当你按下键盘时该按键才会被拉低,这样才能读出有效值来。而现在你没先置某I/O为低电平,你即使按下某一按键那该按键还是高低平,即你读出P3口的值都是高电平...
高级工程师
19:13:28  
21:47:42  
楼主不理解矩阵键盘的原理啊!
22:50:09  
谢谢诸位,搞定了,呵呵!!
Powered by

我要回帖

更多关于 矩阵键盘 lcd1602显示 的文章

 

随机推荐