矩阵键盘行列扫描有什么区别吗

为什么我的代码写出来列扫描的效果比行扫描的好啊?我编写的是按下矩阵键盘的某一个按键,然后在数码管上显示相应的字符。但是行扫描有时候会失灵,会“串码”,但是用列扫描写出来的... 为什么我的代码写出来列扫描的效果比行扫描的好啊?
我编写的是按下矩阵键盘的某一个按键,然后在数码管上显示相应的字符。但是行扫描有时候会失灵,会“串码”,但是用列扫描写出来的时候显示就很顺畅。
这是什么原因啊?两种方式的代码基本是一样的,几乎没差别啊。

列扫描代码如下:
/*名称:行扫描方式矩阵键盘并显示字符
说明:用行扫描的方式来确定按键,并将相应的字符在数码管上显示。首先是将输入的按键转化成编号,再在数码管上显示编号对应的字符。
总结:行扫描是矩阵键盘的其中一种按键确定方式,至于其他方式,我会慢慢摸索的,嘿嘿。
*/
#include <reg51.h>
#include "num.c"
#define unchar unsigned char
#define uint unsigned int
char trans[]={12,8,4,0,13,9,5,1,14,10,6,2,15,11,7,3};
char dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
char row[]={0xef,0xdf,0xbf,0x7f};

char scanskey()
{
char i,j,ini,inj,in;
bit find; //这里,bit只占一位,它和sbit是有区别的
for(i=0;i<4;i++) //列扫描开始啦。。
{
P3=row[i];
delay(10);
in=P3;in=in<<4;in=in|0x0f; //这里是将P3口高位转化到低位来,以便后面的比较
for(j=0;j<4;j++)
{
if(row[j]==in)
{find=1;ini=i;inj=j;} //find是确定有按键输入的标志
}
}
if(find==0)return -1;
else return (ini+inj*4); //由于是4*4矩阵,所以要用四进制
}

void main()
{
char keyvalue;
char c;
while(1)
{
c=scanskey();
if(c!=-1)keyvalue=trans[c];
P0=dis[keyvalue];P2=0xfe;delay(1);//在数码管上显示数字
}
}
展开
 我来答
做而论道
高能答主

2012-01-13 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式