casio dt930 扫描问题

chunleisheng   2010-1-19 08:04 楼主
对于扫描方式:
              0:激光/按键
              1:激光
              2:按键
实现功能:根据扫描方式的不同实现条码扫描功能.
我参照了一下evc++里面自带的一个例子(它里面并没有用到OBR相关函数去获取扫描数据,只是通过KEY相关函数):
代码如下:
//激光扫描,或者手动输入条码(这是我修改的例子,不过并没有实现,只激光扫描的功能.)
int casio_read(int line,int colum,int mode,char *sdata,int lenth,char *bartype)
{
    /*** OBR DATA BUFFER ************/
    M_TBL  obr_md;  
    KEY_INPS  key_str;
    ER ret;

        /*** 初始化条码存储区域 ***/
    sdata[0] = 0x00;

    /*** KEY INITIALIZE ROUTINE ***/
    key_str.ext = KEY_OBR_EXT|KEY_CLR_EXT;
    key_str.echo = ECHO_ON;
    key_str.font_size = LCD_ANK_STANDARD;
    key_str.type = LCD_ATTR_NORMAL;
    key_str.len=lenth;  /* input lenth */
    key_str.column_pos = colum;
    key_str.line_pos = line;
    key_str.column_len=0;

        /*        OBR scanning set         */      
        OBR_moderd(&obr_md);
        obr_md.Ledc = OBR_VIBLEDON;
         obr_md.Code = OBR_ALL;

        obr_md.Idsf[4] = 0;
        obr_md.Itrf[4] = 0;
        obr_md.Cd93[4] = 0;
        obr_md.Cd39[4] = 0;
        obr_md.Cd128[4] = 0;
        OBR_modewt(&obr_md);
   
        /*buf(OBR_STOFF);*/
    OBR_chgbuf(OBR_STOFF);
       
    switch(mode) /* 判断工作模式 */
    {
                case 0:   /* BOR and key */
            ret = OBR_open( 0x00000000 );   /* OBR OPEN   */
                OBR_flush();
                        if((key_check()!=E_KEY_MD) && (key_check()!=E_NG) )
                        {
                                ret = key_string(&key_str,(UB *)sdata);
                                if(ret==E_OK)
                                {
                                    casio_good(3);
                                        ret=0;
                                        break;
                                }
                                if(ret==E_KEY_CLR)
                                {
                                        ret=2;
                                        break;
                                }
                                if(ret!=E_KEY_OBR)
                                {
                                        ret=0;
                                        break;
                                }
                        }
                        break;
                case 1:   /* OBR only  */
            ret = OBR_open( 0x00000000 );   /* OBR OPEN   */
                OBR_flush();

                        if((key_check()!=E_KEY_MD) && (key_check()!=E_NG) )
                        {
                                ret = key_string(&key_str,(UB *)sdata);
                                if(ret==E_OK)
                                {
                                        ret=0;
                                        break;
                                }
                                if(ret==E_KEY_CLR)
                                {
                                        ret=2;
                                        break;
                                }
                                if(ret!=E_KEY_OBR)
                                {       
                                        ret=0;
                                        break;
                                }
                        }                               
                        break;
                case 2:  /* key only */
                                ret=key_string(&key_str,(UB *)sdata);
                                if(ret==E_OK)
                                {
                                        ret=0;
                                        break;
                                }
                                if(ret==E_KEY_CLR)
                                {
                                        ret=12;
                                        break;
                                }
                        break;
                default:  /* error */
                        ret=2;
                        break;
    }
    OBR_close();
    return ret;
}
---------------------------------------------------------分界线--------------------------------------------
我在论坛里也看了其他几位朋友写的例子,里面对于OBR扫描是用的OBR_stat(),OBR_gets()等OBR函数去获取的扫描数据,那个函数例子我也试着写了一个,不过并没有达到想要的效果,郁闷了几天,实在解决不了,希望有经验的朋友指点一下...

回复评论 (4)

楼主所用的是一维/二维条码模块?

我们用到的二维条码扫描模块 就是采用UART进行通讯,当然还有几个控制管教。

楼主所谓的“没有达到想要的效果”,那楼主达到了什么结果?还有哪些问题,麻烦详细说下。
点赞  2010-1-19 10:51
期待可以提供一些非商业机密的细节,学习ing…
点赞  2010-1-19 15:46
一维条码模块,我就是做casio dt930的时候,用的其自带的终端函数库,想实现激光扫描和手动按键输入的功能,对于只能激光扫描的情况我不知道该怎么处理,通过key_read()函数先获取按键值,根据按键值判断是否返回E_KEY_OBR,再通过OBR_STAT和OBR_GETS()等相关OBR函数去读取OBR buffer的数据,这种方式的具体实现方式我不太清楚,看了些例子,还是没明白.找出的例子也没调试成功.
点赞  2010-1-20 05:23
好专业啊,学习一下哈!
点赞  2010-1-20 05:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复