请问有没有人做过51单片机控制PS/2口条形码扫描器的?

2020-02-02 09:17发布

新手一个,请教如何通过PS/2口来接受条形码扫描的信息?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
liujinhan
2020-02-02 23:21
连续解码,不就是一串字符了吗?

扫描枪扫描的速度很快,定义200ms内连续解码。200ms到了,就说明一次扫码完成。

//以下是STM32的程序,改改 51也能用。

void EXTI2_IT_Handle(void)
{
       
        if(EXTI_GetITStatus(EXTI_Line2) != RESET)                                  //判断中断发生来源
          {
                   //EXTI_ClearITPendingBit(EXTI_Line2);    //清除中断标志

                //GPIO_ResetBits(GPIOE,GPIO_Pin_15);        //for debug
               
                #if 1
                PS2CntBusy=PS2_TimeOUT;         // 定时器会将此变量每1ms减1,等于0后通知主程序处理数据
               
                if((IntNum > 0) && (IntNum < 9))
                   {
                        KeyV = KeyV >> 1;                //因键盘数据是低>>高,结合上一句所以右移一位
                        if (Key_Data==1)
                            KeyV = KeyV | 0x80;          //当键盘数据线为1时到最高位
                }
                IntNum++;
               
                //while (!Key_CLK);                //等待PS/2CLK拉高
                while (Key_CLK==0);                //等待PS/2CLK拉高NG if add delayus
                //{
                //        Delay_us(cnt++);
                //        if(cnt>=1000)        break;
                //}
               
                if (IntNum > 10)
                {
                        IntNum = 0;                  //当中断11次后表示一帧数据收完,清变量准备下一次接收

                        PS2_buf[PS2_cnt]=KeyV;                 // 存放到PS2的接收缓冲区去
                           PS2_cnt++;                                     // 指针调整
                           if(PS2_cnt>=100)
                        PS2_cnt=100;       
                        //EA = 0;                      //关中断等显示完后再开中断
                }
                #endif
               
                /* Clear the Key Button EXTI line pending bit */
                    EXTI_ClearITPendingBit(EXTI_Line2);
        }

       
}

一周热门 更多>