打印
[51单片机]

单片机矩阵按键问题, 求大神

[复制链接]
684|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ADC11|  楼主 | 2015-4-26 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ADC11 于 2015-4-26 16:50 编辑

#include<reg52.h>

  sbit ADDR0 = P1^0;
  sbit ADDR1 = P1^1;
  sbit ADDR2 = P1^2;
  sbit ADDR3 = P1^3;
  sbit ENLED = P1^4;

  sbit KEY_IN_4 = P2^7;
  sbit KEY_IN_3 = P2^6;
  sbit KEY_IN_2 = P2^5;
  sbit KEY_IN_1 = P2^4;
  sbit KEY_OUT_1 = P2^3;
  sbit KEY_OUT_2 = P2^2;
  sbit KEY_OUT_3 = P2^1;
  sbit KEY_OUT_4 = P2^0;

  unsigned char KeySta[4][4]={  {1,1,1,1},
                                                                  {1,1,1,1},
                                                                {1,1,1,1},
                                                                {1,1,1,1},
                                                          };

unsigned char code LedChar[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99,
                                                          0x92, 0x82, 0xF8, 0x80, 0x90,
                                                          0x83, 0xC6, 0xA1, 0x86, 0x8E};

void main ()
{
        unsigned char i,j;         unsigned char backup[4][4]={ {1,1,1,1},
                                                             {1,1,1,1},
                                                           {1,1,1,1},
                                                           {1,1,1,1},
                                                         };
        EA=1;
        ADDR3 = 1;
        ENLED = 0;
        ADDR0 = 0;
        ADDR1 = 0;
        ADDR2 = 0;        
        TMOD = 0x01;
        TH0 = 0xFC;
        TL0 = 0x67;
        ET0=1;
        TR0=1;
        P0 = LedChar[0];

        while(1)
        {
                for(i=0;i<4;i++)
                {
                        for(j=0;j<4;j++)
                        {
                                if (backup[j] != KeySta[j])
                                {       
                                        if (backup[j] == 0)
                                        {
                                                P0 = LedChar[i*4+j];
                                        }
                                        backup[j] = KeySta[j];
                                }
                        }
                }
        }
}


void InterruptTimer0() interrupt 1
{
        unsigned char i;
        static unsigned        keyout = 0;
        unsigned char keychec[4][4] =   {
                                                                        {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},
                                                                        {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}
                                                                        };
       TH0=0xfc;
        TLo=0x67;

        keychec[keyout][0] = (keychec[keyout][0] << 1) | KEY_IN_1;
        keychec[keyout][1] = (keychec[keyout][1] << 1) | KEY_IN_2;
        keychec[keyout][2] = (keychec[keyout][2] << 1) | KEY_IN_3;
        keychec[keyout][3] = (keychec[keyout][3] << 1) | KEY_IN_4;

        for(i=0;i<4;i++)
        {
                if ( (keychec[keyout] & 0x0F) == 0x00)
                {
                        KeySta[keyout] = 0;
                }
                else if ( (keychec[keyout] & 0x0F) == 0x0F)
                {
                        KeySta[keyout] = 1;
                }
        }
        keyout++;
        keyout = (keyout & 0x03);

        switch (keyout)
        {
                case 0 :  KEY_OUT_4 = 1        ;  KEY_OUT_1 = 0 ; break;
                case 1 :  KEY_OUT_1 = 1        ; KEY_OUT_2 = 0 ; break;
                case 2 :  KEY_OUT_2 = 1        ; KEY_OUT_3 = 0 ; break;
                case 3 :  KEY_OUT_3 = 1        ; KEY_OUT_4 = 0 ; break;
                default :break;
        }

}


相关帖子

沙发
ADC11|  楼主 | 2015-4-26 16:34 | 只看该作者
感觉没问题,下载到单片机里,按键没有反应

使用特权

评论回复
板凳
ADC11|  楼主 | 2015-4-26 16:35 | 只看该作者
中断里面不断扫描按键是否按下并消抖,主程序主要对数码管进行更行

使用特权

评论回复
地板
ADC11|  楼主 | 2015-4-26 16:36 | 只看该作者
实在找不出错误,求大神指教,求求求。本人刚学,菜鸟一个

使用特权

评论回复
5
joyme| | 2015-4-29 15:44 | 只看该作者
                                if (backup[j] != KeySta[j])
                                {        
                                        if (backup[j] == 0)
定义的是二维数组,怎么能这样比较

使用特权

评论回复
6
luofeng2g| | 2015-4-29 16:51 | 只看该作者

使用特权

评论回复
7
tanpengjie| | 2015-4-30 16:41 | 只看该作者
你想要干什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝