对于扫描方式:
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函数去获取的扫描数据,那个函数例子我也试着写了一个,不过并没有达到想要的效果,郁闷了几天,实在解决不了,希望有经验的朋友指点一下...
楼主所用的是一维/二维条码模块?
我们用到的二维条码扫描模块 就是采用UART进行通讯,当然还有几个控制管教。
楼主所谓的“没有达到想要的效果”,那楼主达到了什么结果?还有哪些问题,麻烦详细说下。
一维条码模块,我就是做casio dt930的时候,用的其自带的终端函数库,想实现激光扫描和手动按键输入的功能,对于只能激光扫描的情况我不知道该怎么处理,通过key_read()函数先获取按键值,根据按键值判断是否返回E_KEY_OBR,再通过OBR_STAT和OBR_GETS()等相关OBR函数去读取OBR buffer的数据,这种方式的具体实现方式我不太清楚,看了些例子,还是没明白.找出的例子也没调试成功.