韩丽君
(渭南师范学院数理学院 渭南 714099)
自动识别技术适应社会的发展,符合人们对准确高效生活方式的追求,是近几年发展起来的一项先进的技术。我们将商品的条形码放在摄像头可扫描的位置上,条形码自动识别系统就会根据条码的编码原理和预先设置自动读取条码信息,快速的识别条形码,并翻译成计算机可读的数据并将信息准确的显示出来。
常见的条形码是由宽窄不同的黑条和空白组成,由于这些黑条和空白对光的反射率差别特别大,这样我们就可以利用光的反射原理来读取条码的对应的信息。再利用光电转换模块把光信号转换成计算机可识别的电信号,然后通过工作电路对信号进一步处理,得到整齐的信号后把信号输出给单片机进行译码和处理,便可以得到每一个条码的信息[1~2]。设计框图如下图1。
图1 系统设计总体框图
在硬件设计中主要模块依次是UC14CCD条码扫描模块、52(STC89C52)单片机最小系统的单片机模块、数据输入接口模块、电路及脉宽测量模块、液晶显示模块。
1)UC14CCD条码扫描模块设计
本系统采用的是UC14CCD条码扫描模块。由于其体积小,因此可以方便的嵌入到其他设备当中,兼容市场上所有主流条码,拥有快速解码(200次/秒)和高精度识别能力,坚固耐用易于进行功能配置和固件更新,超远扫描距离可达50cm[3]。UC14的线性CCD摄像头可以准确并迅速地识别各种类型的条形码,自动感应模式下模块进入休眠,当侦测到条码时实现自动扫描。
这种CCD模块可以轻松的识别交叉25码、EAN码、UPC条码等生活中常见的条形码,当触发端口的电平被拉低10ms,识读引擎便会启动开始读取条形码,直到读取成功,超时或者触发端口的电平被拉高。在读取成功后,触发端口的电平必须拉高以进行下一次读取。而且他还自带蜂鸣器和LED灯,会通知操作者何事开始读取,以及读取成功的通知。CCD条码扫描模块的线性CCD摄像头可以自动识别条形码,条形码模块可以自动识别有条码的地方,并通过串口传给译码器,再由译码器进一步处理。
2)52单片机最小系统的单片机模块设计
当CCD模块读取到条形码后需要将读取到的信息转换成人们可识别的语言这就需要译码器来完成。系统所选的单片机译码器同时拥有下面的所有功能:准确的测量条形码每个符号元素的宽度;在串行口可以设置更高的波特率;准确扫描出条码两侧的静区;通过条码编码规则准确判断出起始字符的终止字符;将每个条码条空的宽度对应的信息量化翻译;保证翻译结果与条码信息对应[4]。STC89C52与AT89C51相比多了4KB的程序存储,STC单片机可以直接烧程序而且相比AT89C51 STC89C52价格更低速度更快。
3)数据输入接口模块设计
能准确测量出脉宽的方法多种多样,但是对于STC89C52译码器,最方便最简单的方法就是利用其内部自带定时计数功能来测量。我们让定时计数器工作在方式2位微处理器是13位定时计数器,即高8位和低5位,将高8位和低5位分别都设置为0XFD则频率为11.05MHz波特率为9600。信号C/T=0,为定时器功能,TR1=1启动定时计数器,GATE=1且INT0=1时定时器开始测量脉冲宽度[5]。
4)电路及脉宽测量模块设计
提取采集的数据我们选用单片机作为译码器,因为单片机的外部中断可以直接接受扫码器发出的脉冲,当扫描器扫描到空时产生的时下降沿信号,如果译码器在脉冲下降沿出现中断后开始记录数据,那么数据收集到的就是条的宽度,而元素空的无从测量。因此需要调整硬件电路使定时器可以准确的测量每一个条和空的准确宽度,脉宽的测量如图2所示。
图2 脉宽的测量方法
如果INT0、INT1是在下降的时候沿触发,当INT1接收到条码的空时产生下降沿从而使中断T0启动,用来记录下降沿脉冲的宽度,然后可以将T1关闭,读出前一个空的脉宽也就是T1中的记录下的数据。与之前相似当INT0接收到的下降沿脉冲时启动中断,那么T1就会开始计数,关闭T0读出条的脉宽也就是T0中记录到的数据。这样便可以把每一个条形码的脉宽都测量完。输入信号与单片机的链接方法如图3所示。
图3 输入信号与单片机的链接方法一
5)液晶显示模块设计
系统选择的LCD1602液晶显示屏不可以显示汉字,但可以准确快速地显示数字和字母,而条码信息正是由数字表达出来的,所以可以用这种显示器和单片机连接达到显示的目的,方便用户判断条形码是否已被正确识别。数字芯片检测器中LCD1602和单片机的端口连接示意图如图4所示。
图4 LCD1602液晶屏与单片机端口连接示意图
在使用译码器翻译条形码信息时,需要在单片机里下载事先编译好的程序,本设计我们选择C语言,在编程时要设置每一个寄存器的数值,同时需要设置各个特殊寄存器不断调试达到编译的效果[6~8]。
1)计时器模式控制寄存器TMOD的设置
计时器模式控制寄存器(TMOD)用来设定定时器T0和T1的工作方式,其设置如表1所示。
表1 TMOD设定定时/计数器工作方式的设置
8位分成两组,高4位控制T1,低4位控制T0。GATE-门控位,默认情况下GATE=0,若GATE=1时定时/计数器的启动收到外部引脚的控制,而GATE=0时,定时/计数中断信号与外部引脚无关,本系统中GATE=0、C/T=0工作于定时方式。M1、M0工作方式选择位如表2所示。条码识别技术的SMOD工作在方式0,13位自动定时/计数器,分别是高8位和低5位,TH0/TH1的高三位未采用。所以当低5位溢出时就向高8位进位,当高8位也记满时就溢出,使溢出标志置位。
表2 M1、M0工作方式选择
2)串行端口控制寄存器SCON的设置
串行端口控制寄存器是一个特殊的寄存器,用于定义串口的工作方式。其格式如表3所示。
表3 SCON串行口控制寄存器的设置
SM0和SM1有四种工作方式。各个方式的功能如表4所示。
表4 SM0、SM1工作方式选择
本系统我们选择工作在方式1,为8位异步通信,在方式1下一帧信息为10位;将SM2置1,因为在SCON中我们将SM2置1,串行口控制器工作于方式1,因此当接收到有效的终止位,接收才有效;REN允许接收控制:REN=1时允许接收,REN=0禁止串行口接收数据;TB8为发送数据的第九位:本次设置TB8=0为数据,TB8由软件置位“1”或清“0”。RB8接收到的第9位数据:若在方式1时则RB8为接收到的停止位,方式0时不使用RB8;TI-发送中断标志位:在一组数据发送完后由硬件置位,当工作在方式1时在停止位开始发送,由硬件置位标志着一个数据发送完毕,告诉CPU可以通过串口发送下一个数据了,在CPU响应中断后,不能自动清零TI必须由软件清零;RI-接收中断标志位:当数据接收有效后由硬件置位,在方式1时,当接收有效时,由硬件RI置位,标志一个数据已经接收到,通知CPU可以从接收数据寄存器中取来接收的数据,对于RI标志,在CPU响应中断后,也不能自动清零,必须用软件清零。
条形码自动识别系统通过设置REN=1使串行口接受数据,SM0和SM1的置位分别为0和1,选择工作方式1,当串行口在工作方式1时,传送或者接收的数据都是由1位开始位(star bit)、8位的数据位和结束位(stop bit)所组成,数据传送或者接收都由低位开始。数据传送时通过P2引脚送出,数据接收时通过P0引脚传入。
3)PCON寄存器的设置
系统选用的CCD模块波特率不需要加倍,因此,我们令PCON=0X00,配置的比特率不加倍。PCON电源控制控制寄存器的设置如表5所示。
表5 PCON电源控制控制寄存器的设置
主程序流程图[9~10]如 图 5 所示。
图5 主程序流程图
本文设计的条形码自动识别系统,能够自动读取条形码信息,快速识别条形码。技术可靠性高、反应速度快、经济实惠,可广泛应用于超市、图书馆、以及物流等领域,为人们的生活带来极大的便利。