微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 能讲讲下面矩阵键盘程序设计思路是什么

能讲讲下面矩阵键盘程序设计思路是什么

时间:10-02 整理:3721RD 点击:
void  keyscan(void)
{         temp = 0;
    P1=0xF0;                 //高四位输入   行为高电平  列为低电平
    delay(1);
        temp=P1;                 //读P1口
    temp=temp&0xF0;                         //屏蔽低四位
    temp=~((temp>>4)|0xF0);          
    if(temp==1)          // p1.4 被拉低
        key=0;
    else if(temp==2)   // p1.5 被拉低
        key=1;
    else if(temp==4)   // p1.6 被拉低
        key=2;
    else if(temp==8)   // p1.7 被拉低
         key=3;
    else
        key=16;
        
    P1=0x0F;                //低四位输入  列为高电平 行为低电平
    delay(1);
        temp=P1;                //读P1口      
    temp=temp&0x0F;
    temp=~(temp|0xF0);
    if(temp==2)                   // p1.1  被拉低
        key=key+0;
    else if(temp==4)   // p1.2  被拉低
        key=key+4;
    else if(temp==8)        // p1.3  被拉低
        key=key+8;
    else
        key=16;         
           
     dis_buf = key;                     //键值入显示缓存
     dis_buf = dis_buf & 0x0f;

         if(dis_buf>9)               //转换为ASCII码
      dis_buf = dis_buf+0x37;
     else
          dis_buf = dis_buf+0x30;
}

本人单片机初学者,还望高手指教,相互提高。

键盘扫描方法有很多,比如逐行扫描,反转扫描,中断,状态机等,小编的代码就属于反转扫描法。
下面来具体分析下,请看图解(我手工画的,不是很好看)。






我也是想学习这个,多谢了!

二楼正解.,,虽然我是用汇编写的,但是一看小编程序就明白了...

学习一下。

从7到0排列,先让前4个口赋1,后四个口赋0,也就是0xf0,再把那组I/O口的值赋给一个变量,接着变成0x0f,把上次的值和这次的值取并(x|P*),所得的值就是要定位的那个按键所连的管脚的值变成0,其余全是1,这样就能case那个常数进行按键定位了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top