ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:852.18KB ,
资源ID:8776099      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8776099.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32智能手写板.docx)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

STM32智能手写板.docx

1、重庆大学电子技能竞赛 STM32手写板STM32手写板设计技术报告参赛队员:钟培文 周倍同 田其生 重庆大学电子技能竞赛2014年5月20日摘要本文介绍了本小组在设计J题“STM32手写板”中的过程和成果。主控芯片为STM32VET6,开发平台为Keil5.0,采用触摸屏进行输入,使用萨瑞R61509控制的3寸LCD屏幕进行显示,将手写板的分辨率提升到了160*160。本文主要介绍了系统的软件设计流程和内容,涵盖了触摸输入和图像处理两大方面。我们采用了Emwin5.24界面系统进行用户界面设计,采用了UCOS嵌入式实时操作系统进行系统任务设计,采用了边沿提取算法识别图像。实现了点亮,画亮,反显

2、,连写多字,对象拖移,笔画擦出,清屏等功能,以及修改画笔颜色和画笔宽度,还可能实现手动或者自动调节屏幕背光,以及自动关屏等功能。目录第一章 引言31.1设计思路及方案的总体说明31.2章节介绍3第二章 硬件系统42.1主控芯片42.2触摸屏42.3三寸TFT液晶显示器42.4外部光强检测电路52.5完整电路图5三章 软件系统73.1Emwin图像界面库介绍73.2 UCOS II 系统介绍73.3系统功能框图73.4系统工作流程83.5主界面83.6图像保存和各功能实现方案93.6.1图像的获得和保存93.6.2手写绘图93.6.3笔画擦除和全屏擦除功能93.6.4反显功能103.6.5连写多

3、字功能103.6.6对象拖移功能103.7画笔设置113.8系统设置113.9背光设置功能113.10屏幕超时功能11第四章 系统开发调试过程和测试数据124.1调试开发124.2测试数据12第五章 部分重要源码135.1 建立其余任务的函数135.2 检测触摸并画点的函数145.3 创立界面的函数16 5.4 对象拖移边缘识别函数.17第六章 比赛总结20第一章 引言1.1设计思路及方案的总体说明考虑到美观性和实用性,我们使用了3寸LCD液晶显示器替代了LED点阵,将手写框的分辨率提高到了160*160个点,不仅更美观,同时还可以对画笔的颜色和粗细进行更改,当然在提高分辨率的同时也极大的增加

4、了系统负载的强度和图像处理的难度,特别是反映在RAM内存占用方面。我们自己移植了新版本的Emwin5.24,并加入了UCOSII实时操作系统进行任务管理,通过UCOS的内部通讯机制传递触摸消息和其他硬件信息,使用Emwin的消息响应机制处理图像,整个系统整洁而有序。同时采用光敏电阻采集外部光强,按键操作实现关屏和开屏。系统框图如下图1.1图 1.11.2章节介绍第一章 引言:介绍了系统总体概况第二章 硬件系统:介绍了硬件系统概况,包括芯片选用和各种接口第三章 软件系统:介绍了整个软件系统,是最为核心的部分第四章 开发调试过程及测量数据:介绍了手写板的开发调试过程和电压电流测试数据等第五章 总结

5、:总结整个设计的过程以及参赛感悟第二章 硬件系统2.1主控芯片使用了ST公司的STM32VET6芯片,具有64KRAM以及512k的FLASH,片上外设非常丰富,由于此芯片使用非常广泛,不作更多介绍。2.2触摸屏触摸屏采用了4线电阻式触摸屏,触摸芯片采用的是使用较多的XPT2046。XPT2046是一款4线制触摸屏控制器,内含 12位辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置, 除此之外,还可以测量加在触摸屏上的压力。内部自带2.5V参考电压可以作为辅助输入、温度测量和电池

6、监测模式之用,电池监测的电压范围可以从0V到6V。XPT2046片内集成有一个温度传感器。 在2.7V的典型工作状态下,关闭参考电压,功耗可小于0.75mW。2.3三寸TFT液晶显示器显示器采用了400*240分辨率的3寸TFT液晶显示器,采用萨瑞公司的RT61509显示驱动器。为了达到显示效率和色彩的平衡,显示器采用16位64K色显示模式,如下图2.1。在这个模式每个像素用5位红色6位绿色5位蓝色总共16位来表示, 根据分辨率,一帧图像占用400*240*2=192000字节。图 2.1显示器采用的是I8080时序,我们使用了STM32的FSMC接口模拟了8080时序对显示器进行控制,刷新频

7、率可以达到50HZ。2.4外部光强检测电路采用了简单的ADC采集光敏电阻电压来获得外部光强,通过外部光强的变化来控制显示器背光亮度,达到节能的功能。其电路如下图2.2 图2.22.5完整电路图电源部分:最小系统:各种接口:三章 软件系统3.1Emwin图像界面库介绍emWin(embed win的缩写)是 Segger 公司针对嵌入式平台开发的图形软件库,通过调用 emWin 提供的函数接口,开发嵌入式图形界面应用变得简单而快捷。图形软件库就是一些与图形界面相关的函数,它提供接口给用户调用。用户只需要调用相应的函数,就可以轻松的做出各种各样的图形图案而不用考虑相应的算法了。主要功能有:绘制 2

8、-D 图形、显示位图文件、显示文字、处理用户输入、提供各种窗口对象。emWin的这些功能就是为了解决人机交互应用的设计难题,并且相对来说对 ROM 和 RAM的消耗相对来说并不高,又因为 emWin 可以在多任务系统及裸机的平台上运行,尤其适合嵌入式乱七八糟的开发要求,使得 emWin 在嵌入式人机交互场合中大放异彩。3.2 UCOS II 系统介绍uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器。uC/OS II最大程度上使用ANSI C语言进行开

9、发,可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务。其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。3.3系统功能框图初始化笔画擦除全屏擦除反显屏幕超时设置功能选择对象拖移连写多字画笔宽度画笔颜色背光设置手写画图获取触摸消息3.4系统工作流程l 首先硬件初始化后,UCOS系统启动,先建立了各种任务l 然后在系统的任务调度下就一直循环运行任务,当有触摸消息时,先判断是在按下了功能选择按钮还是在手写区画下,如果是功能选择就执行相应的功能切换,如果是在手写区画下就在屏幕对应位置点亮屏幕画下一个点。3.5主界

10、面利用Emwin提供的各种控件,我们可以轻松的开发出各种美观的界面,同时新版本还支持皮肤的切换,可以画出WIN7风格的皮肤。我们使用将主界面分为功能区和手写区,功能区是各种功能按钮,手写区为160*160像素的方框,如下图3.1。图 3.1 主界面 3.6图像保存和各功能实现方案3.6.1图像的获得和保存触摸任务以3ms的任务周期不断循环运行,由于触摸对时间要求很短,而其余消息处理时间可能过长,UCOS系统心跳周期为1ms,为了防止在处理消息速度太慢而丢失掉触摸消息,我们采用了UCOS的消息队列机制。其相当于开辟了一个触摸缓存,可以完整的把触摸消息发送到处理函数,同时加快了手写响应。开辟了一个

11、保存手写区图像的160*160数组刚好和坐标线性对应,当获得到手写消息后先将数组中对应位置的值置1,表示此处被正常画下。同时在实现其他功能时将图像转换为数组来处理,非常的直观。3.6.2手写绘图当获得到手写消息后,先将对应位置数组置1,然后调用Emwin图形库的函数进行绘图。我们对画笔定义了一个结构体:struct unsigned short With;GUI_COLOR Color;GUI_COLOR BkColor; MYLINE;With表示画笔的宽度,Color表示手写区的前景色,BkColor表示手写区的背景色。当需要绘图时根据画笔的结构体,先根据画笔前景色设置画笔颜色,在调用GU

12、I_FillCircle(x, y, MYLINE.With),这是Emwin提供的圆圈填充函数,这里根据我们设置的画笔宽度自动计算然后以画笔宽度为半径画一个圆点,即实现了点亮功能。3.6.3笔画擦除和全屏擦除功能由于我们使用了一个和图像对应的160*160的数组记录图像信息,我们可以很方便的对图像进行控制。当开启笔画擦除功能时,我们在获得触摸消息后不是把对应位置数组置1,而是相反把它置0,同理在全屏擦除功能时我们直接把整个数组置0.由于Emwin会不断检测显示内容是不是发生了变化,当发生了变化之后会自动重绘,于是我们在重绘的时候根据位置数组的值来绘制手写区,如果是1就先设置前景色,在以画笔宽

13、度填充一个原点,如果数组置为0,则以背景色填充一个像素点。即实现了擦除功能。3.6.4反显功能由于我们使用了一个用来表示画笔属性的结构体,我们可以很方便的改变画笔属性和改变图像内容。当开启了反显功能后,我们就交换画笔的前景色和背景色属性,然后根据位置数组用交换后前景色和背景色重绘手写框。其实就是相当于交换了图像划线的颜色和背景颜色,即实现了反显功能。下图是正常和反显后的主界面,如图3.2和3.3 图3.2(正常)图3.3(反显)3.6.5连写多字功能在连写多字功能下,我们写完一个字后在按一下功能按钮就可以将图像保存下来,当保存了4张图像后在间隔1s重现保存的4张图像。在整个系统的内配方面,由于

14、Emwin占了接近全部内存的一半,而且图像位置数组也占用了相当大一部分内存,这里我们并没有将图像保存在内存中,而是将图像保存到了FLASH里面,在优化了源程序后,FLASH空间剩余200kb以上,完全足够。为了保证写FLASH速度,我们采用了动态数组,然后对位置数组进行扫描,将已经画下的有效位置坐标保存到FLASH。3.6.6对象拖移功能当功能开启时我们首先在手写区画一个圆圈将需要拖移的对象圈起来,然后在选定要拖移的位置,拖移后选中的图像将会被拖移到相应位置。对象拖移功能在我们的系统中是最为复杂的一个功能,因为首先要识别出用户画出的圆圈,而且画出的圆圈可能是不规则的,并且由于触摸读取的原因,圆

15、圈还可能不是连续的,加大了识别的难度。在开启功能后当用户画圈时我们并不是把位置数组置1,而是把它置为了2,表示这是识别圈,在拖移完成后图像重绘时会自动消失。为了完整的识别出画下的圆圈,我们采用了在智能车系统中使用的边缘跟踪算法,在图像的开头先分别从左右两边逐行扫描每行中为2的坐标,当左右同时扫描到2时,先保存这一坐标然后以这一点为基准开始分别从圆圈的左右线往下跟踪。具体方式是在前一行找到2时,在这一点的左右8个点内搜索下一行为2的坐标,如果下一行依然没有找到,我们便用上一行的坐标替代未找到的坐标进行补线。经过调整搜线半径后测试拖移程序,效果很不错。3.7画笔设置画笔设置界面如下图3.4可以以R

16、GB形式自定义画笔颜色,画笔大小可以设置为1到5,意思是以1至5为半径画圆填充。图3.43.8系统设置系统设置如图3.5系统设置包括手动/自动背光,模式切换,以及屏幕超时设定。图3.53.9背光设置功能在手动背光模式下将以滑块设置的参数来调节背光亮度,而在自动模式下,将通过ADC采集的值来自动控制背光。3.10屏幕超时功能屏幕超时的任务在运行时会一直按秒计数,当有触摸消息输入时将计数置为设定值,当无触摸消息是计数减一,当减为0时说明长时间没有触摸便进入到低功耗模式。这里我们使用了STM32的STOP模式,通过优化IO口设置后电流低至5ma以下,完全符合要求。第四章 系统开发调试过程和测试数据4

17、.1调试开发我们在调试的过程中采用了Keil来进行软件开发和编译,同时使用了UCGUIbuilder来进行辅助界面设计。UCGUIbuilder是方便快捷的可视化Emwin编辑工具,能快速的制作简单的界面。我们还使用了Micrium_uCGUI-Trial-V524,其为Emwin5.24的电脑仿真版本,在VC环境下能模拟仿真出设计的Emwin界面,十分的方便,如下图3.6图3.6(仿真界面)4.2测试数据正常工作是电流:122.7mA低功耗模式下电流:2.2mA第五章 部分重要源码5.1 建立其余任务的函数static void App_TaskCreate(void) NMEA_MBOX=

18、OSSemCreate(0);/建立NMEA指令解析的信号量 SSLEEP=OSQCreate(&Msgsleep0,2);Touch_Q=OSQCreate(&MsgGrp0,N_MESSAGES);/创建消息队列 /*建立用户界面任务*/ OSTaskCreateExt(AppTaskUserIF,(void *)0, (OS_STK*)&AppTaskUserIFStkAPP_TASK_USER_IF_STK_SIZE-1, APP_TASK_USER_IF_PRIO, APP_TASK_USER_IF_PRIO, (OS_STK *)&AppTaskUserIFStk0, APP_TA

19、SK_USER_IF_STK_SIZE,(void *)0, OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR); /*建立触摸驱动任务*/ OSTaskCreateExt(AppTaskKbd, (void *)0,(OS_STK *)&AppTaskKbdStkAPP_TASK_KBD_STK_SIZE-1,APP_TASK_KBD_PRIO,APP_TASK_KBD_PRIO,(OS_STK *)&AppTaskKbdStk0, APP_TASK_KBD_STK_SIZE, (void *)0, OS_TASK_OPT_STK_CHK|OS_TASK_OPT

20、_STK_CLR); /*建立睡眠任务*/ OSTaskCreateExt(APPTask_SLEEP, (void *)0,(OS_STK *)&Task_SLEEPStkAPP_TASK_SLEEP_STK_SIZE-1,APP_TASK_SLEEP_PRIO,APP_TASK_SLEEP_PRIO,(OS_STK *)&Task_SLEEPStk0, APP_TASK_SLEEP_STK_SIZE, (void *)0, OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);5.2 检测触摸并画点的函数void Send_Paint(GUI_PID_STATE

21、 State,U8 t)int i, j;int dx, dy; if(Stateflag)WM_SelectWindow(hwin3);GUI_SetColor(MYLINE.Color);if (drag=1)if (GUI_TOUCH_GetState(&State)if (State.x 209 & State.x59 & State.y 209 & State.x59 & State.y 209 & State.x59 & State.y 209 & State.x59 & State.y 209 & State.x59 & State.y = 0 ? State.y - 62 - MYLINE.With : 0; j = (State.y - 58 + MYLINE.With= 0 ? State.x - 212 - MYLINE.With : 0; i = (State.x - 208 + MYLINE.WithhWin;GUI_EndDialog(hWin, 0);WM_DeleteWindow(hwin2);WM_DeleteWindow(hwin3);Create_start();void Create_set(WM_MESSAGE * pMsg)WM_HWIN hWin = pMsg-hWin;Stateflag = 0;GUI_EndDialog(h

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2