首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» stm32 驱动 触摸屏
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
stm32 驱动 触摸屏
发短消息
加为好友
苹果也疯狂
当前离线
UID
852722
帖子
10369
精华
0
积分
5185
阅读权限
90
在线时间
277 小时
注册时间
2011-8-30
最后登录
2016-7-18
论坛元老
UID
852722
1
#
打印
字体大小:
t
T
苹果也疯狂
发表于 2015-4-25 15:33
|
只看该作者
stm32 驱动 触摸屏
电阻触摸屏
,
智能手机
,
有机玻璃
,
控制器
,
大屏幕
由于智能手机的发展和大屏幕的兴起,触摸屏已经得到了广泛的应用。触摸屏分为两种:电阻触屏 俗称“软屏”;电容触屏俗称“硬屏”。
电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的阻性材料组成的导电层(ITO膜),上面再盖有一层外表面经过硬化处理、光滑防刮的塑料层。它的内表面也涂有一层ITO,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开。当手指接触屏幕时,两层 ITO发生接触,电阻发生变化,控制器根据检测到的电阻变化来计算接触点的坐标,再依照这个坐标来进行相应的操作,因此这种技术必须是要施力到屏幕上,才能获得触摸效果。
所有的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。
分压器是通过将两个电阻进行串联来实现的。
上面的电阻(R1)连接正参考电压(VREF),
下面的电阻(R2)接地。
两个电阻连接点处的电压测量值与下面那个电阻的阻值成正比。
所以电阻屏的定位是通过AD采样获取电压,来确定点击位置的。
电容式触摸屏利用人体的电流感应进行工作,其触摸屏由一块四层复合玻璃屏构成。当手指触摸在触摸屏上时,由于人体电场、用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置信息。
电容触摸屏原理:
两种屏幕都有其优缺点。电阻屏价格低廉,精度较高。电容屏外层可以使用玻璃,抗损性好,不容易出现误操作,可以实现多点触控。
这里驱动的是驱动IC为XPT2046的4线电阻式触摸屏,触摸屏的控制芯片很多,包括ADS7843、ADS7846、TSC2046、AK4182等。这几款芯片的驱动程序基本上都是一样的,而且封装也有一样的。
XPT2046是一款4导线制触摸屏控制器,内含12位分辨率125Khz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V~5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按下的屏幕位置,还可以测量出加在屏幕上的压力大小。内部自带2.5V参考电压可以作为辅助输入,温度测量和电池检测模式之用。XPT2046片内还集成一个温度传感器。
这里使用stm32驱动XPT2046和LCD
实现一个触摸检测和字符显示的功能,
当检测到特定位置” Click“按下后,显示一个hello world ..
XPT2046驱动: (LCD的驱动参见:
stm32 驱动 TFT LCD
):
xpt2046.c
xpt2046.h
触摸屏的触摸检测是通过连接XPT2046的引脚,映射为外部中断触发引脚,在有屏幕触摸时,触发外部中断,所以需要配置一个外部中断函数:
stm32f10x_it.c
view source
print
?
01
#include "stm32f10x_it.h"
02
#include "xpt2046.h"
03
04
//中断,检测到PEN脚的一个下降沿.
05
//置位Pen_Point.Key_Sta为按下状态
06
//中断线0线上的中断检测
07
void
EXTI1_IRQHandler(void)
08
{
09
Pen_Point.Key_Sta=Key_Down;//按键按下
10
11
12
EXTI->PR = 1<<1; //清除中断标志位 使用库函数会出现问题,原因不详
13
//EXTI_ClearITPendingBit(EXTI_Line1); //这两句清除中断顺序不能颠倒
14
//EXTI_ClearFlag(EXTI_Line1);//清除LINE1上的中断标志位
15
}
在mian()函数中调用相关函数:
view source
print
?
01
int
main(void)
02
{
03
//stm32 初始化
04
RCC_Configuration();
05
NVIC_Configuration();
06
USART_Configuration();
07
SPI_Configuration();
08
EXTI_Configuration();
09
GPIO_Configuration();
10
11
LCD_Init();
12
Touch_Init();
13
14
POINT_COLOR = BLACK; //设置字体颜色
15
16
17
Delay(100000);
18
19
LCD_ShowString(180,0,"Click");//显示"Click"字符按钮
20
21
while(1){
22
if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下
23
{
24
Pen_Int_Set(0);//关闭中断
25
do
26
{
27
Convert_Pos();
28
Pen_Point.Key_Sta=Key_Up;
29
30
if(Pen_Point.X0>180&&Pen_Point.Y0<16) //判定按下的是否是 "Click"字符按钮区域
31
{
32
LCD_Clear(WHITE);
33
LCD_ShowString(30,50,"Hello Dog .. ");
34
}
35
}while(TOUCH_PEN==0);//如果PEN一直有效,则一直执行
36
Pen_Int_Set(1);//开启中断
37
}
38
}
39
40
}
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议