1、本科毕业设计(论文)题 目二维码生成与扫描识别系统设计学生姓名学 号院(系)专 业指导教师时 间二维码生成与扫描识别系统设计设计总说明条码技术是一种融编码,印刷,数据采集和处理与一体的自动识别技术。条码分为一维码和二维码。二维码除了具有一般一维码的优点外还具有信息容量大,可靠性高的优点。本次设计内容包括三部分:(1)二维码的生成系统设计,生成系统主要完成了从输入数据到生成相应二维码的功能,使用MyEclipse 10软件编程,编程语言为Java。(2)二维码图像采集系统设计,图像采集系统完成了生成二维码后采集到上位机的功能,使用KeiluVision5软件编程,编程语言为C,系统使用的硬件由计
2、算机、STM32F103RCT6开发板和OV7670摄像头等组成。(3)二维码的识别系统设计,识别系统主要完成了对采集到的二维码图片进行译码还原出所携带信息的功能,使用VC+6.0编程,编程语言为C+。本文介绍了QR code二维码的结构、标准及编解码过程,以及采集图像上传上位机的过程。系统实现了一般文字信息、数字等的编码、图像采集和译码的功能。关键词:二维码技术; 二维码生成; QR code;二维码识别Design of two-dimensional code generation and scan recognition systemDesign DescriptionBar code
3、 technology is a kind of automatic identification technology, which is a kind of financial coding, printing, data acquisition, processing and integration. Bar code is divided into one dimensional code and two-dimensional code. In addition to the advantages of the general one-dimensional code, two-di
4、mensional code has the advantages of large information capacity and high reliability.This design includes three parts:(1) two-dimensional code generation system design, generation system mainly completed from the input data to generate the corresponding two-dimensional code function, the use of MyEc
5、lipse 10 software programming, programming language for Java.(2) the two-dimensional code image acquisition system design, image acquisition system to complete the two-dimensional code generated after the acquisition of the function of the upper computer, the use of KeiluVision5 software programming
6、, programming language C, system uses the hardware by the computer, the STM32F103RCT6 development board and the OV7670 camera and so on.(3) the two-dimensional code recognition system design, the recognition system mainly completes the acquisition to the two-dimensional code picture to carry on the
7、decoding the information carries the information the function, uses the VC+6.0 programming, programming language for C+.This paper introduces the structure, standard and encoding and decoding process of code QR two-dimensional code, as well as the process of acquiring the image of the host computer.
8、 System to achieve the general text information, digital coding, image acquisition and decoding functions.Key words: Two dimensional code technology; Two-dimensional code generation; QR code ; Two-dimensional code recognition目录1绪论11.1设计背景与意义11.2二维码在国内外的状况12 QR码编码规则42.1 QR码符号结构42.2 QR码编码方法53二维码生成系统设计
9、83.1二维码编码83.2二维码编码程序实现104二维码图像采集134.1硬件介绍134.1.1 STM32简介134.1.2 STM32中断144.1.3 OV7670介绍144.2硬件连接关系及原理174.2.1硬件连接关系174.2.2硬件原理174.2.3软件实现184.2.4运行实现225二维码识别系统设计245.1二维码识别系统245.2识别程序实现265.3运行实现276总结29致谢30参考文献31附录1:生成源程序32附录2:采集源程序及原理图35附录3:识别源程序41 1绪论1.1设计背景与意义二维码是用某种特定的几何图形按一定规律在平面(二维方向)分布的黑白相间的图形记录数
10、据符号信息的。二维码是DOI,数字对象唯一识别符的一种。二维码能够在横向和纵向两个方位同时表达信息。它具有存储容量大、可靠性高、保密防伪性强、成本低等优点。在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或扫描设备自动识读以实现信息自动处理。在许多种类的二维条码中,常用的码制有:Data Matrix,maxi code, Aztec,QR Code,PDF417,Ultra code等,QR Code码是1994年由日本DW公司发明1。QR即快速反应的意思,源自发明者希望QR码可让其内容快速被解码
11、。QR码最常见于日本、韩国;并为目前日本最流行的二维空间码条。但二维码的安全性也正备受挑战,带有恶意软件和病毒正成为二维码普及道路上的绊脚石。发展与防范二维码的滥用正成为一个亟待解决的问题。每种有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能及处理图形旋转变化等特点。 二维码是一种比一维码更高级的条码格式。一维码只能在一个方向(一般是水平方向)上表达信息,而二维码在水平和垂直方向都可以存储信息。一维码只能由数字和字母组成,而二维码能存储汉字、数字和图片等信息,因此二维码的应用领域要广得多。因此二维码的研究具有光明的前景。1.2二维码在国内外的
12、状况我国对二维码技术的研究开始于1993年,中国物品编码中心对几种常用的二维码PDF417、QR Code、Data Matrix、Maxi Code、Code 49、Code 16K、Code One的技术规范进行了翻译和跟踪研究。随着我国市场经济的不断完善和信息技术的迅速发展,国内对二维码这一新技术的需求与日俱增。中国物品编码中心在原国家质量技术监督局和国家有关部门的大力支持下,对二维码技术的研究不断深入。在消化国外相关技术资料的基础上,制定了两个二维码的国家标准:二维码网格矩阵码和二维码紧密矩阵码,从而大大促进了我国具有自主知识产权技术的二维码的研发。目前我国二维码的应用主要在以下几个方
13、面:(1)医疗卡:我国的医疗卫生事业在近几年来取得了令人瞩目的发展,很多中型以上的医院都采用了计算机管理并且大跨步地向着网络化的方向发展。但是想要与国际水平接轨,各大医院还需要调整发展步伐,改善管理机制,提高自身的业务水平和管理水平,从而提高经济效益,增强竞争力。想要达到这些目标,二维码是不可或缺的必要武器。(2)身份证:我国经济在改革开放以来得到了快速的发展,城市和农村之间人口流动频繁。特别是近几年利用假身份证进行犯罪的现象屡屡发生,国家的相关部门和公共财产受到了严重破坏。传统居民身份证缺乏机器识别功能,许多关键部门无法对身份证进行有效登记和验证,限制了公安部门的打击力度。因此,使用二维码提
14、高现有居民身份证的防伪性能,是提高公安部门执法力度的一个十分积极有效的方法。 (3)医用化验单:为了更好地发挥医疗投资效用,改善医疗管理,提高医疗服务质量,就要使用二维条码技术来减少错误,更准确地配药。通过正确地识别病人,从而快速获取病例档案来进行各项检查,提高对病人的临床护理质量。(4)移动订票:中国早在2005年由翼码信息推出第一张电子电影票开始,传统形式的票券就朝着电子票的形式转变,传统的物流信息也转变成了电子流。不仅节省了成本,还大大地提高了效率。 综上所述,可见二维码的技术已经在我国得到比较广泛的应用,但是相对于二维码发展比较早的国家,如日本,美国,我国仍显得有很多的不足,因此,我国
15、以不断引进,消化,吸收国外的二维码技术,同时加以创新,同时尽力推广二维码,使二维码技术在我国能得到更加广泛的应用,从而方便人们的生活。 国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。在二维码标准化研究方面,国际自动识别制造商协会(AIM)、美国标准化协会(ANSI)已完成了PDF417、QR Code、Code 49、Code 16K、Code One等码制的符号标准。国际标准技术委员会国际电工委员会还成立了条码自动识别技术委员会(ISO/IEC/JTC1/
16、SC31),已制定了QR Code的国际标准(ISO/IEC 18004:2000)自动识别与数据采集技术条码符号技术规范QR码),起草了PDF417、Code 16K、Data Matrix、Maxi Code等二维码的ISO/IEC标准草案。在二维码设备开发研制、生产方面,美国、日本等国的设备制造商生产的识读设备、符号生成设备,已广泛应用于各类二维码应用系统。二维码作为一种全新的信息存储、传递和识别技术,自诞生之日起就得到了世界上许多国家的关注。美国、德国、日本等国家,不仅已将二维码技术应用于公安、外交、军事等部门对各类证件的管理,而且也将二维码应用于海关、税务等部门对各类报表和票据的管理
17、,商业、交通运输等部门对商品及货物运输的管理、邮政部门对邮政包裹的管理、工业生产领域对工业生产线的自动化管理。2 QR码编码规则2.1 QR码符号结构每个QR码由名义上的正方形模块构成,组成正方形阵列,它由编码区域和包括寻像图形、分隔符、定位图形在内的功能图形组成,功能图形不能用于数据编码。符号的四周由空区包围。如图2-1所示:图2-1 QR码符号结构(1)符号版本和规格QR码符号共有40种规格,分别是版本1到版本40,版本1规格为21*21个模块,版本2为25*25模块。以此类推,版本N的规格每行每列为21+4(N-1)个模块。(2)寻像图形寻像图形包括3个位置相同的探测图形,分别位于符号的
18、左上角、右上角和左下角,如图2-1所示。每个探测图形可以看作是由三个重叠的同心的正方形组成,他们分别为7*7个深色模块、5*5个浅色模块、3*3个深色模块。位置探测图形的模块宽度比为1:1: 3: 1: 1。符号中其它地方遇到类似图形的可能性极小。因此,识别组成寻像图形的3个位置探测图形,可以明确地确定视场中符号的位置和方向5。(3)分隔符每个位置探测图形和编码区域之间有宽度为1个模块的分隔符,如图2-1所示。全部由浅色模块组成。(4)定位图形定位图形是垂直和水平方向一个模块宽的一列和一行,由深色浅色模块交替组成。其开始和结尾都是深色模块,如图2-1所示。(5)校正图形每个校正图形可看作是3个
19、重叠的同心正方形,由5*5个深色模块、3*3个浅色模块以及位于中心的一个深色模块组成。校正图形的数量由QR码的版本号决定,版本号2及以上的符号均有校正图形,本设计采用的版本号为7。(6)编码区域编码区域包括表示数据码字、纠错码字、版本信息和格式信息的符号字符。(7)空白区空白区为环绕在符号四周的4个模块宽的区域,其反射率与浅色模块相同。2.2 QR码编码方法国家质量技术监督局发布的QR码标准中编码步骤如图2-2所示:图2-2 QR编码步骤(1)数据编码将输入的数据转换为一个位流,如果ECI(这种方式使得符号可以表示缺省字符集以外的数据)是缺省的,那么一个数据流将包括模式指示符、字符计数指示符、
20、数据,最终以4位终止符0000表示。其结构如图2-3所示:图2-3 数据编码结构1)数字模式数字模式下,将输入的数据每三位分为一组转化为10位二进制数,剩余位转化为7位或4位二进制数。最终将二进制数据连接起来并在前面加上模式指示符和数字计数指示符。2)字母模式在字母模式下,将输入的数据以两个字符为一组,将前面字符的值乘以45与第二个字符的值相加,结果转化为11位二进制数,若剩余一位,则将其转化为6位二进制数。最后将二进制数据连接并在前面加上模式指示符和数字计数指示符。3)8位字节模式在8位字节模式模式下,直接将二进制数连接起来并在前面加上模式指示符和字符指示符。4)中国汉字模式在中国汉字模式下
21、,每个汉字符由两个字节表示,字符值为GB2312图形字符的内码值。将数据字符两个字节为一组转化为13位二进制数,然后二进制数连接起来并在前面加上模式指示符和字符指示符。(2) 纠错编码QR采用纠错算法生成一系列纠错码字,添加在数字码字序列后面,使得符号在遇到损坏时不至丢失数据。纠错共有四个纠错等级,分别是:L级纠错容量:7%;M级纠错容量:15%;Q级纠错容量:25%;H级纠错容量:30%。(3) 构造最终信息在规格确定的条件下,将产生的序列按次序放入分块中,按规定把数据分块,然后对每一块进行计算,得出相应的纠错码字区块,把纠错码字区块,按顺序构成一个序列,添加到数据码字序列后面6。如D1,D
22、12,D25,D35,D2,D13,D24,D36, . D11,D22,D33,D45,D34,D46,E1.E23,E45,E67,E2,E24,E46,E68,.(4) 构造矩阵将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。把算出的完整序列填充到相应规格的二维码矩阵的区域中。(5) 掩模掩模的目的是均衡地安排深色与浅色模块,以及尽可能地避免位置探测图形的位图1011101出现在符号的其他区域。掩模不用于功能图形,用多个矩阵图形连续地对已知的编码区域的模块图形(格式信息和版本信息除外)进行XOR操作。对不同掩模图形的结果计分,选择得分最低的掩模方案。(6) 格式和版本信息生成
23、格式和版本信息放入相应的区域内。版本7-40都包含了版本信息,没有版本信息的全为0。二维码上两个位置包含了版本信息,它们是冗余的。版本信息共18位,6*3的矩阵,其中6位是数据位,如版本号8,数据位的信息是 001000,后面的12位是纠错位。本次设计需要完成二维码的编码,图像采集以及译码功能。二维码的编码是将输入数据生成相应的二维码,编码过程是对数据进行数据分析、编码、纠错、确定格式版本信息等的过程,编码语言采用Java,使用MyEclipse 10软件编程,需要下载使用QR code.jar包,生成二维码版本采用版本号7,纠错采用M级纠错容量:15%,最终图片保存为bmp格式;图像采集是要
24、将生成的二维码采集到上位机,使用KeiluVision5软件编程,编程语言为C,采集过程为使用STM32开发板驱动OV7670摄像头拍照,拍照后的图片缓存到摄像头自带的FIFO缓存器中,编辑程序实现FIFO读写功能,将图片数据通过USB线输出到上位机当中,并以截图方式保存到上位机;二维的识别系统主要完成了对采集到的二维码图片进行译码还原出所携带信息的功能,使用VC+6.0编程,编程语言为C+。译码是将采集到的图片进行图像预处理,定位与校正,纠错等的过程。3二维码生成系统设计3.1二维码编码 设计使用的开发软件是MyEclipse 10,首先要下载并安装MyEclipse 10软件,使用JAVA
25、语言实现编程。 二维码采用不同的编码规则共有几十种,广泛使用的有4、5种,目前使用率最好的编码方式为DM(Data Matrix)和QR(Quick Response)两种。由于实现二维码的技术很多,各自互不兼容,这样在市场上各自为战,普及率很低,针对此情况国家先后制定了PDF417和QR两种编码标准。本次编码完全遵照国家标准编写,符合市场规范。QR二维码编码模块作为一个通用的二维码编码功能包,所提供的功能完全和国家标准一致,提供对数字、字母、8位字节模式和中国汉字等模式对应的编码方法,同时也提供对应选择编码等级和纠错等级的功能。QR码的主要功能应用为:(1)自动化文字传输:通常应用在文字的传
26、输,利用快速方便的模式,让人可以轻松输入如地址、电话号码等,进行名片、进程数据等的快速交换。(2)数字内容下载:通常应用在电信公司游戏及影音的下载,在账单中打印相关的QR码信息供消费者下载,消费者通过QR码的解码,就能轻易连接到下载的网页,下载需要的数字内容。(3)网址快速链接:以提供用户进行网址快速链接、电话快速调用等。二维码编码流程如图3-1所示:图3-1二维码编码流程图(1)数据分析:分析所输入的数据流,确定要进行编码的字符的类型。QR 码支持扩充解释,可以对与缺省的字符集不同的数据进行编码。QR 码支持不同的模式,必要时可以进行模式之间的转换更高效地将数据转换,以便为二进制串。(2)数
27、据编码:将数据字符转换为位流。在当需要进行模式转换时,在新的模式段开始前加入模式指示符进行模式转换。在数据序列后面加入终止符。将产生的位流分为每8位一个码字,版本使用版本号7。(3)纠错编码:按块生成相应的错误纠正纠错码字,并将其加入到相应的数据码字序列的后面。纠错容量为M:15%。(4)构造最终信息:在每一块中置入数据和纠错码字,必要时加剩余位。(5)在矩阵中布置模块:将寻像图形、分隔符、定位图形、校正图形与码字模块一起放入矩阵。(6)掩模:依次将掩模图形用于符号的编码区域,并选择其中使深色浅色模块比率最优且使不希望出现的图形最少化的结果。3.2二维码编码程序实现设计使用JAVA语言实现编程
28、,使用的版本号为版本号7,纠错级别为M级纠错容量:15%,使用了QR code.jar包、Servlet和jsp等,首先需要新建Web Project项目,然后将QR code.jar包添加到lib文件夹下,如图3-2所示:图3-2添加jar包显示主要实现程序如下:/ 设置纠错能力 L%7 M%15 Q%25 H%30qrcode.setQrcodeErrorCorrect(M);/ 设置编码 B代表二进制来存储信息rcode.setQrcodeEncodeMode(B);/ 获取画笔工具Graphics2D g2D = image.createGraphics();/ 设置背景色g2D.se
29、tBackground(new Color(255,255,255);/ 绘制矩形生成界面设置部分程序如下:程序编写完成,编译,运行无错。将编写程序部署运行后,生成界面为网页版,打开本地网址http:/localhost:8080/ORCode/,显示如图3-3所示生成界面:g2D.clearRect(0, 0, 140, 140);/ 设置前景色g2D.setColor(Color.BLACK);/ 根据布尔数组填充图片的格点g2D.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);/ +2-偏移量g2D.dispose();/ 释放画笔工具image.flush()
30、;/ 清除残留数据/ 以流的方式将image输出,格式为bmpImageIO.write(image, bmp, response.getOutputStream();生成界面设置部分程序如下:程序编写完成,编译,运行无错。将编写程序部署运行后,生成界面为网页版,打开本地网址http:/localhost:8080/ORCode/,显示如图3-3所示生成界面:图3-3二维码生成界面 运行完成,在生成对话框中,输入所要生成的信息内容,点击图3-3中生成二维码图标,即可生成相应的二维码,生成后的显示界面如图3-4所示:图3-4二维码生成显示界面至此,二维码生成系统完成了对输入数据信息的编码,生成了
31、相应的二维码。可以在采集系统和译码系统中引用。4二维码图像采集4.1硬件介绍4.1.1 STM32简介STM32F103xx增强型系列使用高性能的ARM Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达512K字节的闪存和64K字节的SRAM),丰富的增强I/O端口和连接到两条APB总线的外设。所有型号的器件都包含3个12位的ADC、4个通用16位定时器和2个PWM定时器,还包含标准和先进的通信接口:多达2个I2C接口、3个SPI接口、2个I2S接口、1个SDIO接口、5个USART接口、一个USB接口和一个CAN接口。STM32F103xx大容量增强型系列
32、工作于-40至+105的温度范围,供电电压2.0V至3.6V,一系列的省电模式保证低功耗应用的要求。STM32F103xx大容量增强型系列产品提供包括从64脚至144脚的6种不同封装形式;根据不同的封装形式,器件中的外设配置不尽相同。STM32有丰富的内部资源,如下所示:RealView MDK(Miertocontroller Development Kit)基于ARM微控制器的专业嵌入式开发工具;内置闪存存储器;内置SRAM;嵌套的向量式中断控制器(NVIC);外部中断/事件控制器(EXTI);时钟和启动;自举模式;DMA;RTC(实时时钟)和后备寄存器;窗口看门狗;I2C总线;通用同步/
33、异步接受发送器(USART);串行外设接口(SPI);控制器区域网络(CAN);通用串行总线(USB);通用输入输出接口(GPIO);ADC(模拟/数字转换器);温度传感器;串行线JTAG调试口(SWJ-DP)。4.1.2 STM32中断ARM cortex_m3内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK等)也都属于cortex_m3内核的部分。STM32采用了cortex_m3内核所以这部分仍旧保留使用,但STM32并没有使用cortex_m3内核全部的东西(如内存保护单元MPU等),因此
34、它的NVIC是cortex_m3内核的NVIC的子集。STM32可以支持的68个外部中断通道,已经固定的分配给相应的外部设备。每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但在STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字(PRI_n)构成一个32位的优先级寄存器(Priority Register)。68个通道的优先级控制字至少构成17个32位的优先级寄存器,它们是NVIC寄存器中的一个重要部分。4.1.3 OV7670介绍OV7670是OV(OmmiVision)公司生产的一个1/6寸的CMOS VGA图像传感器。该传感器体积小、工作电压低,提供单片V
35、GA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据。该产品VGA图像最高达30帧/秒。我们可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。OmmiVision图像传感器应用独有的传感器技术,通过减少或者消除光学或者电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量得到清晰的稳定的彩色图像。OV7670的特点有:高灵敏度、低电压适合嵌入式应用;标准的SCCB接口,兼容I2C接口;支持RawRGB、RGB(GRB4:2:2,RGB565/555/444),Y
36、UV(4:2:2)和YCbCr(4:2:2)输出格式;支持VGA、CIF和从CIF到40*30的各种尺寸;VarioPixel子采样方式;支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑白平衡校准等自动控制功能。图像质量控制包括色饱度、色相、伽玛、锐度和ANTI_BLOOM 等设置;支持闪光灯:LED灯;通用串行总线(USB);通用输入输出接口(GPIO);ADC(模拟/数字转换器);串行线JTAG调试口(SWJ-DP);支持图像缩放。OV7670功能框图如图4-1所示:图4-1 OV7670功能框图OV7670传感器包括如下一些功能模块:(1)感光整列(Image Arr
37、ay)OV7670总共有656*488个像素,其中640*480个有效(即有效像素为30W)。(2)时序发生器(Video Timing Generator)时序发生器具有的功能包括:整列控制和帧率发生(7种不同格式输出)、内部信号发生器和分布、帧率时序、自动曝光控制、输出外部时序(VSYNC、HREF/HSYNC和PCLK)。(3)模拟信号处理(Analog Processing)模拟信号处理所有模拟功能,并包括:自动增益(AGC)和自动白平衡(AWB)。(4)A/D 转换(A/D)原始的信号经过模拟处理器模块之后,分G和BR两路进入一个10 位的A/D 转换器,A/D 转换器工作在12M频
38、率,与像素频率完全同步(转换的频率和帧率有关)。A/D范围乘积和A/D的范围控制共同设置A/D的范围和最大值,允许用户根据应用调整图片的亮度。(5)测试图案发生器(Test Pattern Generator)测试图案发生器功能包括:八色彩色条图案、渐变至黑白彩色条图案和输出脚移位“1”。(6)数字处理器(DSP)这个部分控制由原始信号插值到RGB 信号的过程,并控制一些图像质量:(7)缩放功能(Image Scaler)这个模块按照预先设置的要求输出数据格式,能将YUV/RGB信号从VGA缩小到CIF以下的任何尺寸。(8)数字视频接口(Digital Video Port)通过寄存器COM2
39、1:0,调节IOL/IOH的驱动电流,以适应用户的负载。(9)SCCB接口(SCCB Interface)SCCB接口控制图像传感器芯片的运行,可以进行通信。(10)LED和闪光灯的输出控制(LED and Storbe Flash Control Output)OV7670有闪光灯模式,可以控制外接闪光灯或闪光LED的工作。OV7670的寄存器通过SCCB时序访问并设置,SCCB时序和IIC时序十分类似。OV7670的图像数据输出格式有:VGA,即分辨率为640*480的输出模式;QVGA,即分辨率为320*240的输出格式,也就是本文档我们需要用到的格式;QQVGA,即分辨率为160*12
40、0的输出格式;PCLK,即像素时钟,一个PCLK时钟,输出一个像素(或半个像素);VSYNC,即帧同步信号;HREF /HSYNC,即行同步信号。4.2硬件连接关系及原理4.2.1硬件连接关系ALIENTEK OV7670摄像头模块与MCU连接需要16根信号线,以及2根电源线。这16根信号线与ALIENTEK STM32开发板的连接关系如表4-1所示:表4-1摄像头模块与开发板连接关系OV7670摄像头STM32开发板D0D7PB0PB7SCLPC4SDAPC5WRSTPA0RCLKPA1RRSTPA4OEPA11WENPA12VSYNCPA154.2.2硬件原理图4-2 摄像头引脚图ALIE
41、NTEK OV7670摄像头模块自带了有源晶振,用于产生12M时钟作为OV7670的XCLK输入。同时自带了稳压芯片,用于提供OV7670稳定的2.8V工作电压,并带有一个FIFO芯片(AL422B),该FIFO芯片的容量是384K字节,足够存储2帧QVGA的图像数据。模块通过一个2*9的双排排针(P1)与外部通信,与外部的通信信号如表4-2所示:表4-2 OV7670模块信号及其作用描述信号作用描述信号作用描述VCC3.3 模块供电脚,接3.3.V电源FIFO_WENFIFO 写使能GND模块地线FIFO_WRSTFIFO写指针复位OV_SCLSCCB通信时钟信号FIFO_RRSTFIFO读
42、指针复位OV_SDASCCB通信数据信号FIFO_OEFIFO输出使能FIFO_D7:0 FIFO输出数据(8位)FIFO_VSYNCOV7670帧同步信号FIFO_RCLK 读FIFO时钟ALIENTEK OV7670摄像头模块存储图像数据的过程为:等待OV7670同步信号FIFO写指针复位FIFO写使能等待第二个OV7670同步信号IFO写禁止。通过以上5个步骤,我们就完成了1帧图像数据的存储。在存储完一帧图像以后,我们就可以开始读取图像数据了。读取过程为:FIFO读指针复位给FIFO读时钟(FIFO_RCLK)读取第一个像素高字节给FIFO读时钟读取第一个像素低字节给FIFO读时钟读取第
43、二个像素高字节读取剩余像素结束。4.2.3软件实现编程需下载安装KeiluVision5软件,使用C语言编程,需要下载安装程序编程软件,这里使用Fly Mcu V0.188下载地址“http/:”。编程程序包含了STM32F103RCT6开发板驱动OV7670摄像头拍照缓存到摄像头自带的FIFO功能和使用串口上传上位机显示功能。上传直接使用USB-232串口连接上位机实现。系统实现的功能流程图如下所示:图4-3 主函数流程图主函数初始化主要是对系统时钟初始化、串口初始化、延时初始化、摄像头初始化和LED接口初始化,完成系统的初始配置,为程序运行做准备。更新上位机显示,清除上位机已有的内容,为接
44、收新的内容做准备,时钟信号到来时,上位机接收显示图像。新图像是否传输完成。用来检测上传一帧的图像是否完全上传成功,若图像未完全上传则返回到更新上位机显示,重新上传图像,若上传成功,LED灯状态取反,等待下一次图像的上传。如此反复循环。采集图像流程图如图4-4所示:图4-4 摄像头采集流程图主函数初始化成功后,程序顺序执行判断是否开始采集图像,若成立,发送数据起始命令,准备开始采集图像,若不成立,则直接结束,数据起始命令发送后,FIFO缓存器可读,则开始上传图像,传输完成后,发送数据结束命令,停止读FIFO数据,如此一帧数据上传完成,完成后,延时执行,等待下一次采集图像。在HARDWARE文件夹
45、下新建一个OV7670的文件夹。然后新建如下文件:ov7670.c、sccb.c、ov7670.h、sccb.h、ov7670cfg.h等5个文件,将他们保存在OV7670文件夹下,并将这个文件夹加入头文件包含路径。另外,还需要用到exti.c和timer.c,所以把这两个文件也加入HARDWARE组下。初始化OV7670相关的IO口,然后最主要是完成OV7670的寄存器序列初始化。部分程序如下:u8 OV7670_Init(void)u8 temp;u16 i=0; delay_ms(200);delay_ms(1500);/设置IO口RCC-APB2ENR|=1APB2ENR|=1CRL|=0X00030033; /PA0/1/4 输出 GPIOA-CRH|=0X83033000; /PA15 输入、PA11/12/14输出 GPIOB-CRL=0X88888888; /PC07输入 SCCB_Init(); /初始化SCCB的IO口 if(SCCB_WR_Reg(0x12,0x80)return 1;/复位SCCBMian函数部分代码如下: Stm32_Clock_Init(9); /系统时钟设置uart_init(7