#申请原创# @21小跑堂
沁恒官方设计的这块 CH32V103 开发板 yyds ,内置仿真器了,USB转串口也有了,还兼容 Arduino 接口
不用接线,直接把 Arduino 的扩展板搬过来用
上回说到 FATFS 文件系统读取中文长文件名,也做好了字库,用液晶屏进行显示
再夸夸,非常方便,直接插上 Arduino 显示扩展板,扩展板带有 SPI 接口的 TF 卡插槽,TF 卡 里放上需要的文件,几乎想要的都齐了
等等,那显示有了,输入呢?
别急,不用接线,扩展板上也贴好了电阻触摸屏,由于扩展板引脚较少,电阻屏引脚复用到液晶屏
四线电阻触摸屏,虽然没有电容屏体验好,但是用起来也不会有什么问题
四个IO引脚分别为 X+ X- Y+ Y-
通过不同的电平组合,再读取 ADC 数值,就能实现 XY 坐标的读取,按下力度 Z 的识别
u16 Touch_GetPoint(u16* x, u16* y)
{
u16 z;
TS_XP_O;
TS_XM_O;
TS_YP_I;
TS_YM_I;
TS_XP_H;
TS_XM_L;
*x = ADC_Get(1);
TS_XP_I;
TS_XM_I;
TS_YP_O;
TS_YM_O;
TS_YP_H;
TS_YM_L;
*y = ADC_Get(2);
TS_XP_O;
TS_XM_I;
TS_YP_I;
TS_YM_O;
TS_XP_H;
TS_YM_L;
z = 4095 - (ADC_Get(2) - ADC_Get(1));
TS_XP_O;
TS_XM_O;
TS_YP_O;
TS_YM_O;
return z;
}
几乎就完成了
这里还是强调几点,一是读取 XY 坐标后,需要进行触屏校准,其实就是获取触屏对应显示屏最左、右、上、下的 4 个 ADC 值
再 Map 到显示屏分辨率上
例如:x = Touch_Map(ts_y, 270, 3660, 0, 320)
y = Touch_Map(ts_x, 434, 3636, 0, 240)
对照得到最终的显示屏上的坐标值
二是电阻触屏比较廉价,做工可能也不太好,直接驱动大概率会遇到跳坐标问题
这个问题解决方法可以采用数据滤波,剔除大小值
也有个更直接的办法,按下力度较大时,Z 值较大,Z 值大到一定程度,误触跳坐标问题可以减小到很低
但是你用同一个力道按屏幕, Z 值在整个屏幕的 ADC 值是不一样的,需要先做一次 Map,把坐标 Map 成全屏的力道,再获取 Z 值时,Z 值大于 Map 数据的,才能算为触摸按下
不多说还是上图:
|