单片机学习小组
直播中

倪梁靓

7年用户 150经验值
私信 关注

PS2按键出现乱码

程序只是读取PS2的键码,在数码管显示,问题出现在最后,发现复位后,第一个按键的键码是正确的,而再按其他按键时,开始出现乱码;而复位后,也就只是第一次按的按键的键码才正确,调试了很久都发现不了原因,有没有哪个人可以从代码中发现错误呢?
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define _Nop() _nop_()
***it psdata=P3^0;
***it psclk=P3^2;
uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
uchar  sled_data[2]={16,16}; /*缓冲值*/
uchar code light[2]={0xfe,0xfd};/*定义需要点亮的数码管*/
uchar numbit;
uchar keyv;
uchar key[3];
uchar keynum;
/*1MS为单位的延时程序*/
void delay_1ms(uchar x)
{
    uchar j;
    while(x--){
     for(j=0;j<125;j++) ;
    }   
}
void main()
{
    uchar i;
    IT0=1;//外部中断下降沿触发
    EX0=1;
    EA=1;
    while(1)
    {
         if(keynum==3) //读完键码后,取第一个键码
        {
             keynum=0;
             sled_data[0]=key[0]/16;
             sled_data[1]=key[0]%16;
         }
         for(i=0;i<2;i++)     //数码管显示
         {
              P2 = 0xff; /*关闭显示*/
             _Nop();
             _Nop();
             _Nop();
             0 = num[sled_data]; /*输出段码数据到数码管*/
             2 = light; /*输出位码数据到数码管*/
             delay_1ms(1);
          }
    }
}

void int0() interrupt 0       //读取键码
{
      if((numbit>0) && (numbit<9))
      {
            keyv=keyv>>1;
           if(psdata) keyv=keyv | 0x80;
       }
       numbit++;
      if(numbit>10)
      {
           numbit=0;
           key[keynum]=keyv; //保存键码
           keynum++;
       }
}

回帖(2)

邢钊楚

2019-1-29 09:43:50
哎,在这里捣乱了,低级错误!!IT0应该设为低电平才对。
举报

李朗雯

2019-1-29 09:58:30
哦哦...
举报

更多回帖

发帖
×
20
完善资料,
赚取积分