基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc

上传人:laozhun 文档编号:4241294 上传时间:2023-04-10 格式:DOC 页数:36 大小:550KB
返回 下载 相关 举报
基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc_第1页
第1页 / 共36页
基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc_第2页
第2页 / 共36页
基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc_第3页
第3页 / 共36页
基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc_第4页
第4页 / 共36页
基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc》由会员分享,可在线阅读,更多相关《基于STM32的LED点阵光笔设计与实现毕业论文软件部分.doc(36页珍藏版)》请在三一办公上搜索。

1、毕业论文题 目:基于STM32的LED点阵光笔设计与实现软件部分 姓 名: XXX 院 系: XXX 专 业: 电子信息工程 年 级: 2008级 学 号: 2008114029 指导教师: 完成时间: 2012年5月 目录目录2摘要4第一章 绪论61.1研究的背景和意义61.2课题设计的思路简介61.3设计任务及要求7第二章 LED点阵光笔系统结构简介82.1系统的总体设计82.2 各模块的设计82.2.1核心控制模块的设计82.2.2光笔设计92.2.3点阵设计92.2.4 显示方案设计92.2.5 控制按键的设计92.3系统作用9第三章 系统设计语言及开发环境103.1 C语言概述103

2、.1.1C语言的发展过程103.1.2C语言的特点103.2开发环境介绍10第四章 点阵光笔各模块详细设计124.1关于STM32124.1.1 电源124.1.2 低功耗134.1.3 通用和复用I/O134.1.4 外部中断/事件控制器(EXTI)144.1.5 通用定时器164.2整体的系统流程图174.3 32X32点阵行列扫描的实现184.3 光笔检测模块的设计224.4显示模块的设计28第五章 系统测试与结果335.1 光笔的测试335.2 LCD模块的测试335.3按键盘功能的测试335.4定时休眠功能的测试335.5 休眠唤醒功能的测试335.6 整体功能的测试335.6.1

3、点亮功能测试335.6.2 划亮功能的测试345.6.3 笔画擦除功能的测试345.6.4 连字多写及存储功能的测试34总结35致谢36参考文献37摘要本课题设计并制作了一个基于STM32的LED点阵光笔,可以通过光笔实现在32X32的LED点阵上书写、显示,满足人们的手写输入需要,使输入变得更简单、快捷。本系统以STM32为核心,通过STM32的控制,使LED点阵能逐点高速程控点亮熄灭。自制一支光电感应画笔,当画笔在LED点阵上随意移动时,系统能实时捕捉画笔笔尖在LED点阵上的位置信息,最终LED点阵能显示出由画笔描绘的图案。本设计包括:光笔的设计、32 32 LED点阵的连接、32 32

4、LED点阵的驱动控制电路、显示电路部分功能及原理、键盘的使用及设计等。设计方案运用了4-16线译码器74HC154和74LS273驱动点阵的行和列,通过STM32的控制实现显示功能。关键词:LED点阵 光笔 STM32 74HC154AbstractThis topic design and made a pen of LED dot matrix based on STM32, can achieve writing through light pen in 32 X32 of LED dot matrix, and show in the LED dot matrix, satisfy t

5、he peoples handwritten input need, the input more simple, quick. This system to STM32 as the core, the STM32 control, make of LED dot matrix can point by point high speed program control light put out. Homemade a photoelectric sensor brush, brush when in of LED dot matrix on the move, the system can

6、 real-time capture the tip brush on the position information of LED dot matrix, and finally of LED dot matrix can show the picture of the design by brush.The design of hardware design including: light pen design, 32 32 of LED dot matrix connection, 32 32 of LED dot matrix of the drive control circui

7、t, display circuit of the function and principle, the use of the keyboard and design, etc. Design scheme using 4-16 line decoder 74HC154 and 74LS273 drive the row and column of the matrix, through the STM32 control achieve display function. Keywords:LED dot matrix Light pen STM32 74HC154第一章 绪论1.1研究的

8、背景和意义随着计算机技术的发展,各种硬件设备也日新月异,在输入设备中,为了应对手写文字输入与绘画输入的需要,出现了各种手写绘画输入设备,包括写字板、绘画板等。LED显示屏就是其中一种写字板。写字板可以免去学习打字的烦恼,使用起来相当方便。目前写字板在智能识别技术已相当成熟,就算字迹潦草些也不用担心电脑无法识别。 LED显示屏面积可以根据需要由单元模块任意拼装,以其变化丰富的色彩,图案实时动态的显示模式,完美的多媒体效果,强大的视觉冲击力将信息、文字、图片、动画、视频等多种方式显示出来,成为信息传播的划时代产品,在铁路民航、体育场馆、会议厅、高速公路、广场、大型商场、证券市场以及多种监控调度中得

9、到了广泛的应用。LED之所以受到广泛重视而得到迅速发展,是与它本身所具有的优点分不开的。这些优点概括起来是:亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。 当前,LED显示屏的应用已涉及社会经济的许多领域。LED显示屏主要应用领域为广告业,它的出现为广告产业带来了一种新的视觉冲击,广告业的蓬勃发展带动了LED显示屏技术的创新,渐渐的LED显示屏的一些不足也开始进入了人们的“视线”,所谓谁把握先机谁就离成功越近,这就突出了广告的实时性。由于LED显示屏必须通过电脑

10、终端控制,所以为其中内容修改带来了不便。为了解决LED显示屏中内容修改不便的问题,就需要设计一种可以在其上写字的光笔,这样不仅可以把LED显示屏与电脑终端脱离,而不影响其工作,而且直接在LED显示屏上写字给人的视觉冲击也是相当的震撼。广告人的创作灵感往往就在那么一瞬间,如果这种带手写笔的LED显示屏得到发展,人们就可以看到在广场上的艺术展。手写识别技术是指通过手写板等轨迹捕获设备获得书写者的书写信息,将手写字转换输入计算机。用户在手写板和触摸屏上书写的笔画以类似于矢量图的形式被计算机存储下来,通过对文字图像的抬笔、落笔、笔迹上各像素的空间位置等信息进行处理与对照,系统将数据转化为计算机所使用的

11、文字代码进行输出。 手写汉字识别技术发展至今,无论在识别率(几个大厂商几乎都可以达到98%以上)还是识别速度方面都可以称之为相当成熟的技术了,完全能够满足实际应用的要求。 本课题综合运用LED显示屏和手写技术,设计了一款可以在3232LED点阵上写字的光笔,可以实现在点阵上书写,满足人们的手写输入需要。1.2课题设计的思路简介LED点阵可以实现扫描微亮和显示点亮,用STM32控制,使LED点阵能逐点高速程控点亮熄灭,即工作在人眼不易察觉的扫描微亮情况下。当光笔在点阵上划过时,通过编程检测获得光笔所在位置的行列坐标,并记录行列坐标。运算之后点亮位置坐标处的LED,即实现了书写功能。在设计中,我们

12、运用了4-16线译码器74HC154控制点阵的行和列,通过STM32的控制实现显示功能。1.3设计任务及要求本课题实现一种小型的光笔输入装置,应达到以下要求:设计并制作一个规模不小于32x32的LED点阵,该LED点阵能逐点高速程控点亮熄灭;设计并制作一支光电感应画笔,画笔在LED点阵上随意移动,系统能实时捕捉画笔笔尖在LED点阵上的位置信息;LED点阵能显示出由画笔描绘的图案。系统结构如图表 1所示图表 1 LED点阵光笔系统结构示意图第二章 LED点阵光笔系统结构简介2.1系统的总体设计 本设计主要由软件部分、硬件部分构成。根据课题要求,LED点阵光笔由主控模块,按键电路、LED点阵模块、

13、光笔电路及LED点阵驱动显示等部分组成。系统框图如图表 2所示图表 2 系统框图2.2 各模块的设计2.2.1核心控制模块的设计核心控制模块是系统的大脑,控制着系统的所有输入输出、计算、判断与决策。“LED点阵光笔”检测精度要求高且数据存储容量大,选择适合的控制模块,能确保其快速实现稳定及达到系统要求的基本条件。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。时钟频率为72MHz,是同类产品中性能最高的产品。内置32K到128K的闪存,运行速度快、低功耗(在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2 uA)、高集成度(

14、集成了复位电路、低电压检测、调压器、精确的RC振荡器等),功能和性能都要比51系列强大很多。所以我们选择STM32为核心控制芯片。2.2.2光笔设计光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。我们采用核心部件为光敏三极管制成的光笔检测系统。光敏三极管除了能将光信号转换成电信号的功能外,还有对电信号放大的功能。其灵敏度高,响应时间快。所以我们选用光敏三极管作为光笔的检测部件。2.2.3点阵设计将点阵的驱动电源分为两路,一路为正常电压,可以正常显示;另一路通过硬件电路调节恰好能使点阵处于微亮状态。当书写时,点阵处于微亮状态,光笔划过后,

15、正常显示划过的点,结合软件实现点阵的显示。这样节省了资源的同时,也节约了时间。2.2.4 显示方案设计采用LCD液晶显示器。LCD有明显的优点:微功耗、尺寸小,超薄轻巧、显示信息量大、字迹清晰、美观、视觉舒适。使整个控制系统更加人性化。采用1602A液晶显示器,焊接电路时较为方便。2.2.5 控制按键的设计 本实验采用了四个按键,分别控制光笔的点亮,划写,擦除,休眠时间设置,休眠唤醒,写字保护等功能,四个指示灯分别作为各功能的提示灯。2.3系统作用 本设计的主要作用是通过STM32来控制点阵和光笔,实现手写输入的功能。想要实现此功能,就需要对软件部分、硬件部分有深入的研究。其中软件部分通过C语

16、言编译,硬件部分由STM32、74HC154、74LS273、32X32的LED点阵、三极管、LCD1602、独立按键等完成。完成LED点阵和光笔的设计,就能实现光笔在LED点阵屏上的点亮,划亮,擦除,甚至连字多写及存储、显示功能,为了节省能源本系统还加入了定时休眠的功能。第三章 系统设计语言及开发环境3.1 C语言概述 3.1.1C语言的发展过程语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为K&R,也有人

17、称之为K&R标准。但是,在K&R中并没有定义一个完整的标准C 语言,后来由美国国家标准协会(American National Standards Institute)在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。3.1.2C语言的特点C语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分。运算符丰富,共有34种。C把括号、赋值、逗号等都作为运算符处理,从而使C的运算类型极为丰富,可以实现其他高级语言难以实现的运算,数据结构类型丰富,具有结构化的控制语句语法限制不太严格,程序设计自

18、由度大C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言。生成目标代码质量高,程序执行效率高。与汇编语言相比,用C语言写的程序可移植性好。但是,C语言对程序员要求也高,程序员用C写程序会感到限制少、灵活性大,功能强,但较其他高级语言在学习上要困难一些。3.2开发环境介绍uVision是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他

19、还能嵌入汇编,可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。本实验用的是Keil uVision4在STM32基础上进行的编程,uVision的工程由源文件、开发工具选项及编程说明组成,且包含器件数据库,可以看到该芯片的Vendor、Family,Description(制作工艺、片上资源等)、Option等信息,可以自动设置汇编器、编译器、连接定位器及调试器选项。uVision的编辑器跟大家经常使用的VC或VC+等开发环境类似,支持语法检查、代码编写及调试等,支持汇编和C语言混合编程,编译器可实现对C51,stm32等单片机的所有片上资源进行操作,支持三字节的通用指针和特殊功能指针。

20、调试器则可以提供原生的模拟调试环境,支持断点和随时查看当前源程序运行位置。其开发界面如图表3所示。图表3 开发界面第四章 点阵光笔各模块详细设计经过上一章的介绍相信对本课题的开发环境及开发平台有了比较深入的了解,接下来让我们进入系统设计阶段。4.1关于STM32本课题的所有程序都是在STM32的基础上编写的,所以下面详细介绍下STM32的系统结构及所用到的寄存器。4.1.1 电源STM32的工作电压(VDD)为2.03.6V。通过内置的电压调节器提供所需的1.8V电源。当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。如图表4所示图表4 电源框图4.1.2 低功耗在

21、系统或电源复位以后,微控制器处于运行状态。运行状态下的HCLK为CPU提供时钟,内核执行程序代码。当CPU不需继续运行时,可以利用多个低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗,最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。STM32F10xxx有三中低功耗模式:睡眠模式(Cortex-M3内核停止,外设仍在运行)停止模式(所有的时钟都以停止)待机模式(1.8V电源关闭)此外,在运行模式下,可以通过以下方式中的一种降低功耗:降低系统时钟关闭APB和AHB总线上未被使用的外设的时钟4.1.3 通用和复用I/O每个GPI/O端口有两个32位配置寄存器(G

22、PIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。输入浮空输入上拉输入下拉模拟输入开漏输出推挽式输出推挽式复用功能开漏复用功能每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在

23、读和更改访问之间产生IRQ时不会发生危险。图表5给出了I/O端口位的基本结构图表5 I/0端口位的基本结构4.1.4 外部中断/事件控制器(EXTI)外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以被独立的屏蔽。挂起寄存器保持着状态线的中断要求。EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19个中断/事件请求检测脉冲宽度低于APB2时种宽度的外部信号外部中断/事件控制器框图如图表6所示:图表6外部中断/事件控制器

24、框图如果要产生中断,必须事先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写1允许中断请求。当外部中断线上发生了需要的边沿时,将产生一个中断请求,对应的挂起位也随之被置1。在挂起寄存器的对应位写1,可以清除该中断请求。如果要为产生事件,必须事先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写1允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置1。通过在软件中断/事件寄存器写1,也可以通过软件产生中断/事件请求。通过下面的过程来配置19个线路做为中断源:配置19个中断线的屏蔽位

25、(EXTI_IMR)。配置所选中断线的触发选择位(EXTI_RTSR和EXTI_FTSR)。配置那些控制映像到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得19个中断线中的请求可以被正确地响应。配置19个事件线的屏蔽位(EXTI_EMR)。配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR)。配置19个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)。设置软件中断寄存器的请求位(EXTI_SWIER)。 通用I/O端口与16个外部中断/事件的连接方式如图表7所示:图表7 外部中断通用I/O映射4.1.5 通用定时器通用定时器是一个通过可编程预分频器驱动的

26、16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。定时器是完全独立的,而且没有互相共享任何资源,它们可以一起同步操作。通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:16位向上、向下、向上/向下自动装载计数器16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为165535之间的任意数值。4个独立通道:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出。使用外部信号控制定时器和定

27、时器互连的同步电路如下事件发生时产生中断/DMA:更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)。输入捕获输出比较支持针对定位的增量(正交)编码器和霍尔传感器电路触发输入作为外部时钟或者按周期的电流管理可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。时基单元包含:计数器寄存器(TIMx_CNT)、预分频器寄存器 (TIM

28、x_PSC)、自动装载寄存器 (TIMx_ARR)。图表8为内部时钟分频因子为2时的计数器时序图。图表8 计数器时序图4.2整体的系统流程图 本实验主要是通过四个按键来控制光笔在32X32点阵上的动作,包括点亮、笔画擦除,连字多写及休眠定时的设置。具体的系统流程图如图表9:图表9 系统数据流图4.3 32X32点阵行列扫描的实现主控制程序包括系统初始化(GPIO的设置,时钟的设置,定时中断的设置等等),点阵扫描控制,按键功能的程序(点亮,反显,擦除,连字多写,休眠定时),点阵扫描控制程序分为行扫描与列扫描,行扫描由STM32的GPI0C口通过对四片74LS273的控制来实现循环点亮点阵的32行

29、,同时通过对两片74HC154的控制来实现32列的循环点亮,为了尽可能的节省GPIO口,用到了片选,即当需要点亮某一芯片时时,控制对应的GPIO口输出0其它芯片输出1,只有该芯片有效,反之,控制片选无效,从而达到节省GPIO的目的,利用微亮扫描过程实现循环点亮1024个点。具体代码如下,/*/函数名 void Lsm()/ 功能 列扫描函数,实现点阵32的逐一点亮灭,/ 保证每一次只点亮一只LED/*/void Lsm(void) unsigned char j; Dl_Bit = 0x01; Sm_Row = 0; /列扫描次数初值 Gpioc_Ph = Gpioc_Ph&0xf0; /GP

30、IOC缓存低四位清零 Gpioc_Ph = Gpioc_Ph& Dl_Bit; /缓存列扫描信息 GPIO_Write(GPIOC,Gpioc_Ph); /微亮输出列 for(j = 0;j 8;j+) /扫描前8列 if(Bhzl) Dl_Bit_Temp = S_YleSm_Line+16Clzl&Dl_Bit; else Dl_Bit_Temp = S_YleSm_LineClzl&Dl_Bit; if(0 =Dl_Bit_Temp) Gpioc_Ph = Gpioc_Ph|0xf00; /不亮 else if(0 = Clzl) /第一个8位点亮 Gpioc_Ph = Gpioc_Ph

31、|0xe00; Gpioc_Ph = Gpioc_Ph&0xeff; else if(1 = Clzl) /第二个8位点亮 Gpioc_Ph = Gpioc_Ph|0xd00; Gpioc_Ph = Gpioc_Ph&0xdff; else if(2 = Clzl) /第三个8位点亮 Gpioc_Ph = Gpioc_Ph|0xb00; Gpioc_Ph = Gpioc_Ph&0xbff; else if(3 = Clzl) /第四个8位点亮 Gpioc_Ph = Gpioc_Ph|0x700; Gpioc_Ph = Gpioc_Ph&0x7ff; Gpioc_Ph = Gpioc_Ph&0x

32、f00; /GPIOC缓存低八位清零 Gpioc_Ph = Gpioc_Ph&Dl_Bit; /缓存列扫描信息 GPIO_Write(GPIOC,Gpioc_Ph); /微亮输出列 Delay_Ms(1); Sm_Row+; Dl_Bit = 1 ; /左移一位 if(0x100 = Dl_Bit)Dl_Bit = 0x01; /*/函数名 void Lsm(voi)/ 功能 点阵扫描函数,实现点阵1024个点的逐一点亮/ 从第一行开始按列扫描方式,从左往右逐一点亮32列上的/32个点,再换第二行再依次点亮,直到1024个点都亮灭一次/*/void Dzsm(void) unsigned ch

33、ar k; Gpioc_Ph = Gpioc_Ph|0xe00;/微亮片选第一个8位 Gpioc_Ph = Gpioc_Ph&0xeff;/微亮片选第一个8位 GPIO_Write(GPIOC,Gpioc_Ph); Bhzl = 0; /行小于16 Sm_Line = 0; /行扫描次数 for(k = 0;k 16;k+) /行循环16次 015 Blzl = 0; /列小于8 Clzl = 0; Gpiod_Ph = Gpiod_Ph|0xd0;/微亮片选低位 Gpiod_Ph = Gpiod_Ph&0xd0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write

34、(GPIOD,Gpiod_Ph);/微亮输出列 Lsm(); /列扫描 Blzl = 1; /列大于8小于16 Clzl = 1; Gpiod_Ph = Gpiod_Ph|0xd0;/微亮片选低位 Gpiod_Ph = Gpiod_Ph&0xd0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph); /微亮输出列 Lsm(); /列扫描 Blzl = 2; /列大于16小于24 Clzl = 2; Gpiod_Ph = Gpiod_Ph|0xd0;/微亮片选低位 Gpiod_Ph = Gpiod_Ph&0xd0; Gpiod_Ph

35、= Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph); /微亮输出列 Lsm(); /列扫描 Blzl = 3; /列大于24小于32 Clzl = 3; Gpiod_Ph = Gpiod_Ph|0xd0;/微亮片选低位 Gpiod_Ph = Gpiod_Ph&0xd0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph); /微亮输出列 Lsm(); /列扫描 Sm_Line+; Gpioc_Ph = Gpioc_Ph|0xe0;/微亮片选高位 Gpioc_Ph = Gpioc_Ph&0xef

36、;/微亮片选高位 GPIO_Write(GPIOD,Gpiod_Ph);/微亮输出列 Bhzl = 1; /行大于16 Sm_Line = 0; /行扫描次数清零 for(k = 0;k 16;k+) /行循环16次 1531 Blzl = 0; /列小于8 Clzl = 0; Gpiod_Ph = Gpiod_Ph|0xe0;/微亮片选高位 Gpiod_Ph = Gpiod_Ph&0xe0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph);/微亮输出列 Lsm(); /列扫描 Blzl = 1; /列大于8小于16 Clzl =

37、 1; Gpiod_Ph = Gpiod_Ph|0xe0;/微亮片选高位 Gpiod_Ph = Gpiod_Ph&0xe0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph); /微亮输出列 Lsm(); /列扫描 Blzl = 2; /列大于16小于24 Clzl = 2; Gpiod_Ph = Gpiod_Ph|0xe0;/微亮片选高位 Gpiod_Ph = Gpiod_Ph&0xe0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph); /微亮输出列 Lsm();

38、Blzl = 3; /列大于24小于32 Clzl = 3; Gpiod_Ph = Gpiod_Ph|0xe0;/微亮片选高位 Gpiod_Ph = Gpiod_Ph&0xe0; Gpiod_Ph = Gpiod_Ph|Sm_Line; GPIO_Write(GPIOD,Gpiod_Ph); /微亮输出列 Lsm(); /列扫描 /列扫描 Sm_Line+; 4.3 光笔检测模块的设计光笔主要用光敏三级管作为感光元件,所以先介绍下光敏三级管的结构及工作原理,光敏三极管与普通半导体三极管一样,是采用半导体制作工艺制成的具有NPN 或PNP 结构的半导体管。它在结构上与半导体三极管相似,它的引出电

39、极通常只有两个,也有三个的。光敏三极管的结构如图表10所示。图表10 光敏三极管结构示意图为适应光电转换的要求,它的基区面积做得较大,发射区面积做得较小,入射光主要被基区吸收。和光敏二极管一样,当光照射时,光线通过透镜集中照射在芯片上。将光敏三极管接在图表12所示的电路中,光敏三极管的集电极接正电位,其发射极接负电位。当无光照射时,流过光敏三极管的电流,就是正常情况下光敏三极管集电极与发射极之间的穿透电流Iceo 它也是光敏三极管的暗电流,其大小为Iceo =(1 + hFE) I式中: Icbo-集电极与基极间的饱和电流;hFE -共发射极直流放大系数。图表12 光敏三极管电路当有光照射在基

40、区时,激发产生的电子-空穴对增加了少数载流子的浓度,使集电结反向饱和电流大大增加,这就是光敏三极管集电结的光生电流。该电流注入发射结进行放大,成为光敏三极管集电极与发射极间电流,它就是光敏三极管的光电流。可以看出,光敏三极管利用普通半导体三极管的放大作用,将光敏二极管的光电流放大了( I + hFE) 倍。所以,光敏三极管比光敏二极管具有更高的灵敏度。光笔碰触点阵屏,遇到发光点时,输出信号由高电平变为低电平,stm32外部中断检测到翻转电平,触发中断,由于中断程序优先执行,打断微亮扫描过程,在中断服务程序中根据此时的行列扫描的序号,就可判断光点的坐标,并保存该坐标,同时把行列坐标送液晶屏显示,

41、同时消除中断标志,等待接收下一个信号,进而为其他功能的实现提供依据。相应的程序如下:/* 外部中断在此配置*/void EXTI_Configuration(void) EXTI_InitTypeDef EXTI_InitStructure;GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8); / 光笔中断EXTI_InitStructure.EXTI_Line = EXTI_Line8; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);/*/ 光笔的中断控制函数/功能:当光笔碰

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号