矩阵键盘

百燕之家 / 信息详情

求基于8051单片机用C语言编写的双矩阵键盘扫描程序(5个IO口控制25个按键)

5个按键确实可以控制25个按键,不过要加二极管。

51单片机。4*4矩阵键盘扫描程序

建议看一下行列式键盘的使用原理

谁来帮帮我做这个51单片机开发板关于矩阵键盘和数码管显示的实验题目。

你好!把你开发板的原理图发一下,程序是c语言写吗

一个RS232接口的矩阵键盘,需要每个按键按下后发送一个数据,请问怎么改在线等

怎么做才是对的

矩阵键盘扫描法和线反转法的电路图有什么不同

第一行后三个按钮和P2.0口没连上,按第二个键当然不会亮了 ,另外,最好每列都接一个上拉电阻加强防干扰能力

4*3矩阵键盘扫描C语言

循环加判断int i,j;for(i = 0; i < 3; i ++) //行 { for(j = 0; j < 4; j++) //列 { if(条件) //todo }}

求只用51单片机的5个I/O口就能扫描完5x5矩阵键盘的原理图,有程序更好。

你的单片机的 5 个 I/O 口支持 A/D 转换吗?支持的话可以实现。如果不支持,则无法实现。

汇编语言设计的单片机4*4矩阵键盘

/* 实验目的:1.掌握键盘扫描的原理以及十/十六进制的转换 * 2.了解单片机输入和输出的过程,以及如何对数据进行采集的 * 实验内容:键盘上对应有16个按键,从0到F,按下相应的键会在数码管上显示相应的数字, * 其中K0到K15是采用4*4的方式连接的 */ ;****************************************************************** ; 0 1 2 3 ---P20 ; 4 5 6 7 ---P21 ; 8 9 A B ---P22 ; C D E F ---P23 ; | | | | ; P24 P25 P26 P27 ;******************************************************************ORG 0000hLJMP MAINORG 0030hMAIN:MOV DPTR,#TAB ;将表头放入DPTRLCALL KEY ;调用键盘扫描程序MOVC A,@A+DPTR ;查表后将键值送入ACCMOV P0,A ;将Acc值送入P0口CLR P1.3 ;开显示LJMP MAIN ;返回调用子程序反复循环显示KEY: LCALL KS ;调用检测按键子程序 JNZ K1 ;有键按下继续 LCALL DELAY2 ;无键按下调用延时去抖动程序 AJMP KEY ;返回继续检测有无按键按下K1: LCALL DELAY2 LCALL DELAY2 ;有键按下继续延时去抖动 LCALL KS ;再一次调用检测按键程序 JNZ K2 ;确认有按下进行下一步 AJMP KEY ;无键按下返回继续检测K2: MOV R2,#0EFH ;将扫描值送入 R2暂存 MOV R4,#00H ;将第一列的列值00H送入R4暂存,R4用于存放列值。K3: MOV P2,R2 ;将R2的值送入P2口L6: JB P2.0,L1 ;P2.0等于1跳转到L1 MOV A,#00H ;将第一行的行值00H送入ACC AJMP LK ;跳转到键值处理程序L1: JB P2.1,L2 ;P2.1等于1跳转到L2 MOV A,#04H ;将第二行的行值送入ACC AJMP LK ;跳转到键值理程序进行键值处理L2: JB P2.2,L3 ;P1.2等于1跳转到L3 MOV A,#08H ;将第三行的行值送入ACC AJMP LK ;跳转到键值处理程序L3: JB P2.3,NEXT ;P2.3等于1跳转到NEXT处 MOV A,#0cH ;将第四行的行值送入ACCLK: ADD A,R4 ;行值与列值相加后的键值送入A PUSH ACC ;将A中的值送入堆栈暂存K4: LCALL DELAY2 ;调用延时去抖动程序 LCALL KS ;调用按键检测程序 JNZ K4 ;按键没有松开继续返回检测 POP ACC ;将堆栈的值送入ACC RETNEXT: INC R4 ;将列值加一 MOV A,R2 ;将R2的值送入A JNB ACC.7,KEY ;扫描完成跳至KEY处进行下一回合的扫描 RL A ;扫描未完成将A中的值右移一位进行下一列的扫描 MOV R2,A ;将ACC的值送入R2暂存 AJMP K3 ;跳转到K3继续KS: MOV P2,#0FH ;将P2口高四位置0低四位值1 MOV A,P2 ;读P2口 XRL A,#0FH ;将A中的值与A中的值相异或 RET ;子程序返回DELAY2: ;40ms延时去抖动子程序8*FA*2=40ms MOV R5,#08HL7: MOV R6,#0FAHL8: DJNZ R6,L8 DJNZ R5,L7 RETTAB: DB 0C0H;0 DB 0F9H;1 DB 0A4H;2 DB 0B0H;3 DB 099H;4 DB 092H;5 DB 082H;6 DB 0F8H;7 DB 080H;8 DB 090H;9 DB 088H;A DB 083H;b DB 0C6H;C DB 0A1H;d DB 086H;E DB 08EH;FEND

矩阵键盘的扫描与数码管数值的,具体用到了哪些模块

0一回到家打开的时候就看到了这个世界上最

51单片机 矩阵键盘扫描

什么意思

4X4矩阵键盘扫描原理

我来帮你搞定!

矩阵键盘扫描的原理是什么?

先扫描一排,判断有没有按键按下,如果有 在扫描另一排 根据坐标就找到按键了

10、行列式硬件(矩阵键盘扫描)扫描原理,以及软硬件如何实现?

按键有2个管脚,一个管脚接一个IO口,自定义MCU的IO口其中一个为输入、另一个为输出,在对输出进行翻转后读IO口状态,即输出为0时读一次状态输出为1时读一次状态,如果按键没有按下则两次状态相同且为初始状态,如果按键按下则状态改变,根据预定义好的状态代码即可确认按键。

使用如图矩阵键盘,ATMEGA16A单片机,键盘没有反应怎么解决?

您好,最好您直接换一台新的~

51单片机怎么用矩阵键盘让数码管加一减一,就是每两个键盘控制一个数

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit key1=P1^0;sbit key2=P1^1;uchar num=0;//共阴数码管七段码uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};void Delay1ms(uint i) //1ms延时程序{uint j;for(;i>0;i--){for(j=0;j<164;j++){;}}}void main(void )//主程序{ while(1) { if(key1==0)//判断按键1是否按下 { Delay1ms(10);//延时消抖 if(key2==0) { while(key1==0); num++; if(num==10)num=0;//等待按键抬起 } }if(key2==0)//判断按键2是否按下 { Delay1ms(10);//延时消抖 if(key2==0) { while(key2==0); num--; if(num==00)num=9;//等待按键抬起 } }P0=table[num]; }}

51单片机矩阵键盘如何实现两个键同时按下的时候显示其他数字,用c语言程序实现,

原理跟单键按下去显示数字是一样的呀。。。

51单片机矩阵4*4键盘程序,P0口接一个数码管,P2口接矩阵键盘

20块钱,Call me !

急!急!急!单片机4x4矩阵键盘的键值与红外遥控板的键值类型是否一样?

键值是不一样的,4x4矩阵键盘是直接读单片机的8位口。P0 P1 P2或是P3,是并行数据的键值。红外遥控板的键值是由一系列的串码构成的,常用的红外编码包括起始码+8bit用户码+8bit用户反码+8bit数据码+8bit数据反码+连发码。引导码(起始码)高电平9ms,低电平4.5ms;系统码8 位,数据码8 位,共32 位;其中前 16 位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后 16 位为 8 位的操作码和 8 位的操作反码,用于核对数据是否接收准确。收端根据数据码做出应该执行什么动作的判断。连发代码是在持续按键时发送的码。它告知接收端,某键是在被连续地按着。参考:http://www.ichanging.org/infra-red-decode.html红外遥控器给单片机发信号,遥控器的键值也会发过去,只不过发过去的是串行数据,需要单片机编程解码,一般使用定时器和外部中断解码,程序也有一定的复杂性,需要对C语言程序有一定基础,理解起来才会容易一些。

单片机用3*3矩阵键盘显示数字0~9

3*3 键盘只能是 0 - 8 !

单片机中用矩阵键盘的8个按键分别控制8个LED,当按下时亮,松手时灭,用switch语句

#include<reg51.>#define uchar unsigned charvoid delay(unsigned int a){unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);}uchar kbscan(void){unsigned char sccode,recode;P1=0x0f; //发0扫描,列线输入if ((P2 & 0x0f) != 0x0f) //有键按下{delay(20); //延时去抖动if ((P1&0x0f)!= 0x0f){sccode = 0xef; //逐行扫描初值while((sccode&0x01)!=0){P1=sccode;if((P1&0x0f)!=0x0f){recode=(P1&0x0f)|0xf0;return((~sccode)+(~recode));}elsesccode=(sccode<<1)|0x01;}}}P0=0xff;return 0; //无键按下,返回0}main(){unsigned char key;while(1){key=kbscan();switch(key){case 0x11:P0=0xfe;break;case 0x12:P0=0xfd;break;case 0x14:P0=0xfb;break;case 0x18:P0=0xf7;break; //+case 0x21:P0=0xef;break;case 0x22:P0=0xdf;break;case 0x24:P0=0xbf;break;case 0x28:P0=0x7f;break; //-default:break;}}}

想每次矩阵键盘输入,1602显示一个按键内容。目前按一次“1”(键却连续输出“1”,无法停止。

应该是你uchar keyscan()函数写的有问题,你把uchar keyscan()函数中的switch语句放到上面的if(key_l!=0xf0) 的里面。

求 用单片机AT89S52 4*4矩阵键盘 LCD1602 实现计算器的功能的C程序 .原理图 硬件 我以做出来

10元钱,我能写的。Q:270453171

请教单片机矩阵键盘使用什么芯片

HD7279之类的

单片机矩阵键盘键号的判别

看了半天,关键只有一句话:行号和列号都是从0开始的。多谢了

请问如何用单片机 获取矩阵键盘各按键的按下与松开的状态

定时5ms检测一次,比较两次的结果,无论是按下、还是释放,都可以检测出来。

用矩阵键盘上的键控制流水灯暂停的程序怎么编啊 用 C语言

楼主好!其实这个问题很简单 ,我觉得根本不用锁存器,感觉有点浪费,一般单片机IO都可以完成你所需要的功能:不知道楼主有没有注意到8X8点阵的实现方法,你要做的60个流水灯完全可以模仿点阵的构造结构来实现。查一下点阵的构造,60个流水灯的接法完全按照那个接法,只用16个IO口就行了,需要提醒你的是P1口的驱动能力还行 其他的需要上拉电阻。同时这个问题还有点类似矩阵键盘的控制。在你学会了你需要的60个流水灯的同时你还学会了点阵的控制,矩阵键盘的控制,一举多得,祝你学习愉快,单片机很有意思,我也是自学的。

单片机的矩阵键盘中为什么要用到P3=0xfe这条语句来将第一行线置低电平?

p3口为引脚有特殊功能,应该置低电平

单片机P2端口,我用矩阵键盘编写的调时程式出现乱码

矩阵键盘仿真实例,实例按键用了P1口,P0&P2是数码管显示,可以P2&P1对换试试(只要P1换成P2,P2换成P1就可以了,电路也要对换哦)。

51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能?

.......

单片机矩阵键盘的键号=行首字+列号

只不过是个标号而已啊

51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能?

单片机C语言程序设计师

51单片机运行程序,矩阵键盘和外部中断同时用到P3.2这个IO口该怎么解决

用到中断的时候打开,不用的时候关闭。

用STC12C5A60S2单片机做矩阵键盘

没问题,能做

单片机中的4×4矩阵键盘的键值怎么求?

单片机书上应该有讲的哦,多查资料。既然是4x4,即4行4列了,共需要8个I/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx。还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I/O口电平状态,每个按键需要两个I/O口,一端连接行(行4bit之一),一端连接列(列4bit之一);若此时按键的电平状态为0010 0001,即十六进制数据0x21,按下的按键所对应的键值编码即为0x21。当然为了使用方便,在确定了按下按键的编码后,可对其赋值,我要将它赋值为数字键8,方便后续编程使用。例://获取键值编码,由于确定哪个按键按下uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法{ uchar cord_h,cord_l;//行列值 P3=0x0f; //行线输出全为0 cord_h=P3&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 { delay(100); //去抖 if(cord_h!=0x0f) { cord_h=P3&0x0f; //读入列线值 P3=cord_h|0xf0; //输出当前列线值 cord_l=P3&0xf0; //读入行线值 return(cord_h+cord_l);//键盘最后组合码值 } }return(0xff); //返回该值}while(1){ key=keyscan();//调用键盘扫描,//keyVal=0~15表示按键对应的功能 switch(key) { case 0x7e:keyVal=0;break;//0 按下相应的键显示相对应的码值 case 0x7d:keyVal=1;break;//1 case 0x7b:keyVal=2;break;//2 case 0x77:keyVal=3;break;//3 case 0xbe:keyVal=4;break;//4 case 0xbd:keyVal=5;break;//5 case 0xbb:keyVal=6;break;//6 case 0xb7:keyVal=7;break;//7 case 0xde:keyVal=8;break;//8 case 0xdd:keyVal=9;break;//9 case 0xdb:keyVal=10;break;//a case 0xd7:keyVal=11;break;//b case 0xee:keyVal=12;break;//c case 0xed:keyVal=13;break;//d case 0xeb:keyVal=14;break;//e case 0xe7:keyVal=15;break;//f }

矩阵键盘程序,按键按一下显示出来一串

说明显示的键都是串联,如果短路也有这样情况。关键是主控,主控要现在流行键盘如果键盘矩阵电路没问题,只要接入正确应该没问题如果还是不行,就要用到万用表什么的,查查线路

单片机 4*4矩阵键盘

需要了HI我。我给你郭天祥的。

监控系统中矩阵键盘失控是什么原因?

监控矩阵常见故障问题及解决办法 本文通过讲解监控矩阵常见故障问题及解决办法,帮助大家提前判断监控矩阵的故障,提高维护水平,保障工程质量。 几乎所有的安防监控都需要使用到监控矩阵,监控矩阵的市场保有量非常的大,正确使用操作监控矩阵能够帮助我们提高工作效率。快速的对监控矩阵的故障进行有效的处理,既能够有效的提升工作效率,又能够增长知识。下面,列举一下监控矩阵常见故障问题及解决办法,和大家一起共同了解学习。 任何一种电子设备都会出现运行中的故障问题,监控矩阵也不例外。那么在出现问题的时候,该怎么入手进行处理呢。当出现故障时,常规的做法是,先自己进行排查处理,有疑问解决不了的话可以联系厂家协助,但是对于一些常见的小故障来说我们商家也要学会一些解决方法,因为这样能够节省很多的时间,能够快速缩短故障耽误的时间,下面就跟大家聊聊几种监控矩阵常见故障问题及解决办法。 第一、怎么样知道监控矩阵的运行是正常的呢? 这个问题可以比较快速的判断出来,我们首先检查监控矩阵设备的前面板POWER指示灯是否亮起,其次,我们要观察RUN灯和键盘后面指示灯每秒闪动一次,在键盘的液晶显示区,所显示的信息如时间是否能正确的显示时间。 第二、系统设置菜单无法调用出来? 当我们需要对监控矩阵的设置进行修改时,需要调试出菜单,但当菜单无法调试出来设置的时候,我们需要先检查监控矩阵设备是否正常工作,也是就上一个问题,看相关的指示灯是否正常,再进一步检查键盘锁,是否被锁住。 第三、部分通道切换失灵,无法进行切换? 有时候我们会发现有些切换失灵了,也就是说部分视频通道可以切换,部分通道切换不了,这个时候我们要做是先减少视频线路的连接,保证线缆的物理连接是否正常,接着再看看系统权限,是不是对我们关闭了某些权限,很多时候我们发现我们的监视器不是最高权限,部分摄像机是不能观看的,因此,要搞清楚自己的权限。 第四、怎么正确的选择监控矩阵和控制键盘? 我们的建议是选择与监控主机配套的控制键盘。安装的时候,如果我们的监控矩阵主机和控制键盘的距离相对较近的话,我们的网线的长度够用的情况下,最好是选择8芯扁线连接监控矩阵主机和键盘,而如果我们的矩阵主机和控制键盘的距离相对较远的话,目前的网线无法达到长度上的要求的话,建议选择键盘本地用变压器供电,用2芯485通讯线连接矩阵主机和键盘的方式。要特别注意的是,同一个键盘不能够同时采用上述两种接线的方式。 总结: 以上就是监控矩阵在使用及运行中常见的问题,通过本文的阅读,相信大家对监控矩阵常见故障问题及解决办法都有了一个全新的认识。

单片机实现5X5矩阵键盘

你case后面跟的:0xde&&0xff、0xbe&&0xff、0x7e&&0xff、0xfe&&0xfe、0xfe&&0xfd、0xdd&&0xff、0xbd&&0xff、0xfd&&0xfe、0xfd&&0xfd运算结果都是1.

4*4矩阵键盘在proteus中的英文名字

4*4矩阵键盘在proteus中的英文名字是KEYPAD。1、打开proteus,在原理图界面点击P按钮,进入元器件选择界面。2、在器件查找界面,关键词输入KEY,点enter键查找,选择SwitchesRelays,就得到四个搜索结果。3、单击查找结果,在右侧查看元器件符号,双击可添加元器件到器件栏。4、查找到的四种矩阵键盘,分别是计算器键盘、简易计算器键盘、电话键盘以及一个4*4键盘。

51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上

uchar keyscan(){ P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=4; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:num=5; break; case 0xdd:num=6; break; case 0xbd:num=7; break; case 0x7d:num=8; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:num=9; break; case 0xdb:num=10; break; case 0xbb:num=11; break; case 0x7b:num=12; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7:num=13; break; case 0xd7:num=14; break; case 0xb7:num=15; break; case 0x77:num=16; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } }return num;}

4*4矩阵键盘控制数码管的vhdl语言

http://www.21ic.com/app/power/201010/67123.htm

矩阵键盘怎么接入plc

如图所示,这个是三菱FX3U手册给出的一个8行2列矩阵键盘的接线图。望采纳。。。。。。

用2位数码管显示矩阵键盘值C语言

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};uint jzjp();void shumaguan(uint shu);void delay(uint z);void init();void main(){ init(); while(1) {shumaguan(jzjp()); }}void init(){}void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void shumaguan(uint shu){ uchar bai,shi,ge; bai=shu/100; shi=shu%100/10; ge=shu%10;dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(5);dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(5);dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(5);}uint jzjp(){ uint shu,num; uchar temp; P3=0xfe; temp=P3; temp=P3&0xf0; if(temp!=0xf0) { delay(5); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num=1*1; break; case 0xde:num=2*2; break; case 0xbe:num=3*3; break; case 0x7e:num=4*4; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; shumaguan(shu); } } } P3=0xfd; temp=P3; temp=P3&0xf0; if(temp!=0xf0) { delay(5); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:num=5*5; break; case 0xdd:num=6*6; break; case 0xbd:num=7*7; break; case 0x7d:num=8*8; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; shumaguan(shu); } } } P3=0xfb; temp=P3; temp=P3&0xf0; if(temp!=0xf0) { delay(5); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:num=9*9; break; case 0xdb:num=10*10; break; case 0xbb:num=11*11; break; case 0x7b:num=12*12; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; shumaguan(shu); } } } P3=0xf7; temp=P3; temp=P3&0xf0; if(temp!=0xf0) { delay(5); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7:num=13*13; break; case 0xd7:num=14*14; break; case 0xb7:num=15*15; break; case 0x77:num=16*16; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; shumaguan(shu); } } } return num;}

单片机矩阵键盘不同次数实现不同功能

不同次数实现不同功能,对按键次数计数,即可。按下第一次,输出1的段码,显示1;按下第二次,输出2的段码,显示2;……

这个矩阵键盘有可能锁住了,按错键了,哪位大神告诉我怎么解锁?上面显示数字我也把它拍下来了。

方法/步骤游戏中,我们点击右下角的科研瓶图标按钮,打开升级科技界面请点击输入图片描述打开升级科技界面后,我们点击进入科技页面中请点击输入图片描述在科技页面中,我们找到能量矩阵科技,点击启动,开始研究能量矩阵请点击输入图片描述接着我们可以看见研究进度,当这个进度条满了之后,我们就将能量矩阵解锁了请点击输入图片描述

矩阵键盘code灯一直闪烁

system locked 是系统锁住的意思矩阵系统被锁死,是不能进行任何切换图像的解决办法:1.自己先试试输入4个或者5个相同的数字,比如0000、4444、88888、、、、、看下这些密码能不能解锁,能的话,最好,不能的话2.只有找生产此矩阵厂家找密码解锁了3.能进入系统后,在里面设置权限密码,就ok了

单片机中独立键盘和矩阵键盘如何一起使用 请用C语言写个程序说明,谢谢。

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit du = P2^6;sbit we = P2^7;sbit s2 = P3^0;sbit s3 = P3^1;sbit s4 = P3^2;sbit s5 = P3^3;sbit led1 = P1^0;uchar code t[]={0x3F, //"0"0x06, //"1"0x5B, //"2"0x4F, //"3"0x66, //"4"0x6D, //"5"0x7D, //"6"0x07, //"7"0x7F, //"8"0x6F, //"9"0x77, //"A"0x7C, //"B"0x39, //"C"0x5E, //"D"0x79, //"E"0x71, //"F"0x76, //"H"0x38, //"L"0x37, //"n"0x3E, //"u"0x73, //"P"0x5C, //"o"0x40, //"-"0x00, //熄灭0x00 //自定义};void delay(uint z){uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);}uchar keyscan(){uchar cord_l,cord_h;P3 = 0xf0;if((P3 & 0xf0) != 0xf0){delay(5);if((P3 & 0xf0) != 0xf0){cord_l = P3 & 0xf0;P3 = cord_l | 0x0f;cord_h = P3 & 0x0f;while((P3 & 0x0f) != 0x0f);P3 = 0xff;return(cord_l + cord_h);}}}void keypro(){switch (keyscan()){case 0xee: P1 = t[1]; break;case 0xde: P1 = t[2]; break;case 0xbe: P1 = t[3]; break;case 0x7e: P1 = t[4]; break;case 0xed: P1 = t[5]; break;case 0xdd: P1 = t[6]; break;case 0xbd: P1 = t[7]; break;case 0x7d: P1 = t[8]; break;case 0xeb: P1 = t[9]; break;case 0xdb: P1 = t[10]; break;case 0xbb: P1 = t[11]; break;case 0x7b: P1 = t[12]; break;case 0xe7: P1 = t[13]; break;case 0xd7: P1 = t[14]; break;case 0xb7: P1 = t[15]; break;case 0x77: P1 = t[16]; break;}}void alonekey(){P3 = 0xff;if(s2 == 0){delay(5);if(s2 == 0){led1 = 0;}while(!s2);}}void main(){while(1){keypro();alonekey();}}我的也是同一个P3口

4*4矩阵键盘怎么接线

每个按键分别接x轴和y轴,然后4个一组同一端连在一起,然后再连一下y轴

求MSP430单片机4X4矩阵键盘的中断扫描程序?

//msp430F1494*4矩阵键盘P1口中断扫描#include<msp430x14x.h>#defineKEY_DIRP1DIR#defineKEY_OUTP1OUT#defineKEY_INP1IN#defineKEY_IEP1IE#defineKEY_IESP1IES#defineKEY_IFGP1IFG/***************全局变量***************/unsignedcharKey_Val;//存放键值voidCtrlKey(unsignedcharsw);//控制键盘开关//sw=0关sw=1开/*******************************************函数名称:Init_Keypad功能:初始化扫描键盘的IO端口参数:无返回值:无********************************************/voidInit_Keypad(void){KEY_DIR=0x0f;//P1.0~P1.3设置为输出状态,P1.4~P1.7输入状态(上拉H)KEY_OUT=0;KEY_IES=0xf0;//P1.4~P1.7允许中断KEY_IE=0xf0;//P1.4~P1.7下降沿触发中断KEY_IFG=0;//中断标志清0Key_Val=0;}/*******************************************函数名称:Check_Key功能:扫描键盘的IO端口,获得键值参数:无返回值:无********************************************///p14567接上拉电阻/***************************************key_Val对应键值列:[p14][p15][p16][p17]↓↓↓↓行:[p13]→1234[p12]→5678[p11]→9101112[p10]→13141516***************************************/voidCheck_Key(void){unsignedcharrow,col,tmp1,tmp2;unsignedcharkeymap[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//设置键盘逻辑键值与程序计算键值的映射tmp1=0x08;for(row=0;row<4;row++)//行扫描{KEY_OUT=0x0f;//P1.4~P1.7输出全1KEY_OUT-=tmp1;//P1.4~p1.7输出四位中有一个为0tmp1>>=1;if((KEY_IN&0xf0)<0xf0)//是否P1IN的P1.0~P1.3中有一位为0{tmp2=0x10;//tmp2用于检测出哪一位为0for(col=0;col<4;col++)//列检测{if((KEY_IN&tmp2)==0x00)//是否是该列,等于0为是{Key_Val=keymap[row*4+col];//获取键值return;//退出循环}tmp2<<=1;//tmp2右移1位}}}}/*******************************************函数名称:delay功能:延时约15ms,完成消抖功能参数:无返回值:t=tmp*5*clk根据使用时钟调整tmp值********************************************/voiddelay(void){unsignedinttmp;for(tmp=12000;tmp>0;tmp--);}/*******************************************函数名称:Key_Event功能:检测按键,并获取键值参数:无返回值:无********************************************/voidKey_Event(void){unsignedchartmp;KEY_OUT=0;//设置P1OUT全为0,等待按键输入tmp=KEY_IN;//获取p1INif((tmp&0xf0)<0xf0)//如果有键按下{delay();//消除抖动Check_Key();//调用check_Key(),获取键值}}/*********************************************************************控制打开或者关闭键盘中断SW=0:关闭;ELSE:打开*********************************************************************/voidCtrlKey(unsignedcharsw){if(sw==0)KEY_IE=0;//关闭端口中断elseKEY_IE=0xf0;//打开端口中断}/*端口1按键中断*/#pragmavector=PORT1_VECTOR__interruptvoidPort(void){if((KEY_IFG&0xf0)!=0){Key_Event();if(Key_Val!=0)//键值!=0有键按下{CtrlKey(0);//关键盘中断}}KEY_IFG=0;KEY_OUT=0;//清中断标志}

51单片机矩阵键盘代码

#include #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display(uchar num) { P0=table[num]; dula=1; //P0=table[num]; dula=0; //delayms(500); } void matrixkeyscan() { uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp != 0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } display(key); } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp != 0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } display(key); } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp != 0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } display(key); } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp != 0xf0) { delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } display(key); } } } void main() { P0=0; dula=1; dula=0; P0=0xc0; wela=1; //P0=0xc0; wela=0; while(1) { matrixkeyscan(); } }

矩阵键盘和独立按键的区别是什么?

独立按键:一个按键占用单独的一个I/O口;矩阵键盘:为了节省I/O口,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。(上个图,一看就明白)

矩阵键盘原理图

矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。矩阵键盘<1>确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

矩阵键盘的组成结构

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

怎样知道单片机的矩阵键盘每个按键的地址?

得根据电路连接判断,根据按揭后,采集的值确定哪个键按下了

51单片机矩阵键盘输入液晶屏不显示怎么回事

Delay.cvoid Delay(unsigned int xms) { //延迟x毫秒 while(xms--) { unsigned char i, j; i = 12; j = 169; do { while (--j); } while (--i); }}12345678910111213141234567891011121314MatrixKey.c#include <REGX52.H>#include "Delay.h"#define KEY_SCAN P1void MatrixKey(unsigned char* keyValue){ KEY_SCAN = 0X0F; if(KEY_SCAN!=0X0F) { //判断是否按下 Delay(10); //消除抖动 KEY_SCAN = 0X0F; //列扫描 switch(KEY_SCAN) { case 0X07:*keyValue = 0;break; case 0X0B:*keyValue = 1;break; case 0X0D:*keyValue = 2;break; case 0X0E:*keyValue = 3;break; } KEY_SCAN = 0XF0; //行扫描 switch(KEY_SCAN) { case 0X70:*keyValue = *keyValue;break; case 0XB0:*keyValue += 4;break; case 0XD0:*keyValue += 8;break; case 0XE0:*keyValue += 12;break; } while(KEY_SCAN!=0XF0) { //检测按键是否松开,松开时返回键值 Delay(10); } } }12345678910111213141516171819202122232425262728293031323334

谁能给我讲明白单片机的4x4矩阵键盘工作原理

首先,给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。因此P1的值就不等于0xf0,这是就可以判断有按键按下。 然后延时一段时间去抖动,然后给P1赋值0xfe,也就是P1^0为低电平,其他为高电平,这时如果有在P1^0线上的P1^4,P1^5,P1^6,P1^7有按键按下,那么就会出现低电平,从而判断哪个按键按下;如果没有那么就给P1赋值0xfd,也就是P1^1为低电平,其他为高电平.,相同方法判断是否有按键按下;如果没有那么就给P1赋值0xfb·····如此类推,一共四次检测。

在proteus中有现成的矩阵键盘吗?有的话请问怎么找?没有的话请问怎么办啊?

有的,在元件里面按照下面名称查找就可以了。1、打开proteus,在原理图界面点击P按钮,进入元器件选择界面;2、在器件查找界面,关键词输入KEY,点enter键查找,然后选择Switches & Relays,就得到四个搜索结果;3、单击查找结果,即可在右侧查看元器件符号,双击可添加元器件到器件栏;4、以下是查找到的四种矩阵键盘,分别是计算器键盘、简易计算器键盘、电话键盘以及一个4*4键盘。如果没有你需要的,也可以自己使用单独的BUTTON按键连接。比如4*4矩阵键盘,如下图所示,4×4矩阵键盘由4条行线和4条列线组成,行线接P3.0-P3.3,列线接P3.4-P3.7,按键位于每条行线和列线的交叉点上。按键的识别可采用行扫描法和线反转法。

矩阵键盘的识别方法

这道题我放弃了,找不到答案

矩阵键盘的按键识别方法

  在学习有关矩阵键盘的时候,往往要学会矩阵键盘的按键识别方法,那么矩阵键盘的按键识别方法有哪些呢?我带着你来了解   方法一 行扫描法   1、判断键盘中有无键按下 将全部行线P1.4-P1.7置低电平,当然P1.0-P1.3为高电平(或许芯片内部已经将这些引脚它上拉),然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。   2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。   方法二   先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。

单片机独立键盘和矩阵键盘的对比,他们的优缺点是什么

独立键盘:编程简单,但是浪费IO口,毕竟单片机系统的IO资源很有限。矩阵键盘:编程复杂,但是节省IO口。不过,目前该方面资料很好查找,所以超过6个以上按键推荐用矩阵方式。

谁能给我讲明白单片机的4x4矩阵键盘工作原理

给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。因此P1的值就不等于0xf0,这是就可以判断有按键按下。4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。扩展资料:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。参考资料来源:百度百科-矩阵键盘

矩阵键盘的作用

矩阵键盘的用途很广,比如:计算器,遥控器,触摸屏ID产品,银行的提钱机,密码输入器 当键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。故在需要的键数比较多时,采用矩阵法来做键盘是更合理的方案。

4x4矩阵键盘的工作原理是什么?

扫描的工作方式,就是 P1.7~P1.5 轮流 输出 低电平,然后读入P1.3~P1.0,判断,如果有按下,就是低电平,没按下的都是高电平,当然要延时10ms,去抖动。

下面这个4*5矩阵键盘原理是什么,比方key=4*l+r;这个是什么思路?有些地方好像也不太通!

视屏采集卡

51单片机4×4矩阵键盘仿真哪里找

51单片机4×4矩阵键盘仿真哪里找4*4 矩阵键盘布局如下,检测按键,然后通过 LCD1602 显示出来第一行:The key value is第二行:每按一次键,键值依次显示出来,整行显示完后,清屏,键值
 1 2  下一页  尾页