单片机驱动android屏幕,STM32单片机对智能手机触摸屏的驱动

这篇博客介绍了如何使用STM32单片机驱动XPT2046电阻式触摸屏,以模拟Android屏幕的操作。通过详细解释电阻屏的工作原理和XPT2046控制器的特性,展示了如何配置外部中断进行触摸检测,并在检测到特定位置按下时显示'Hello World'。内容涵盖了STM32的中断配置、触摸屏初始化及中断处理函数。
摘要由CSDN通过智能技术生成

描述

由于智能手机的发展和大屏幕的兴起,触摸屏已经得到了广泛的应用。触摸屏分为两种:电阻触屏 俗称“软屏”;电容触屏俗称“硬屏”。

电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的阻性材料组成的导电层(ITO膜),上面再盖有一层外表面经过硬化处理、光滑防刮的塑料层。它的内表面也涂有一层ITO,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开。当手指接触屏幕时,两层 ITO发生接触,电阻发生变化,控制器根据检测到的电阻变化来计算接触点的坐标,再依照这个坐标来进行相应的操作,因此这种技术必须是要施力到屏幕上,才能获得触摸效果。

f5c0a41fc5916cfa27182ef0fb84b6c7.png

所有的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。

分压器是通过将两个电阻进行串联来实现的。

上面的电阻(R1)连接正参考电压(VREF),

下面的电阻(R2)接地。

两个电阻连接点处的电压测量值与下面那个电阻的阻值成正比。

所以电阻屏的定位是通过AD采样获取电压,来确定点击位置的。

电容式触摸屏利用人体的电流感应进行工作,其触摸屏由一块四层复合玻璃屏构成。当手指触摸在触摸屏上时,由于人体电场、用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏四角上的电极中流出,并且流经

#include "system.h" #include "SysTick.h" #include "led.h" #include "usart.h" #include "tftlcd.h" #include "dht11.h" #include "ds18b20.h" u8 temp; u8 humi; u8 temp_buf[3],humi_buf[3]; void data_pros() //Êý¾Ý´¦Àíº¯Êý { DHT11_Read_Data(&temp;,&humi;); temp_buf[0]=temp/10+0x30; temp_buf[1]=temp+0x30; temp_buf[2]='\0'; humi_buf[0]=humi/10+0x30; humi_buf[1]=humi+0x30; humi_buf[2]='\0'; } int main() { u8 i=0; u8 temper; SysTick_Init(168); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÖжÏÓÅÏȼ¶·Ö×é ·Ö2×é LED_Init(); USART1_Init(9600); TFTLCD_Init(); //LCD³õʼ»¯ FRONT_COLOR=BLACK; LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"PRECHIN STM32F4"); LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"www.prechin.net"); LCD_ShowString(10,50,tftlcd_data.width,tftlcd_data.height,16,"DHT11 Test"); LCD_ShowString(10,100,tftlcd_data.width,tftlcd_data.height,16,"Temp: C"); LCD_ShowString(10,130,tftlcd_data.width,tftlcd_data.height,16,"Humi: %RH"); FRONT_COLOR=RED; while(DHT11_Init()) //¼ì²âDS18B20ÊÇ·ñ´¿ÔÚ { LCD_ShowString(130,50,tftlcd_data.width,tftlcd_data.height,16,"Error "); delay_ms(500); } LCD_ShowString(130,50,tftlcd_data.width,tftlcd_data.height,16,"Success"); while(1) { i++; if(iP==0) { temper=DS18B20_GetTemperture(); led1=!led1; data_pros(); //¶ÁÈ¡Ò»´ÎDHT11Êý¾Ý×îÉÙÒª´óÓÚ100ms } LCD_ShowString(55,100,tftlcd_data.width,tftlcd_data.height,16,temp_buf); LCD_ShowString(55,130,tftlcd_data.width,tftlcd_data.height,16,humi_buf); LCD_ShowNum(55,160,temper,8,12); delay_ms(10); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值