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、实验效果
在触控点落入处填充了相应的颜色方块,由于电阻屏的性质触摸效果要比电容屏差一些,不过也可以尽情的涂鸦一番。