51单片机与条形码扫描枪匪夷所思的问题

2020-01-30 13:42发布

各位前辈,小弟参加了今年的电设省赛,作品中使用了stc89c52rc+与  爱宝 B-10条形码扫描器,
扫描枪通过ps/2接口与单片机相接。

使用外部中断0,关键管脚clk接P2.3,data脚接P3.0

现在遇到一个百思不得其解的问题,

就是

上电——》扫描一次——》错误条形码(一直错误,且每次显示相同)——》复位——》正确条形码(一直正确)            
但是:

上电——》复位——》错误条形码(一直错误,且每次显示相同)

以下是程序,希望大家能帮忙想想为什么,在此先谢谢了

#include"reg52.h"

#define uchar unsigned char
#define uint unsigned int
sbit psdata = P3^0;
sbit psclk = P3^2;
uchar c[14]={0x39,0x39,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31,0x32,0x33,0x34,0x35};
uchar numbit=0;
uchar keyv;
uchar key[42],a[14];
uchar keynum;
uchar i,j;
uchar relay=0;
void TEN_init ()
{
       IT0 = 1;   //外部中断下降沿触发
     EX0 = 1;   //外部中断0打开
    EA = 1;      //总中断打开
  
  TMOD=0x20;  //TMOD=0010 0000B,定时器T1工作于方式2
    SCON=0x40;  //SCON=0100 0000B,串口工作方式1 1起始位8数据位1停止位
    PCON=0x00;  //PCON=0000 0000B,波特率9600  晶振11.0592
    TH1=0xfd;    //根据规定给定时器T1赋初值
    TL1=0xfd;    //根据规定给定时器T1赋初值
    TR1=1;      //启动定时器T1
}
void main()
{  
   
        TEN_init();
      while(1)
    {  
           if(keynum==42)

       {
             j=0;
             keynum=0;
            for(i=0;i<42;i=i+3)
           {
             a[j]=key[i];
              j++;
            }
           for(i=0;i<=13;i++)
   {
    switch(a[i])                                                            //对ps/2编码进行转换
    {
     case 0x45:c[i]=48;break;
     case 0x16:c[i]=49;break;
     case 0x1e:c[i]=50;break;
     case 0x26:c[i]=51;break;
     case 0x25:c[i]=52;break;
     case 0x2e:c[i]=53;break;
     case 0x36:c[i]=54;break;
     case 0x3d:c[i]=55;break;
     case 0x3e:c[i]=56;break;
     case 0x46:c[i]=57;break;
     case 0x5a:c[i]=35;
     
    }
  

       }

   for(i=0;i<14;i++)                       //串口输出
     {
    SBUF=c[i];
      while(TI==0);
    TI=0;
   }
   
  }
}            

}
void int0 () interrupt 0     //进入外部中断0,进行条码数据读取
{
   
if( (numbit>0) && (numbit<9) )
{
  keyv = keyv >> 1;
  if(psdata)
  keyv = keyv | 0x80;
  
}
  numbit++;
if(numbit>10)
{
  numbit = 0;
  key[keynum] = keyv;
  keynum++;
  
}
   
}

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