微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大神!我倒底错在哪里?就4行代码矩阵按...

大神!我倒底错在哪里?就4行代码矩阵按...

时间:10-02 整理:3721RD 点击:
请教大神们一下?前提是P1口接4*4矩阵按键 P1 = 0x0f;row = P1;
   P1 = 0xf0;
   column = P1>>4;
   n = (row<<4)|column;这段代码n 会有哪些值呢?源程序上是 0xee,0xed,0xeb,0xe7,0xde...0xbe...0x7e,0x7d,0x7b,0x77,可是我推了好几遍 就是推不出这些结果值 程序已下载到原理图中仿真没有错——————本人对这段代码的理解:比如随便按下一个按键 假设P1值为0x0E,则row=0x0e,给P1重新赋值后P1右移四位为0x0f,赋给column,row左移四位为0xe0,与column位或(0xe0|0x0f)这样结果为0xef,同理所有的低四位都为1 我的理解哪错了呢  程序我已经下载到proteus中仿真 没有问题
   


#include "key_board.h"
#include "1602_display.h"

/********************************************************************
* 名称 : get_key(void)
* 功能 : 捕获键盘按下的键
* 输入 : 无
* 输出 : 相应的按键对应的字符
***********************************************************************/
char get_key(void)
{
    uchar row,column,n;
   
        P1 = 0xf;
        if(P1 != 0xf)
        {
        delay(15);
                if(P1 != 0xf)
                {
                    row = P1;
                        P1 = 0xf0;
                        column = P1>>4;
                        n = (row<<4)|column;
                        switch(n)
                {
                    case (0xee):return 'c';
                        case (0xed):return '0';
                        case (0xeb):return '=';
                        case (0xe7):return '/';
                        case (0xde):return '1';
                        case (0xdd):return '2';
                        case (0xdb):return '3';
                        case (0xd7):return '*';
                         case (0xbe):return '4';
                        case (0xbd):return '5';
                        case (0xbb):return '6';
                        case (0xb7):return '-';
                        case (0x7e):return '7';
                        case (0x7d):return '8';
                         case (0x7b):return '9';
                        case (0x77):return '+';
                        default:    return '#';
                 }         
                }
                else
                    return '$';
    }
        return NOKEY;          
}

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

网站地图

Top