新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2022-3-13
- 在线时间
- 9 小时
|
10金钱
请问为什么我的电阻式显示屏会出现这种情况呢?
屏幕的型号是:3.95inch Arduino Display-Mega2560
驱动IC:ILI9488
触摸转换IC:ADS7846
具体参数:
故障表现:
故障
画线区域,当X轴或Y轴超2048后,不变一直等到离开画线区域后才变化。触摸效果仿佛是把四块大小不一的屏幕缝合到一起一样,显示效果正常。
不用emWin,使用串口读取也是样子:
void Touch_Task(void){
int temp_x,temp_y;
while(1){
temp_x = TP_read_ad(0x90);
temp_y = TP_read_ad(0xd0);
printf("X:%d,Y:%d\r\n",temp_x,temp_y);
vTaskDelay(10);
}
}
我写的驱动:
#define CS_1 GPIOE -> BSRR = GPIO_PIN_2
#define CS_0 GPIOE -> BSRR = (GPIO_PIN_2<< 16)
#define CLK_1 GPIOE -> BSRR = GPIO_PIN_3
#define CLK_0 GPIOE -> BSRR = (GPIO_PIN_3<< 16)
#define DIN_1 GPIOE -> BSRR = GPIO_PIN_5
#define DIN_0 GPIOE -> BSRR = (GPIO_PIN_5<< 16)
#define DOUT HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)
#define TP_IRQ HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_6)
void write_cmd(uint8_t cmd){
CLK_0;
for(int i = 0;i <8;i++){
if(cmd&0x80){
DIN_1;
}
else{
DIN_0;
}
cmd <<= 1;
CLK_0;
delay_us(1);
CLK_1;
}
}
uint16_t read_ad(void){
uint16_t temp;
for(int i = 0;i<16;i++){
temp <<= 1;
CLK_0;
delay_us(1);
CLK_1;
if(DOUT){
temp++;
}
}
return temp;
}
uint16_t TP_read_ad(uint8_t cmd){
uint16_t value;
uint8_t temp;
CLK_0;
DIN_0;
CS_0;
write_cmd(cmd);
delay_us(6);
CLK_0;
delay_us(1);
CLK_1;
delay_us(1);
CLK_0;
value = read_ad();
value >>= 4;
CS_1;
return value;
}
|
|