409|3

1200

帖子

1

TA的资源

纯净的硅(高级)

【HC32F4A0开发板测评】+LCD屏显示驱动及使用 [复制链接]

本帖最后由 jinglixixi 于 2023-3-18 22:29 编辑

前面曾完成过对单色OLED屏的显示驱动,为了满足色彩显示的需要,这次再对一款0.96寸的彩色LCD屏进行一下驱动尝试。

LCD屏与开发板的连接关系为:

CLK---PE11

DIN ---PE12

RES ---PE13

DC ---PE14

CS ---PE15

 

对应引脚输出高低电平的定义为:

#define OLED_SCLK_Set()   GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_11)  //CLK

#define OLED_SCLK_Clr()   GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_11)

#define OLED_SDIN_Set()   GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_12)  //DIN

#define OLED_SDIN_Clr()   GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_12)

#define OLED_RST_Set()    GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_13)  //RES

#define OLED_RST_Clr()    GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_13)

#define OLED_DC_Set()    GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_14)   //DC

#define OLED_DC_Clr()     GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_14)

#define OLED_CS_Set()     GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_15)   //CS

#define OLED_CS_Clr()     GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_15)

 

所用引脚的功能配置函数为:

static void LED_Init(void)
{
    stc_gpio_init_t stcGpioInit;
    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_11, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_12, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_13, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_14, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_15, &stcGpioInit);
}

 

为进行驱动测试所用的色彩清屏函数为:

void LCD_color(u16 Color)
{
    u16 i,j;
    LCD_Address_Set(110,30,129,49);
    for(i=0;i<20;i++)
    {
       for (j=0;j<20;j++)
       {
          LCD_WR_DATA(Color);
       }
    }
}

 

经测试,可实现基本的显示驱动,为此又添加了图形显示函数,其内容如下:

void LCD_ShowPicture(u16 x1,u16 y1,u16 x2,u16 y2)
{
      int i;
      LCD_Address_Set(x1,y1,x2,y2);
      for(i=0;i<12800;i++)
      {
            LCD_WR_DATA8(gImage_RW[i*2]);
            LCD_WR_DATA8(gImage_RW[i*2+1]);
      }
}

 

相应的测试主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_GPIO);
    LED_Init();
    LL_PERIPH_WP(LL_PERIPH_GPIO);
    Lcd_Init();
    LCD_Clear(BLACK);
    LCD_ShowPicture(0,0,159,79);
	Delay_us(2000000);
	LCD_Clear(BLACK);
    LCD_ShowString(20,10,"HC2F4A0 ",RED);
	LCD_ShowString(20,30,"R:  G:  B:",YELLOW);
	LCD_color(RED);
    LCD_box(109,29,130,50);
	while(1);
}

 

所实现的显示效果如图1和图2所示。

image.png 图1 图像显示效果

 

image.png

图2 检测界面效果

 

在图2的基础上,打算再添加一项色彩检测与标识功能,所用的色彩传感器为TCS34725。

该色彩传感器以I2C的方式进行工作,它与开发板的连接关系为:

CLK---PE4

DIN ---PE5

相关引脚输出高低电平及读取引脚状态的语句定义为:

#define TCS_SCL_H         GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_04)    //CLK

#define TCS_SCL_L         GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_04)

#define TCS_SDA_H         GPIO_SetPins(GPIO_PORT_E, GPIO_PIN_05)   //DIN

#define TCS_SDA_L         GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_05)

#define TCS_SDA_READ      GPIO_ReadInputPins(GPIO_PORT_E, GPIO_PIN_05)

设置数据引脚为输出模式的函数为:

void TCS_SDA_OUT()
{
    stc_gpio_init_t stcGpioInit;
    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_05, &stcGpioInit);
}

  

设置数据引脚为输如模式的函数为:

void TCS_SDA_IN()
{
    stc_gpio_init_t stcGpioInit;
    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinDir = PIN_DIR_IN;
	stcGpioInit.u16PullUp = PIN_PU_ON;
    (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_05, &stcGpioInit);
}

 

模拟I2C发送字节数据的函数为:

void TCS34725_I2C_Send_Byte(u8 byte)
{
	u8 i;
	TCS_SDA_OUT();
	TCS_SCL_L;
	for(i = 0; i < 8; i++)
	{
		if(((byte&0x80)>>7)==1)TCS_SDA_H;
		else
			TCS_SDA_L;
		byte <<= 1;
		
		Delay_us(20);
		TCS_SCL_H;
		Delay_us(20); 
		TCS_SCL_L;
		Delay_us(20); 
	} 
}

 

模拟I2C读取字节数据的函数为:

u8 TCS34725_I2C_Read_Byte(u8 ack)
{
	u8 i,receive = 0;
	TCS_SDA_IN();
	for(i = 0; i < 8; i++)
	{
		TCS_SCL_L;
		Delay_us(20); //FL_DelayUs(2);
		TCS_SCL_H;
		receive <<= 1;
		if(TCS_SDA_READ) receive++;
		Delay_us(10); //FL_DelayUs(1);
	}
	if (!ack) TCS34725_I2C_NACK();
	else TCS34725_I2C_ACK(); 
	
	return receive;
}

 

对TCS34725进行初始化的函数为:

u8 TCS34725_Init(void)
{
	u8 id=0;
	TCS34725_Read(TCS34725_ID, &id, 1);
	if(id==0x4D | id==0x44)
	{
			TCS34725_SetIntegrationTime(TCS34725_INTEGRATIONTIME_50MS);
			TCS34725_SetGain(TCS34725_GAIN_1X);
			TCS34725_Enable();
			return 1;
	}
	return 0;
}

 

获取色彩检测值的函数为:

u8 TCS34725_GetRawData(COLOR_RGBC *rgbc)
{
	u8 status = TCS34725_STATUS_AVALID;
	TCS34725_Read(TCS34725_STATUS, &status, 1);
	if(status & TCS34725_STATUS_AVALID)
	{
		rgbc->c = TCS34725_GetChannelData(TCS34725_CDATAL);	
		rgbc->r = TCS34725_GetChannelData(TCS34725_RDATAL);	
		rgbc->g = TCS34725_GetChannelData(TCS34725_GDATAL);	
		rgbc->b = TCS34725_GetChannelData(TCS34725_BDATAL);
		return 1;
	}
	return 0;
}

 

实现色彩检测与标识的主程序为:

int32_t main(void)
{
	 u16 rv,gv,bv,fv; 
    LL_PERIPH_WE(LL_PERIPH_GPIO);
    LED_Init();
    LL_PERIPH_WP(LL_PERIPH_GPIO);
    Lcd_Init();
    LCD_Clear(BLACK);
    LCD_ShowString(20,10,"HC2F4A0 ",RED);
    LCD_ShowString(20,30,"R:  G:  B:",YELLOW);
    LCD_color(RED);
    LCD_box(109,29,130,50);
	 TCS34725_Init();
	 TCS34725_GetRawData(&rgb);
	 while(1)
    {
		TCS34725_GetRawData(&rgb);
		rv=rgb.r*255/rgb.c;
		gv=rgb.g*255/rgb.c;
		bv=rgb.b*255/rgb.c;
		LCD_ShowNum(0,50,rv,4,YELLOW);
      LCD_ShowNum(32,50,gv,4,YELLOW);	
      LCD_ShowNum(64,50,bv,4,YELLOW);	
		fv=((rv>>3)<<11)+((gv>>2)<<5)+(bv>>3);
    	LCD_color(fv);
      DDL_DelayMS(DLY_MS);
	}
}

 

但几经尝试该色彩传感器却一直无法检测到色彩值,只好留待后面去解决啦!

最新回复

色彩检测与标识功能的实现:   色彩检测线路的连接方式如图3所示,经程序编译与下载,其检测与色彩标识效果如图4所示。 [attach]686262[/attach]图3 色彩检测线路   [attach]686263[/attach]图4 色彩设备     详情 回复 发表于 4 天前

回复

4740

帖子

0

TA的资源

五彩晶圆(中级)

色彩传感器却一直无法检测到色彩值,这与添加的图形显示函数有无关联

点评

似乎不像,估计是传感器读取不到数据。  详情 回复 发表于 2023-3-19 12:37

回复

1200

帖子

1

TA的资源

纯净的硅(高级)

Jacktang 发表于 2023-3-19 08:28 色彩传感器却一直无法检测到色彩值,这与添加的图形显示函数有无关联

似乎不像,估计是传感器读取不到数据。


回复

1200

帖子

1

TA的资源

纯净的硅(高级)

RE: 【HC32F4A0开发板测评】+LCD屏显示驱动及使用

色彩检测与标识功能的实现:

 

色彩检测线路的连接方式如图3所示,经程序编译与下载,其检测与色彩标识效果如图4所示。

image-20230326131013-1.png 图3 色彩检测线路

 

image.png 图4 色彩设备

 


回复
您需要登录后才可以回帖 登录 | 注册

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表