51单片机从TFT彩屏上读取某一点颜色的函数方法
我这个问题是从字模来的,因为字模显示时会打印背景色,如果不想显示背景色,那就要把那句话去掉。但由此而来一个问题:字体色素点会堆聚显示,而不是呈现字体布局,以至于显不出字体...
我这个问题是从字模来的,因为字模显示时会打印背景色,如果不想显示背景色,那就要把那句话去掉。但由此而来一个问题:字体色素点会堆聚显示,而不是呈现字体布局,以至于显不出字体形状(乱码)。那么我就想读取当前非色素点的颜色然后打印出(好处是可以输出字体而又不会污染了复杂背景色;如果你能有解决这个方法的其它函数也可以:不污染背景色),从而是字体布局正确化
展开
2个回答
展开全部
这和TFT液晶屏型号有关,还和你采用何种接线方式有关
如以下是ILI9341控制的单片机读方法,它采用16位数据线,所以一次读出16位,一个点本来要读3次,但时序要求读4次
R = *(__IO uint16_t *)Bank1_LCD_D 实际上就是 给液晶屏一个读信号,然后单片机从总线上获得数据,这是STM32单片机以8088总线的时序操作方式,因此只是一条指令,由于51单片机是8位数据线,因此这一句要分好多语句才能完成
uint16_t LCD_RD_data(void) //连续读4次
{
uint16_t R=0, G=0, B=0 ;
R = *(__IO uint16_t *)Bank1_LCD_D; /*FIRST READ OUT DUMMY DATA*/
R = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT RED DATA */
B = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT BLACK DATA*/
G = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT GREEN DATA*/
return (((R>>11)<<11) | ((G>>10)<<5) | (B>>11));
}
uint16_t LCD_GetPoint(uint16_t x , uint16_t y)//完整的读程序
{
uint16_t temp;
LCD_SetCursor(x, y);
LCD_ILI9341_CMD(0x2e); /* 读数据 的命令*/
temp=LCD_RD_data();
return (temp);
}
如以下是ILI9341控制的单片机读方法,它采用16位数据线,所以一次读出16位,一个点本来要读3次,但时序要求读4次
R = *(__IO uint16_t *)Bank1_LCD_D 实际上就是 给液晶屏一个读信号,然后单片机从总线上获得数据,这是STM32单片机以8088总线的时序操作方式,因此只是一条指令,由于51单片机是8位数据线,因此这一句要分好多语句才能完成
uint16_t LCD_RD_data(void) //连续读4次
{
uint16_t R=0, G=0, B=0 ;
R = *(__IO uint16_t *)Bank1_LCD_D; /*FIRST READ OUT DUMMY DATA*/
R = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT RED DATA */
B = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT BLACK DATA*/
G = *(__IO uint16_t *)Bank1_LCD_D; /*READ OUT GREEN DATA*/
return (((R>>11)<<11) | ((G>>10)<<5) | (B>>11));
}
uint16_t LCD_GetPoint(uint16_t x , uint16_t y)//完整的读程序
{
uint16_t temp;
LCD_SetCursor(x, y);
LCD_ILI9341_CMD(0x2e); /* 读数据 的命令*/
temp=LCD_RD_data();
return (temp);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询