标题: 哪位高手帮我看看这个4*4矩阵键扫描函数谢谢 [打印本页]

作者: banti27334066    时间: 2009-7-31 17:22
标题: 哪位高手帮我看看这个4*4矩阵键扫描函数谢谢
 

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)}


作者: any_zhou    时间: 2009-7-31 22:56

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


作者: banti27334066    时间: 2009-8-1 10:40

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


作者: any_zhou    时间: 2009-8-1 17:35

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


作者: banti27334066    时间: 2009-8-5 10:22
p1.4是第一列呀,而且是是固定的,那另外三列如何检测呢?我想把列信号输入来比对,是这个意思吧它的p1。4我不明白难道它是列信号吗

作者: any_zhou    时间: 2009-8-5 21:28

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






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1