找回密码
 立即注册

只需一步,快速开始

搜索

[复旦微FM33LG0系列开发板测评] 驱动RGB TFT显示屏

0
回复
1763
查看
[复制链接]

166

主题

343

帖子

3076

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3076
QQ
2022-1-7 16:53:13 显示全部楼层 |阅读模式
[复旦微FM33LG0系列开发板测评] 驱动RGB TFT显示屏


原帖地址:[复旦微FM33LG0系列开发板测评] 驱动RGB TFT显示屏 - 国产芯片交流 - 电子工程世界-论坛 (eeworld.com.cn)

今天冬至,看到朋友圈都在吃饺子。想写个祝福大家冬至的话题。手里有个中景园电子技术有限公司320RGB*480 dots matrix TFT LCD 模块,想用FM33LG0驱动一下:

   

   PIN定义:


逻辑时序图:

  普通口模拟:
  1. void LCD_GPIO_Init(void)
  2. {
  3.         FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  4.    
  5.     FL_GPIO_ResetOutputPin(GPIOA, FL_GPIO_PIN_0|FL_GPIO_PIN_1|FL_GPIO_PIN_2|FL_GPIO_PIN_3|FL_GPIO_PIN_4|FL_GPIO_PIN_5|FL_GPIO_PIN_6|FL_GPIO_PIN_7);
  6.    
  7.     GPIO_InitStruct.pin = FL_GPIO_PIN_0|FL_GPIO_PIN_1|FL_GPIO_PIN_2|FL_GPIO_PIN_3|FL_GPIO_PIN_4|FL_GPIO_PIN_6|FL_GPIO_PIN_7;
  8.     GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
  9.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  10.     GPIO_InitStruct.pull = FL_DISABLE;
  11.     FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  12.         
  13.         
  14.     FL_GPIO_ResetOutputPin(GPIOB, FL_GPIO_PIN_5);
  15.     GPIO_InitStruct.pin = FL_GPIO_PIN_5;
  16.     GPIO_InitStruct.mode = FL_GPIO_MODE_INPUT ;
  17.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  18.     GPIO_InitStruct.pull = FL_DISABLE;
  19.     FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  20.         
  21. //         GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7);
  22. }

  23. #define LCD_SCLK_Clr() FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_0)//SCL=SCLK
  24. #define LCD_SCLK_Set() FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_0)

  25. #define LCD_MOSI_Clr() FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_1)//SDA=MOSI
  26. #define LCD_MOSI_Set() FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_1)

  27. #define LCD_RES_Clr()  FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_2)//RES
  28. #define LCD_RES_Set()  FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_2)

  29. #define LCD_DC_Clr()   FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_3)//DC
  30. #define LCD_DC_Set()   FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_3)
  31.                      
  32. #define LCD_BLK_Clr()  FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_4)//BLK
  33. #define LCD_BLK_Set()  FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_4)

  34. #define ZK_MISO        FL_GPIO_ReadInputPort(GPIOB)//MISO  读取字库数据引脚
  35. //                               GPIO_ReadInputDataBit                                                                                       
  36. //GPIO_ResetBits
  37. #define LCD_CS_Clr()   FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_6)//CS
  38. #define LCD_CS_Set()   FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_6)

  39. #define ZK_CS_Clr()     FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_7)
  40. #define ZK_CS_Set()     FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_7)
复制代码
驱动代码:
  1. #include "lcd_init.h"


  2. void LCD_GPIO_Init(void)
  3. {
  4.         FL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  5.    
  6.     FL_GPIO_ResetOutputPin(GPIOA, FL_GPIO_PIN_0|FL_GPIO_PIN_1|FL_GPIO_PIN_2|FL_GPIO_PIN_3|FL_GPIO_PIN_4|FL_GPIO_PIN_5|FL_GPIO_PIN_6|FL_GPIO_PIN_7);
  7.    
  8.     GPIO_InitStruct.pin = FL_GPIO_PIN_0|FL_GPIO_PIN_1|FL_GPIO_PIN_2|FL_GPIO_PIN_3|FL_GPIO_PIN_4|FL_GPIO_PIN_6|FL_GPIO_PIN_7;
  9.     GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
  10.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  11.     GPIO_InitStruct.pull = FL_DISABLE;
  12.     FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  13.         
  14.         
  15.     FL_GPIO_ResetOutputPin(GPIOB, FL_GPIO_PIN_5);
  16.     GPIO_InitStruct.pin = FL_GPIO_PIN_5;
  17.     GPIO_InitStruct.mode = FL_GPIO_MODE_INPUT ;
  18.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  19.     GPIO_InitStruct.pull = FL_DISABLE;
  20.     FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  21.         
  22. //         GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7);
  23. }


  24. /******************************************************************************
  25.       函数说明:LCD串行数据写入函数
  26.       入口数据:dat  要写入的串行数据
  27.       返回值:  无
  28. ******************************************************************************/
  29. void LCD_Writ_Bus(u8 dat)
  30. {        
  31.         u8 i;
  32.         LCD_CS_Clr();
  33.         for(i=0;i<8;i++)
  34.         {                          
  35.                 LCD_SCLK_Clr();
  36.                 if(dat&0x80)
  37.                 {
  38.                    LCD_MOSI_Set();
  39.                 }
  40.                 else
  41.                 {
  42.                    LCD_MOSI_Clr();
  43.                 }
  44.                 LCD_SCLK_Set();
  45.                 dat<<=1;
  46.         }        
  47.   LCD_CS_Set();        
  48. }


  49. /******************************************************************************
  50.       函数说明:LCD写入数据
  51.       入口数据:dat 写入的数据
  52.       返回值:  无
  53. ******************************************************************************/
  54. void LCD_WR_DATA8(u8 dat)
  55. {
  56.         LCD_Writ_Bus(dat);
  57. }


  58. /******************************************************************************
  59.       函数说明:LCD写入数据
  60.       入口数据:dat 写入的数据
  61.       返回值:  无
  62. ******************************************************************************/
  63. void LCD_WR_DATA(u32 dat)
  64. {
  65.         LCD_Writ_Bus(dat>>16);
  66.         LCD_Writ_Bus(dat>>8);
  67.         LCD_Writ_Bus(dat);
  68. }


  69. /******************************************************************************
  70.       函数说明:LCD写入命令
  71.       入口数据:dat 写入的命令
  72.       返回值:  无
  73. ******************************************************************************/
  74. void LCD_WR_REG(u8 dat)
  75. {
  76.         LCD_DC_Clr();//写命令
  77.         LCD_Writ_Bus(dat);
  78.         LCD_DC_Set();//写数据
  79. }


  80. /******************************************************************************
  81.       函数说明:设置起始和结束地址
  82.       入口数据:x1,x2 设置列的起始和结束地址
  83.                 y1,y2 设置行的起始和结束地址
  84.       返回值:  无
  85. ******************************************************************************/
  86. void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
  87. {
  88.         LCD_WR_REG(0x2a);//列地址设置
  89.         LCD_WR_DATA8(x1>>8);
  90.         LCD_WR_DATA8(x1);
  91.         LCD_WR_DATA8(x2>>8);
  92.         LCD_WR_DATA8(x2);
  93.         LCD_WR_REG(0x2b);//行地址设置
  94.         LCD_WR_DATA8(y1>>8);
  95.         LCD_WR_DATA8(y1);
  96.         LCD_WR_DATA8(y2>>8);
  97.         LCD_WR_DATA8(y2);
  98.         LCD_WR_REG(0x2c);//储存器写
  99. }

  100. void LCD_Init(void)
  101. {
  102.         LCD_GPIO_Init();//初始化GPIO
  103.         
  104.         LCD_RES_Clr();//复位
  105.         FL_DelayMs(100);
  106.         LCD_RES_Set();
  107.         FL_DelayMs(100);
  108.         
  109.         LCD_BLK_Set();//打开背光
  110.   FL_DelayMs(100);
  111.         
  112.         //************* Start Initial Sequence **********//
  113.         LCD_WR_REG(0x11); //Sleep out
  114.         FL_DelayMs(120);              //Delay 120ms
  115.         //************* Start Initial Sequence **********//
  116.         LCD_WR_REG(0XF2);
  117.         LCD_WR_DATA8(0x18);
  118.         LCD_WR_DATA8(0xA3);
  119.         LCD_WR_DATA8(0x12);
  120.         LCD_WR_DATA8(0x02);
  121.         LCD_WR_DATA8(0XB2);
  122.         LCD_WR_DATA8(0x12);
  123.         LCD_WR_DATA8(0xFF);
  124.         LCD_WR_DATA8(0x10);
  125.         LCD_WR_DATA8(0x00);
  126.         LCD_WR_REG(0XF8);
  127.         LCD_WR_DATA8(0x21);
  128.         LCD_WR_DATA8(0x04);
  129.         LCD_WR_REG(0X13);

  130.         LCD_WR_REG(0x36);    // Memory Access Control
  131.         if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x08);
  132.         else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC8);
  133.         else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x78);
  134.         else LCD_WR_DATA8(0xA8);

  135.         LCD_WR_REG(0xB4);
  136.         LCD_WR_DATA8(0x02);
  137.         LCD_WR_REG(0xB6);
  138.         LCD_WR_DATA8(0x02);
  139.         LCD_WR_DATA8(0x22);
  140.         LCD_WR_REG(0xC1);
  141.         LCD_WR_DATA8(0x41);
  142.         LCD_WR_REG(0xC5);
  143.         LCD_WR_DATA8(0x00);
  144.         LCD_WR_DATA8(0x18);



  145.         LCD_WR_REG(0x3a);
  146.         LCD_WR_DATA8(0x66);
  147.         FL_DelayMs(50);



  148.         LCD_WR_REG(0xE0);
  149.         LCD_WR_DATA8(0x0F);
  150.         LCD_WR_DATA8(0x1F);
  151.         LCD_WR_DATA8(0x1C);
  152.         LCD_WR_DATA8(0x0C);
  153.         LCD_WR_DATA8(0x0F);
  154.         LCD_WR_DATA8(0x08);
  155.         LCD_WR_DATA8(0x48);
  156.         LCD_WR_DATA8(0x98);
  157.         LCD_WR_DATA8(0x37);
  158.         LCD_WR_DATA8(0x0A);
  159.         LCD_WR_DATA8(0x13);
  160.         LCD_WR_DATA8(0x04);
  161.         LCD_WR_DATA8(0x11);
  162.         LCD_WR_DATA8(0x0D);
  163.         LCD_WR_DATA8(0x00);
  164.         LCD_WR_REG(0xE1);
  165.         LCD_WR_DATA8(0x0F);
  166.         LCD_WR_DATA8(0x32);
  167.         LCD_WR_DATA8(0x2E);
  168.         LCD_WR_DATA8(0x0B);
  169.         LCD_WR_DATA8(0x0D);
  170.         LCD_WR_DATA8(0x05);
  171.         LCD_WR_DATA8(0x47);
  172.         LCD_WR_DATA8(0x75);
  173.         LCD_WR_DATA8(0x37);
  174.         LCD_WR_DATA8(0x06);
  175.         LCD_WR_DATA8(0x10);
  176.         LCD_WR_DATA8(0x03);
  177.         LCD_WR_DATA8(0x24);
  178.         LCD_WR_DATA8(0x20);
  179.         LCD_WR_DATA8(0x00);
  180.         LCD_WR_REG(0x11);
  181.         FL_DelayMs(120);
  182.         LCD_WR_REG(0x29);
  183.         LCD_WR_REG(0x2C);
  184. }







复制代码
main()主函数
  1. Display_GB2312_String(10,50,32, "祝大家冬至吃水饺",WHITE,BLACK);
  2.                  Display_GB2312_String(10,100,32, "祝大家冬至吃水饺",RED,BLACK);
  3.                 Display_GB2312_String(10,150,32, "祝大家冬至吃水饺",BLUE,BLACK);
  4.                 Display_GB2312_String(10,200,32, "祝大家冬至吃水饺",GREEN,BLACK);
复制代码

效果如下:




回复

使用道具 举报

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

返回顶部