微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 分享简化的适用于郭天祥老师实验板的矩阵键盘检测程序

分享简化的适用于郭天祥老师实验板的矩阵键盘检测程序

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

根据郭老师程序改动而来。试过了。
#include<reg52.h>
#define uint unsigned int
typedef unsigned char uchar;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar ma[]={0xe0,0xd0,0xb0,0x70};
uchar temp;

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
        dula=1;
        P0=0;
        dula=0;
        wela=1;
        P0=0xc0;
        wela=0;
        while(1)
                {
                        display(keyscan());
                }
}
void display(uchar aa)
{
                        dula=1;
                        P0=table[aa];
                        dula=0;               
}
//以下是键盘扫描部分
uchar keyscan()
{
  uchar temp_col,j,n;
  bit flag;
  P3=0xf0;
  delay(5);
  if (P3!=0xf0)
    {
      temp=0xff;
      for (j=1;j<5;j++)
        {
          flag=0;
          P3=temp<<j;//0xfe,从最低位开始置零;
          delay(2);//真正读取键盘码时
          temp_col=P3&0xf0;
          for (n=0;n<4;n++)
            {
              if ( temp_col==ma[n])
                {
                  flag=1;
                  break;
                }
            }
          if (flag==1)break;
        }     //end for j
      while (1)//松手检测
        {
          temp_col=P3&0xf0;//只要没松手,temp_col==ma[n]
          if (temp_col!=ma[n])break;
        }
    }//end if
  return (j-1)*4+n;
}//keyscan

程序格式有待提高哦~或者是文本的原因吧!看着不是很清楚!

是的。有时候自己都看不懂了。

能不能写个详细的注释呢?

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

网站地图

Top