找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5975|回复: 5
收起左侧

哪位高手帮我看看这个4*4矩阵键扫描函数谢谢

[复制链接]
ID:15792 发表于 2009-7-31 17:22 | 显示全部楼层 |阅读模式
 

4*4矩阵键扫描函数,我有一句话不明白,

麻哪位给我解释一下多谢

Uchar kbscan(void)

Uchar sccode,recode

P1=0xf0

If(p1&0xf0)!=0xf0

{sccode=0xfe

While((sccode&0x10)!=0)这句是什么意思???

{p1=sccode;

If((p1&0xf0)!=0xf0)

{recode=(p1&0xf0)|0xf0)

Return((~sccode)+(~recode))

}

Else

Sccode=(sccode<<1)|0x01}}}return(0)}

回复

使用道具 举报

ID:12258 发表于 2009-7-31 22:56 | 显示全部楼层

这一句放在这里的意思是:当sccode.4=1时,执行while的内嵌语句,当sccode.4=0时,结束循环!

回复

使用道具 举报

ID:15792 发表于 2009-8-1 10:40 | 显示全部楼层

谢谢刚才的回答,p1.0-p1.3是行扫描输出线p1.4-p1.7是列检测输入线,将第一行置0,列线也为0这个条件怎么判断,sccode。4是列线判断它有什么用

回复

使用道具 举报

ID:12258 发表于 2009-8-1 17:35 | 显示全部楼层

将第一行置0,则相当于第一行所有按键的公共端接地,这时你就可以通过检测P1.4-P1.7的信号来确定是第一行的哪个按键按下。sccode.4应该是对应与P1.4的吧,
判断他可以确定它所对应的按键是否按下,如果sccode.4=0,则按键按下!

回复

使用道具 举报

ID:15792 发表于 2009-8-5 10:22 | 显示全部楼层
p1.4是第一列呀,而且是是固定的,那另外三列如何检测呢?我想把列信号输入来比对,是这个意思吧它的p1。4我不明白难道它是列信号吗
回复

使用道具 举报

ID:12258 发表于 2009-8-5 21:28 | 显示全部楼层

你读取P1口的信号,按下相应的按键应该只有一个值与之相对应!譬如:你置第一行为0,如果你按下的按键是P1.4所接的按键,那么,P1口的数值应该是01110111即0x77。
如果你要检测第一列其他行的按键,那么你只要将对应行置0即可!别忘了,每一次只能有一行为0,这样行与列的交点就只有一个,那个点就是你要检测的按键!
P1.0-P1.3是需要你来设置的位,它代表你选通的行;而P1.4-P1.7就是你用来检测按键用的位,它代表你所按下的按键所在的列!
知道按键在第几行第几列了,你不就知道是哪个按键了吗!!!

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表