932|2

1510

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

[ STM32F4-discovery开发板测评 ] LCD屏显示驱动 [复制链接]

由于开发板先前所配的显示屏在寄出前已被损坏,故利用手头的LCD屏来替代它完成显示功能。

该显示屏采用SPI接口,其显示分辨率为160*80像素点。

为测试对LCD屏的显示驱动能力,它与开发板的连接关系为:

SCLK----PF7

SDIN----PF8

RST----PA8

DC ----PC9

CS ----PF9

 

对所用引脚的工作模式配置函数为:

void lcd_gpio(void)
{
  GPIO_InitTypeDef  GPIO_InitStruct;
  
  __HAL_RCC_GPIOA_CLK_ENABLE();
  GPIO_InitStruct.Pin = GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  __HAL_RCC_GPIOC_CLK_ENABLE();
  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  
  __HAL_RCC_GPIOF_CLK_ENABLE();
  GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
}

 

所用引脚输出高低电平的语句定义为:

#define OLED_SCLK_Set()    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET)

#define OLED_SCLK_Clr()    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_RESET)

 

#define OLED_SDIN_Set()    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET)

#define OLED_SDIN_Clr()    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET)

 

#define OLED_RST_Set()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET)

#define OLED_RST_Clr()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET)

 

#define OLED_DC_Set()      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET)

#define OLED_DC_Clr()      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET)

 

#define OLED_CS_Set()      HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET)

#define OLED_CS_Clr()      HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET)

GPIO口模拟SPI方式字节数据的函数为:

void LCD_Writ_Bus(u8 dat)
{
    u8 i;
    OLED_CS_Clr();
    for(i=0;i<8;i++)
    {
        OLED_SCLK_Clr();
        if(dat&0x80)
           OLED_SDIN_Set();
        else
           OLED_SDIN_Clr();
        OLED_SCLK_Set();
        dat<<=1;
    }
    OLED_CS_Set();
}

 

实现色彩清屏处理的函数为:

void LCD_Clear(u16 Color)
{
    u16 i,j;
    LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
    for(i=0;i<LCD_W;i++)
    {
       for (j=0;j<LCD_H;j++)
       {
          LCD_WR_DATA(Color);
       }
    }
}

 

在进行显示驱动测试时,为通过测试的效率,可在显示屏的初始化之后,直接以色彩清屏函数来测试,若屏幕被指定色彩所填充,则说明显示驱动有效;否则,说明驱动失败。

在显示驱动有效的情况下,仿照色彩清屏函数可完成图片显示功能,其函数内容为:

void LCD_ShowPictureb(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]);
      }
}

 

在配备字符显示函数的情况下,实现字符串显示的函数为:

void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
{
    while(*p!='\0')
    {
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
        LCD_ShowChar(x,y,*p,0,color);
        x+=8;
        p++;
    }
}

 

实现图1和图2显示效果的主程序为:

int main(void)
{
    SystemClock_Config();
	lcd_gpio();
	Lcd_Init();
	BACK_COLOR=RED;
	LCD_Clear(RED);
	LCD_ShowString(20,5,"STM32F429",YELLOW);
	LCD_ShowString(20,25,"0.96'LCD",YELLOW);
	LCD_ShowString(20,50,"jinglixixi",YELLOW);	
	HAL_Delay(2000);
	LCD_Clear(RED);
	LCD_ShowPictureb(0,0,159,79);
	while (1);
}

 

有了LCD屏的显示支持,后面就可以进行U盘的读写测试了。

 

图1 显示字符串

 

 

图2 显示图像

此帖出自stm32/stm8论坛

最新回复

直接以色彩清屏函数来测试是个好方法   详情 回复 发表于 2023-10-5 09:57
点赞 关注
 

回复
举报

1700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

直接以色彩清屏函数来测试是个好方法

此帖出自stm32/stm8论坛

点评

效率会高一些  详情 回复 发表于 2023-10-5 10:06
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
火辣西米秀 发表于 2023-10-5 09:57 直接以色彩清屏函数来测试是个好方法

效率会高一些

此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表