新手上路
- 积分
- 42
- 金钱
- 42
- 注册时间
- 2013-10-7
- 在线时间
- 0 小时
|
5金钱
写在前面的:用的是4.3寸电容触摸屏;不加触摸功能的移植部分没有问题;加了触摸功能没有报错但没用触摸功能的效果,此触摸屏是5点试的
1-------在GUITouchConf.h中德定义
#ifndef GUITOUCH_CONF_H
#define GUITOUCH_CONF_H
#include "ili93xx.h"
//#define GUI_TOUCH_AD_LEFT 0
//#define GUI_TOUCH_AD_RIGHT 800
//#define GUI_TOUCH_AD_TOP 0
//#define GUI_TOUCH_AD_BOTTOM 480
#define GUI_TOUCH_AD_LEFT 187
#define GUI_TOUCH_AD_RIGHT 3965
#define GUI_TOUCH_AD_TOP 128
#define GUI_TOUCH_AD_BOTTOM 3950
#define GUI_TOUCH_SWAP_XY 1
#define GUI_TOUCH_MIRROR_X 0
#define GUI_TOUCH_MIRROR_Y 1
#endif /* GUITOUCH_CONF_H */
2-------在GUIConf.h的定义:
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (1) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font8x8
#define GUI_ALLOC_SIZE 5000 /* Size of dynamic memory ... For WM and memory devices*/
#define GUI_WINSUPPORT 1 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 1 /* Memory devices available */
#define GUI_SUPPORT_AA 1 /* Anti aliasing available */
#endif /* Avoid multiple inclusion */
3-------在LCDConf.h的定义:
#define LCD_XSIZE (800) /* X-resolution of LCD, Logical coor. */
#define LCD_YSIZE (480) /* Y-resolution of LCD, Logical coor. */
#define LCD_BITSPERPIXEL (16)
#define LCD_CONTROLLER -1
#define LCD_FIXEDPALETTE (565) //////
#define LCD_SWAP_RB (1)
#define LCD_SWAP_XY (0)
#define LCD_MIRROR_X 1
#define LCD_MIRROR_Y 1
#define LCD_INIT_CONTROLLER() myLCD_Init()
/***********************************/
#endif /* LCDCONF_H */
个人感觉以上定义没有错误,因为我现在显示鼠标,应用API函数都能用,就是没有触摸效果
4-------GUI_X.c里面的文件没有改动过。
5-------GUI_X_Touch.c里面的定义是:
void GUI_TOUCH_X_ActivateX(void) {
}
void GUI_TOUCH_X_ActivateY(void) {
}
int GUI_TOUCH_X_MeasureX(void)
{
tp_dev.scan(0);
return tp_dev.x[0];
// u16 x,y;
// TP_Read_XY(&x,&y);
// return x;
}
int GUI_TOUCH_X_MeasureY(void)
{
tp_dev.scan(0);
return tp_dev.y[0];
// u16 x,y;
// TP_Read_XY(&x,&y);
// return y;
}
以上看你的视频是说要AD转换出来的值得函数,但我用原子4.3寸电容屏幕没有这样的函数,原子说“直接送电容触摸屏的坐标值”,再有就是电容触摸屏不需要校准这些。
6-------以下是触摸屏的函数:
u8 OTT2001A_Init(void)
{
u8 regval=0;
RCC->APB2ENR|=1<<4;
GPIOC->CRL&=0XFFFFFF0F;
GPIOC->CRL|=0X00000080;
GPIOC->ODR|=1<<1;
GPIOC->CRH&=0XFF0FFFFF;
GPIOC->CRH|=0X00300000;
GPIOC->ODR|=1<<13;
CT_IIC_Init(); //初始化电容屏的I2总线
OTT_RST=0; //复位
delay_ms(100);
OTT_RST=1; //释放复位
delay_ms(100);
OTT2001A_SensorControl(1); //打开传感器
OTT2001A_RD_Reg(OTT_CTRL_REG,®val,1);//读取传感器运行寄存器的值来判断I2C通信是否正常
printf("CTP ID:%x\r\n",regval);
if(regval&0x80)return 0;
return 1;
}
u8 CTP_Scan(u8 mode)
{
u8 buf[4];
u8 i=0;
u8 res=0;
static u8 t=0;
t++;
if((t%10)==0||t<10)//空闲时,每10次 CTP_Scan函数才检测1次,从而节省CPU使用率
{
OTT2001A_RD_Reg(OTT_GSTID_REG,&mode,1);//读取触摸点的状态
if(mode&0X1F)
{
tp_dev.sta=(mode&0X1F)|TP_PRES_DOWN|TP_CATH_PRES;
for(i=0;i<5;i++)
{
if(tp_dev.sta&(1<<i)) //?触摸有效?
{
OTT2001A_RD_Reg(OTT_TPX_TBL,buf,4); //读取XY坐标值
if(tp_dev.touchtype&0X01)//横屏?
{
tp_dev.y=(((u16)buf[2]<<8)+buf[3])*OTT_SCAL_Y;
tp_dev.x=800-((((u16)buf[0]<<8)+buf[1])*OTT_SCAL_X);
}else
{
tp_dev.x=(((u16)buf[2]<<8)+buf[3])*OTT_SCAL_Y;
tp_dev.y=(((u16)buf[0]<<8)+buf[1])*OTT_SCAL_X;
}
//printf("x[%d]:%d,y[%d]:%d\r\n",i,tp_dev.x,i,tp_dev.y);
}
}
res=1;
if(tp_dev.x[0]==0 && tp_dev.y[0]==0)mode=0; //读到的数据都是0.则忽略此次的数据
t=0; //触发一次,则会最少连续监测10次,从而提高命中
}
}
if((mode&0X1F)==0)//无触摸点按下
{
if(tp_dev.sta&TP_PRES_DOWN) //之前是被按下的
{
tp_dev.sta&=~(1<<7); //标记按键松开
}else //之前没有被按下
{
tp_dev.x[0]=0xffff;
tp_dev.y[0]=0xffff;
tp_dev.sta&=0XE0; //清除有效点
}
}
if(t>240)t=10;//从新从10开始计数
return res;
}
7---以下是主函数:
int main(void)
{
Stm32_Clock_Init(9);
uart_init(72,9600);
delay_init(72);
LED_Init();
KEY_Init();
Timerx_Init(100,7199);
OTT2001A_Init(); //触摸屏初始化
GUI_Init();
GUI_SetFont(&GUI_Font24_ASCII);
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_CURSOR_Show();
Task_1(); //用的是你给的
while(1)
{
GUI_Exec();
}
}
7----还有就是TIME。C也是用的你的,我里面加了个LED,实验也亮了,说明能进入此中断。
8------效果
能显示鼠标,能显示你给的Task_1();这个窗口,但是不能触摸???
搞了一周了,实在是误解,就指导!!!! |
|