首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

按键扫描4

按键扫描4

//4*4矩阵键盘扫描函数:

unsigned char ScanArrayKey(void)//反转扫描法,效率高

{

        unsigned char list,line,x,y,keynum;

        P3=0x0f;//四行同时拉低,

        list=P3;//读回,取得四列的值

        P3=0xf0;//四列同时拉低

        line=P3;//读回,取得四行的值

        if(list==0x0e) x=1;//如果第一列为低电平,设列值为1 (从左往右数)

        else if(list==0x0d) x=2;//如果第二列为低电平,设列值为2

        else if(list==0x0b) x=3;//如果第三列为低电平,设列值为3

        else if(list==0x07) x=4;//如果第四列为低电平,设列值为4

        else ;



        if(line==0x70) y=0;//如果第一行为低电平,设行值为0(从下往上数)

        else if(line==0xb0) y=4;//如果第二行为低电平,设行值为4

        else if(line==0xd0) y=8;//如果第三行为低电平,设行值为8

        else if(line==0xe0) y=12;//如果第四行为低电平,设行值为12

        else ;

        keynum=x+y;//键值=列值+行值

        return keynum;     

}



//主函数:

int main(void)

{

        unsigned char num;

        while(1)

        {

                num=ScanArrayKey();//扫描矩阵按键获得键值  

                DTDisplayChar(segmcode[num/10],0xfe);//显示键值的十位

                Delayms(1);

                DTDisplayChar(segmcode[num%10],0xfd);//显示键值的各位

                Delayms(1);

        }

        return 0;

}
返回列表