触摸屏
电阻屏
• 工作原理:通过两层导电层(通常为ITO薄膜)受压接触来检测触摸位置。
• 特点:
*可用手指、触控笔等任何物体操作。
*成本较低。
*耐用性较差,长时间使用后可能失灵。
*透光率较低,显示效果稍差。
*不支持多点触控。
电容屏
• 工作原理:利用人体电流感应,通过触摸改变电场来定位。
• 特点:
*仅对导电物体(如手指)有反应。
*成本较高。
*耐用性较好,表面通常为玻璃。
*透光率高,显示效果更佳。
*支持多点触控。
开发板采用的屏幕和目前最常用的手机屏幕一样,是由IPS液晶显示屏和触摸板上下粘合组成。触摸板是电容触摸的,其内部驱动是GT911,与官方使用的不同,所以在程序中我们需要配置下触摸屏。触摸屏通信接口原理图如下图所示:
从上图可以得知,触摸驱动使用I2C3与K230通信。K230的IO接口GPIO36、GPIO37连接I2C3如下图所示:
在实现功能前,先建立与触摸屏的I2C通信,完成配置工作,才可以在后续代码中使用触摸功能。
代码展示
from machine import FPIOA, I2C, TOUCH #导入FPIOA,I2C,TOUCH模块
from media.display import * #导入display模块
from media.media import * #导入media模块
import time, os, urandom, sys #导入time,os, urandom,sys模块
DISPLAY_WIDTH = ALIGN_UP(800, 16) #定义显示长尺寸
DISPLAY_HEIGHT = 480 #定义显示宽尺寸
fpioa = FPIOA() #定义FPIOA
fpioa.set_function(36, FPIOA.IIC3_SCL) # GPIO36 i2c3 SCL
fpioa.set_function(37, FPIOA.IIC3_SDA) # GPIO37 i2c3 SDA
i2c3=I2C(3) #定义I2C
print(i2c3.scan())
tp = TOUCH(1, i2c = i2c3, #定义 TOUCH 设备
slave_addr = 93, type = TOUCH.TYPE_GT911)
def display_test():
print("display and touch test")
img = image.Image(DISPLAY_WIDTH, #创建用于绘制的图像
DISPLAY_HEIGHT, image.ARGB8888)
img.clear() #清理图像
img2 = image.Image(DISPLAY_WIDTH, #创建用于绘制的图像
DISPLAY_HEIGHT, image.ARGB8888)
img2.clear()
Display.init(Display.ST7701, #使用 LCD 作为显示输出
width = DISPLAY_WIDTH, height = DISPLAY_HEIGHT, to_ide = True)
MediaManager.init() #初始化媒体管理器
try:
while True:
os.exitpoint()
point = tp.read(1)
if len(point):
print(point)
pt = point[0]
# 打印触摸点的坐标,并且用十字符合标记
if pt.event == 0 or pt.event == TOUCH.EVENT_DOWN or pt.event == TOUCH.EVENT_MOVE:
img2.draw_cross(pt.y,480 - pt.x, color=(255,0,0), width = 1, think_ness = 1)
Display.show_image(img2, layer = Display.LAYER_OSD2, alpha = 128)
x = (urandom.getrandbits(11) % img.width())
y = (urandom.getrandbits(11) % img.height())
img.draw_string_advanced(x,y,32,# 在图像的坐标点绘制文字
"Hello World!,你好世界!!!", color = (0, 0, 255),)
Display.show_image(img) # 将绘制的图像显示
img.clear()
time.sleep(0.05)
except KeyboardInterrupt as e:
print("user stop: ", e)
except BaseException as e:
print(f"Exception {e}")
img.clear() #清理绘制图
Display.show_image(img) #销毁显示
Display.deinit() #销毁显示
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
MediaManager.deinit() #释放媒体缓冲区
if __name__ == "__main__":
os.exitpoint(os.EXITPOINT_ENABLE)
display_test()
效果展示
点击开始执行后,用手指触摸电容屏,可以看到终端打印出坐标信息。
【学习k230 - 例程12】TOUCH