2284|2

1517

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【小华HC32F448测评】+TFT屏显示驱动 [复制链接]

 

尽管OLED屏能满足一定的显示需要,但要进行图片显示等就非TFT屏不可了。

为了省去连线的麻烦,可借用开发板上的显示接口,见图1所示。

 

图1 显示接口

 

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

BLK:PB10

SCK:PA12

DSI:PC4

D/C:PE12

RST:PE14

CS :PC7

 

为输出高低电平所作的引脚定义为:

#define LCD_CS_High()     GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_07)   //CS

#define LCD_CS_Low()     GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_07)

#define LCD_REST_High()   GPIO_SetPins(GPIO_PORT_E, GPIO_PIN_14)   //RES

#define LCD_REST_Low()   GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_14)

#define LCD_DC_High()    GPIO_SetPins(GPIO_PORT_E, GPIO_PIN_12)  //DC

#define LCD_DC_Low()     GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_12)

#define LCD_SDI_High()    GPIO_SetPins(GPIO_PORT_C, GPIO_PIN_04)   //DIN

#define LCD_SDI_Low()    GPIO_ResetPins(GPIO_PORT_C, GPIO_PIN_04)

#define LCD_SCK_High()   GPIO_SetPins(GPIO_PORT_A, GPIO_PIN_12)   //CLK

#define LCD_SCK_Low()    GPIO_ResetPins(GPIO_PORT_A, GPIO_PIN_12)

#define LCD_LED_High()   GPIO_SetPins(GPIO_PORT_B, GPIO_PIN_10)   //BLK

 

对TFT屏所用引脚进行配置的函数为:

void Init_TFT (void)
{
    stc_gpio_init_tstcGpioInit;
    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(GPIO_PORT_A, GPIO_PIN_12, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_B, GPIO_PIN_10, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_C, GPIO_PIN_04, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_C, GPIO_PIN_07, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_12, &stcGpioInit);
	(void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_14, &stcGpioInit);
}

 

以模拟SPI方式发送字节数据的函数为:

void LCD_Writ_Bus(unsigned char com) 
{
  unsigned char uci;
  for(uci=0;uci<8;uci++)
  {
     if(com & 0x80)
     {
         LCD_SDI_High();
     }
     else
     {
         LCD_SDI_Low();
     }
     com = com << 1;
     LCD_SCK_Low();
     LCD_SCK_High();
  }
}

 

实现以指定色彩擦除屏幕的函数为:

void LCD_Clear(unsigned int Color)
{
    char VH,VL;
    unsigned int i,j;
    VH=Color>>8;
    VL=Color;	
    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_DATA8(VH);
         LCD_WR_DATA8(VL);	
      }
    }
}

 

实现字符串显示的函数为:

void LCD_ShowString(unsigned int x,unsigned int y,const char *p)
{
    while(*p!='\0')
    {
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;}
        LCD_ShowChar(x,y,*p,0);
        x+=8;
        p++;
    }
}

 

实现图标显示的函数为:

void show_tb(unsigned int x,unsigned int y,unsigned int n) //200*200
{
  unsigned int i,j,k;
  unsigned int da;
  k=0;
  for(i=0;i<50;i++)
  {
    for(j=0;j<50;j++)
    {
       if(n==0) da=gImage_tb[k*2];
       ...
       da=da<<8;
       if(n==0) da|=gImage_tb[k*2+1];
       ...
       POINT_COLOR=da;
       LCD_DrawPoint(x-j,y+i);
       k++;
    }
  }
}

 

实现显示测试的主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_GPIO);
    LED_Init();
	Init_TFT();
	tft_Init();
    BACK_COLOR=RED;
    POINT_COLOR=WHITE;
    LCD_Clear(RED);
    LCD_ShowString(80,10,"HC32F448");
	LCD_ShowString(80,40,"2.2' TFT");
	LCD_DrawLine(0,60, 239, 60);
	LCD_DrawLine(0,290, 239, 290);
	LCD_ShowString(80,295,"jinglixixi");
    show_tb(50,5,0);
    LL_PERIPH_WP(LL_PERIPH_GPIO);
    for (;;) {
        LED_G_TOGGLE();
        DDL_DelayMS(DLY_MS);
    }
}

 

经程序的编译和下载,其测试结果如图2所示,说明功能正确。

 

图2  显示效果

 

最新回复

省去连线的麻烦,可借用开发板上的显示接口,这是高手   详情 回复 发表于 2023-8-20 21:46
点赞 关注
 
 

回复
举报

6993

帖子

11

TA的资源

版主

沙发
 

经程序的编译和下载,其测试结果如图2所示,说明功能正确。

大佬的帖子永远这么优秀!

 
 
 

回复

6809

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

省去连线的麻烦,可借用开发板上的显示接口,这是高手

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表