费劲心思写了一个定时器中断消抖的矩阵按键扫描,为什么没用呢

2019-07-15 15:38发布

#include<reg52.h>

unsigned char code Ledchar[4][4] = {
                                                                   {0x3f,0x06,0x5b,0x4f},
                                                                   {0x66,0x6d,0x7d,0x07},
                                                                   {0x7f,0x6f,0x77,0x7c},
                                                                   {0x39,0x5e,0x79,0x71},
                                                                   };
unsigned char keysta[4][4] = {
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         };
void main()
{
        unsigned char keyup[4][4] = {
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         };
        static unsigned char i,j;
        EA = 1;
        ET0 = 1;
        TMOD = 0X01;
        TH0 = 0XFC;
        TL0 = 0X18;
        TR0 = 1;
        P0 = Ledchar[0][0];
        while(1)
        {
                for(i=0;i<4;i++)
                {
                        for(j=0;j<4;j++)
                        {
                                if(keysta[j] != keyup[j])
                                {
                                        if(keyup[j] == 0)
                                        {
                                                P0 = Ledchar[j];
                                        }
                                }        
                                keyup[j] = keysta[j];
                        }
                }               
        }               
}

void keyscan()
{
        unsigned char keybuf[4][4] = {
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         {1,1,1,1},
                                                         };        
        static unsigned char th,tl;
        static unsigned char i,j;
        P3 = 0xf0;
        th = P3;
        switch(th)
        {
                case 0xe0: i = 0; break;
                case 0xd0: i = 1; break;
                case 0xb0: i = 2; break;
                case 0x70: i = 3; break;
                default:break;
        }
        P3 = 0x0f;
        tl = P3;      
        switch(tl)
        {
                case 0x0e: j = 0; break;
                case 0x0d: j = 1; break;
                case 0x0b: j = 2; break;
                case 0x07: j = 3; break;
                default:break;
        }        
        if((keybuf[j] & 0x0f) == 0x00)
        {
                keysta[j] = 0;        
        }
        if((keybuf[j] & 0x0f) == 0xff)
        {
                keysta[j] = 1;        
        }
}

void TimeInt() interrupt 1
{
        TH0 = 0XFC;
        TL0 = 0X18;
        keyscan();
}
为什么总是卡在主函数P0 = Ledchar[0][0];这里
大神求教

原理图.png


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。