unsigned int key = 0xffff; //扫描码,0有效
void key_scan(void){
unsigned char temp;
for(i = 1 ; i < 0x10 ; i << = 1){
rPDATA | = 0x0f ; //低四位为行,设置为输出,高4位为列,设置为输入
rPDATA & = ~ i ; //依次扫描,1,2,3,4行
delay_ms(20) ; //过滤回弹
temp = rPDATA ; //读端口高4位的值
temp >> = 4 ;
key << = 4 ;
key | = temp; //把读到的值存到key中指定的位
}
return key ;
}
比如说,第一行第一列,对应的扫描码就是0xEFFF,全部写出来吧,还是,
{0xEFFF,0xDFFF,0xBFFF,0x7FFF,
0xFEFF,0xFDFF,0xFBFF,0xF7FF,
0xFFEF,0xFFDF,0xFFBF,0xFF7F,
0xFFFE,0xFFFD,0xFFFB,0xFFF7
}
看书后写的,不知道有没有问题,明天仿下看看。
刚仿过了,这个方法是可以行的,附件是仿真的文件,我没有做防抖之类的保护,所以,按一个按键时,会发送多个字符,本意是按一次按键,发送一个对应的字符的https://static.assets-stash.eet-china.com/album/old-resources/2009/6/24/0833bdbf-6a2f-4443-adc0-5b0fb37b279a.zip
文章评论(0条评论)
登录后参与讨论