嵌入式触摸屏实验
嵌入式课程设计之触摸屏程序设计

摘要随着多媒体信息的与日俱增,传统的人机交互的速度已经不能满足需求,传统的人机交流是通过键盘或鼠标来实现的。
信息交换的速度比较慢,而且要求操作者具有一定的专业知识。
这将使信息交流的目的大打折扣。
触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备,已取代键盘,越来越受到各种终端产品商的重视。
基于Linux 的嵌入式系统目前获得到了广泛应用,在嵌入式Linux 核心层的开发中,设备驱动分为字符设备、块设备和网络接口设备,触摸屏驱动属于字符设备,但它也可以被纳入input 输入子系统的框架下。
通过毕业设计的驱动程序开发,也希望能对国家在这方面的发展做出自己的一点贡献。
本论文介绍了触摸屏的分类和原理,接着概要介绍嵌入式系统的相关原理理论,然后详细介绍了整个系统的开发环境,最后对整个触摸屏驱动系统进行了分析,讨论了系统具体实现。
关键词:Linux 操作系统;触摸屏;程序开发;交叉编译目录第一部分绪论 ........................................................................................................................... - 2 -1.1设计目的 (1)1.2设计意义 (2)1.3设计内容 (2)1.4主要任务 (2)第二部分正文 ........................................................................................................................... - 3 -2.1触摸屏工作原理(触摸屏接口工作模式) (3)2.2、设计总体方案 (4)2.3、设计所需工具 (7)2.4、平台构建过程 (7)2.4.1、硬件平台搭建.......................................................................................................... - 7 -2.4.2根文件系统的制作..................................................................................................... - 9 -(1)根文件系统................................................................................................................ - 9 - 第三章程序 ............................................................................................................................. - 14 -3.1.程序流程图: (14)3.2.分析驱动 (14)3.2.1、触摸屏设备驱动中数据结构................................................................................ - 14 -3.2.2、触摸屏驱动模块加载和卸载函数........................................................................ - 16 -3.2.3、触摸屏设备驱动的读函数.................................................................................... - 18 -3.2.4、触摸屏设备驱动的轮询与异步通知.................................................................... - 18 -3.2.5、实验结果显示:.................................................................................................... - 20 - 第四部分心得 ......................................................................................................................... - 20 - 4.1课程设计心得体会: (20)第五部分参考文献 ................................................................................................................. - 21 - 5.1【参考文献】.. (21)第一部分绪论1.1 设计目的1.基于Linux操作系统,以及Emest III实验箱,利用触摸屏返回触点坐标值及动作信息。
嵌入式触摸屏的应用研究

表面坚硬 耐用 ,内表 面有一 个传 导层 。当屏幕 被触摸 时 ,传导层 与玻璃 面表层进 行 电子接触 ,产 生的 电 压就是所 触摸位 置 的模 拟 表示 。将接触 点 的电压通 过 A/ D转 换读 入 C U 中 ,再 经过 一 定 的运 算处 理 , P
就可 以得到触摸 点 的坐标 。
触摸 屏 ( ,T u hS re )具 有 良好 的人机 交 互 性 ,作 为 一 种方 便 、简 单 的操 作 手段 ,它广 泛 TS o c cen
地 应用于 各类嵌 入式产 品 中 。¥ C 4 0是 S msn 3 21 a u g公 司推 出 的一款 A MR 9芯 片 ,有 丰 富 的外 围功 能模 块 ,使用 它的触 摸屏接 口可以方便 地与触 摸屏相 联 。本 文在 简要介 绍触摸 屏技术基 础 上 ,分 析 了触 摸屏 接 口硬件架 构 以及工作 机理 。软 件设计方 面 ,利 用 ¥ C 4 0触 摸屏 接 口的等 待 中断模 式 和独 立 X/ 3 21 Y坐 标转换模式 ,实 现 了对 触摸 屏 的控制与 应用 。
1 l 2 接 口 电 路 .
触摸 屏与 ¥ C 4 0的接 口电路原 理如图 1所示 。¥ C 4 0的触 摸屏 控制 接 口是 与 AD 3 21 3 21 C共 用 的 ,它
内部集成 了一个 1 的 AD O位 C,有 8路模 拟输入 通道 。其 中 ,通道 AI [ ] 作为 触摸 屏 接 口的 X 坐 标 N 7
输 入 ,通道 AI s N E ]作 为触 摸屏接 E 的 y坐标 输入 。在 2 5 l . MHz A/ 的 D转 换 时钟 频 率下 ,转换 器 将
模 拟输 入信号 以最大 5 O P O Ks S转 换率转 换为 1 O位二 进制数 码 。 四线 电阻式 触摸 屏提供 X 、X P M、Y P、YM 四个接 口 ,其 中 XP 、YP分别为 触摸 屏 被按 下 时 x、 y
南昌大学 嵌入式 实验报告 实验三

学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:综合实验三触摸屏控制一、实验项目名称触摸屏控制二、实验目的了解触摸屏的基本工作原理,学会s3c2410ADC的配置三、实验基本原理:通过设置GPIO口及液晶触摸屏控制器等相关寄存器来达触摸相应菜单键来控制直流步进电机的转动,加速减速和改变方向,并同步超级终端。
程序思路和部分代码:1. 本次实验主要是设置触摸屏中断和ADC转换中断来实现将触摸屏触点转换成坐标。
在写下笔中断和抬笔中断时一定要在最开始写rINTSUBMSK |= (BIT_SUB_ADC|BIT_SUB_TC);来禁止ADC中断和触摸屏中断,否则按下一次有可能会多次中断,这是不允许的。
2. 实验通过在中断中处理AD转换后的坐标值,并设置了一个全局变量,通过改变这个全局变量的值达到不同的效果。
通过比较液晶屏上规划好的各个触摸范围,来跳转到相应的功能。
其具体函数如下://左上角按钮表示步进电机加速if(point_adcx>=0&&point_adcx<=500&&point_adcy>=0&&point_a dcy<=300){step_delay=step_delay-1;学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:UART_SendStr("电机加速");sprintf(disp_buf, "delay is %d \n", step_delay);UART_SendStr(disp_buf);if(step_delay<=1)step_delay=1;}//上中角按钮表示步进电机减速if(point_adcx>=0&&point_adcx<=500&&point_adcy>=300&&point _adcy<=600){step_delay=step_delay+1;UART_SendStr("电机减速");sprintf(disp_buf, "delay is %d \n", step_delay);UART_SendStr(disp_buf);if(step_delay>=10)step_delay=10;}//右上角按钮表示步进电机正反转if(point_adcx>=0&&point_adcx<=500&&point_adcy>=600){sprintf(disp_buf, "STEP_Motoflag is %d \n", STEP_Motoflag);UART_SendStr(disp_buf);学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:if(STEP_Motoflag==0)STEP_Motoflag=1;else STEP_Motoflag=0;DelayNS(50); // 停止步进电机,延时UART_SendStr("步进电机正反转\n");sprintf(disp_buf, "STEP_Motoflag is %d \n", STEP_Motoflag);UART_SendStr(disp_buf);//左下角按钮表示直流电机加速if(point_adcx>=500&&point_adcy>=0&&point_adcy<=300){pwm_duty= pwm_duty + 255/6; // 改变当前电机的速度if(pwm_duty>255){pwm_duty = 255/6;}rTCMPB0 = pwm_duty;UART_SendStr("直流电机加速");}//下中角按钮表示直流电机减速if(point_adcx>=500&&point_adcy>=300&&point_adcy<=600)学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:{pwm_duty= pwm_duty - 255/6; // 改变当前电机的速度级别if(pwm_duty<10){ pwm_duty = 255;}rTCMPB0 = pwm_duty;UART_SendStr("直流电机减速");}//右下角按钮表示直流电机正反转if(point_adcx>=500&&point_adcy>=600){if(DC_Motoflag==0)DC_Motoflag=1;else DC_Motoflag=0;UART_SendStr("直流电机正反转");}四、主要仪器设备及耗材实验箱一台,PC机一台,JTAG一个。
嵌入式实验报告_触摸屏驱动实验

贵州大学实验报告学院:专业:班级:姓名学号实验组实验时间05.06 指导教师余佩嘉成绩实验项目名称触摸屏驱动实验实验目的1.了解触摸屏基本概念与原理。
2.理解触摸屏与 LCD 的密切配合。
3.编程实现对触摸屏的控制。
实验原理1.触摸屏原理触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。
常见的又数电阻触摸屏。
如图 3-20 所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。
如图 3-21 所示,当手指或笔触摸屏幕时(图 c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层(顶层)接通 X 轴方向的 5V 均匀电压场(图a),使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行 A/D 转换,并将得到的电压值与 5V 相比即可得触摸点的 X 轴坐标为(原点在靠近接地点的那端): Xi=Lx*Vi / V(即分压原理)同理得出 Y 轴的坐标,这就是所有电阻触摸屏共同的最基本原理。
2.电阻触摸屏的有关技术电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层叫 ITO 的透明导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层导电层(ITO 或镍金)。
电阻触摸屏的两层 ITO 工作面必须是完整的,在每个工作面的两条边线上各涂一条银胶,一端加 5V 电压,一端加 0V,就能在工作面的一个方向上形成均匀连续的平行电压分布。
在侦测到有触摸后,立刻 A/D 转换测量接触点的模拟量电压值,根据5V 电压下的等比例公式就能计算出触摸点在这个方向上的位置。
嵌入式系统linux下触摸屏实验报告

一.硬件平台1、处理器:三星S3C2410,200MHZ2、内存:SDRAM,64M3、外存:NAND FLASH,64M4、LCD&触摸屏:SHARP,640×480,TFT5、串口:RS232,RS485二.处理器结构1、处理器核心MMU,DCACHE,ICACHE,JTAG2、系统总线SDRAM,FLASH,LCD,中断,USB3、外部总线串口,USB,GPIO试验一:bootloader (ads、引导)1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心主要内容:•编写串口接收数据函数•编写串口发送数据函数•打印菜单,等待用户输入•下载并运行linux核心•配置主机的nfs服务器,与linux核心连接其他部分代码从教师用机中拷贝linux核心从教师机中拷贝主要步骤:•修改bootloader:菜单、串口收发、命令行;•使用ads1.2编译bootloader;•使用uarmjtag下载、调试bootloader;•使用axd查看变量、内存,单步跟踪;•配置超级终端,与bootloader通讯;•使用超级终端下载Linux核心映像;•启动Linux核心运行,察看结果;(bootloader调试成功后再继续以下步骤)•主机重起到ubuntu,配置nfs,配置cutecom;•重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统。
需要补充的代码:接收串口数据并做相应处理while(1){打印菜单并等待用户输入;switch(ch) //根据用户输入做相应处理{case '1':imgsize=xmodem_receive((char *)KERNEL_BASE, MAX_KERNEL_SIZE);if(imgsize==0) //下载出错;else //下载成功;break;case '3':nand_read((unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024);case '2':BootKernel(); //这里是不会返回的,否则出错;break;default:break;}}打印菜单:Uart_puts("Menu:\n\r");Uart_puts("1.Load kernel via Xmodem;\n\r");Uart_puts("2.Boot linux; \n\r");Uart_puts("3.Load kernel from flash and boot; \n\r");Uart_puts("Make your choice.\n\r");do{ch=Uart_getc();}while(ch!='1' && ch!='2' && ch!='3');串口读写:void Uart_putc(char c){while(!SERIAL_WRITE_READY());((UTXH0) = (c));}unsigned char Uart_getc( ){while(!SERIAL_CHAR_READY());return URXH0;}设置Linux核心启动命令行char *linux_cmd="noinitrd init=/init root=/dev/nfs nfsroot=,tcp ip= console=ttySAC0"; nfs服务器设置编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs-kernel-server restart测试nfs服务器:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt•试验二:linux kernel (gcc、make)1、熟悉基本的linux命令文件操作、文件编辑串口工具、程序开发2、配置linux核心make menuconfig3、交叉编译linux核心make zImage主要工作•熟悉基本的linux命令•配置linux核心•交叉编译linux核心•调试自己编译的核心•挂载nfs上的root(根目录)•编写一个小程序在目标板上运行主要步骤:•用root用户登录ubuntu (合理使用权限);•解压缩源码包到/home/下;•察看解压缩后的/home/arm_os目录:Linux核心、编译器、root等;•配置并测试nfs;•配置cutecom:115200,XModem,No line end;•配置核心:make menuconfig;•编译核心:make;•下载并运行核心,加载root文件系统;•重新设置cutecom为LF line end;•熟悉基本的Linux命令;•编写一个小程序在目标板上运行,察看结果。
嵌入式系统实验说明

课程综合设计
设计目的
利用所学知识在实验平台基础上,设计 实现一个简单的嵌入式系统应用,以加 深对嵌入式系统的理解和掌握。设计报 告的内容格式与平时实验一样,以下2个 主题任选一个或者自选其它相关主题。 基于ucosII的嵌入式系统及其实际应用 基于wince的嵌入式系统及其实际应用 其它与嵌入式相关的题目 预计实验次数:4~6次
常见问题
PC电脑的网线、PC与嵌入式系统实验箱之间 的USB线、串口线以及ICE仿真器的并口线接 触不良,可以稍微活动一下这些连线的接口部 分,反复尝试直到问题解决。 ADS1.2开发环境的使用,以自学为主,参见 实验说明中的文档“选做实验 汇编指令编程 C语言编程.doc”,结合ADS1.2的F1帮助说 明来学习掌握。 从服务器上下载的有关资料以及后续各自的实 验程序等内容,要存放到PC的D:盘或E:盘的 USER目录中,每组分别建立各自的子目录存 放各自的实验程序。
实验二 接口编程
实验目的: 掌握IO口的使用 掌握中断处理程序的编写 掌握定时器的使用 预计实验次数:2次
实验三 触摸屏 LCD接口
实验目的: 触摸屏实验 LCD接口实验 预计实验次数:2次
实验四 WINCE的平台定制及镜像文件下载
实验目的: PLATFORM BUILDER的安装 PLATFORM BUILDER建立工程项目 下载WinCE映像到NANDFLASH 预计实验次数:1次
嵌入式系统实验说明
实验概况
实验分组: 每组2人,每次实验20组左右 具体分组名单见BBS系版说明 实验时间: 周日或周六,晚上19:00~22:00 第四周~本学期末 实验地点: 电四楼209~211室
嵌入式触摸屏实验

触摸屏实验一、实验目的1.了解触摸屏的基本概念与原理。
2.理解触摸屏工作原理。
二、实验设备计算机;博创UP-3000实验箱三、实验步骤1.新建工程,将“\3000的ADS实验\Exp8 触摸屏实验”中的文件添加到工程中。
2.定义头文件中的宏定义。
3.阅读触摸屏读取触摸点x,y电压值、坐标程序,画出流程图。
4.编写触摸点坐标及动作判断函数U32 TchScr_GetOSXY(int *x, int *y),返回值为触摸动作,画出程序流程图。
5.提高部分:与LCD结合,实现手写板功能,在触摸屏上画线,在LCD上显示出来。
6.提高部分:与LCD结合,实现按钮功能,在LCD上画一矩形按钮,点击该按钮,实现某个操作。
四、程序流程图,程序源代码及注释和程序运行结果(截屏)。
触摸点坐标判断函数:U32 TchScr_GetOSXY(int *x, int *y) {//获得触摸点坐标并返回触摸动作static U32 mode=0;static int oldx,oldy;int i,j;for(;;){if((mode!=TCHSCR_ACTION_DOWN) && (mode!=TCHSCR_ACTION_MOVE)){if(!TCHSCR_IsPenNotDown){//有触摸动作TchScr_GetScrXY(x,y,TRUE);//得到触摸点坐标for(i=0;i<40;i++){if(TCHSCR_IsPenNotDown)//抬起break;Delay(100);}if(i<40){ //在规定的双击时间之内抬起,检测是不是及时按下for(i=0;i<60;i++){if(!TCHSCR_IsPenNotDown){if (i<10) {i=60;break;}//如果单击后很短时间内按下,不视为双击mode=TCHSCR_ACTION_DBCLICK;for(j=0;j<40;j++) Delay(100);//检测到双击后延时,防止拖尾break;}Delay(100);}if(i==60)//没有在规定的时间内按下mode=TCHSCR_ACTION_CLICK;}else{ //没有在规定的时间内抬起mode=TCHSCR_ACTION_DOWN;}break;}}else{if(TCHSCR_IsPenNotDown){ //抬起mode=TCHSCR_ACTION_UP;*x=oldx;*y=oldy;return mode;}else{TchScr_GetScrXY(x, y,TRUE);if(ABS(oldx-*x)>4 ||ABS( oldy-*y)>4){//有移动动作mode=TCHSCR_ACTION_MOVE;break;}}}Delay(50);}oldx=*x;oldy=*y;//编写该函数return mode;}画线函数:void TchScr_Test(){U32 mode1,mode2;int x1,y1,x2,y2,i,j,p,q;float k;Uart_Printf("\nplease touch the screen\n");//画直线for(;;){mode1=TchScr_GetOSXY(&x1,&y1);//获得触摸点坐标并返回触摸动作if(mode1==TCHSCR_ACTION_CLICK){Uart_Printf("Action=click:x=%d,\t y=%d\n",x1,y1);Delay(1000);Uart_Printf("please touch another click");mode2=TchScr_GetOSXY(&x2, &y2);//获得触摸点坐标并返回触摸动作Uart_Printf("Action=click:x=%d,\t y=%d\n",x2,y2);Delay(1000);if(x1==x2) //无斜率情况{for(i=y1;i<=y2;i++){LCDBuffer[i][x1]=0x0000e000;}}elseif(abs(x1-x2)>=abs(y1-y2)){k=(y2-y1)/(x2-x1);if(x1<x2){for(j=x1;j<=x2;j++){ i=(int)(y1+k*(j-x1));LCDBuffer[i][j]=0x0000e000;}}else{for(j=x2;j<=x1;j++){ i=(int)(y1-k*(x1-j));LCDBuffer[i][j]=0x0000e000;}}}else{k=(y2-y1)/(x2-x1);if(y1<y2){for(i=y1;i<=y2;i++){j=(int)(x1+(i-y1)/k);LCDBuffer[i][j]=0x0000e000;}}else{for(i=y2;y<=y1;y++){j=(int)(x1-(y1-i)/k);LCDBuffer[i][j]=0x0000e000;}}}LCD_Refresh();}}}矩形按键控制步进电机函数:void TchScr_Test(){U32 mode,mode1,mode2;int x,y,x1,y1,x2,y2,i,j,p,q;float k;//////////////A, AB, B, BC, C CD, D, DAintstepdata[]={0x10,0x30,0x20,0x60,0x40, 0xc0,0x80,0x90};//正向转动时的位控制数组intstepdata1[]={0x90,0x80,0xc0,0x40,0x60 ,0x20,0x30,0x10};//反向转动时的*** Uart_Printf("\nplease touch the screen\n");//控制电机for(i=70;i<=120;i++)for(j=150;j<=210;j++){LCDBuffer[i][j]=0x0000e000;}LCD_Refresh();for(;;){mode=TchScr_GetOSXY(&x,&y);if(x>=150&&x<=210&&y>=70&&y<=120) //区域判断{if(mode==TCHSCR_ACTION_CLICK)//单击正转{for(j=0;j<20000;j++)//设置转动次数,尽量大会效果明显{for(i=0;i<8;i++)//步距角为360/512/8,所以即使四相步机转一次也不会有明显转动现象{SETEXIOBITMASK(stepdata[i],0xF0);//通过宏定义空位EXIO的高四位来控制步进机正向转动Delay(3000);}}}else if(mode==TCHSCR_ACTION_DBCLICK)//双击反转{for(j=0;j<20000;j++){for(i=0;i<8;i++){SETEXIOBITMASK(stepdata1[i],0xF0);//反向转Delay(3000);}}}}}}结果截图:五、实验心得通过本次实验,了解的触摸屏的基本实现原理,我们所用的实验箱的触摸屏为电阻式,基本原理是检测触摸点被压下后的电压值来返回坐标,还有一种触摸屏为电容式。
南昌大学嵌入式触摸屏控制实验

综合试验一:触摸屏控制一、实验目的在实验二的基础上,参考并研究实验箱配带的触摸屏控制的源代码及相关资料,作适当修改,将实验二中键盘交互控制变为触摸屏控制。
实现触摸屏控制直流、步进电机的加速和减速、正反转;并在超级终端和液晶屏上同步显示转速。
另外进一步巩固MagicARM2410专用工程模板的使用;掌握Wiggler JTAG仿真器的安装和使用;能够在MagicARM2410实验箱上运行程序;掌握中断初始化以及中断服务函数的编写;了解触摸屏中断服务程序,进行ADC转换后输出显示;掌握S3C2410的模/数(A/D)转换器的应用设置;掌握步进电机的控制原理,掌握电机转动控制和调速方法;掌握使用PWM方式控制直流电机的转动速度。
二、实验原理本实验在实验一和二的基础上,参考并研究实验箱配带的触摸屏控制的源代码及相关资料,作适当修改,将实验二中键盘交互控制变为触摸屏控制。
实现触摸屏控制直流、步进电机的加速和减速、正反转;并在串口调试助手和液晶屏上同步显示转速。
S3C2410 接4 线电阻式触摸屏的电路原理如图1 所示。
整个触摸屏由模向电阻比和纵向电阻线组成,由nYPON、YMON、nXPON、XMON 四个控制信号控制4 个MOS 管(S1、S2、S3、S4)的通断。
S3C2410 有8 个模拟输入通道。
其中,通道7 作为触摸屏接口的X 坐标输入(图1 的AIN[7]),通道5 作为触摸屏接口的Y 坐标输入(图1 的AIN[5])。
电路如图2 所示。
在接入S3C2410 触摸屏接口前,它们都通过一个阻容式低通滤器滤除坐标信号噪声。
这里的滤波十分重要,如果传递给S3C2410 模拟输入接口的信号中干扰过大,不利于后续的软件处理。
在采样过程中,软件只用给特殊寄存器置位,S3C2410 的触摸屏控制器就会自动控制触摸屏接口打开或关闭各MOS 管,按顺序完成X 坐标点采集和Y 坐标点采集。
电阻式触摸屏主要是一块与显示器配合的非常好的电阻薄膜,它是一种多层的复合薄膜,通常它以一层玻璃做基层,表面涂上一层透明的氧化金属导电层(ITO氧化铟,透明的导电电阻)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
触摸屏实验
一、实验目的
1.了解触摸屏的基本概念与原理。
2.理解触摸屏工作原理。
二、实验设备
计算机;博创UP-3000实验箱
三、实验步骤
1.新建工程,将“\3000的ADS实验\Exp8 触摸屏实验”中的文件添加到工程中。
2.定义头文件中的宏定义。
3.阅读触摸屏读取触摸点x,y电压值、坐标程序,画出流程图。
4.编写触摸点坐标及动作判断函数U32 TchScr_GetOSXY(int *x, int *y),返回值为触
摸动作,画出程序流程图。
5.提高部分:与LCD结合,实现手写板功能,在触摸屏上画线,在LCD上显示出来。
6.提高部分:与LCD结合,实现按钮功能,在LCD上画一矩形按钮,点击该按钮,
实现某个操作。
四、程序流程图,程序源代码及注释和程序运行结果(截屏)。
触摸点坐标判断函数:
U32 TchScr_GetOSXY(int *x, int *y) {//获得触摸点坐标并返回触摸动作
static U32 mode=0;
static int oldx,oldy;
int i,j;
for(;;){
if((mode!=TCHSCR_ACTION_DOWN) && (mode!=TCHSCR_ACTION_MOVE)){
if(!TCHSCR_IsPenNotDown){//有触摸动作
TchScr_GetScrXY(x,
y,TRUE);//得到触摸点坐标
for(i=0;i<40;i++){
if(TCHSCR_IsPenNotDown)//抬起
break;
Delay(100);
}
if(i<40){ //在规定的双击时间之内抬起,检测是不是及时按下
for(i=0;i<60;i++){
if(!TCHSCR_IsPenNotDown){
if (i<10) {i=60;break;}//如果单击后很短时间内按下,不视为双击
mode=TCHSCR_ACTION_DBCLICK;
for(j=0;j<40;j++) Delay(100);//检测到双击后延时,防止拖尾
break;
}
Delay(100);
}
if(i==60)
//没有在规定的时间内按下
mode=TCHSCR_ACTION_CLICK;
}
else{ //没有在规定的时间内抬起
mode=TCHSCR_ACTION_DOWN;
}
break;
}
}
else{
if(TCHSCR_IsPenNotDown){ //抬起
mode=TCHSCR_ACTION_UP;
*x=oldx;
*y=oldy;
return mode;
}
else{
TchScr_GetScrXY(x, y,TRUE);
if(ABS(oldx-*x)>4 ||ABS( oldy-*y)>4){//有移动动作
mode=TCHSCR_ACTION_MOVE;
break;
}
}
}
Delay(50);
}
oldx=*x;
oldy=*y;
//编写该函数
return mode;
}
画线函数:
void TchScr_Test()
{
U32 mode1,mode2;
int x1,y1,x2,y2,i,j,p,q;
float k;
Uart_Printf("\nplease touch the screen\n");
//画直线
for(;;){
mode1=TchScr_GetOSXY(&x1,
&y1);//获得触摸点坐标并返回触摸动作
if(mode1==TCHSCR_ACTION_CLICK)
{
Uart_Printf("Action=click:x=%d,\t y=%d\n",x1,y1);
Delay(1000);
Uart_Printf("please touch another click");
mode2=TchScr_GetOSXY(&x2, &y2);//获得触摸点坐标并返回触摸动作
Uart_Printf("Action=click:x=%d,\t y=%d\n",x2,y2);
Delay(1000);
if(x1==x2) //无斜率情况
{
for(i=y1;i<=y2;i++)
{
LCDBuffer[i][x1]=0x0000e000;
}
}
else
if(abs(x1-x2)>=abs(y1-y2))
{
k=(y2-y1)/(x2-x1);
if(x1<x2)
{
for(j=x1;j<=x2;j++)
{ i=(int)(y1+k*(j-x1));
LCDBuffer[i][j]=0x0000e000;
}
}
else{
for(j=x2;j<=x1;j++)
{ i=(int)(y1-k*(x1-j));
LCDBuffer[i][j]=0x0000e000;
}
}
}
else{
k=(y2-y1)/(x2-x1);
if(y1<y2)
{
for(i=y1;i<=y2;i++)
{
j=(int)(x1+(i-y1)/k);
LCDBuffer[i][j]=0x0000e000;
}
}
else{
for(i=y2;y<=y1;y++)
{
j=(int)(x1-(y1-i)/k);
LCDBuffer[i][j]=0x0000e000;
}
}
}
LCD_Refresh();
}
}
}
矩形按键控制步进电机函数:
void TchScr_Test()
{
U32 mode,mode1,mode2;
int x,y,x1,y1,x2,y2,i,j,p,q;
float k;
//////////////A, AB, B, BC, C CD, D, DA
int
stepdata[]={0x10,0x30,0x20,0x60,0x40, 0xc0,0x80,0x90};//正向转动时的位控制数组
int
stepdata1[]={0x90,0x80,0xc0,0x40,0x60 ,0x20,0x30,0x10};//反向转动时的*** Uart_Printf("\nplease touch the screen\n");
//控制电机
for(i=70;i<=120;i++)
for(j=150;j<=210;j++)
{
LCDBuffer[i][j]=0x0000e000;
}
LCD_Refresh();
for(;;)
{
mode=TchScr_GetOSXY(&x,&y);
if(x>=150&&x<=210&&y>=70&&y<=120) //区域判断
{
if(mode==TCHSCR_ACTION_CLICK)//单击正转
{
for(j=0;j<20000;j++)//设置转动次数,尽量大会效果明显
{
for(i=0;i<8;i++)//步距角为360/512/8,所以即使四相步机转一次也不会有明显转动现象
{
SETEXIOBITMASK(stepdata[i],0xF0);//通过宏定义空位EXIO的高四位来控制步进机正向转动
Delay(3000);
}
}
}
else if(mode==TCHSCR_ACTION_DBCLICK)//双击反转
{
for(j=0;j<20000;j++)
{
for(i=0;i<8;i++)
{
SETEXIOBITMASK(stepdata1[i],0xF0);//反向转
Delay(3000);
}
}
}
}
}
}
结果截图:
五、实验心得
通过本次实验,了解的触摸屏的基本实现原理,我们所用的实验箱的触摸屏为电阻式,基本原理是检测触摸点被压下后的电压值来返回坐标,还有一种触摸屏为电容式。
编程时应注意,由于每个触摸屏对检测电压有偏值差,所以,获取点坐标操作之前,要对点坐标进行校正处理。
另外,画线时应注意直线斜率的处理,应以差值较大的坐标值为准确定另一点坐标,否则会出现点状线。
此外,触摸屏返回的是坐标值(x,y),x,y分别对应横坐标和纵坐标,而在画线时则分别对应列值与行值。
六、流程图。