为什么51单片机的矩阵键盘不可以让单片机对整个p3进行扫描,例如判断p3是否为0xee 而要逐行逐
一般赋值为FFH,然后分别给各列(行)置0,检测相应的行(列)值以确定按键位置,获得键值。矩阵键盘也独立按键一般不放到同一个IO口的。
这个问题是这样的,首先单片机的c语言和电脑的编译器不是一样的,你要考虑硬件,下面步入正题:
P3=0xfe; //P3等于0xfe
temp=P3; //temp等于P3等于0xfe
temp=temp&0xf0; //到这里,如果你按下矩阵键盘的第一个键,那么temp等于0xee
temp=0xee&0xf0=0xe0
while(temp!=0xf0) //你这里打错了,不是while语句是if语句,现在temp的值是0xe0
0xe0不等于0xf0,所以进入语句内部
{
delay(5); //去抖动
temp=P3; //现在赋值,这是你还在按着第一个键,那么P3=0xee,所以temp等于0xee
temp=temp&0xf0; //temp=0xee&0xf0=0xe0,“看这里,这是temp=0xe0”
while(temp!=0xf0) //这里还是写错了,是if语句,0xe0不等于0xf0再次进入语句内部
{
temp=P3;//在没执行这一步的时候,temp的值是0xe0,如果不把P3的值赋予temp
那么当进入switch语句后就没有相应的case,这是你还在按键,那么
P3=0xee,所以temp也等于0xee,然后进入switch语句判断,进入
相应的case
switch(temp)
因为列线是共用的,行线也是共用。
所以,只能逐行(或逐列)的检测。
不能一次性全部读出。
51单片机内部ram分哪几个区?
MCS-51单片机内部RAM可分为5个区:1、存储矩阵区:RAM的核心区域是一个寄存器矩阵,用来存储信息,称为存储矩区。2、地址译码器区:地址译码器区的作用是将寄存器地址所对应的二进制数译成有效的行选信号和列选信号,从而选中该存储单元。3、读\/写控制器区:访问RAM时,对被选中的寄存器进行读操作还...
51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现_百度...
在显示模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。键阵键盘多用于键数目较多的时候。这样可以更多的节省IO口的占用量,对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,...
用C51单片机和内部定时器来产生矩形波,要求频率为100HZ,占空比为2:1...
100HZ的矩形波,周期就是10ms,占空比2:1,就是高的部分占10ms的2\/3,低的部分占10ms的1\/3。理解了吗?
51单片机,怎么用矩阵键盘中的两个按键控制外部中断0和1,在按按键的时...
让 P3.7 始终为 0,然后就是按 S12 触发外部中断 0,按 S16 触发外部中断 1。
51单片机如何用矩阵按键输入多位数,比如输入6显示6,再输入7显示67,最...
用数组啊,如果是指定位数的就比较简单 当第一次输入时i=0,第一个数6放a[0],i=1,第二个数7放a[1],显示就是 OUT= a[0] * 10 + a[1] * 1 数组用之前初始化为0,a[2] = {0} \/\/这个好用点,递推if(key_data)\/\/有按键按下{ for(i = key_count ;i>0;i--;)...
c51单片机矩形键盘检测问题 急急!!!
然后是矩阵键盘扫描的部分,你写的是0x7f,矩阵键盘扫描的原理应该是从底四位轮流输入低电平,然后再从高四位进行读取数据,检测到低电平时,说明该按键被按下。那么在你的 P1=0x7f;temp=P1;temp=temp&0x0f;后面应该用一个if判断语句,而不是直接进入while循环然后消抖,你试试这样写 P1=0x7f;tem...
关于一个c51单片机的4*4矩阵键盘扫描程序,我用keil运行,总是有错误...
\/\/单片机:使用51系列兼容的即可;\/\/4×4矩阵键盘:接在P1口;\/\/两位数码显示器: P0口输出七段码,P2口输出位选码。\/\/=== \/\/C语言程序如下。\/ 文件名: KEY_LED.c 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。\/ include <reg51.h> include <intrins.h> define uint ...
51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上
你好!!你做矩阵键盘检测的时候,会触发相关的IO口的状态,通过分析IO口,就能知道那个键按下;定义一个变量,将按下的键值赋给变量就行了
求51单片机最简单的矩阵按键程序
scan0=P1;delay1ms(20);if(scan0!=0xf0) \/\/判键是否按下 { scan0=P1;if(scan0!=0xf0) \/\/二次判键是否按下 { P1=0x0f;delay1ms(20);scan1=P1;keycode=scan0|scan1; \/\/组合成键编码 for(m=0;m<16;m++){ if(keycode==x[m]) \/\/查表得键值 { key=m;} } }...
51单片机的问题,矩阵键盘和独立键盘混乱了。。。求帮助
你好:这是郭天祥的板子的按键接口。s6、10、14、18与s2接在一起了,s7、11、15、19与s3接在一起了。。。这样使用矩阵键盘时,独立按键对矩阵的影响是非常大的。希望我的回答能帮助到你。
汲亚足光: 矩阵键盘,也就是行列式键盘.因为列线是共用的,行线也是共用.所以,只能逐行(或逐列)的检测.不能一次性全部读出.
遂溪县13512387043: 51单片机4*4矩阵键盘如何同时实现单击+双击的功能? - ?
汲亚足光: 一般地,我们的键盘检测都有一个按键码存储字节,一般情况下,只要检测到有效按键,那么这个存储字节的按键码就有效,也就是单击.何为双击呢?双击就是在监测到该按键后在该按键要有作用(这个作用就是单击)之前又检测到该按键,然后就当作了双击.那怎么实现这一判断呢?我们只要加一个软计数器,当检测到有效按键后,该计数器开始向下计数,如果计数器自然减到了0那么就是单击生效;如果在该计数器值没有减到0之前又检测到该按键,那么就是双击立马有效同时计数器归零.这个计数器肯定是ms级的,也就是要在定时器里工作,只要它不为0,那么定时器中断服务就对它减1操作,因此计数器本身同时就是一个开关量,而触发它的是检测到有效按键.
遂溪县13512387043: 51单片机矩4X4阵键盘的第一排按键没反应. - ?
汲亚足光: 你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试
遂溪县13512387043: 关于51单片机的问题,独立键盘和矩阵键盘怎么同时使用?懂的来帮帮忙啊! - ?
汲亚足光: 你是不是按下下方的四个按键也会让1,2,3,4灯亮起来? 你可以不要定义在同一个引脚上连起来一个引脚的四个按键,你试试控制8个单片机不同引脚上的按键编程一下试一试. 程序上,你的独立按键程序和矩阵键盘程序要分开,独立键盘的程序高低四位判断是相反的,这个一定要注意.你可以让独立按键在那里扫描,矩阵键盘用标志位扫描一下,一旦标志位置位才扫描矩阵,就差不多了. 最好事前检查一下你电路连接方式,分析一下,看不见你的原理图,不太好说,先试试上面的方法吧. 一孔之见,希望对你有帮助吧.
遂溪县13512387043: 单片机键盘失灵 - ?
汲亚足光: 在你的单片机的板子上找原因,一是这键盘是用一个接插件插到你的板子上的吧,你的板子上的这个接插件有个脚没有焊好,或者板子连这个脚的导线有断的地方,用万用表测一下吧.看你的意思,这个板子是你自己焊的吧,与室友同焊一样的...
遂溪县13512387043: 单片机独立键盘和4*4矩阵键盘中松手检测的区别,为什么矩阵键盘不能使用独立键盘的松手检测? - ?
汲亚足光: 楼主提供的程序,并不完整,不好讨论.一般来说,4*4矩阵键盘函数的返回值是:按键信息0~15,和没有按键的代码16.当有键按下后,还要反复检测按键,当得到返回值是16,才能认为全部按键都已经松手.独立键盘,while(key!=0);只是等待这个按键盘何时松手,其它键,假如仍然按着,程序也不管了.独立键盘的检测,实在是太简单了.
遂溪县13512387043: C 51单片机 矩阵按键 - ?
汲亚足光: 首先记住,你的是矩阵键盘,就是说一个按键A的一端接单片机的一个脚(假设P00),另一个也接一个脚(假设P07), GPIO_KEY=0x0f; 当没有按下的话,GPIO_KEY还是等于0x0f的,假设按下A按键,由于按键两边一个接高电平,一个接低电平,按下后,高电平被低电平拉成低电平,也就是说按键A两侧都是0,此时不就可以判定了嘛
遂溪县13512387043: 51单片机的问题,矩阵键盘和独立键盘混乱了...求帮助 - ?
汲亚足光: 你好:这是郭天祥的板子的按键接口.s6、10、14、18与s2接在一起了,s7、11、15、19与s3接在一起了...这样使用矩阵键盘时,独立按键对矩阵的影响是非常大的.希望我的回答能帮助到你.
遂溪县13512387043: 51单片机矩阵按键(行列扫描)P1作为输入口的话,始终检测不到,换成P0,P2P3都可以,不知道为什么?? - ?
汲亚足光: 我也遇到过类似的问题,加上上拉电阻就好了 我当时是驱动舵机的,用P0、P2、P3都是可以的,换到P1就不行了 加上1K-10K的上拉电阻就可以了
遂溪县13512387043: 怎么讲51单片机的矩阵键盘和独立键盘分开扫描不让他们冲突,应该给P3首先赋什么值,然后给它赋什么值 - ?
汲亚足光: 一般赋值为FFH,然后分别给各列(行)置0,检测相应的行(列)值以确定按键位置,获得键值.矩阵键盘也独立按键一般不放到同一个IO口的.