3184|4

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

casio dt930 扫描问题 [复制链接]

对于扫描方式:
              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函数去获取的扫描数据,那个函数例子我也试着写了一个,不过并没有达到想要的效果,郁闷了几天,实在解决不了,希望有经验的朋友指点一下...

最新回复

好专业啊,学习一下哈!  详情 回复 发表于 2010-1-20 05:25
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

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

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

楼主所谓的“没有达到想要的效果”,那楼主达到了什么结果?还有哪些问题,麻烦详细说下。
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
期待可以提供一些非商业机密的细节,学习ing…
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

4
 
一维条码模块,我就是做casio dt930的时候,用的其自带的终端函数库,想实现激光扫描和手动按键输入的功能,对于只能激光扫描的情况我不知道该怎么处理,通过key_read()函数先获取按键值,根据按键值判断是否返回E_KEY_OBR,再通过OBR_STAT和OBR_GETS()等相关OBR函数去读取OBR buffer的数据,这种方式的具体实现方式我不太清楚,看了些例子,还是没明白.找出的例子也没调试成功.
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
好专业啊,学习一下哈!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表