【多功能视力检测系统设计探究14000字(论文)】_第1页
【多功能视力检测系统设计探究14000字(论文)】_第2页
【多功能视力检测系统设计探究14000字(论文)】_第3页
【多功能视力检测系统设计探究14000字(论文)】_第4页
【多功能视力检测系统设计探究14000字(论文)】_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-1-多功能视力检测系统设计研究目录TOC\o"1-2"\h\u19428多功能视力检测系统设计 -1-140831引言 -2-249792概述 -4-106952.1视力检测系统概述 -4-57462.2本设计方案思路 -5-270812.3研发方向和技术关键 -5-102882.4主要技术指标 -5-303103总体设计 -6-60083.1检测系统工作内容设计 -6-228683.2检测系统工作流程设计 -6-30643.3检测系统结构框架设计 -8-53994硬件设计 -8-147274.1微处理器模块设计 -9-256024.2复位电路及电源电路设计 -10-224304.3调试接口和语音模块设计 -10-133954.4按键输入模块设计 -11-14124.5显示模块设计 -11-292355软件设计 -12-22605.1总体方案 -12-303595.2程序流图 -13-3335.3模块说明 -15-272276制作与调试 -22-174226.1硬件电路的制作 -22-100026.2调试 -22-249917结论 -23-摘要中国是当今世界上近视人口数目最多的国家,我国的近视人口数目还在不断攀升。但是,当今社会上广泛使用的视力测量方法都有些许不方便,基于此,本毕业设计研究了一种自助式的视力检测系统,该系统是一款主从一体系统,主机用于检测视力,从机可以收到视力结果,在实际应用中从机可用于医生或其他检测人员进行其他操作,该系统拥有较大的市场潜力和前景。本毕业设计主要设计自主研发的基于STM32的自助式视力检测系统,继而确保一个人即可实现视力较为精准的测试。该视力检测系统主要包括STM32控制器、OLED显示模块、HC05蓝牙模块以及SYN6288语音合成模块,对遥控器输入的方向信号的处理过程是整个系统的关键。视力检测的检测过程,首先由STM32单片机从大到小随机产生字符‘E’,将该字符显示到OLED屏幕上,检测者可以通过手中的遥控器输入个人所认为看到的‘E’的方向,单片机接收来自遥控器的信号,通过处理该信号,对比显示的字符方向与输入的方向,判断其输入的方向是否正确。检测算法简化为从1.0开始逐级增加到5.0,过程中出现两次错误后即终止测试,错误的前一次值即为视力值,并语音播报其最终视力检测的结果。关键词:视力检测;OLED显示;语音合成;蓝牙通信1引言中国随着历史的发展已经成为世界上的人口大国,并且在各个领域都在不断进步,经济实力的不断提高,社会文明的不断进步,除了在国防科技和经济文化等方面不断取得巨大成就外,我国国民对自身的身体健康素质也在快速的往好的方向发展变化。其中,视力作为人们日常生活中接收讯息的最重要的方式,在我们的生活中起到关键性的作用,因此,对视力方面也愈加重视。相关的调查研究显示出,中国的近视人口大约占国家总人口的33%,因此,针对视力检测方面的研究更具有迫切性,关于视力检测仪器的发展也具有广阔的前景和巨大的市场潜力。在市面上主要有两种视力检测的方法,一种是人工棒点的简易测试装置,该方法需要配备一名专业人员,按照所指方向与被检测者指向的方向,来变换字符E的大小,该方法在一些小城市和发展水平较为落后的地方使用较广,但是其准确度易受光线和医务人员的专业程度的影响,在当代逐渐被淘汰掉,发展为更为先进的人工灯光定位视力检测装置,用高级的背投光技术替代长棍点击,既减轻了工作人员的工作负担,也在一定程度上减轻了光线的干扰,从而提高了视力检测的准确程度;另一种方法是利用精密仪器的验光仪器的屈光检查,它主要是一种利用电子光学技术来准确地测量人类眼球的弯曲和半径,并通过图像投影技术来准确地测得人类的视力结果的技术,测试的过程中全程都是由仪器完成,不必被测试者一起进行判断,该方法虽然具有测量速度快,精确性高的特点,但是这种仪器价格高昂,适合在专业的眼镜商店和大型医院等场合所为使用。因此,虽然视力检测仪器具有广大的市场潜力,但是在检测仪器的方便程度和检测质量方面都有着许多的问题,基于此,这是本课题研究的根本原因,即为了设计出方便快捷且检测结果良好的视力检测仪器,从而推动全民视力检测,有助于缓解社会目前日益严重的视力问题。本课题设计的多功能视力检测系统采用STM32单片机芯片系统及相关的控制程序来实现自助式的视力检测,能对被检测者的近视程度进行检测,并采用语音播报其视力检测结果。采用STM32单片机主要是由于其产品具有良好的特点和性能品质价格比,集成程序化程度高,方便于携带,可控性好,低功耗,便于生产嵌入式小型产品等优良特点;以及在现代,单片机控制电路技术成熟,外设模块多,方便获取等优点,因此,可以普遍适用于家庭、各类诊所和眼镜店等等场所。2概述2.1视力检测系统概述多功能视力检测系统的工作原理是综合运用电子模块实现一个较为智能化的电子设备,从而更新取代传统的视力测试方法,该系统一般包括STM32单片机控制部分、OLED显示模块、HC-05蓝牙模块和SYN6288语音播报模块。如图2-1所示,当输入用户信息后即可进入视力检测,首先单片机模块从大到小依次产生随机方向的字符‘E’,并将其显示到OLED屏上,被检测者站在距离屏幕五米的地方,通过遥控器,输入自己所认为的‘E’的方向,蓝牙模块接收该方向信号之后,并将该信号发送给单片机,STM32单片机处理该信号,并比对与显示的方向是否一致,若是,则将显示的随机字符‘E’变小,并继续测试,若不是,则将显示的随机字符‘E’变大,总共检测十次,若同一字符大小错两次,则视力检测的结果为该错误字符的上一个较大字符。最终该视力结果将由语音播报出来。蓝牙发射器蓝牙发射器蓝牙接收器存储器单片机单片机按键输入液晶显示用户信息作答结果语音播报图2-1系统总体框图本视力检测系统可以用于家庭或者小型眼镜店等场所,它可以较为准确的测量出用户的视力信息,并且具有能量消耗低、方便快捷等优势特点。目前的该视力检测系统采用STM32单片机为主控制器,因为其在使用上比较普遍,可连接的外设也多,功能比较丰富,而且功耗和体积都比较小,不但可以省去又大又重的检测仪器,整个系统本身也可以制作得又小又轻,非常方便使用和搬移。我认为视力检测仪应有以下几个方面的发展趋势:(1)可以实现的功能越来越多,视力检测系统应朝着系列化、功能化的方向发展,一个视力检测系统应不仅可以测量近视程度,还有散光,色觉等其他方面的功能。系列化、功能化的好处是便于使用、更新和维修,同时价格也较为实惠。(2)采用各种新的科学技术增加功能的丰富性和有趣性,例如用计算机来采集数据,同时操控整个视力检测的进程,分析视力检测的结果并提出相关的、有益的建议等。2.2本设计方案思路整个视力检测系统是以个人自助式检测为主要目的,使用可以调整控制的软件和硬件结构所进行构建的,使其具有明确详细的使用功能,且就其现实意义而言,其具有可控制行、价格低廉、体型小、能耗低的优良特点,是一种集实用性和便捷性一体的视力检测专用系统。在方向信号接收方面设计HC-05蓝牙模块电路;在方向信号的处理和解析方面,采用ARM先进架构的32位MCU的STM32F103VE型单片机芯片;在字符E的显示上采用0.96寸,像素大小为128x64的OLED显示屏;在最终的结果处理上,采用SYN6288语音合成芯片,因为其语音合成效果大概率是清楚可靠且较为标准的。该处理系统的硬件视力图像检测处理系统的硬件设计过程可以大致分为应用硬件和集成电路两个基本方面的硬件设计与应用软件的可编程设计,在硬件设计上,采用分模块设计电路,先设计调试好各个模块,再将所有模块连接起来,进行联调;在软件设计上,也同样按照子模块划分,设计好各个模块的可执行代码,调试成功后,最后进行软硬件联调。2.3研发方向和技术关键(1)合理划分视力检测的等级,提高检测的精度;(2)对接受到的方向信号的处理;(3)视力检测的算法设计,检测次数越多越精确;(4)最终检测结果的语音播报。2.4主要技术指标(1)测试距离:5米(2)功耗:<0.5W(3)电压:5V3总体设计3.1检测系统工作内容设计本课题计划对市场上现存的视力检测工具进行更加智能化的设计,使其更加便于使用以及功能丰富。本课题设计的多功能视力检测系统,是以STM32为主控制器,其他外部模块相连接而成的,在系统中,单片机是核心,连接着蓝牙模块、OLED显示模块、语音合成模块,各个模块的体积都偏小,单片机也是使用的正点原子的Mini板,该板子是市面上所有板子中体积较小的一种。该视力检测系统首先在OLED显示屏上显示最大号的字符‘E’,方向是随机的,然后被检测者手持遥控器,输入自己所认为看到的‘E’的方向,通过遥控器的红外传输,将该方向信号传回单片机中,单片机处理该信号,并将其与显示的E的方向进行比较,正确,则将字符变小,否则,将字符变大,错误两次则推出检测过程,视力结果即为错误的前一次视力值,显示屏会显示该视力结果,并语音播报该视力值,整体检测过程较为简单方便,非常适合个人自助式检测视力。此外,除了进行视力检测的基本功能外,该系统应具备初始化系统,对各个仪器部件进行初始化和检查,以及若测试者迟迟不应答或出现意外的情况,系统应具备一定的保护措施。3.2检测系统工作流程设计根据上部分的工作内容设计视力检测系统,我们对该自助式视力检测系统进行工作步骤上的进一步细分,总的来看可以划分为随机字符E的生成—遥控器的输入—判断输入的正误—程序处理—结果显示及语音播报这几个关键的部分。为了更加科学的完成本课题的实验功能,我们不仅要对各部分工作进行相应的模块化分析,又要兼顾整个系统的性能的合理性。我们对视力检测系统在一个检测周期中的工作步骤进行了合理的设定,也即对被检测者在进行自主测试时,检测系统需要完成的工作内容进行科学的设计,如下:初始化阶段:当测试即将开始时,系统上电,系统开始进行初始化,为视力检测做好准备工作,当系统初始化顺利时,才继续进行测试工作,当初始化错误时,则系统报错,设计者来解决该错误。此后,输入测试者信息,测试即可开始。随机字符生成阶段:在整个检测过程中,都是由STM32单片机生成随机字符E,该字符是从其存储器中调出。开始时,控制器调出最大号的字符E,方向随机,同时将它显示在OLED显示屏上,然后等待被检测者遥控输入自己认为的字符E的方向。随机字符方向判断阶段:当被检测者通过遥控器输入方向后,蓝牙接收该方向信号,并将其传送到控制器里,检测进入判断阶段,系统会根据接收到的测试者输入的符号方向与原来显示的方向信息进行对比。若检测到方向一致,则说明被检测者判断正确,否则说明判断有错。检测控制阶段:在整个视力检测的过程中,系统要逐个对随机字符E从大到小的显示,也即每一个新显示在OLED屏上的字符都比上一个字符要小一号。此外,还有判断正误的步骤,只有当输入的方向判断为真,系统才会继续显示小一号的字符,若系统判断为假,则显示大一号的字符,若同一字符大小两次判断为假,则被检测者的视力结果为该错误字符的上一个字符大小进行输出。结果生成阶段:系统将上一阶段的判断结果的字符大小作为被检测者的视力结果进行输出,并将结果显示在OLED屏上,同时语音播报其视力大小。其中,下面的流程框图是检测系统在一个周期内的工作流程框图:输入测试者信输入测试者信息输入E的方向输入E的方向蓝牙发射上述信息蓝牙发射上述信息图3-1遥控模块流程图生成随机方向的E生成随机方向的E判断输入是否正确判断输入是否正确检测结果并播报检测结果并播报图3-2生成E和接受判断方向模块流程图3.3检测系统结构框架设计自助式视力检测系统的两大构成部分:硬件电路设计和软件程序设计。本课题所研究的自助式视力检测系统结构较为简单、使用上也较为方便,同时,由于检测次数足够,所以检测结果准确可靠。根据自助式视力检测的技术要求,为了更好地使得系统各个部分的功能得到完善,我们将检测系统各个部分按照在整个系统中的功能分别进行相应的模块和划分,整体上我们可以将其划分为以下几个部分,STM32主控制器模块、蓝牙传输模块、OLED显示模块、语音合成模块。同时为了使得检测系统在整体上性能稳定、可以控制,还要保证各个小的模块在功能上较为完整,在结构上紧凑,这样才能实现系统的完整功能,保证其体积不过于大。从系统的紧凑性上来说,过于复杂的电路结构不仅有可能导致电路混乱而且会造成电路原件的浪费,因此,我们要尽可能减少外部单元的使用,精简模块结构,以此来增加整个系统的可靠程度;从系统的稳定性来说,自助式视力检测系统在使用上要存在必要的可调节性,来减少外界环境带来的不可抗拒的影响。综合上述考虑,我们最终在硬件模块的主控制器模块选的是STM32F10系列,正点原子的Mini板,总共有两块板子,一块用于作主机处理信号,一块用于作从机,接收信号并作其他用途,如打印或分析等;用于显示随机字符E的显示屏选的是4.3寸的OLED显示屏,用于语音播报其视力结果的语音合成模块采用的是SYN6288,进行信号传输的蓝牙传输模块选用的是HC-05。4硬件设计针对上述关于自助式视力检测系统的硬件设计与选择的分析,我们采用硬件模块化的设计方法,在前文已经对系统的功能框架和工作内容有了见到的分析。本章将有机会就如何检测操作系统应用中的各个硬件主要组成部分问题做更为详细的硬件设计与应用分析。根据上述基于前文的案例分析,我们将整个自助式视力检测系统模块划分调整为以下几个集成模块:数字微处理器集成模块,复位控制电路和驱动控制器集成模块,语音信号合成控制模块,按键信号输入控制模块,OLED显示模块。考虑这几个模块的各自特点进行了相对独立的分析设计,又同时要保证各个模块之间的协调和整个系统的平稳运转。具体的控制方案见下图4-1。STMSTM32微处理器运算单元JTAG调试电路复位电路按键键盘电源模块OLED显示屏语音合成模块图4-1STM32微处理器控器4.1微处理器模块设计结合上述对硬件设计总体的设计,检测系统的主控制器模块的设计是整个系统设计的核心之处。根据微处理器的定义可知,微处理器是一种具有处理和控制功能的半导体芯片,它具有CPU的功能,是一种较小规模和体积的集成电路器件。它可以实现指令的调用和执行,以及与外设的信息传输和操控功能,是嵌入式系统中最为重要的运算和控制中心单元。且微处理器具有体积小、可控性好、模块化简单等优异性能,因此其应用更为广泛。我们从功耗、性能、成本的角度上综合考虑后,最终选出最适合该课题的微控制器模块,即意法半导体公司的微处理器模块,叫STM32F103VE,该芯片在市场上流通较广,具有32位的高端处理性能,具有较高的集成度和优秀的运算能力,不仅能满足本课题所需的全部设计的功能需要,而且其优异的性能可以大大的缓解我们的工作难度。所以最后选择STM32单片机作为我们自助式视力检测系统的主控制器模块。关于STM32F103VE的配置和特点,我们下面作较为详细的介绍。这款核心芯片不仅采用基于ARM公司的Cortex-M3处理器的32位的RISC三内核核心微控制器,而且对于CM3的核心内核硬件架构非常精工细作,且其代码的可移植性强,非常方便优质C语言代码的升级和移植。该核心芯片的CPU模块在内核上的工作频率可以达到72MHz,拥有128K个字节的Flash和20K个字节的SRAM;它们还拥有两条点的APB外部内设接口总线及80个点的I/O输出接口。如图4-2为该芯片的系统结构。对STM32芯片的设计时,我们要做好下述准备,电源供给方式,外设连接方式,复位电路设置和晶振电路的设置。在时钟晶振方面,我们利用STM32的内部系统时钟SYSCLK,并通过PLL锁存器电路,为整个系统的各个部分提供正常的工作频率;在接口调试方面,我们采用芯片提供的JTAG调试接口对系统进行调试工作;关于信息传输部分,通过红外远程发送遥控信息和蓝牙传输信息,将信号传输到单片机中进行控制,最后根据接收到的信息,分析实验数据,并按照算法设定进行相应的步骤,最终通过GPIO接口和SPI外设接口向显示屏发送相关的数据信息,从而将检测结果显示在OLED屏幕上,并且语音播报该结果。4.2复位电路及电源电路设计在复位电路和电源供给方面,首先,复位电路必须有科学合理的设计方案,否则系统可能出现错误,比如系统突然死机等,尤其是对于32位的ARM芯片,其运算速度高,功耗较低,所以在设计电路的过程中,必须设置一种合理科学的复位电路,不仅要考虑外部环境因素如温度、湿度等的影响,还要考虑电路内部本身可能产生的影响,如电路的延迟和波动等等。该STM32芯片有三种主要的复位方式,即系统复位、上电复位和按键复位。在这里我们简单地介绍了复位的具体工作流程,当我们按下一个复位键RST时,芯片的NRST便会向其发出一个高电平的复位信号并向其输出一个该高电平的复位信号,这时整个系统便可以对其进行高电平的复位操作,如下图4-3所示。其次,在系统的电源和供给设备方面,因为电源供应是整个系统非常重要的一环,它不仅关于整个系统的功耗,还与整个系统平稳运转有关,所以我们对于电源和集成器的设计必须认真谨慎;在本研究课题中,除了对单片机供电,还可能需对OLED显示模块即OLED显示屏和语音合成模块进行供电;STM32单片机的额定工作频率是3.3V/5.0V,我们可以直接通过使用STM32单片机的USB接口与计算机直接相连供电,因为电脑能提供最大500mV的直流电,可以实现本课题的电源需要。OLED的一个显示屏幕模块直接将其外部连接在一台新的单片化主机上,则通过片机的供电系统向显示屏幕内部供电,不再外加供电模块。4.3调试接口和语音模块设计在调试电路与外设连接方式的选择上,我们采用了JTAG电路,该调试电路的设计基础上就是一种IEEE1149.1兼容的国际标准测试协议,其主要作用之一就是被广泛应用来对整个芯片内部进行调试。相关的JTAG引脚有TCK,TMS,TDI,TDO以及TRST,在使用JTAG接口时,可以对芯片内部的各个部件进行调试访问,还可以通过该接口进行在线编程等工作。在各种语音音频合成四个模块的技术选择和芯片设计上,本文的研究课题主要研究选择了SYN6288语音音频合成四个模块,它们所采用的芯片是一款技术性能和应用品质上性价比较高的音频语音合成芯片,不仅完全具备了各种语音音频合成的应用效果好,声音圆润的特点,且其体积小,非常符合本课题对于模块的要求。它通过UART异步串口进行通信的方式,实现将所有需要编写和合成的文字转换为语音或者TTS对各种语音格式的数字化和切换,允许不同类型的文字,如GB2312、GBK、BIG5等,且可以支持多种命令,同时具有休眠的功能。4.4按键输入模块设计在自助式视力检测系统的设计中,为了实现人机一体化,达到由被检测者引导检测系统的进程的目的,本课题使用了遥控器按键输入模块,来输入所看到的随机字符的方向,该过程时红外远程发送实现的,在购买正点原子的STM32开发板的时候,同时购买了其配套的红外遥控器。红外遥控具有诸多优点,如功耗低,抗干扰能力强,成本低等,非常适合本实验的研究,在本课题中,虽然该款红外遥控器有其他按键,较多的附加功能,但在使用时,只需用到上下左右四个按键功能,用于输入检测者看到的上下左右四个方向信息,其余的按键均闲置下来,这可以有助于整个测试过程的顺利完成和设计功能的实现。除了红外遥控按键的输入外,本系统中还有一个STM32单片机上的遥控按键输入,以初始化单片机以及进行开始检测的过程,用的就是WK_UP这个按键,来自动唤醒这个STM32单片机,这个按键通常都是由一个高电平来进行自动开启的。注意使用该键的过程中,一定要同时断开PA0和DS18B20的跳线帽,因为18B20是有上拉电阻的,会影响WK_UP的按键输入过程。4.5显示模块设计在本课题中,为了给被检测者提供清晰有效的随机字符E的图片,我们需要对显示屏进行深入仔细的设计,以使其满足课题的要求。从OLED的亮度上来看,为了保证整个测试系统在不同亮度环境下的显示效果,同时也要节约功耗,所以选择的显示屏不可过暗,也不可过亮,否则,要么会导致被检测者难以看清字符,要么会导致能耗过高,造成电能的浪费;从显示屏色彩的饱和度上来看,在显示时,随机字符E的颜色必修饱满,看起来清晰,且字符本身与背景要有较大的颜色差,增加颜色的层次感和丰富度,不仅使得显示效果清晰可辨,同时可以增加美感,有助于检测的顺利进行;从使用寿命上来看,显示屏的稳定年限较长一点,否则更替起来会在一定程度上影响整个系统的稳定性和协调性;最后从尺寸上来看,尺寸不可过小,必须足够显示所需显示的最大随机字符,显示屏也不可过大,过大会导致功耗过高,同时导致整个检测系统的体积过大。综合以上几个方面因素的分析,最终选择了0.96寸的ATK-OLED显示屏作为显示模块。该OLED显示模块主要具有以下几个特点:第一,它主要具有两种颜色,纯蓝色或者是蓝黄双色两种显示模块,在本研究课题中,选择了纯蓝色;第二,该显示模块在屏幕上具有很好的分辨率,其特点是分辨率范围为128*64,第三,该OLED显示屏本身具有0.96寸的超小尺寸,是目前市面上所有的显示屏模块中最小的一类,而且该显示屏模块的尺寸仅大约为27mm*26mm;第四,它拥有了比较多的五线网络接口设备,支持8086、6800、4线SPI等五种网络接口。第五,它是一个集成DC/DC,无需外部输出高压,仅只要向其提供3.3V的电源,就能正常运行;最后,该模块的额定电压是低电压,所以它是一个低功耗的器材,非常符合我们的课题设计的要求。5软件设计5.1总体方案完成上述硬件电路的设计以及硬件模块的选型之后,就到了软件程序开发的阶段。对该产品视力显示检测控制系统的设计软件进行程序设计部分中,我们将整个检测系统过程划分为形成六个基本部分并从进行设计入手,分别为该检测系统基本工作原理内容、初始化程序和系统软件设计、OLED视力显示控制模块的设计、语音合成模块的设计、随机字符判断程序的设计、遥控按键程序的设计,这样就将较大的整个系统的设计过程细分为较为具体的小块的工作内容。整个软件设计都以Keil5作为开发平台,在Keil5上开发比较简单并不复杂,首先按照使用说明,根据该课题进行实验时,先创建一个自助式视力检测系统的工程,之后按照要求配置好环境,选择合适的路径保存起来即可。使用的是C语言进行编写代码,一是因为C语言具有强大的代码功能实现,二是因为我们在大学期间学习过C语言,对此的编程有一定的了解。在整个代码编写的过程中,为了化繁为简,我们进行模块化编写,先由之前分好的小模块,编写相应的函数功能,并且为了增加代码的可移植性和可读性,与硬件相关的部分程序均以宏定义的方式去写。关于模块中的主程序部分是如何实现,因为模块中的主程序主要是起到了控制和管理决策的重要作用,可以负责管理整个程序运行,让每一个程序按照自己制定和设计的程序思路去正常运行,而各个模块的小操作功能都是通过在每一个主程序中分别调用函数和子程序来完成实现的,基本的子程序部分的函数有:按键扫描Key_Scan子程序函数,随机字符生成函数,OLED显示函数等等。5.2程序流图当系统开机上电后,整个程序首先执行初始化代码,之后进入视力检测系统的主页面,并显示课题设计的名称即《多功能视力检测系统》以及其他的相关信息,然后根据按键指示选择是否开始视力检测,检测过程首先是产生最大号的随机字符E,被检测者通过遥控器使用无线红外技术输入该字符的方向,系统程序会比对输入的字符和显示的字符的方向,来进行下一步操作。程序流图可以帮助更好的理解整个系统的过程,整个软件部分分为主函数部分和子罕虎部分,子函数部分又细分为各个小函数,这样在程序代码的编写时会更加有条理性。如下图5-1所示,是整个软件过程的系统框架,如图5-2所示,是整个代码核心算法部分流程图。Keil软件系统框架Keil软件系统框架主函数部分实现对整个程序的进行控制和管理,设置主要参数以及调用子函数程序子函数部分OLED显示函数随机字符产生函数初始化函数语音合成函数遥控按键函数图5-1软件系统框架生成不同方向的E生成不同方向的E接收判断的方向两个方向是否一致生成小一号的E生成大一号的E最小E最大E输出结果输出结果语音播报结果YNYYNN图5-2判断算法流程图5.3模块说明通过上述对视力检测系统的工作流程以及选择好的开发环境的分析,我们开始对各模块进行程序设计,为了更加清楚的展示分析过程,我们详细价绍该检测系统的各个模块的功能是如何实现的。(1)主程序设计:在主程序部分中,首先,为了使得各个子程序部分的顺利运行,需要进行初始化和调取各种头文件库,配置相关的结构和配置程序,以及其他与硬件相关的宏定义等。HSE:4--16MHzHSI:8MHzLSE:32.768KHzLSI:40KHzPLLCLKAHB预分频器APB1APB2其他(2)初始化程序设计:在上述的介绍当中,我们都讲道理初始化及其重要的作用,是为了保证课题实验的正常运转设计的,我们在整个系统工作之前,要通过初始化程序来使得各个模块先回到原始状态,为了方便后续程序的运行。首先,众所周知,时钟检测器和系统就像是如同整个系统的一块心脏一样,所以为了能够使得检测到的系统有序地工作,我们就需要对所有的时钟进行合理配置,所有外设想要进行工作,都必须得有一个时钟,而STM32本身在系统启动的这个时候,会自动执行一个汇编文件,该汇编文件中我们会自动调用SystemInit()的函数,HSE:4--16MHzHSI:8MHzLSE:32.768KHzLSI:40KHzPLLCLKAHB预分频器APB1APB2其他图5-3STM32大概时钟系统图可以看出,这是一个时钟树,这里面有很多的时钟,下面我们介绍一下,这些时钟具体的怎么配置的。首先我们了解以下是HSE时钟,它采用的是高速的外部晶振,使用的是无源晶振,通常都是8MHz,通过一个OSC_OUT和一个OSC_IN与整个单片机芯片进行连接,通过RCC_CR中的时钟寄存器的HSEON这个位置进行控制;与HSE相对的叫LSE,它也是高速的,也是8MHz,两者之间的主要区别就是,HSE比LSE的工作精度高,LSE受温度的变化影响较大,会有一定的温漂;HSE时钟,比较高速的内部时钟,频率也是8MHz,当HSE发生了故障的时候,可以通过CSS系统,即时钟安全系统等方式来进行控制,这时系统的时钟就会自动地切换到HSI,直至HSE启动成功,HSI也就是有了对应RCC_CR时钟寄存器的HSI这个位置来进行控制;下面简单地介绍一下PLLSRC即锁相环的时钟源,PLL有两个输入倍频时钟,为HSE和HSI,PLL主要是用作倍频,可以选择倍频因子,从2倍输入到16倍,倍频后的输入时钟叫做PLLCLK,由PLLXTPRE和PLLMUL两个因子来进行控制;还有一个重要的系统时钟,叫做SYSCLK系统的时钟,它是来源于HSI、HSE和PLLCLK,由SW位即系统中的时钟切换位来进行控制。配置好系统的运行时钟之后,单片机就开始会分别有很多条外设总线,例如一条AHB总线,在每条AHB总线上会分别有两个外设预分频器,是APB1和APB2,在这两条外设总线上已经分别挂载了许多的常用单片机外设,所以我们在开始考虑到如何使用具体外设时,只需要配置好AHB、APB1和APB2即可。还有其他的时钟,如RTC、LSI等,在这里就不多介绍了。在我们系统编写代码的这个时候,默认宏定义为72MHz。到此,整个STM32的时钟系统即介绍完了,在编写程序的过程中,一定要按照上述说明仔细参考,才能不出错。串口通信程序的设计:一个处理器和外部设备之间所进行的通信一般主要有两种形式,并行通信和串行通讯,两者各自都有其优劣点;串行通信也可以划分为多个同步通信,如SPI、IIC等,以及异步通信,如UART。串口的通讯过程可以划分为数据接收和数据发送两个过程,再将数据接收的过程中,外部设备先将该数据传入单片机的一个串行输入移位寄存器,再将该移位寄存器的数据直接传给一个数据缓冲寄存器,最后将其发送给MCU内核,数据传输的过程刚好恰恰相反。与串口类型相关的寄存器主要有三个:状态寄存器、数据寄存器和波特率寄存器;对于串口操作常见的库函数主要有:USART_Init()串口初始化函数,USART_Cmd()可以使得所有能够进行串口操作的函数、USART_Cmd()可以使得所有能够进行相关的串口操作中断、USART_SendData()可以将发送的数据转换成串口函数、USART_SendData()接收的数据函数等等,下图5-4是串口配置的相关软件程序流图:串口时钟使能,串口复位串口时钟使能,串口复位GPIO端口模式设置,串口参数初始化开启中断并且初始化NVIC使能串口并编写中断处理函数串口数据收发并获取串口传输状态图5-4串口配置流程图复位SSD1306,RST=0,延时10ms后,RST=1驱动IC初始化代码开启显示清0显存开始显示OLED显示模块程序的设计:我们所需要选择的一个显示模块就是OLED模块,它的主要控制器选择的是SSD1306,为了更好地使得这个OLED显示模块的正常运行工作,我们首先必须需要通过设置STM32与OLED模块相互进行连接的IO,将其设置成为一个输出,然后才是对OLED模块进行初始化,这一部分在上一小节已经完成了,最后可以通过函数将随机字符E显示到OLED模块上。值得注意的一点就是,该模块并没有与5.0v的接口相互兼容,所以不能够直接连到5.0v的操作系统,否则很有可能会烧坏这个模块。此外,我们选取了直接访问的端口连接方式,而且还需对显示模块的驱动进行相应的编程。下面是利用重要函数:画点函数,voidOLED_DrawPoint();接着是显示字符函数,OLED_ShowChar(),显示字符,同时还需用到字符集的点阵数据,这里我们使用了PCtoLCD2010完美版。至此,关于通OLED如何显示各个模块的详细介绍也就到此结束,下面我们讲的是部分关于通过OLED如何显示各个模块的程序代码进行程序优化流程图复位SSD1306,RST=0,延时10ms后,RST=1驱动IC初始化代码开启显示清0显存开始显示图5-5OLED初始化过程OLED初始化,配置其为推挽输出OLED初始化,配置其为推挽输出清OLED屏,调用函数:OLED_Clear()清OLED屏,调用函数:OLED_Clear()OLED显示,调用各种显示函数:OLED_DrawPoint()、OLED_Fill()等等OLED显示,调用各种显示函数:OLED_DrawPoint()、OLED_Fill()等等图5-6OLED显示程序流程(5)随机字符判断程序设计:在前文关于工作内容的设计中,我们了解到并画出了随机字符E的判断流程图,这是整个系统设计最核心的部分,我们不仅需要对遥控器传来的方向信号和显示的方向进行比较,还要关注比较之后的下一步操作。整个判断算法可以分为两个部分,循环和判断,检测过程可简化为从1.0开始,逐渐增加到5.0,出现2次错误后即中止测试,错误的前一次值即为视力值。这部分判断程序的代码流程图在上文的图5-2。红外遥控初始化,开启定时器对应通道为输入捕获功能。频率为1MHz开启定时器输入捕获更新中断和捕获中断捕获到上升沿时,设置捕获极性为下降沿捕获,同时设置计数值为0,变量RmtSta的位4为1当捕获到下降沿时,读取定时器的值赋值给Dval,然后设置捕获极性为上升沿捕获定时器发生溢出中断,且是第一次溢出,标记完成一次按键采集(6)红外遥控程序设计:红外遥控一般采用的程序编码方法主要有PWM的NEC协议和PhilipsPPM的RC-5协议,而我们所用的STM32开发板是正点原子的,他们所配套使用的是NEC协议,该协议的载波频率是38KHz。在单片机上连接红外接收头,该红外接收头连接着定时器的输入,对红外遥控进行解码的时候,用的是定时器的输入捕获功能,主要解析接收到载波信号的高电平持续时间来判断该信号。在我们的工程中,该模块添加的是remote.c和remote.h文件,里面包含了一个Remote_Init()的函数,这个函数主要是专门用来对IO口进行初始化,并且在文件中配置了TIM5_CH2定时器作为对输入的捕获,还有一个是TIM5_IRQHandler()的函数,它也就是TIM5的一个中断服务函数,最后就是Remote_Scan函数,该函数主要是专门用来传递输出解码键的值,来判断对应遥控器的按键位置是哪个,即一种类似于按键扫描红外遥控初始化,开启定时器对应通道为输入捕获功能。频率为1MHz开启定时器输入捕获更新中断和捕获中断捕获到上升沿时,设置捕获极性为下降沿捕获,同时设置计数值为0,变量RmtSta的位4为1当捕获到下降沿时,读取定时器的值赋值给Dval,然后设置捕获极性为上升沿捕获定时器发生溢出中断,且是第一次溢出,标记完成一次按键采集图5-7红外遥控程序流程图(7)按键控制程序设计:在本课题设计中,要配置按键控制,首先要使能按键对应的IO口时钟,调用相关的函数使能,接着是对按键IO进行相应的初始化操作,需要把按键IO配置成输入模式,有两种输入方式,上拉输入和下拉输入方式,最后是对按键进行扫描,监控其是否被按下。关于按键操作程序部分,主要说明它包含两个基本的函数,KEY_Init()和KEY_Scan()两个基本函数,前者主要是一种用来对与按键输入相连接的硬件电路进行了初始化,后者主要是一种用来扫描IO口中有无按键的输入,然后根据按下的按键信号来对其进行一些相应的动作,关于按键扫描的方式主要有两种,支持长按和不支持长按,在本文研究课题中,我们可以选择不支持长按的模式,将mode设置为0,即表示不支持长按;不支持连续按的按键扫描思路是只认为第一次按下是有效的,后面即使有按下的操作,没有松开,也认为这个按下信号是无效的,下面是关于按键操作程序的部分关键代码的操作流程图5-8:使能按键对应的IO口时钟。调用函数:RCC_APB2PeriphClockCmd()使能按键对应的IO口时钟。调用函数:RCC_APB2PeriphClockCmd()初始化IO模式:上拉/下拉输入。调用函数:GPIO_Init()扫描IO口电平。调用函数:KEY_Scan()图5-8按键控制程序流程图蓝牙通信程序设计:为了实现主机和从机之间的信息传输,我们选择蓝牙模块进行通信,以便将测试结果传输给医生或者检测者,扩展该系统的应用。首先要选择好配置蓝牙通信的方式,在本课题中,我们选择了串口配置,用到了XCOM这个配置软件,还有蓝牙串口助手这个APP下载在安卓手机上,蓝牙配置过程中,会用到较多的指令集,如下表5-1所示:表5-1蓝牙指令集指令响应参数ATOK无AT+RESETOK无AT+VERSION?OK软件版本号续表5-1蓝牙指令集AT+ADDR?+ADDR:<Param>OKParam蓝牙模块地址AT+NAME?+NAME:<Param>OKParam蓝牙设备名称AT+ROLE?+ROLE:<Param>OK从角色(Slave)主角色(Master)本文的研究课题主要选择的蓝牙接口模块是一个HC-05蓝牙接口模块,是与中国正点原子蓝牙开发板配套的一个引脚蓝牙接口模块,总共分别设计了六个引脚蓝牙接口:VCC、GND、TXD、RXD、KEY、LED;LED指的是一种蓝牙指示灯,当一个新的蓝牙模块处于不同的蓝牙工作环境状态时,Led两种指示灯灯光闪烁的表现方式就可能会不一样,当该灯慢闪,即一秒闪一次时,模块进入AT状态,这是可以使用上表的AT指令集进行相关的配置,当该灯快闪时,即一秒闪两次时,该灯已经进入了可配对状态,当该灯出现双闪时,即一次配对灯闪两下,两秒后再闪一次,表示该灯与蓝牙模块的配对成功,该灯非常方便判断该灯所在状态,使用上很方便;KEY是让每个蓝牙模块都会进入不同模式的控制引脚,高电平有效,当进入AT状态指令,低电平时,就会进入串口透传通信模式,这两个模式的通信波特率也许不一样;RXD/TXD位于蓝牙模块串口接收/发送引脚,这两个都是TTL电平,不过我们也可以直接接RS232电平,这点需要非常小心注意,容易导致出错,RXD接单片机的TXD,txd接单片机的RXD;VCC是一个电源,电压范围是3.3V-5.0V。该蓝牙的波特率支持范围很广,从4800到138200中,常用的波特率都支持。该蓝牙模块的应用场景可以有两个,即模块跟手机通信和模块之间通信,后者需配置蓝牙模块的角色,才可用于数据透析通信。下图5-9为该模块的使用流程图:初始化相应的IO口,配置好时钟和工作方式。初始化相应的IO口,配置好时钟和工作方式。配置好两个蓝牙模块的角色,并使其进入通信模式初始化相应的IO口,配置好时钟和工作方式。单片机监听并处理蓝牙模块接收到的数据图5-9蓝牙模块使用流程图(9)触摸屏显示程序设计:在整个系统最后,我加了一个附加的内容,就是在与STM32配套的4.3触摸屏上显示出本课题的名称和其他信息。触摸屏其实分为电容型和电阻型触摸屏,我们使用的是电容型的。触摸屏实际上就是一种能够直接接受到触头等各种输入信号的传感器装置,本质上是负责的是检测触摸点,与液晶屏有所区别,它有两个电极,X和Y电极,所摸到的点就是两个极的交汇点,来检测触摸。该新型触摸屏幕是采用串口IIC三个接口用来进行写入输出各种触摸传感数据的,所需要采用的触摸传感器参数IC为GT9147。在软件编程的时候,我们首先需要将该触摸屏进行初始化操作,串口需要初始化为600,然后是对按键初始化,真正用于显示的函数,其实与OLED显示的函数类似,首先也是对触摸屏进行清屏,然后使用各种画点和画图函数进行画图的,如LCD_ShowString()函数。还要在定时器上编写一个触摸屏的驱动程序代码,在对该触摸屏的驱动程序进行编写时,首先也要对定时器进行初始化,然后把该定时器的坐标初始化成10ms,接着根据需要分别映射定时器的中断矢量和该触摸屏的中断矢量,然后让定时器的坐标使得所有的电机都可以,使得定时器启动后就开始对电机进行计时,采样在得到了该触摸屏的位置和坐标数据之后,将该电机的位置变成了触摸屏转变成了一个显示的坐标。如下图5-10为触摸屏显示程序流程图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论