2749|6

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

键盘扫描问题 [复制链接]

#include
#include
#define  uchar  unsigned  char
#define  unit  unsigned  int
void  delays(void)
uchar kbscan(void)
  uchar main (void)
{uchar key;
while(1)
{key=kbscan();//键盘扫描函数
   delays();//消抖延时函数
  }
}
//消抖延时函数
void delays(void)
{uchar i;
for(i=300;i>0;i--);
}
//kbscan(void)键盘扫描函数
uchar kbscan(void)
{uchar sccode,recode;
  P1=0xf0;//发全0行扫描码,列线输入
if((P1&0xf0)!=0xf0)//若有键按下
{delays();//消抖延时
if((P1&0xf0)!=0xf0)//确实有键盘按下
{sccode=0xfe;//逐行扫描初值
while((sccode&0x10)!=0)//判断是否是最后一行
{P1=sccode;//输出行扫描码
if((P1&0xf0)!=0xf0)//本行有键盘按下
{recode=(P1&0xf0)10x0f;
return((~sccode)+(~recode));//返回特征字节码
}else sccode=(sccode<<1)10x01;//行扫描左移一位
}
}
}return(0);//无键盘按下,返回0
}

1、while((sccode&0x10)!=0)这句怎么理解啊   为什么行扫描设定初值后下条语句就是判断是否最后一行了  这个问题真的不甚理解啊
搞了我好几天啦  

最新回复

0x10等于10000000吗二进制 它判断最后一行明显是功能键的判断。为什么是这样 我不懂   详情 回复 发表于 2008-8-1 17:43
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
其实它是一个判断语句,while()里面(sccode&0x10)!=0是判断语句,sccode&0x10

即scode与10000000每位相与,只有最高位为1有效,但是不代表它就是判断最后一行,

那要看你的具体电路是怎么连的,比如这里也可以(sccode&0x01)!=0,你可能是这样写

才觉得是在扫描第一行吧,其实这两个道理是一样的,只不过一个从高位开始接,一个从

低位开始接,你再结合实际电路看看吧
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
其实它是一个判断语句,while()里面(sccode&0x10)!=0是判断语句,sccode&0x10

即scode与10000000每位相与,只有最高位为1有效,但是不代表它就是判断最后一行,

那要看你的具体电路是怎么连的,比如这里也可以(sccode&0x01)!=0,你可能是这样写

才觉得是在扫描第一行吧,其实这两个道理是一样的,只不过一个从高位开始接,一个从

低位开始接,你再结合实际电路看看吧
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
"P1=0xf0;//发全0行扫描码,列线输入
if((P1&0xf0)!=0xf0)//若有键按下 "

P1=0xf0什么意思呀?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
你这是4*4的键盘吧。
P1=0xf0的意思是p1.4-P1.7设置为输入,P1.0-P1.3为输出0。
然后读P1口,判断P1的高4位看是否有键。
有键的话,再P1.0-P1.3依次输出0,回读P1口。就可以判断是哪个键按下了。
只不过这个按键程序太差了。没有一个编程的结构。
它判断最后一行明显是功能键的判断。就像PC键盘的Ctrl、Shift等。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
low-key
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
0x10等于10000000吗二进制

它判断最后一行明显是功能键的判断。为什么是这样
我不懂
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表