ATmega16与ads7846触摸屏的连接 - 图文

更新时间:2023-11-23 03:18:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ATmega16与触摸屏的连接

触摸屏是四线电阻式的,驱动芯片采用了很常见的ADS7846。ADS7846的典型应用电路图如下图所示。

在笔者的应用中,pin7和pin8都直接连接到GND,即不使用辅助输入通道,pin9和pin10连接在一起,即使用了VCC做为ADS7846的模数转换参考电压源。pin11所接的上拉电阻可以不要,但要设置相应的AVR输入端口上拉电阻使能。pin13做为转换结束指示,可以通过判断此脚电平来决定是否可以读出转换数据,也可以简单的使用延时的方法来留够转换时间。pin16、pin15、pin14、pin12做为一个标准的SPI从机接口与mega16芯片相连接。

ADS7846支持8位精度和12位精度,即触摸分辨率可以达到1/256或者1/4096,根据不同分辨率的LCD来选择相应的触摸精度。比如128×64的LCD可以采用8位精度,320×240的LCD需要采用12位精度。采集后的数据分两次读出,8位精度的先得到前7位再得到最后一位,12位精度的先得到前7位再得到后5位。 程序段如下:(编译器使用ICCAVR)

/********************************************************************

SPI Interface file crystal: 8MHz

write by han, hanembed@126.com, http://embed.hanyuer.net

********************************************************************/

/******************************************************************** touch data read file crystal: 8MHz

write by han, hanembed@126.com, http://embed.hanyuer.net

********************************************************************/

经过简单调试,笔者编写了一个PC端软件以显示在触摸屏上滑过的字符,一块8×5cm的触摸屏上约可以写四行汉字,如下图所示:

图中的若干零散点是由于硬件并没有做抗干扰滤波,mcu程序中也没有对接触点进行重复读取所致,一般可使用读取两次,重复数据为正确数据的方法来排除干扰。

#include #include #include \

unsigned int positionx; unsigned int positiony; unsigned char flgtouch;

/*========================Extern Interrupt==========================*/ #pragma interrupt_handler keydown: iv_INT1

/*===================================================================

// function: initialize all used port // in: void // retun: void // date: 2005/8/10

===================================================================*/

void portini(void) {

spiinit(); endspi();

DDRD &= ~(1 << PD3); // port input

PORTD |= (1 << PD3); // pull-up resistance //MCUCR |= 1<

/*===================================================================

// function: small delay // in: unsigned char delay times // retun: void // date: 2005/8/10

===================================================================*/

void smalldelay(unsigned char tmp) {

unsigned char i; while(tmp--)

{

for(i = 0; i < 250; i++) {

NOP(); } } }

/*===================================================================

// function: read touch data // in: void // retun: void // date: 2005/8/10

===================================================================*/

void keydown(void) {

unsigned char tmp; // temporary data

smalldelay(20); // delay wait tranquilization startspi(); // begin data transfer smalldelay(1);

sendspi(0x90); // difference conversion, x data smalldelay(2); // delay wait x conversion sendspi(0x00);

tmp = readspi(); // first 7 bit x data if(tmp == 0x7F) // error read return;

positionx = tmp;

positionx <<= 5; // left shift 5 bit

sendspi(0xD0); // difference conversion, y data tmp = readspi(); // last 5 bit x data tmp >>= 3; // right shift 3 bit positionx += tmp; // real x data

smalldelay(2); // delay wait y conversion sendspi(0x00);

tmp = readspi(); // first 7 bit y data positiony = tmp; positiony <<= 5;

sendspi(0x00); // only for read last y data tmp = readspi(); tmp >>= 3;

positiony += tmp; // real y data

endspi(); }

#include #include

/*===================================================================

// function: initialize spi interface // in: void // retun: void // date: 2005/8/10

===================================================================*/

void spiinit(void) {

DDRB = (1 << PB4) | (1 << PB5) | (1 << PB7); // MOSI and SCK port out PORTB |= (1 << PB4);

SPCR = (1 << SPE) | (1 << MSTR) | (0 << SPR0); // enable spi,master mode, MCLK/4,spi 0 mode }

/*===================================================================

// function: send data from spi interface // in: unsigned char real data // retun: void // date: 2005/8/10

===================================================================*/

void sendspi(unsigned char data) {

SPDR = data; // send data

while( !(SPSR & (1 << SPIF)) ); // wait data transfer end }

/*===================================================================

// function: receive data form spi interface

本文来源:https://www.bwwdw.com/article/n7gv.html

Top