微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 什么地方不对,为什么下进去之后没反应

什么地方不对,为什么下进去之后没反应

时间:10-02 整理:3721RD 点击:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define KeyPort  P1
unsigned char KeyScan(void);//键盘扫描
unsigned char KeyPro(void);
/*------------------------------------------------
                    主函数
------------------------------------------------*/
unsigned char KeyScan(void)  //键盘扫描函数,使用行列逐级扫描法
{  
  unsigned char Val;
   led=0xff;
KeyPort=0xf0;//高四位置高,低四位拉低
if(KeyPort!=0xf0)//表示有按键按下
   {
    DelayMs(10);  //去抖
        if(KeyPort!=0xf0)
          {           //表示有按键按下
            KeyPort=0xfe; //检测第一行
                if(KeyPort!=0xfe)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x0e;
                            while(KeyPort!=0xfe);
                          DelayMs(10); //去抖
                         
                       return Val;
                }
        KeyPort=0xfd; //检测第二行
                if(KeyPort!=0xfd)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x0d;
                            while(KeyPort!=0xfd);
                          DelayMs(10); //去抖
                          while(KeyPort!=0xfd);
                       return Val;
                }
            KeyPort=0xfb; //检测第三行
                if(KeyPort!=0xfb)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x0b;
                            while(KeyPort!=0xfb);
                          DelayMs(10); //去抖
                          while(KeyPort!=0xfb);
                       return Val;
                }
            KeyPort=0xf7; //检测第四行
                if(KeyPort!=0xf7)
                          {
                          Val=KeyPort&0xf0;
                        Val+=0x07;
                            while(KeyPort!=0xf7);
                          DelayMs(10); //去抖
                          while(KeyPort!=0xf7);
                       return Val;
                }
     }
   }
  return 0xff;
}
/*------------------------------------------------
         按键值处理函数,返回扫键值
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
  case 0x7e:P0=0xfe;break;//0 按下相应的键显示相对应的码值
  case 0x7d:P0=0xfd;break;//1
  case 0x7b:P0=0xfc;break;//2
  case 0x77:P0=0xf7;break;//3
  case 0xbe:P0=0xef;break;//4
  case 0xbd:P0=0xdf;break;//5
  case 0xbb:P0=0xcf;break;//6
  case 0xb7:P0=0x7f;break;//7
  case 0xde:P0=0xfe;break;//8
  case 0xdd:P0=0xfd;break;//9
  case 0xdb:P0=0xfc;break;//a
  case 0xd7:P0=0xf7;break;//b
  case 0xee:P0=0xef;break;//c
  case 0xed:P0=0xdf;break;//d
  case 0xeb:P0=0xcf;break;//e
  case 0xe7:P0=0xf7;break;//f
  default:return led=0x00;break;
}
}
   void main ( )

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

网站地图

Top