电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于 1/1000 英寸)的透明隔离点把两层导电层隔开绝缘。 当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在 X 和 Y 两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出( X, Y)的位置,再根据获得的位置模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。
电阻触摸屏的优点: 精度高、价格便宜、抗干扰能力强、稳定性好。
电阻触摸屏的缺点:容易被划伤、透光性不太好、不支持多点触摸。这种比较高级了。。由于本人的开发板上带的是电阻式触摸屏,对这玩意就不多做介绍了。
底层驱动代码。。好吧 给的例程很长,其中也包括了电容屏的驱动,懒的再贴了,分析一下主函数吧
#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "lcd.h" #include "key.h" #include "24cxx.h" #include "myiic.h" #include "touch.h" //清屏 void Load_Drow_Dialog(void) { LCD_Clear(WHITE);//清屏 POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(lcddev.width-24,0,200,16,16,"RST");//显示清屏区域 POINT_COLOR=RED;//设置画笔蓝色 } //电阻触摸屏测试函数 void rtp_test(void) { u8 key; u8 i=0; while(1) { key=KEY_Scan(0); tp_dev.scan(0); if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下 { if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height) { TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED); //画图 } }else delay_ms(10); //没有按键按下的时候 if(key==KEY0_PRES) //KEY0按下,则执行校准程序 { LCD_Clear(WHITE);//清屏 TP_Adjust(); //屏幕校准 TP_Save_Adjdata(); Load_Drow_Dialog(); } if(key==WKUP_PRES) Load_Drow_Dialog();//清除 i++; if(i%20==0)LED0=!LED0; } } int main(void) { NVIC_Configuration(); delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为9600 LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD KEY_Init(); //按键初始化 tp_dev.init(); //触摸屏初始化 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,16,16,"Mini STM32"); LCD_ShowString(60,70,200,16,16,"TOUCH TEST"); LCD_ShowString(60,90,200,16,16,"yh"); LCD_ShowString(60,110,200,16,16,"2015/02/06"); if(tp_dev.touchtype!=0XFF)LCD_ShowString(60,130,200,16,16,"Press KEY0 to Adjust");//电阻屏才显示 delay_ms(1500); Load_Drow_Dialog(); rtp_test();//电阻屏测试 }看到这个变量
tp_dev很明显这是一个全局的结构体变量,翻到这个结构体的成员
//触摸屏控制器 typedef struct { u8 (*init)(void); //初始化触摸屏控制器 u8 (*scan)(u8); //扫描触摸屏.0,屏幕扫描;1,物理坐标; void (*adjust)(void); //触摸屏校准 u16 x[CT_MAX_TOUCH]; //当前坐标 u16 y[CT_MAX_TOUCH]; //电容屏有最多5组坐标,电阻屏则用x[0],y[0]代表:此次扫描时,触屏的坐标,用 //x[4],y[4]存储第一次按下时的坐标. u8 sta; //笔的状态 //b7:按下1/松开0; //b6:0,没有按键按下;1,有按键按下. //b5:保留 //b4~b0:电容触摸屏按下的点数(0,表示未按下,1表示按下) /////////////////////触摸屏校准参数(电容屏不需要校准)////////////////////// float xfac; float yfac; short xoff; short yoff; //新增的参数,当触摸屏的左右上下完全颠倒时需要用到. //b0:0,竖屏(适合左右为X坐标,上下为Y坐标的TP) // 1,横屏(适合左右为Y坐标,上下为X坐标的TP) //b1~6:保留. //b7:0,电阻屏 // 1,电容屏 u8 touchtype; }_m_tp_dev; extern _m_tp_dev tp_dev; //触屏控制器在touch.c里面定义
按KEY0校准按WK_UP清屏。。
cortex_m3_stm32嵌入式学习笔记(二十二):触摸屏实验(触摸屏驱动)
原文地址:http://blog.csdn.net/qq_16255321/article/details/43193707