1、简介
使用触控屏完成一款简易的涂鸦应用,并支持多种画笔颜色选择。屏幕驱动IC为XPT2046,屏幕仅需提供区域绘制函数ILI9325_DrawRectangle
2、程序设计
绘制画笔颜色按键控件
void draw_color_btn(){
ILI9325_DrawRectangle(btn_x,btn_y,btn_w,btn_h,ILI9325_COLOR_RED);//红色画笔
ILI9325_DrawRectangle(btn_x,btn_y-btn_span,btn_w,btn_h,ILI9325_COLOR_GREEN);//绿色画笔
ILI9325_DrawRectangle(btn_x,btn_y-btn_span*2,btn_w,btn_h,ILI9325_COLOR_BLUE);
ILI9325_DrawRectangle(btn_x,btn_y-btn_span*3,btn_w,btn_h,ILI9325_COLOR_MAGENTA);
ILI9325_DrawRectangle(btn_x,btn_y-btn_span*4,btn_w,btn_h,ILI9325_COLOR_LIGHTBLUE);
ILI9325_DrawRectangle(btn_x,btn_y-btn_span*5,btn_w,btn_h,ILI9325_COLOR_BLACK);//清屏
}根据不同触控区域、画笔颜色,执行相应的方格区域绘制。坐标点落在绘制颜色选择按钮,则更改画笔默认颜色。以下使用到触控IC的中断回调函数
uint16_t default_draw_color=ILI9325_COLOR_BLACK;
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
{
if (GPIO_Pin == T_IRQ_Pin)
{
if(XPT2046_TouchPressed())
{
uint16_t x = 0, y = 0;
if(XPT2046_TouchGetCoordinates(&x, &y))
{
if((x>10&&x<=(btn_x+btn_w))&&(y>=(btn_y-btn_span*5)&&y<=(btn_y+btn_h))){
printf("XPT2046 x=%d,y=%dn",x,y);
if(y>(btn_y-btn_span*5)&&y<(btn_y-btn_span*5+btn_h)){
ILI9325_Clear(ILI9325_COLOR_WHITE);
draw_color_btn();
}
else if(y>(btn_y-btn_span*4)&&y<(btn_y-btn_span*4+btn_h)){
default_draw_color=ILI9325_COLOR_LIGHTBLUE;
}
else if(y>(btn_y-btn_span*3)&&y<(btn_y-btn_span*3+btn_h)){
default_draw_color=ILI9325_COLOR_MAGENTA;
}
else if(y>(btn_y-btn_span*2)&&y<(btn_y-btn_span*2+btn_h)){
default_draw_color=ILI9325_COLOR_BLUE;
}
else if(y>(btn_y-btn_span*1)&&y<(btn_y-btn_span*1+btn_h)){
default_draw_color=ILI9325_COLOR_GREEN;
}
else if(y>(btn_y-btn_span*0)&&y<(btn_y-btn_span*0+btn_h)){
default_draw_color=ILI9325_COLOR_RED;
}
else{
default_draw_color=ILI9325_COLOR_BLACK;
}
}
else{
ILI9325_DrawRectangle(x,y,6,6,default_draw_color);
}
}
}
}
}3、实验效果
在触控点落入处填充了相应的颜色方块,由于电阻屏的性质触摸效果要比电容屏差一些,不过也可以尽情的涂鸦一番。

我要赚赏金
