stm32嵌入式学习笔记(二十二):触摸屏实验(触摸屏驱动)

目前最常用的触摸屏有两种:电阻式触摸屏与电容式触摸屏。电阻式触摸屏在 Iphone 面世之前,几乎清一色的都是使用电阻式触摸屏, 电阻式触摸屏利用压力感应进行触点检测控制,需要直接应力接触,, 通过检测电阻来定位触摸位置。

电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于 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); //串口初始化为9600LED_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清屏。。

从哪里跌倒就会从哪里爬起来,让我们一起努力吧

stm32嵌入式学习笔记(二十二):触摸屏实验(触摸屏驱动)

相关文章:

你感兴趣的文章:

标签云: