嵌入式触摸屏实验
- 格式:doc
- 大小:355.00 KB
- 文档页数:5
摘要随着多媒体信息的与日俱增,传统的人机交互的速度已经不能满足需求,传统的人机交流是通过键盘或鼠标来实现的。
信息交换的速度比较慢,而且要求操作者具有一定的专业知识。
这将使信息交流的目的大打折扣。
触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备,已取代键盘,越来越受到各种终端产品商的重视。
基于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实验箱,利用触摸屏返回触点坐标值及动作信息。
学生姓名: 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 电压下的等比例公式就能计算出触摸点在这个方向上的位置。
一.硬件平台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命令;•编写一个小程序在目标板上运行,察看结果。
触摸屏实验一、实验目的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氧化铟,透明的导电电阻)。
嵌入式系统触摸屏设计(需要仔细品读)触摸屏工作原理与结构触摸屏附着在显示器的表面,根据触摸点在显示屏上对应坐标点的显示内容或图形符号,进行相应的操作。
触摸屏按其工作原理可分为矢量压力传感式、电阻式、电容式、红外线式和表面声波式5类。
在嵌入式系统中常用的是电阻式触摸屏。
电阻触摸屏结构如图5.6.1(c)所示,最上层是一层外表面经过硬化处理、光滑防刮的塑料层,内表面也涂有一层导电层(ITO或镍金);基层采用一层玻璃或薄膜,内表面涂有叫作ITO的透明导电层;在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。
在每个工作面的两条边线上各涂一条银胶,称为该工作面的一对电极,一端加5V电压,一端加0V,在工作面的一个方向上形成均匀连续的平行电压分布。
当给X方向的电极对施加一确定的电压,而Y方向电极对不加电压时,在x平行电压场中,触点处的电压值可以在Y+(或Y—)电极上反映出来,通过测量Y+电极对地的电压大小,通过A/D转换,便可得知触点的X坐标值。
同理,当给Y 电极对施加电压,而X电极对不加电压时,通过测量X+电极的电压,通过A/D转换便可得知触点的Y坐标。
当手指或笔触摸屏幕时(如图5.6.1(c)所示),两个相互绝缘的导电层在触摸点处接触,因其中一面导电层(顶层)接通X轴方向的5V均匀电压场(如图5.6.1(a)所示),使得检测层(底层)的电压由零变为非零,控制器检测到这个接通后,进行A/D转换,并将得到的电压值与5V相比,即可得触摸点的X轴坐标为(原点在靠近接地点的那端):同理也可以得出Y轴的坐标。
电阻式触摸屏有四线式和五线式两种。
四线式触摸屏的X工作面和Y工作面分别加在两个导电层上,共有4根引出线:X+、X-,Y +、Y-分别连到触摸屏的X电极对和Y电极对上。
四线电阻屏触摸寿命小于100万次。
五线式触摸屏是四线式触摸屏的改进型。
五线式触摸屏把X工作面和Y工作面都加在玻璃基层的导电涂层上,工作时采用分时加电,即让两个方向的电压场分时工作在同一工作面上,而外导电层则仅仅用来充当导体和电压测量电极。
实验报告课程名称:嵌入式系统学院:信息工程专业:电子信息工程班级:学生姓名:学号:指导教师:开课时间:学年第一学期实验名称:IO接口(跑马灯)实验时间:11.16 实验成绩:一、实验目的1.掌握 STM32F4 基本IO口的使用。
2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。
3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。
二、实验原理本次实验的关键在于如何控制STM32F4的IO口输出。
IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。
所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。
三、实验资源实验器材:探索者STM32F4开发板硬件资源:1.DS0(连接在PF9)2.DS1(连接在PF10)四、实验内容及步骤1.硬件设计2.软件设计(1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。
然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。
(2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。
(3)采用 GPIO_Set 函数实现IO配置。
LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。
嵌入式系统设计实验报告班级:学号:姓名:成绩:指导教师:1. 实验一1.1 实验名称博创UP-3000实验台基本结构及使用方法1.2 实验目的1.学习嵌入式系统开发流程。
2.熟悉UP-net3000实验平台的核心硬件电路和外设。
3.增加对各个外设的了解,为今后各个接口实验打下基础。
1.3 实验环境博创UP-NETARM3000 嵌入式开发平台1.4 实验内容及要求(1)嵌入式系统开发流程概述(2)熟悉UP-net3000实验平台的核心硬件电路和外设(3)ARM JTAG的安装与使用(4)通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态(5)通过本次课程对各个外设的了解,为今后各个接口实验打下基础1.5 实验设计与实验步骤1.硬件安装2.软件安装(1)超级终端:运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端;在接下来的对话框中选择 ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
(2)JTAG 驱动程序的安装:执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装 JTAG 软件。
1.6 实验过程与分析(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装1.7 实验结果总结通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。
1.8 心得体会通过本次实验对嵌入式实验有了初步的了解,对基本开发流程也有了初步的了解。
2. 实验二2.1 实验名称ADS1.2软件开发环境使用方法2.2 实验目的熟悉ADS1.2开发环境,学会 ARM仿真器的使用。
使用 ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
2.3 实验环境(1)ADS1.2开发环境(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线2.4 实验内容及要求本次实验使用ADS 集成开发环境,新建一个简单的工程文件,并编译这个工程文件。
一、引言随着科技的不断发展,触摸屏技术在各个领域的应用越来越广泛。
为了提高我们的实践能力,我们参加了为期一个月的触摸屏嵌入式实训。
通过本次实训,我们学习了触摸屏的工作原理、驱动开发以及实际应用,现将实训过程及心得体会总结如下。
一、实训内容1. 触摸屏基础知识实训首先介绍了触摸屏的工作原理、分类、特点等基础知识。
我们了解到,触摸屏按工作原理分为电阻式、电容式、红外式等;按安装方式分为表面安装、嵌入式安装等。
2. 触摸屏驱动开发实训过程中,我们学习了触摸屏的驱动开发。
以Linux操作系统为例,我们掌握了以下内容:(1)硬件平台搭建:包括触摸屏模块、控制器、PCB板等硬件设备的选择与连接。
(2)驱动框架搭建:了解Linux内核中的触摸屏子系统,包括输入子系统、设备树、驱动框架等。
(3)触摸屏驱动编写:通过学习触摸屏硬件手册,我们了解了触摸屏的接口、寄存器、中断等,并编写了触摸屏驱动程序。
3. 触摸屏实际应用实训最后,我们学习了触摸屏在实际项目中的应用。
以一个智能家居项目为例,我们学习了以下内容:(1)需求分析:分析项目需求,确定触摸屏的功能模块。
(2)硬件选型:根据项目需求,选择合适的触摸屏模块和控制器。
(3)软件开发:编写触摸屏驱动程序,实现触摸屏功能。
(4)系统集成:将触摸屏集成到智能家居项目中,实现人机交互。
二、实训收获1. 提高了动手能力:通过实际操作,我们掌握了触摸屏硬件搭建、驱动开发、系统集成等技能。
2. 深化理论知识:实训过程中,我们对触摸屏基础知识、驱动开发、实际应用等方面有了更深入的了解。
3. 培养团队协作能力:实训期间,我们分组进行项目开发,培养了团队协作精神。
4. 增强了创新意识:在实训过程中,我们不断思考、解决问题,提高了创新意识。
三、实训心得1. 理论与实践相结合:本次实训使我深刻认识到,理论知识是实践的基础,实践是检验理论的唯一标准。
只有将理论与实践相结合,才能更好地掌握知识。
触摸屏实验实验目的:了解ARM处理器触摸屏的处理机制,掌握在S3C2440A平台下进行触摸屏应用编程需要完成的任务实验器材:Sinosys-EA2440实验箱PC机实验原理:触摸屏的4 根信号线直接和S3C2440A 的TSYM、TSYP、TSXM 和TSXP 四个引脚相连,由S3C2440A 内部来控制电平的转换和AD 的转换测量。
触摸屏的硬件连接图如图1.1:图1.1 触摸屏信号连接图s3c2440 一共有4 种触摸屏接口模式,其中,自动(连续)XY 坐标转换模式和等待中断模式应用地比较常见。
等待中断模式是在触笔落下时产生一个中断,在这种模式下,A/D 触摸屏控制寄存器ADCTSC 的值应为0xD3,在系统响应中断后,XY 坐标的测量模式必须为无操作模式,即寄存器ADCTSC 的低两位必须清零。
自动(连续)XY 坐标转换模式是系统依次转换触点的X 轴坐标和Y 轴坐标,中X 轴坐标值写入寄存器ADCDAT0 的低10 位中,Y 轴坐标写入寄存器ADCDAT1的低10 位中,在这种模式下,系统同样会产生中断信号。
在一般情况下,为实现触摸屏功能,先是设置为等待中断模式,在产生中断后,再设置为自动(连续)XY 坐标转换模式,依次读取触点的坐标值。
实验总结:利用ADS1.2 工具(ADS 工具的使用请参照前面的实验)打开“\SourceCode\Interface\touchpanel_test”的工程文touchpanel_test.mcp 工程文件。
在Touchpanel.c 的Test_Touchpanel 子函数中对触摸屏相关的寄存器进行设置和初始化。
rADCDLY=50000; //Normal conversion mode delay about(1/3.6864M)*50000=13.56msrADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value Uart_Printf("ADC touch screen test\n");rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC = (int)AdcTsAuto;//指定触摸屏中断的入口地址rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear rINTSUBMSK=~(BIT_SUB_TC);触摸屏中断服务程序在对寄存器进行设置和指定中断服务程序的入口地址后,程序进入等待状态,当用触摸笔点按触摸屏时,处理器接受中断,并进入中断服务程序的执行。
一、实训背景随着科技的不断发展,嵌入式系统在各个领域的应用越来越广泛。
触摸屏作为一种直观、便捷的人机交互方式,在嵌入式系统中扮演着重要的角色。
为了提高自己的实践能力和技术水平,我参加了嵌入式触摸屏实训课程。
通过本次实训,我对嵌入式触摸屏系统的设计、开发和应用有了更深入的了解。
二、实训目的1. 掌握嵌入式触摸屏系统的工作原理和关键技术;2. 熟悉嵌入式触摸屏驱动程序的开发流程;3. 学会使用触摸屏硬件开发平台,实现触摸屏功能;4. 提高动手实践能力和团队协作能力。
三、实训内容1. 嵌入式触摸屏基础知识本次实训首先介绍了嵌入式触摸屏的基本概念、工作原理、分类及常用触摸屏技术。
主要包括以下内容:(1)触摸屏技术概述:介绍了触摸屏技术的起源、发展历程及现状,分析了触摸屏技术的优缺点。
(2)触摸屏分类:介绍了电阻式触摸屏、电容式触摸屏、红外触摸屏、超声波触摸屏等几种常见的触摸屏类型。
(3)触摸屏工作原理:以电容式触摸屏为例,介绍了其工作原理、信号处理及驱动方式。
2. 嵌入式触摸屏驱动程序开发实训重点讲解了嵌入式触摸屏驱动程序的开发流程,主要包括以下内容:(1)驱动程序概述:介绍了驱动程序的概念、作用及开发流程。
(2)驱动程序开发环境搭建:讲解了如何搭建嵌入式触摸屏驱动程序的开发环境,包括交叉编译工具、调试工具等。
(3)驱动程序编写:以Linux操作系统为例,讲解了嵌入式触摸屏驱动程序的编写方法,包括中断处理、数据采集、事件处理等。
3. 嵌入式触摸屏硬件平台应用实训中,我们使用一款基于ARM架构的嵌入式开发板进行触摸屏硬件平台应用。
主要包括以下内容:(1)硬件平台介绍:介绍了嵌入式开发板的硬件资源、外设接口及触摸屏接口。
(2)触摸屏硬件连接:讲解了如何将触摸屏模块与开发板进行连接,包括电源、信号线等。
(3)触摸屏驱动程序移植:讲解了如何将触摸屏驱动程序移植到嵌入式开发板,包括驱动程序配置、编译、烧录等。
4. 实训项目实践在实训过程中,我们完成了一个基于嵌入式触摸屏的简单项目。
成绩:基于嵌入式LCD触摸屏的设计与研究班级:应电112学号: 110415109姓名:申帅民日期:2013-10-8摘要零前言1.1 LCD 触摸屏简介1.2 LCD触摸屏的应用及发展前景 1.3 AEM 嵌入式处理器一系统整体方案设计2.1系统硬件组成及整体功能2.2系统软件设计方案的选择二硬件实现3.1 处理器的选择3.2 外围芯片的选用3.3硬件原理图三 LCDC触摸屏软件设计4.1界面的定制与显示4.2触摸屏信息的处理四结论参考文献基于嵌入式LCD的触摸屏的设计摘要:如今LCD 触摸屏应用已成为生活中很常见的现象,通过利用这种装置,改变了传统的较为复杂呆板的机械人机交互方式。
使得人际之间信息的交互变得简单,快捷,而且更具形象化。
本文针对基于ARM系统LCD 触摸屏设计的介绍,分析LCD触摸屏的工作原理及硬件结构,然后进一步开发除了触摸屏的驱动程序。
通过软硬件的结合,可以实现利用触摸屏完成人际之间信息的交互,同时也可以将该设计运用到同类人机交互系统中缩短产品的开发周期,降低产品的开发成本。
关键词:LCD触摸屏;ARM;人机交换系统零前言随着嵌进式系统技术的飞速发展,产业设备产品也越来越现代化,普遍要求可视化,LCD 触摸屏低耗能.散热小,本钱低,纤薄轻巧,外形尺寸小,安装轻易。
使用LCD触摸屏作为产业设备的输进输出设备既能达到可视化的要求,方便现场操纵,又能降低产品的本钱。
而在产品的整体设计过程中,人机交互界面的设计往往占据着很大一部分工作,这样,不但极大地增加了产品的开发本钱并且延长了产品的上市周期。
本文设计的基于S3C44BOX的人机交互界面是一种可定制、简单易用、性能优良的通用型人机交互界面,能很好地解决上述问题。
0.1 触摸屏简介触摸屏起源于20世纪70年代,早期多被装于工控计算机、POS机终端等工业或商用设备之中。
2007年Phone手机的推出,成为触控行业发展的一个里程碑。
苹果公司把一部至少需要20个按键的移动电话,设计得仅需三四个键就能搞定,剩余操作则全部交由触控屏幕完成。
触摸屏逐渐取代键盘成为嵌入式系统常选用的人机交互工具。
本文以电阻式触摸屏和触摸屏控制器ADS7846为例介绍触摸屏及其控制器的原理,并以一个应用实例说明如何用触摸屏及其控制器构成嵌入式系统的输入系统。
在便携式的电子类产品中,触摸屏由于其轻便、占用空间少、方便灵活等优点,已经逐渐取代键盘成为嵌入式计算机系统的输入设备。
基于触摸屏的输入系统实际上是由触摸屏、触摸屏控制器、微控制器及其相应软件构成的,本文从系统的硬件组成入手,分析整个系统的硬软件原理及其实现方法。
一、系统组成原理触摸屏输入系统由触摸屏、触摸屏控制器和微控制器三部分组成。
图1示出了一个实际的触摸屏输入系统,在该系统中触摸屏采用信利公司的四线电阻式触摸屏,触摸屏控制器采用BB 公司的ADS7846,微控制器为Motorola M&#8226;CORE系列的MMC2107。
1. 触摸屏原理触摸屏附着在显示器的表面,与显示器相配合使用,如果能测量出触摸点在屏幕上的坐标位置,则可根据显示屏上对应坐标点的显示内容或图符获知触摸者的意图。
触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。
电阻触摸屏是一块4层的透明的复合薄膜屏,如图2所示,最下面是玻璃或有机玻璃构成的基层,最上面是一层外表面经过硬化处理从而光滑防刮的塑料层,中间是两层金属导电层,分别在基层之上和塑料层内表面,在两导电层之间有许多细小的透明隔离点把它们隔开。
当手指触摸屏幕时,两导电层在触摸点处接触。
触摸屏的两个金属导电层是触摸屏的两个工作面,在每个工作面的两端各涂有一条银胶,称为该工作面的一对电极,若在一个工作面的电极对上施加电压,则在该工作面上就会形成均匀连续的平行电压分布。
如图1所示,当在X方向的电极对上施加一确定的电压,而Y方向电极对上不加电压时,在X平行电压场中,触点处的电压值可以在Y+(或Y-)电极上反映出来,通过测量Y+电极对地的电压大小,便可得知触点的X坐标值。
触摸屏实验
一、实验目的
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分别对应横坐标和纵坐标,而在画线时则分别对应列值与行值。
六、流程图。