新闻  |   论坛  |   博客  |   在线研讨会
4*4键盘扫描
0750long | 2009-07-11 20:34:10    阅读:1710   发布文章

4*4键盘扫描

 

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

}

看书后写的,不知道有没有问题,明天仿下看看。

刚仿过了,这个方法是可以行的,附件是仿真的文件,我没有做防抖之类的保护,所以,按一个按键时,会发送多个字符,本意是按一次按键,发送一个对应的字符的

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客