新闻中心

EEPW首页>光电显示>设计应用> 触摸屏技术在16位单片机中的应用

触摸屏技术在16位单片机中的应用

作者: 时间:2012-10-18 来源:网络 收藏

2. 2 X ilinx95144

是一款高品质的Comp lex Prog ramm able Logic Device 复杂的可编程逻辑器件( CPLD), 典型工作电压为3. 3- 5V, 支持ISP即在线编程功能, 编程次数可达上万次, 管脚到管脚信号延迟7. 5ns, 工作频率可达111MH z, 内部有144个宏单元均是ROM 结构, 掉电后内部的逻辑数据不会丢失。每个I /O管脚在输出状态下: 高电平时典型值- 4mA, 低电平典型值24mA; 每个I /O管脚在输入状态下: 高、低电平时均为uA级。因此输出电气特性: 在通常的TTL电平芯片电路中、外接驱动不多的情况下, 可以不使用上拉电阻; 输入电气特性:

一般的集成芯片都可以直接与其相连, 不会出现驱动力不够现象, 更不会出现损坏。

2. 3 触摸显示屏

显示部分的控制芯片是SED1335, 是日本EPSON 公司生产的一款液晶显示屏专用控制器, 与同类产品相比功能最强。其特点主要是: 有较强功能的I /O 缓冲器; 指令功能丰富; 4位数据并行发送; 图形和文本方式混合显示。触摸部分的控制芯片是模拟数据转换器ADS7843, 是美国T i公司生产的具有同步串行接口的8 位、12位数据输出, 四线电阻模数转换接口芯片。它通过标准SPI协议和CPU 通信; 精度高, 当使用12位时精度达到0. 04mm, 可以达到X, Y 方向上的1/256, 1 /4096精度; 最大可接受电流? 50mA, 典型值为数uA; 工作电压为- 0. 3- + 6V; 工作时钟典型值2MH z即数量级是uS; 当被按下时( 即有触摸事件发生) ,ADS7843会发出中断请求。

在出现数次问题后, 我们都发现显示部分正常, 而触摸部分不正常, 也就是ADS7843的使用有问题, 其内部结构原理图如图3所示。从图上我们可以看见主要有四通道信号转换器、逐次逼近寄存器( SAR )、电容型数据/转换器( CDAC )、比较器、串行接口与控制器功能模块组成。其中与编程有关的信号是DCLK、/CS、DIN、DOUT、BUSY、/PENIRQ,数据流向见图4所示。

图3 AD7843内部原理结构

图3 AD7843内部原理结构

图4 ADS7843接口图

图4 ADS7843接口图

对于ADS7843来说, 除了电源与地线, 输入模拟信号X+ 、X- 、Y+ 、Y - 、IN3、IN4, 输入数字信号DCLK、/CS、DIN;输出数字信号BUSY、DOUT、/PEN IRQ.与编程有关的均是数字信号, 数据输入、输出、时钟输入均为串行方式, 最高转换速率为1/125KH z, 线路设计结构上比较方便只需要6根端口线就可以建立完全的数据交互。

2. 4 现象分析

采用80196的P1口的6个端口专门与其打交道, 从硬件上讲是完全可以的。然而由于在编程中P1口有些端口是作输入、有些端口需要作为输出, 80196又没有对位直接进行操作的指令, 对P1某一个端口作输出操作, 通常196会先读P1口的8个管脚, 然后再进行 写!的操作, 根据P1口结构, 必然会带来若作为输入端口的管脚在其外部输入信号为低时, 执行 写!指令后出现了将其输入状态改为了输出状态。此时在80196与ADS7843的DOUT与/PEN IRQ这两根线上都将出现了同一根线上出现两个输出信号、争抢信号的问题, 这是数字电路中绝对不允许的, 它的出现就有可能损坏芯片。

根据资料介绍, 在编程操作中, 当P1口中有些管脚作为输入, 有些管脚作为输出时要特别注意对P1 口写指令操作,它是一个读、写过程, 最好借助于一些单元。

3 软件设计分析

对于按键的处理, 系统采用中断方式, 流程如图5所示。

图5按键流程图

图5按键流程图

主要相关程序如下:

/*写控制指令、读数据子程序* /

LDB R6, # 08H ; 写8位控制指令代码

CLRC; LDB AL, COM ; 指令代码准备发送

ADS7843_W: SHLB AL, # 1 ; 数据串行发送

JC S_D I_1; JMP S_DI_0

S_DI_1: LDB BL, IOPORT1 ; 将P1 口状态保存在BL 寄存器中

ORB BL, # 03H ; 将数据出DOUT置高, 数据入DIN 为信号输入状态

LDB IOPORT1, BL ; 将修改后的状态送至P1口

JMP SKCLK

S_DI_0: LDB BL, IOPORT1 ; 将P1 口状态保存在BL 寄存器中

ANDB BL, # 0FEH ; 将数据出DOUT 置低

ORB BL, # 02H ; 数据入D IN为信号输入状态

LDB IOPORT1, BL; 将修改后的状态送至P1口

SKCLK: LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中

ANDB BL, # 0F7H ; 时钟信号DCLK为低

ORB BL, # 01H ; 将数据出DOUT 置高

LDB IOPORT1, BL ; 将修改后的状态送至P1口

LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中

ORB BL, # 09H ; 时钟信号DCLK 为高, 将数据出DOUT置高

LDB IOPORT1, BL ; 将修改后的状态送至P1口

DJNZ R6, ADS7843_W ; 8位指令送完

LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中

ANDB BL, # 0F7H ; 时钟信号DCLK为低

ORB BL, # 01H ; 将数据出DOUT 置高

LDB IOPORT1, BL ; 将修改后的状态送至P1口

/* 准备接受触摸屏按键读14 位数据数据, 先接受低8位数据* /

LDB R6, # 08H ; 键值设定方向读低8位数据程序

DATA_OUT: LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中

ORB BL, # 09H ; 时钟信号DCLK 为高, 将数据出DOUT置高

LDB IOPORT1, BL ; 将修改后的状态送至P1口

LDB BL, IOPORT1 ; 将P1口状态保存在BL寄存器中

ANDB BL, # 0F7H ; 时钟信号DCLK为低

ORB BL, # 01H ; 将数据出DOUT 置高

LDB IOPORT1, BL ; 将修改后的状态送至P1口

SHLB AL, # 1 ; 数据左移一位

JBS IOPORT1, 0, DI_O_1 ; 判数据入DIN 高?



评论


相关推荐

技术专区

关闭