触摸屏ADS7843驱动程序
- 格式:wps
- 大小:27.50 KB
- 文档页数:6
触摸屏的驱动芯片ADS7843触摸屏由于其体积小、轻便和接口简单的特点,成为一种在嵌入式系统中应用广泛的输入设备。
S3C44B0X通过端口G模拟串行的SIO接口与触摸屏专门的控制芯片ADS7843(由Burr-Brown公司生产)开展数据传输,来完成对触摸屏触摸位置坐标的读取。
触摸屏接口专用芯片ADS7843要完成两件事:一是完成电极电压的切换;二是采集接触点处的电压值,并开展A/D转换。
触摸屏组成:触摸检测部件:安装在显示器屏幕前面,检测用户触摸位置,承受后送触摸屏控制器。
触摸屏控制器:接收触摸点检测装置信息,并将它转换成触点坐标,再送给CPU。
比方ADS7843。
ADS7843是TI 公司生产的4 线电阻触摸屏转换接口芯片。
ADS7843功能:(1)电极电压的切换。
(2)采集接触点处的电压值,并开展A/D转换。
ADS7843特性:(1)可编程控制8位或者12位A/D转换模式。
(2)低导通电阻模拟开关。
(3)实现触摸屏的驱动选择控制(X、Y通道)。
(4)供电电压为2.7~5V。
(5)参考电压VREF为1V~+Vcc。
(6)转换电压的输入范围为0~VREF。
(7)最高转换速率为125kHz。
编程说明:(1)S3C44B0X端口初始化:PCONG(2)S3C44B0X端口初始化:PUPG(3)触摸屏X坐标控制字(4)触摸屏Y坐标控制字(5)触摸点坐标读取过程(6)检测PENIRQ是否为低电平。
如果PENIRQ=0,则认为有接触。
(7)使ADS7843有效、无效(8)向ADS7843发送控制字(9)等待ADS7843 的BUSY管脚从高变低(10)从ADS7843接收数据。
触控设备驱动软件使用教程第一章:什么是触控设备驱动软件触控设备驱动软件是一种用于控制触控设备的程序,它可以使电脑或其他设备能够识别触摸输入,并将其转化为相应的命令或操作。
触控设备驱动软件通常与操作系统一起提供,但也可以单独安装。
第二章:触控设备驱动软件的分类触控设备驱动软件根据不同的触控技术可分为多种类型,如电阻式触摸屏驱动软件、电容式触摸屏驱动软件、红外触控驱动软件等。
每种类型的驱动软件都有特定的工作原理和应用领域。
第三章:触控设备驱动软件的安装1. 在Windows操作系统中,触控设备驱动软件通常会随着系统安装而自动安装。
如果遇到问题,可以尝试更新系统或手动安装驱动软件。
2. 在其他操作系统中,触控设备驱动软件的安装方式可能会有所不同。
可以通过设备制造商提供的驱动程序手册或官方网站查找适合操作系统的驱动软件,并按照说明进行安装。
第四章:触控设备驱动软件的设置和调整1. 校准触控设备:在安装完成后,有些触控设备驱动软件可能需要进行校准操作,以确保触摸输入的准确性。
校准方法一般在驱动软件的设置界面中可以找到。
2. 调整触摸灵敏度:有些触控设备驱动软件允许用户调整触摸灵敏度,以适应个人习惯或使用环境。
可以通过设置界面中的选项进行调整。
第五章:触控设备驱动软件的高级功能1. 多点触控支持:一些高级触控设备驱动软件支持多点触控,可以实现同时识别多个触摸点并进行相应操作。
这在绘图、游戏等应用领域具有重要意义。
2. 手势识别:部分触控设备驱动软件支持手势识别,可以根据手指在屏幕上的动作来执行特定的操作,如滑动、缩放、旋转等。
手势识别的可用性和使用方法可以在驱动软件的文档或设置界面中找到。
第六章:触控设备驱动软件的故障排除1. 无法识别触摸输入:如果触控设备驱动软件无法识别触摸输入,首先可以尝试重新启动系统或设备,以解决临时性的问题。
如果问题仍然存在,可以尝试更新驱动软件或联系设备制造商进行进一步的故障排除。
课程实验报告实验名称:嵌入式系统实验专业班级:计算机科学与技术x班学号:Ux姓名:x合作者:x实验时间:xxxx年xx月xx日计算机科学与技术学院试验一:bootloader (ads、引导)一、实验任务1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心二、实验内容编写串口接收数据函数编写串口发送数据函数学习ads、jtag调试、flash烧写打印菜单,等待用户输入下载并运行linux核心配置主机的nfs服务器,与linux核心连接三、实验步骤1.编写串口接收数据函数编写串口发送数据函数修改bootloader:菜单、串口收发、命令行;接收串口数据并做相应处理: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;}}Bootloader的main()函数打印菜单:int main(void){ARMTargetInit(); //目标板初始化;//接收用户命令,传递linux核心;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');return 0;}串口读写:void Uart_putc(char c){while(!SERIAL_WRITE_READY());((UTXH0) = (c));}unsigned char Uart_getc( ){while(!SERIAL_CHAR_READY());return URXH0;}2.使用ads1.2编译bootloader;3.使用uarmjtag下载、调试bootloader;4.使用axd查看变量、内存,单步跟踪;5.配置超级终端,与bootloader通讯;6.配置nfs;编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs restart测试nfs服务器是否正常运行:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt7.以root用户启动cutecom,将cutecom配置改为115200 bps,8位,1位停止位,无校验,xmodem,no line end;8.使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;9.启动Linux核心运行,察看结果;10.linux核心能够运行到加载root步骤,说明bootloader正常运行;11.将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功。
0 引言随着信息技术的飞速发展,人们对电子产品智能化、便捷化、人性化要求也不断提高,触摸屏作为一种人性化的输入输出设备,在我国的应用范围非常广阔,是极富吸引力的多媒体交互没备。
目前,触摸屏的需求动力主要来自于消费电子产品,如手机、PDA、便携导航设备等。
随着触摸屏技术的不断发展,它在其他电子产品中的应用也会得到不断延伸。
现在市面上已有的触摸屏控制器普遍价格比较高且性能相对比较固定,一些场合下无法满足用户的实际需求。
本文基于上述考虑,根据电阻式触摸屏的工作原理,选用51系列单片机作为控制核心,设计一种实用且低成本的触摸屏控制系统。
1 触摸屏的工作原理触摸屏由触摸检测部件和触摸屏控制器件组成(如图1所示);触摸检测部件用于检测用户触摸位置,接收后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息送给控制器,它同时能接收控制器发来的命令并加以执行。
触摸屏的主要3大种类是:电阻技术触摸屏、表面声波技术触摸屏、电容技术触摸屏。
其中,电阻式触摸屏凭借低廉的价格以及对于手指及输入笔触摸的良好响应性,涵盖了100多家触摸屏元件制造商中的2/3,成为过去5年中销售量最高的触摸屏产品。
在这里根据要设计应用的触摸屏控制器,重点介绍一下四线电阻式触摸屏。
电阻触摸屏的屏体部分是一块与显示器表面相匹配的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。
当手指触摸屏幕时,平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层接通Y轴方向的5 V均匀电压场,使得侦测层的电压由零变为非零,这种接通状态被控制器侦测到后,进行A/D转换,并将得到的电压值与5 V相比即可得到触摸点的Y轴坐标,同理得出X轴的坐标,这就是四线电阻式触摸屏基本原理,其原理如图2所示。
收录这个文章的主要目的是打算在嵌入式LINUX下,亲自做平台上的触摸屏驱动[文件名] Touch.c[功能] 8051单片机驱动ADS7846/ADS7843芯片[简介] ADS7846/7843芯片适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再响应其请求,目的是为了消除抖动使得采样更准确。
如果一次采样不准确,可以尝试多次采样取最后一次结果为准,目的也是为了消除抖动。
[原作者] 鞠春阳[版本] v1.8#include "reg51.h"#include "intrins.h"sbit DCLK=P1^6; //根据用户自己的定义sbit CS=P2^2;sbit DIN=P2^3;sbit DOUT=P2^4;sbit BUSY=P2^5;delay(unsigned char i--){while(i--);}void start() //SPI开始{DCLK=0;CS=1;DIN=1;DCLK=1;CS=0;}WriteCharTo7843(unsigned char num) //SPI写数据{unsigned char count=0;DCLK=0;for(count=0;count<8;count++){num<<=1;DIN=CY;DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效DCLK=1; _nop_();_nop_();_nop_();}}ReadFromCharFrom7843() //SPI 读数据{unsigned char count=0;unsigned int Num=0;for(count=0;count<12;count++){Num<<=1;DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效DCLK=0; _nop_();_nop_();_nop_();if(DOUT) Num++;}return(Num);}void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据{unsigned int X=0,Y=0;delay(10000); //中断后延时以消除抖动,使得采样数据更准确start(); //启动SPI// while(BUSY); //如果BUSY信号不好使可以删除不用delay(2);WriteCharTo7843(0x90); //送控制字10010000 即用差分方式读X坐标详细请见有关资料// while(BUSY); //如果BUSY信号不好使可以删除不用delay(2);DCLK=1; _nop_();_nop_();_nop_();_nop_();DCLK=0; _nop_();_nop_();_nop_();_nop_();X=ReadFromCharFrom7843(); //读X轴坐标WriteCharTo7843(0xD0); //送控制字11010000 即用差分方式读Y坐标详细请见有关资料DCLK=1; _nop_();_nop_();_nop_();_nop_();DCLK=0; _nop_();_nop_();_nop_();_nop_();Y=ReadFromCharFrom7843(); //读Y轴坐标CS=1;}main(){TMOD=0x11; // 记数器0 计数器1 都以16 位记数TCON=0x00;IE=0x83; //1000 0001 EA=1中断允许,IP=0x01;while(1);//等待触摸中断}。
触摸屏芯片ADS7846/ADS7843驱动程序(C51)/*[文件名] Touch.c[功能] 8051 单片机驱动ADS7846/ADS7843 芯片[简介] ADS7846/7843 芯片适合用在4 线制触摸屏,它通过标准SPI 协议和CPU 通信,操作简单,精度高,当触摸屏被按下时(即有触摸事件发生)则ADS7846 向CPU 发中断请求,CPU 接到请求后,应延时一下再响应其请求,目的是为了消除抖动使得采样更准确。
如果一次采样不准确。
[原作者] 鞠春阳[版本]v1.1b[最后修改时间] 2004 年3 月31 日9:11*/ #include “reg51.h”#include “intrins.h”sbit DCLK=P1;sbit CS=P2 ; sbit DIN=P2;sbit DOUT=P2;sbit BUSY=P2 ; delay(unsigned char i--) { while(i--); } void start() //SPI 开始{ DCLK=0; CS=1; DIN=1; DCLK=1; CS=0; }WriteCharTo7843(unsigned char num) //SPI 写数据{ unsigned char count=0; DCLK=0; for(count=0;count8;count++) { num=1; DIN=CY; DCLK=0;_nop_();_nop_();_nop_(); //上升沿有效DCLK=1; _nop_();_nop_();_nop_(); } } ReadFromCharFrom7843() //SPI 读数据{ unsigned char count=0; unsigned int Num=0; for(count=0;count12;count++) { Num=1; DCLK=1;_nop_();_nop_();_nop_(); //下降沿有效DCLK=0; _nop_();_nop_();_nop_();if(DOUT) Num++; } return(Num); }void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据{ unsigned int X=0,Y=0; delay(10000); //中断后延时以消除抖动,使得采样数据更准确start(); //启动SPI // while(BUSY); //如果BUSY 信号不好使可以删除不用delay(2); WriteCharTo7843(0x90); //送控制字10010000 即用差分方式读X 坐标详细请见有关资料// while(BUSY); //如果BUSY 信号不好使可以删除不用delay(2); DCLK=1; _nop_();_nop_();_nop_();_nop_(); DCLK=0;。
触摸屏驱动软件安装方法:
按装驱动程序前,请确认触摸屏信号线连接正常
第一步:将驱动程序安装光盘打开, 选择setup 安装程序.
第二步:根据对话框提示继续安装
鼠标点击下一步
鼠标点击我接受
选择安装
最后点击完成。
请重新启动计算机。
第三步:触摸屏校正程序
用鼠标点击出现以上菜单
选择菜单第一项,点击控制界面选项,进入控制界面首页
选择工具选项
点击进阶定位开关按钮
使其按钮颜色变成黄色,打开成功。
返回控制界面首页,选择设定按钮进行触摸屏定位矫正。
进入四点校正界面
用手指或校正笔压住红点进行校正,如校正时未压准红
点,有可能产生漂移,建议校正时尽量压准红点。
用手指或校正笔压住红点进行校正,如校正时未压准红点,有可能产生漂移,建议校正时尽量压准红
点。
用手指或校正笔压住红点进行校正,如校正时未压准红点,有可能产生漂移,建议校正时尽量压准红
点。
用手指或校正笔压住红点进行校正,
如校正时未压准红点,有可能产生漂
移,建议校正时尽量压准红点。
点击保存退出。
校正完成,任意点一下,退出。
基于ILI9320和ADS7843的触摸显示屏控制系统设计陈章宝;邓运生【摘要】Medium and small touch and display screen was widely used in portable network terminal,and it gave the design in this paper of 2.8 inch TFT-LCD touch and display screen module,design of circuit withSTC12C5A60S2 as main chip,system includes display screen and touch screen interface circuit,FPC interface circuit,SD card interface circuit,and the driving program and application program design method were given.The experimental results showed that the system is stable and all the functions are realized.%结合中小型触摸显示屏在手持式网络终端中的广泛应用,给出了一种2.8寸TFT-LCD触摸显示屏模块的设计方法,以STC12C5A60S2为主控芯片,包括显示屏和触摸屏接口电路、FPC接口电路、SD卡接口电路等,给出驱动程序及其应用程序的设计方法.实验结果表明,系统运行稳定,能够实现模块的全部功能.【期刊名称】《蚌埠学院学报》【年(卷),期】2017(006)002【总页数】5页(P12-16)【关键词】显示触摸屏;薄膜场效应晶体管显示器;驱动程序【作者】陈章宝;邓运生【作者单位】蚌埠学院电子与电气工程学院,安徽蚌埠 233030;蚌埠学院电子与电气工程学院,安徽蚌埠 233030【正文语种】中文【中图分类】TP274随着电子信息技术的发展,平面显示技术被广泛应用于日常的生产和生活当中,而液晶显示(LCD:Liquid Crystal Display)器件由于具有功耗低、重量轻、价格低以及优越的字符和图形显示功能,在智能仪器仪表、手持网络设备、物联网终端设备中得到了广泛的应用。
基于ADS7843的触摸屏控制系统设计【摘要】触摸屏在现代电子设备中广泛使用。
本文介绍了四线电阻式触摸屏控制器ADS7843特点,并详细介绍了以STC89C52为主控制器的触摸屏控制系统的硬件与软件设计方法。
该方法具有通用性,有一定的实用意义。
【关键词】触摸屏;ADS7843;STC89C520 引言在电子产品及工业产品的设计中,触摸屏由于其轻便、占用空间少、方便灵活等优点越来越受到设计师及用户的青睐。
触摸屏可作为模拟键盘,使用起来比普通键盘灵活,因为键的位置可根据需要进行改变,并且省去了按键所占用的空间。
触摸屏分为电阻、电容、表面声波、红外线扫描和矢量压力传感等,其中四线电阻触摸屏应用广泛。
1 ADS7843简介ADS7843是一款专为四线电阻触摸屏设计的带SPI接口的12位AD转换器,内部含模拟电子开关和逐次比较型AD转换器。
当要采样Y方向的AD值时,通过将Y+、Y一端施加电压,将X+送入AD转换器得到Y方向的AD值;同理可得X方向的AD值。
而这些转换均由MCU通过SPI方式向ADS7843发送命令来完成。
ADS7843的引脚功能如表1所示。
ADS7843之所以能实现对触摸屏的控制,是因为其内部结构很容易实现电极电压的切换,并能进行快速A/D转换。
内部结构如图1所示,A2~A0和SER 为控制寄存器中的控制位,用来进行开关切换和参考电压的选择。
2 触摸屏控制系统设计以应用广泛的STC89C52作为主控制器,进行触摸控制系统设计。
2.1 硬件接口电路设计ADS7843串行接口的一次完整操作需要3×8=24个DCLK时钟周期,前8个脉冲接收8位的命令,并在第6个脉冲的上升沿开始A/D转换器进入采样阶段,从第9个脉冲开始进入转换阶段,输出,输出12位采样值,转换结束进入空闲阶段。
直到24个DCLK结束,CS置高电平,一次测量结束。
ADS7843采用、转换时序如图2所示。
ADS7843与STC89C52的连接图如图3所示。
ADS7843触摸屏控制芯⽚的STM32驱动程序ADS7843是⼀个内置12位模数转换、低导通电阻模拟开关的串⾏接⼝芯⽚。
供电电压2.7~5 V,参考电压VREF为1 V~+VCC,转换电压的输⼊范围为0~ VREF,最⾼转换速率为125 kHz。
ADS7843的引脚配置如图3所⽰:表1为引脚功能说明:图4为典型应⽤电路:ADS7843⽀持两种参考电压输⼊模式:⼀种是参考电压固定为VREF,另⼀种采取差动模式,参考电压来⾃驱动电极。
这两种模式分别如图6(a)、(b)所⽰。
采⽤图6(b)的差动模式可以消除开关导通压降带来的影响。
ADS7843的控制字如表4所列,其中S为数据传输起始标志位,该位必为"1"。
A2~A0进⾏通道选择(见表3)。
MODE⽤来选择A/D转换的精度,"1"选择8位,"0"选择12位。
SER/选择参考电压的输⼊模式(见表2和3)。
PD1、PD0选择省电模式: "00"省电模式允许,在两次A/D转换之间掉电,且中断允许; "01"同"00",只是不允许中断; "10"保留;"11"禁⽌省电模式。
为了完成⼀次电极电压切换和A/D转换,需要先往ADS7843发送控制字,转换完成后再读出电压转换值。
标准的⼀次转换需要24个时钟周期,如图7所⽰。
由于串⼝⽀持双向同时进⾏传送,并且在⼀次读数与下⼀次发控制字之间可以重叠,所以转换速率可以提⾼到每次16个时钟周期,如图8所⽰。
如果条件允许,CPU可以产⽣15个CLK的话(⽐如FPGAs和ASICs),转换速率还可以提⾼到每次15个时钟周期,如图9所⽰。
ADS7843的stm32驱动程序:上图为引脚配置,我的开发板为BHS_STM32-III开发板,引脚连接也在上图注明了。
这是ADS7843⽤到的⼀些宏定义。
触摸屏驱动软件使用教程第一章:介绍触摸屏驱动软件的作用和分类触摸屏驱动软件是指用于控制和管理触摸屏设备的软件,它能够将触摸屏的触摸信号转化为计算机可识别的输入信号。
根据不同的触摸屏技术,触摸屏驱动软件也分为电容式触摸屏驱动软件、电阻式触摸屏驱动软件、表面声波触摸屏驱动软件等。
第二章:安装触摸屏驱动软件前的准备工作在安装触摸屏驱动软件之前,我们需要确定自己所使用的触摸屏型号和操作系统。
可通过查看触摸屏设备上的标签或查阅相关文档来获取这些信息。
另外,确保计算机已连接触摸屏设备,并且能够正常工作。
第三章:电容式触摸屏驱动软件的安装与配置对于电容式触摸屏,我们需要首先下载适用于该触摸屏型号和操作系统的驱动软件。
下载完成后,双击运行安装程序,按照提示完成安装。
安装完成后,我们需要进入设备管理器,找到触摸屏驱动,确保它已启用并处于正常工作状态。
接着,我们进入控制面板,点击触摸屏选项进行软件配置,根据需要进行灵敏度调整和其他参数设置。
第四章:电阻式触摸屏驱动软件的安装与配置对于电阻式触摸屏,大多数情况下,操作系统已经自带相应的驱动软件,并且会自动识别和安装。
如果没有自动安装驱动,我们可以根据触摸屏型号去官方网站下载对应的驱动程序。
下载完成后,运行安装程序,按照提示完成安装。
安装完成后,我们同样需要进入设备管理器确认驱动已启用并正常工作。
要配置电阻式触摸屏驱动软件,可以在控制面板或者驱动软件提供的设置界面中进行灵敏度调整和其他参数配置。
第五章:表面声波触摸屏驱动软件的安装与配置表面声波触摸屏是一种利用声波传播和反射的技术来获得触摸信息的触摸屏。
安装和配置表面声波触摸屏驱动软件与电容式触摸屏驱动软件类似,首先下载适用于该触摸屏型号和操作系统的驱动软件,运行安装程序完成安装。
再次确认驱动已启用并正常工作后,进入控制面板或者驱动软件提供的设置界面进行相关参数的配置。
第六章:常见问题解决办法6.1 驱动安装失败:可以重新下载驱动软件,并按照安装说明进行操作。
触摸屏控制实验设计报告序随着中国工业化的快速发展,对工业自动化控制的要求也在不断提高和完善。
触摸屏作为一种可视化的人机界面,以其体积小、可靠性高的特点逐渐取代传统的按钮控制和仪表控制,成为工业控制中人机界面的主流。
本文分析了触摸屏设备的特点、国外现状和发展趋势,设计了一种基于嵌入式实时操作系统WinCE5.0和ARM9系列AT91SAM9261为核心处理器的大型触摸屏控制器。
考虑到触摸屏设备的功能需求,提出了本课题的设计指标,制定了触摸屏控制器的总体设计方案,具体体现在控制器硬件设计和操作系统移植两个方面。
硬件平台采用模块化、结构化的思想进行设计和实现。
分析了触摸屏控制器中的主要硬件模块,包括处理器核心模块、存储模块、触摸屏模块、键盘模块、以太网模块和USB主从模块,并给出了硬件设计方法和电路实现。
硬件测试环境的建立是为了调试我弟弟的硬件模块。
基于搭建的硬件平台,本文重点研究了嵌入式操作系统WinCE 5.0的移植和BSP的开发。
分析了WinCE 5.0操作系统的架构和移植原理,在了解了三星公司的S3C2410 BSP之后,给出了基于AT91SAM9261的WinCE 5.0 BSP的开发过程。
详细分析了WinCE 5.0 Bootloader的工作原理和体系结构。
根据触摸屏系统的功能需求和硬件资源的分配,设计了触摸屏设备的Bootloader,并给出了具体的开发步骤。
深入研究了OAL的功能和原理,详细给出了OAL开发中的重要功能和主要模块。
针对触摸屏控制器的主要硬件模块,在分析WinCE 5.0中断模型和中断机制的基础上,开发了触摸屏驱动程序、矩阵键盘驱动程序和USB主机驱动程序。
在开发的BSP的基础上,利用WinCE 5.0操作系统定制工具Plarform Builder 对操作系统内核进行定制和编译,并对操作系统的性能进行测试。
测试结果表明,WinCE 5.0操作系统能够成功移植到触摸屏控制器上,能够满足工业现场的实时性要求。
触摸屏ADS7843驱动程序设计//===================================================================== // ADS7843 驱动程序(串行)//硬件连接: DCLK ——P0^0;// CS ——P0^1;// DIN ——P0^2;// BUSY ——P0^3// DOUT ——P0^4// PENIRQ——P3^2;// VDD--逻辑电源(+5V)// VSS--GND(0V)//ADS7843.c//writer:谷雨2008年7月23日于EDA实验室//=====================================================================#i nclude //STC单片机头文件#i nclude#define uint unsigned int#define uchar unsigned charsbit DCLK = P0^0; //时钟信号,下降沿有效sbit CS = P0^1; //片选信号,低电平有效sbit DIN = P0^2; //串行数据输入sbit BUSY = P0^3; //忙信号sbit DOUT = P0^4; //串行数据输出sbit PENIRQ = P3^2; //键盘中断请求信号,低电平(负边沿)有效void Tranfer(char Data);uint average(uint a[8]);//===================================================================== ===============//函数名称:void delay(uint us)//函数功能:延时子函数//入口参数:us 延时时间//出口参数:无//===================================================================== ===============void delay(uint us){while(us--);}//===================================================================== ===============//函数名称:void ADS7843_start(void)//函数功能:ADS7843启动//入口参数:无//出口参数:无//===================================================================== ===============void ADS7843_start(void){DCLK=0;CS=1;DIN=1;DCLK=1;CS=0;}//===================================================================== ===============//函数名称:void ADS7843_wr(uchar dat)//函数功能:写ADS7843//入口参数:dat 写入的数据//出口参数:无//===================================================================== ===============void ADS7843_wr(uchar dat){uchar count;DCLK=0;for(count=0;count<8;count++){dat<<=1;DIN=CY;DCLK=0;_nop_();_nop_();_nop_();DCLK=1;_nop_();_nop_();_nop_();}}//===================================================================== ===============//函数名称:uint ADS7843_rd(void)//函数功能:读ADS7843//入口参数:无//出口参数:读回的坐标值//===================================================================== ===============uint ADS7843_rd(void){uchar count=0;uint dat=0;for(count=0;count<12;count++){dat<<=1;DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效DCLK=0; _nop_();_nop_();_nop_();if(DOUT)dat++;}return(dat);}//===================================================================== ===============//函数名称:void intr0_int()//函数功能:外中断0中断服务函数//入口参数:无//出口参数:无//===================================================================== ===============void intr0_int() interrupt 0 using 2{uint X=0,Y=0,a[4],i,avex,avey,x[8],y[8];IE=0; //关中断delay(100); //中断后延时以消除抖动,使得采样数据更准确if(!PENIRQ){for(i=0;i<8;i++) //进行8次数据采集{ADS7843_start();delay(2);ADS7843_wr(0x90);//送控制字10010000 即用差分方式读X坐标delay(2);DCLK=1;_nop_();_nop_();_nop_();_nop_();DCLK=0;_nop_();_nop_();_nop_();_nop_();X=ADS7843_rd(); //读X轴坐标x[i]=X;ADS7843_wr(0xD0); //送控制字11010000 即用差分方式读Y坐标DCLK=1;_nop_();_nop_();_nop_();_nop_();DCLK=0;_nop_();_nop_();_nop_();_nop_();Y=ADS7843_rd(); //读Y轴坐标y[i]=Y;CS=1;}avex=average(x); //X坐标数据处理a[0]=avex/1000; //发上位机观察结果a[1]=(avex-a[0]*1000)/100;a[2]=(avex-a[0]*1000-a[1]*100)/10;a[3]=avex%10;Tranfer(a[0]+48);Tranfer(a[1]+48);Tranfer(a[2]+48);Tranfer(a[3]+48);avey=average(y); //Y坐标数据处理a[0]=avey/1000; //发上位机观察结果a[1]=(avey-a[0]*1000)/100;a[2]=(avey-a[0]*1000-a[1]*100)/10;a[3]=avey%10;Tranfer(a[0]+48);Tranfer(a[1]+48);Tranfer(a[2]+48);Tranfer(a[3]+48);for(i=0;i<10;i++) //延时,在程序中根据具体情况改动delay(10000);}IE=0x81; //开中断}//===================================================================== ===============//函数名称:void init_serial()//函数功能:初始化串口//入口参数:无//出口参数:无//===================================================================== ===============void init_serial(){TMOD=0x22; //定时器T1使用工作方式2TH1=250; //设置初值TL1=250;TR1=1; //开始计时PCON=0x80; //SMOD=1;SCON=0x50; //工作方式1,波特率9600bit/s,允许接收TI=1;}//===================================================================== ===============//函数名称:void Tranfer(char Data)//函数功能:发送数据程序//入口参数:Data 要发送的数据//出口参数:无//===================================================================== ===============void Tranfer(char Data){while(TI==0);SBUF=Data;TI=0;}//===================================================================== ===============//函数名称:int main()//函数功能:主函数//入口参数:无//出口参数:无//===================================================================== ===============int main(){// uint b[4];TCON=0x01; //设置外部中断0下降沿触发EX0=1; //开外中断0EA=1; //开总中断init_serial();while(1);}//===================================================================== ===============//函数名称:uint average(uint a[8])//函数功能:数据处理程序,采集8次的数据,去掉最大值,去掉最小值,然后求平均//入口参数:数组首地址//出口参数:平均值//===================================================================== ===============uint average(uint a[8]){uint max,min,i,ave=0,sum=0;max=a[0];min=a[0];for(i=0;i<8;i++){if(maxif(min>a[i])min=a[i];sum+=a[i];}ave=(sum-min-max)/6;return ave;}。