你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32学习笔记10—TFTLCD显示实验

[复制链接]
STMCU 发布时间:2020-11-25 17:18
STM32学习笔记10—TFTLCD显示实验


10.1 概述
       之前在51为核心的系统里面,常用的显示器件有LED,数码管,LCD1602和LCD12864,这些器件都有一个共同的特点,那就是只有一个颜色,没有办法显示彩色图片,为了显示彩色图片,我们引入了TFT显示模组。TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:ThinFilmTransistor-Liquid Crystal Display。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。


       目前常用的TFT显示模组按照接口类型可以分为MCU屏幕与RGB屏幕,其中MCU在STM32F1系列中比较常用,原因是MCU屏幕内部集成了显示控制器,只需要按照手册指定的协议将输入发送过去即可,但是MCU屏幕受限于屏幕尺寸,一般不会超过4.3英寸,RGB屏幕内部没有控制器,需要单片机或者CPU自带控制器,但是RGB屏幕尺寸较大,且刷新速度快,通用性强,在生活中使用的更广泛,由于STM32F1单片机中没有RGB控制器(LTDC模块),所以采用核心为5510的TFT屏幕来进行TFT显示实验。


注:我们在网上看到的大尺寸MCU屏幕一般都是以屏幕+PCB的形式,这是因为板子上携带了8080并口转RGB芯片,所以这种情况下,也可以使用MCU屏幕的驱动方式来进行驱动。


10.2 TFTLCD模块原理图
10.2.1 接口描述
       以2.8英寸TFT为例,实物图片如下图所示。
11.png
10.2.2 原理图
12.png


RST:复位端口,高电平有效
CS:片选,低电平有效
RS:数据命令选择,低电平代表命令,高电平代表数据
WR:写控制,高电平有效
RD:读控制,高电平有效
DB0~DB15:16位并行数据口
VCC:电源正极
GND:电源负极
LEDK:背光LED负极
LEDA:背光LED正极
Y-:触摸屏Y轴数据
X-:触摸屏X轴数据
Y+:触摸屏Y轴数据
X+:触摸屏X轴数据


10.3 FSMC
10.3.1 FSMC简介
       FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32F1的FSMC接口支持包括SRAM、NANDFLASH、NOR FLASH和PSRAM等存储器。一般大容量,且引脚数目在100脚及以上的 STM32F103芯片都带有FSMC接口,FSMC的框图如图所示。
13.png
    从上图可知,STM32的FSMC将设备分为3种:NOR/PSRAM设备,NAND设备和PC设备,共用地址数据总线等信号,通过CS端口来区分不同的设备,比如我们这个实验中LCD的片选就是接在FSMC_NE4端口上,其实本质上就是把TFTLCD作为SRAM来控制。


       外部SRAM设备的连接一般有地址线(A0~A18),数据线(D0~D15),写信号(WR),读信号(RD)和片选,TFTLCD显然除了不具备地址线,其他的信号都是具备的,所以我们可以采用SRAM的方式来进行TFT的控制,这种控制方式的好处就是对比传统的GPIO翻转可以更快的将数据送入TFT。


       STM32F1的FSMC支持8/16/32位数据宽度,我们的TFT模块采用的是16位数据宽度,所以只需要将FSMC配置为外置16位宽度即可。FSMC的外部存储器划分为了固定的4个256 M的存储块,如下图所示。
14.png
    我们在驱动TFTLCD的时候,用到的存储块是块1,STM32将FSMC的存储块1分为4个区,每个区管理64M的空间,每个区都有独立的寄存器对连接的存储器进行配置,BANK1的256M空间由28根地址线寻址,这28根地址线如下表所示,其中低26个位来自外部存储器的地址,我们可以将TFTLCD的片选接在低26位上,通过发送地址来选中片选,只有高2位才是内部可以控制的。
15.png
注:

当Bank1接的是16位宽度存储器的时候:地址线的[25:1]对应FSMC_A[24:0]
当Bank1接的是8位宽度存储器的时候:地址线的[25:0]对应FSMC_A[25:0]


       对于NOR FLASH控制器,主要通过3个寄存器来设置FSMC的时序参数,NORFLASH控制器支持同步和异步突发两种访问方式。

       选用同步突发访问方式时,FSMC将系统时钟分频后,发送给外部存储器作为同步时钟信号 FSMC_CLK。此时需要的设置的时间参数有2个,即系统时钟HCLK与FSMC_CLK的分频系数(可以2~16分频),同步突发访问中获取第一个数据所需要的等待延迟。

       选用异步突发访问方式时,则需要设置3个时间参数:地址建立时间、数据建立时间和地址保持时间。FSMC综合了SRAM/ROM、PSRAM和NOR Flash产品的信号特点,定义了4种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时序参数。

       在实际扩展时,根据选用存储器的特征确定时序模型,从而确定各时间参数与存储器读/写周期参数指标之间的计算关系,利用该计算关系和存储芯片数据手册中给定的参数指标,可计算出FSMC所需要的各时间参数,从而对时间参数寄存器进行合理的配置。

       我们现在使用异步模式A方式来控制LCD,模式A的读操作时序如下图所示。
16.png
    模式A支持独立的读写时序控制,这个对驱动TFTLCD来说非常有用,因为TFTLCD在读的时候,一般比较慢,而在写的时候可以比较快,如果读写用一样的时序,那么只能以读的时序为基准,从而导致写的速度变慢,或者在读数据的时候,重新配置FSMC的延时,在读操作完成的时候,再配置回写的时序,这样虽然也不会降低写的速度,但是频繁配置,比较麻烦。而如果有独立的读写时序控制,那么我们只要初始化的时候配置好,之后就不用再配置,既可以满足速度要求,又不需要频繁改配置。


       模式A的写操作如下图所示。
17.png
10.3.2 相关寄存器

(1)SRAM/NOR 闪存片选控制寄存器:FSMC_BCRx(x=1~4)
Bit 19:成组写使能位


       0:写操作始终处于异步模式


       1:写操作为同步模式


Bit 14:EXTMOD:扩展模式使能(即允许读和写使用不同的时序)


       0:不使用FSMC_BWTR寄存器(默认)
       1:FSMC使用FSMC_BWTR寄存器
Bit 13:等待使能位
       0:禁用NWAIT信号,在设置的闪存保持周期之后不会检测NWAIT信号插入等待状态
       1:使用NWAIT信号,在设置的闪存保持周期之后根据NWAIT信号插入等待状态(默认)
Bit 12:写使能位
       0:禁止FSMC对存储器的写操作,否则产生一个AHB错误
       1:允许FSMC对存储器的写操作(默认)
Bit 11:配置等待时序
       0:NWAIT信号在等待状态前的一个数据周期有效(默认)
       1:NWAIT信号在等待状态期间有效(不适用于Cellular RAM)
Bit 10:支持非对齐的成组模式
       0:不允许直接的非对齐成组操作(默认)
       1:允许直接的非对齐成组操作
Bit 9:等待信号极性
       0:NWAIT等待信号为低时有效(默认)
       1:NWAIT等待信号为高时有效
Bit 8:成组模式使能
       0:禁用成组访问模式(默认)
       1:使用成组访问模式
Bit 6:闪存访问使能
       0:禁止对NOR闪存存储器的访问操作
       1:允许对NOR闪存存储器的访问操作
Bit 5~Bit 4:存储器数据总线宽度
      00:8位,
       01:16位(默认)
       10:保留
       11:保留
Bit 3~Bit 2:存储器类型
       00:SRAM、ROM(存储器块2,3,4在复位后的默认值)
       01:PSRAM(Cellular RAM: CRAM)
       10:NOR闪存(存储器块1在复位后的默认值)
       11:保留
Bit 1:地址/数据复用使能位
       0:地址/数据不复用。
       1:地址/数据复用数据总线(默认)
Bit 0:存储器块使能位
       0:禁用对应的存储器块
       1:启用对应的存储器块
(2)SRAM/NOR 闪存片选时序寄存器:FSMC_BTRx(x=1~4)


Bit 29~Bit 28:访问模式(这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用)


       00:访问模式A
       01:访问模式B
       10:访问模式C
       11:访问模式D
Bit 27~Bit 24:数据保持时间

       0000:第一个数据的保持时间为2个CLK时钟周期
       ……

       1111:第一个数据的保持时间为17个CLK时钟周期(默认)

Bit 23~Bit 20:时钟分频比

       0000:保留

       0001:1个CLK周期=2个HCLK周期

       0010:1个CLK周期=3个HCLK周期

       ……

       1111:1个CLK周期=16个HCLK周期(默认)

Bit 19~Bit 16:总线恢复时间

       0000:总线恢复时间=1个HCLK时钟周期
       ……

       1111:总线恢复时间=16个HCLK时钟周期(默认)

Bit 15~Bit 8:数据保持时间

       00000000:保留

       00000001:DATAST保持时间=2个HCLK时钟周期

       00000010:DATAST保持时间=3个HCLK时钟周期

       ……

       11111111:DATAST保持时间=256个HCLK时钟周期(默认)

Bit 7~Bit 4:地址保持时间

       0000:ADDHLD保持时间=1个HCLK时钟周期

       ……

       1111:ADDHLD保持时间=16个HCLK时钟周期(默认)

Bit 3~Bit 0:地址建立时间

       0000:ADDSET建立时间=1个HCLK时钟周期
      ……

       1111:ADDSET建立时间=16个HCLK时钟周期(默认)

(3)SRAM/NOR 闪存写时序寄存器:FSMC_BWTRx(x=1~4)


Bit 29~Bit 28:访问模式(这2位只在FSMC_BCRx寄存器的EXTMOD位为1时起作用)


       00:访问模式A
       01:访问模式B
       10:访问模式C
       11:访问模式D

Bit 27~Bit 24:数据保持时间

       0000:第一个数据的保持时间为2个CLK时钟周期
      ……
       1111:第一个数据的保持时间为17个CLK时钟周期(默认)

Bit 23~Bit 20:时钟分频比
       0000:保留
       0001:1个CLK周期=2个HCLK周期
       0010:1个CLK周期=3个HCLK周期
       ……
       1111:1个CLK周期=16个HCLK周期(默认)
Bit 19~Bit 16:总线恢复时间
       0000:总线恢复时间=1个HCLK时钟周期
       ……
       1111:总线恢复时间=16个HCLK时钟周期(默认)
Bit 15~Bit 8:数据保持时间
       00000000:保留
       00000001:DATAST保持时间=2个HCLK时钟周期
       00000010:DATAST保持时间=3个HCLK时钟周期
       ……
       11111111:DATAST保持时间=256个HCLK时钟周期(默认)
Bit 7~Bit 4:地址保持时间

       0000:ADDHLD保持时间=1个HCLK时钟周期
       ……

       1111:ADDHLD保持时间=16个HCLK时钟周期(默认)
Bit 3~Bit 0:地址建立时间
       0000:ADDSET建立时间=1个HCLK时钟周期
       ……

       1111:ADDSET建立时间=16个HCLK时钟周期(默认)

10.4 实验例程
       现有一块驱动芯片为5510的LCD驱动芯片,厂家提供初始化例程,使用STM32的FSMC功能驱动屏幕显示字符串,连接关系如下表所示。

片选CS:FSMC_NE4

写控制WR:FSMC_NWE

读控制RD:FSMC_NOE

数据命令控制RS:FSMC_A6

背光:PB0

16位并行数据:FSMC_D15~FSMC_D0

(1)创建lcd.h,并输入以下代码。

  1. #ifndef _LCD_H_
  2. #define _LCD_H_
  3. #include "sys.h"
  4. //LCD地址结构体
  5. typedef struct
  6. {
  7.   vu16 LCD_REG ;
  8.   vu16 LCD_RAM ;
  9. }LCD_TypeDef ;
  10. #define LCD_BASE    ( ( u32 )( 0x6C000000|0x000007FE ))
  11. #define LCD        ( ( LCD_TypeDef* ) LCD_BASE )
  12. //LCD重要参数集
  13. typedef struct  
  14. {                        
  15.   u16 width ;                    //LCD宽度
  16.   u16 height ;                    //LCD高度
  17.   u8 dir ;                      //横屏竖屏控制
  18.   u16 wramcmd ;                  //开始写gram指令
  19.   u16 setxcmd ;                    //设置x坐标指令
  20.   u16 setycmd ;                    //设置y坐标指令
  21. }_lcd_dev ;
  22. extern _lcd_dev lcddev ;                  //管理LCD重要参数
  23. //LCD的画笔颜色和背景色
  24. extern u16 POINT_COLOR ;                  //画笔颜色
  25. extern u16 BACK_COLOR ;                  //背景颜色
  26. #define  LCD_LED PBout(0)                  //LCD背光
  27. //画笔颜色
  28. #define WHITE            0xFFFF
  29. #define BLACK            0x0000   
  30. #define BLUE            0x001F  
  31. #define BRED             0XF81F
  32. #define GRED        0XFFE0
  33. #define GBLUE       0X07FF
  34. #define RED              0xF800
  35. #define MAGENTA          0xF81F
  36. #define GREEN            0x07E0
  37. #define CYAN             0x7FFF
  38. #define YELLOW           0xFFE0
  39. #define BROWN        0XBC40              //棕色
  40. #define BRRED        0XFC07              //棕红色
  41. #define GRAY         0X8430              //灰色
  42. void LCD_Init( void ) ;                    //初始化
  43. void LCD_Clear( u16 Color ) ;                //清屏
  44. void LCD_Fast_DrawPoint( u16 x, u16 y, u16 color ) ;      //快速画点
  45. void LCD_ShowString( u16 x, u16 y, u8 *p ) ;          //显示一个字符串
  46. #endif
复制代码

注1:关于LCD_BASE地址的定义部分,其中0x6C000000代表FSMC的SRAM块4的开始地址,0x000007FE则代表A10的偏移地址,7FE H换算成2进制就是01111111 1110,由于FSMC在16位数据总线状态下,地址需要右移一个字节,所以映射到A10~A0上的地址数据就是011 1111 1111,A0恰好就是0,如果此时16位地址加1,对应的8位地址就是加2,也就是7FE+2=800,映射到A10~A0上的地址就是100 0000 0000,即A10变为了1,这就实现了通过A10来控制RS的效果。我们定义的结构体也可以发现,LCD_REG对应的就是0x6C000000+0x000007FE,而LCD_RAM对应的就变成了0x6C000000+0x000007FE+0x00000002。


注2:结构体_lcd_dev则定义了一些LCD参数,比如高度,宽度,设置命令,可以通过改变宏定义的方式来改变控制器的输出。


注3:颜色数据。


       目前的颜色数据都有RGB888,RGB666和RGB565格式,代表了R,G和B的分辨率,其中RGB888代表红,绿,蓝都是8位,可以表示16777216种颜色,但是受制于TFTLCD的数据总线宽度只有16位,所以只能够采用RGB565模式,这种模式代表红色和蓝色都是5位分辨率,绿色6位分辨率,这种模式中可以最多表示65536种颜色。文件中宏定义的颜色数据就是根据RGB888格式转换而来,一般都是放弃低2位和低1位,例如RGB888模式中某种颜色为11011110 11011110 11011111,那么转换为RGB565模式就变成了11011 110111 11011,换成16进制就是1101 1110 1111 1011=DEFB H。



(2)创建lcd.c,并添加以下代码。

  1. #include "lcd.h"
  2. #include "font.h"
  3. #include "delay.h"
  4. void LCD_WriteReg( u16 LCD_Reg, u16 LCD_RegValue )
  5. {  
  6.   LCD->LCD_REG = LCD_Reg ;              //写入寄存器序号
  7.   LCD->LCD_RAM = LCD_RegValue ;            //写入数据
  8. }
  9. _lcd_dev lcddev ;                      //管理LCD重要参数
  10. void LCD_SetCursor( u16 Xpos, u16 Ypos )
  11. {
  12.   LCD_WriteReg( lcddev.setxcmd, Xpos>>8 ) ;
  13.   LCD_WriteReg( lcddev.setxcmd+1, Xpos&0xFF ) ;
  14.   LCD_WriteReg( lcddev.setycmd, Ypos>>8 ) ;
  15.   LCD_WriteReg( lcddev.setycmd+1, Ypos&0xFF ) ;
  16. }
  17. void LCD_Display_Dir()
  18. {
  19.   u16 temp;
  20.   lcddev.wramcmd = 0x2C00 ;
  21.   lcddev.setxcmd = 0x2A00 ;
  22.   lcddev.setycmd = 0x2B00 ;
  23.   lcddev.width = 480 ;
  24.   lcddev.height = 800 ;
  25.   //交换X,Y
  26.   if( lcddev.width>lcddev.height )
  27.   {
  28.     temp = lcddev.width ;
  29.     lcddev.width = lcddev.height ;
  30.     lcddev.height = temp ;
  31.   }
  32.   //设置扫描方向
  33.   LCD_WriteReg( 0x3600, 0 ) ;
  34.   LCD_WriteReg( lcddev.setxcmd, 0 ) ;
  35.   LCD_WriteReg( lcddev.setxcmd+1, 0 ) ;
  36.   LCD_WriteReg( lcddev.setxcmd+2, ( lcddev.width-1 )>>8 ) ;
  37.   LCD_WriteReg( lcddev.setxcmd+3, ( lcddev.width-1 )&0xFF ) ;
  38.   LCD_WriteReg( lcddev.setycmd, 0 ) ;
  39.   LCD_WriteReg( lcddev.setycmd+1, 0 ) ;
  40.   LCD_WriteReg( lcddev.setycmd+2, ( lcddev.height-1 )>>8 ) ;
  41.   LCD_WriteReg( lcddev.setycmd+3, ( lcddev.height-1 )&0xFF ) ;
  42. }
  43. void LCD_Init()
  44. {
  45.   RCC->AHBENR |= 1<<8 ;                  //使能FSMC时钟
  46.     RCC->APB2ENR |= 1<<3 ;                  //使能PORTB时钟
  47.   RCC->APB2ENR |= 1<<5 ;                  //使能PORTD时钟
  48.   RCC->APB2ENR |= 1<<6 ;                  //使能PORTE时钟
  49.    RCC->APB2ENR |= 1<<8 ;                  //使能PORTG时钟
  50.   GPIOB->CRL &= 0xFFFFFFF0 ;                //PB0 推挽输出
  51.   GPIOB->CRL |= 0x00000003 ;
  52.   //PORTD复用推挽输出
  53.   GPIOD->CRH &= 0x00FFF000 ;
  54.   GPIOD->CRH |= 0xBB000BBB ;
  55.   GPIOD->CRL &= 0xFF00FF00 ;
  56.   GPIOD->CRL |= 0x00BB00BB ;
  57.   //PORTE复用推挽输出
  58.   GPIOE->CRH &= 0x00000000 ;
  59.   GPIOE->CRH |= 0xBBBBBBBB ;
  60.   GPIOE->CRL &= 0x0FFFFFFF ;
  61.   GPIOE->CRL |= 0xB0000000 ;
  62.   //PORTG12复用推挽输出
  63.   GPIOG->CRH &= 0xFFF0FFFF ;
  64.   GPIOG->CRH |= 0x000B0000 ;
  65.   GPIOG->CRL &= 0xFFFFFFF0 ;                //PG0->RS
  66.   GPIOG->CRL |= 0x0000000B ;
  67.   FSMC_Bank1->BTCR[ 6 ] = 0x00000000 ;
  68.   FSMC_Bank1->BTCR[ 7 ] = 0x00000000 ;
  69.   FSMC_Bank1E->BWTR[ 6 ] = 0x00000000 ;
  70.   FSMC_Bank1->BTCR[ 6 ] |= 1<<12 ;              //存储器写使能
  71.   FSMC_Bank1->BTCR[ 6 ] |= 1<<14 ;              //读写使用不同的时序
  72.   FSMC_Bank1->BTCR[ 6 ] |= 1<<4 ;              //存储器数据宽度为16bit
  73.   FSMC_Bank1->BTCR[ 7 ] |= 0<<28 ;              //模式A
  74.   FSMC_Bank1->BTCR[ 7 ] |= 1<<0 ;              //地址建立时间为2个HCLK 1/36M=27ns
  75.   FSMC_Bank1->BTCR[ 7 ] |= 0xF<<8 ;              //数据保存时间为16个HCLK
  76.   FSMC_Bank1E->BWTR[ 6 ] |= 0<<28 ;            //模式A
  77.   FSMC_Bank1E->BWTR[ 6 ] |= 0<<0 ;              //地址建立时间为1个HCLK
  78.   FSMC_Bank1E->BWTR[ 6 ] |= 3<<8 ;              //数据保存时间为4个HCLK
  79.   FSMC_Bank1->BTCR[ 6 ] |= 1<<0 ;              //使能BANK1区域4
  80.   delay_ms( 50 ) ;                      //delay 50 ms
  81.   LCD_WriteReg( 0xF000, 0x55 ) ;
  82.   LCD_WriteReg( 0xF001, 0xAA ) ;
  83.   LCD_WriteReg( 0xF002, 0x52 ) ;
  84.   LCD_WriteReg( 0xF003, 0x08 ) ;
  85.   LCD_WriteReg( 0xF004, 0x01 ) ;
  86.   //AVDD Set AVDD 5.2V
  87.   LCD_WriteReg( 0xB000, 0x0D ) ;
  88.   LCD_WriteReg( 0xB001, 0x0D ) ;
  89.   LCD_WriteReg( 0xB002, 0x0D ) ;
  90.   //AVDD ratio
  91.   LCD_WriteReg( 0xB600, 0x34 ) ;
  92.   LCD_WriteReg( 0xB601, 0x34 ) ;
  93.   LCD_WriteReg( 0xB602, 0x34 ) ;
  94.   //AVEE -5.2V
  95.   LCD_WriteReg( 0xB100, 0x0D ) ;
  96.   LCD_WriteReg( 0xB101, 0x0D ) ;
  97.   LCD_WriteReg( 0xB102, 0x0D ) ;
  98.   //AVEE ratio
  99.   LCD_WriteReg( 0xB700, 0x34 ) ;
  100.   LCD_WriteReg( 0xB701, 0x34 ) ;
  101.   LCD_WriteReg( 0xB702, 0x34 ) ;
  102.   //VCL -2.5V
  103.   LCD_WriteReg( 0xB200, 0x00 ) ;
  104.   LCD_WriteReg( 0xB201, 0x00 ) ;
  105.   LCD_WriteReg( 0xB202, 0x00 ) ;
  106.   //VCL ratio
  107.   LCD_WriteReg( 0xB800, 0x24 ) ;
  108.   LCD_WriteReg( 0xB801, 0x24 ) ;
  109.   LCD_WriteReg( 0xB802, 0x24 ) ;
  110.   //VGH 15V
  111.   LCD_WriteReg( 0xBF00, 0x01 ) ;
  112.   LCD_WriteReg( 0xB300, 0x0F ) ;
  113.   LCD_WriteReg( 0xB301, 0x0F ) ;
  114.   LCD_WriteReg( 0xB302, 0x0F ) ;
  115.   //VGH ratio
  116.   LCD_WriteReg( 0xB900, 0x34 ) ;
  117.   LCD_WriteReg( 0xB901, 0x34 ) ;
  118.   LCD_WriteReg( 0xB902, 0x34 ) ;
  119.   //VGL_REG -10V
  120.   LCD_WriteReg( 0xB500, 0x08 ) ;
  121.   LCD_WriteReg( 0xB501, 0x08 ) ;
  122.   LCD_WriteReg( 0xB502, 0x08 ) ;
  123.   LCD_WriteReg( 0xC200, 0x03 ) ;
  124.   //VGLX ratio
  125.   LCD_WriteReg( 0xBA00, 0x24 ) ;
  126.   LCD_WriteReg( 0xBA01, 0x24 ) ;
  127.   LCD_WriteReg( 0xBA02, 0x24 ) ;
  128.   //VGMP/VGSP 4.5V/0V
  129.   LCD_WriteReg( 0xBC00, 0x00 ) ;
  130.   LCD_WriteReg( 0xBC01, 0x78 ) ;
  131.   LCD_WriteReg( 0xBC02, 0x00 ) ;
  132.   //VGMN/VGSN -4.5V/0V
  133.   LCD_WriteReg( 0xBD00, 0x00 ) ;
  134.   LCD_WriteReg( 0xBD01, 0x78 ) ;
  135.   LCD_WriteReg( 0xBD02, 0x00 ) ;
  136.   //VCOM
  137.   LCD_WriteReg( 0xBE00, 0x00 ) ;
  138.   LCD_WriteReg( 0xBE01, 0x64 ) ;
  139.   //Gamma Setting
  140.   LCD_WriteReg( 0xD100, 0x00 ) ;
  141.   LCD_WriteReg( 0xD101, 0x33 ) ;
  142.   LCD_WriteReg( 0xD102, 0x00 ) ;
  143.   LCD_WriteReg( 0xD103, 0x34 ) ;
  144.   LCD_WriteReg( 0xD104, 0x00 ) ;
  145.   LCD_WriteReg( 0xD105, 0x3A ) ;
  146.   LCD_WriteReg( 0xD106, 0x00 ) ;
  147.   LCD_WriteReg( 0xD107, 0x4A ) ;
  148.   LCD_WriteReg( 0xD108, 0x00 ) ;
  149.   LCD_WriteReg( 0xD109, 0x5C ) ;
  150.   LCD_WriteReg( 0xD10A, 0x00 ) ;
  151.   LCD_WriteReg( 0xD10B, 0x81 ) ;
  152.   LCD_WriteReg( 0xD10C, 0x00 ) ;
  153.   LCD_WriteReg( 0xD10D, 0xA6 ) ;
  154.   LCD_WriteReg( 0xD10E, 0x00 ) ;
  155.   LCD_WriteReg( 0xD10F, 0xE5 ) ;
  156.   LCD_WriteReg( 0xD110, 0x01 ) ;
  157.   LCD_WriteReg( 0xD111, 0x13 ) ;
  158.   LCD_WriteReg( 0xD112, 0x01 ) ;
  159.   LCD_WriteReg( 0xD113, 0x54 ) ;
  160.   LCD_WriteReg( 0xD114, 0x01 ) ;
  161.   LCD_WriteReg( 0xD115, 0x82 ) ;
  162.   LCD_WriteReg( 0xD116, 0x01 ) ;
  163.   LCD_WriteReg( 0xD117, 0xCA ) ;
  164.   LCD_WriteReg( 0xD118, 0x02 ) ;
  165.   LCD_WriteReg( 0xD119, 0x00 ) ;
  166.   LCD_WriteReg( 0xD11A, 0x02 ) ;
  167.   LCD_WriteReg( 0xD11B, 0x01 ) ;
  168.   LCD_WriteReg( 0xD11C, 0x02 ) ;
  169.   LCD_WriteReg( 0xD11D, 0x34 ) ;
  170.   LCD_WriteReg( 0xD11E, 0x02 ) ;
  171.   LCD_WriteReg( 0xD11F, 0x67 ) ;
  172.   LCD_WriteReg( 0xD120, 0x02 ) ;
  173.   LCD_WriteReg( 0xD121, 0x84 ) ;
  174.   LCD_WriteReg( 0xD122, 0x02 ) ;
  175.   LCD_WriteReg( 0xD123, 0xA4 ) ;
  176.   LCD_WriteReg( 0xD124, 0x02 ) ;
  177.   LCD_WriteReg( 0xD125, 0xB7 ) ;
  178.   LCD_WriteReg( 0xD126, 0x02 ) ;
  179.   LCD_WriteReg( 0xD127, 0xCF ) ;
  180.   LCD_WriteReg( 0xD128, 0x02 ) ;
  181.   LCD_WriteReg( 0xD129, 0xDE ) ;
  182.   LCD_WriteReg( 0xD12A, 0x02 ) ;
  183.   LCD_WriteReg( 0xD12B, 0xF2 ) ;
  184.   LCD_WriteReg( 0xD12C, 0x02 ) ;
  185.   LCD_WriteReg( 0xD12D, 0xFE ) ;
  186.   LCD_WriteReg( 0xD12E, 0x03 ) ;
  187.   LCD_WriteReg( 0xD12F, 0x10 ) ;
  188.   LCD_WriteReg( 0xD130, 0x03 ) ;
  189.   LCD_WriteReg( 0xD131, 0x33 ) ;
  190.   LCD_WriteReg( 0xD132, 0x03 ) ;
  191.   LCD_WriteReg( 0xD133, 0x6D ) ;
  192.   LCD_WriteReg( 0xD200, 0x00 ) ;
  193.   LCD_WriteReg( 0xD201, 0x33 ) ;
  194.   LCD_WriteReg( 0xD202, 0x00 ) ;
  195.   LCD_WriteReg( 0xD203, 0x34 ) ;
  196.   LCD_WriteReg( 0xD204, 0x00 ) ;
  197.   LCD_WriteReg( 0xD205, 0x3A ) ;
  198.   LCD_WriteReg( 0xD206, 0x00 ) ;
  199.   LCD_WriteReg( 0xD207, 0x4A ) ;
  200.   LCD_WriteReg( 0xD208, 0x00 ) ;
  201.   LCD_WriteReg( 0xD209, 0x5C ) ;
  202.   LCD_WriteReg( 0xD20A, 0x00 ) ;
  203.   LCD_WriteReg( 0xD20B, 0x81 ) ;
  204.   LCD_WriteReg( 0xD20C, 0x00 ) ;
  205.   LCD_WriteReg( 0xD20D, 0xA6 ) ;
  206.   LCD_WriteReg( 0xD20E, 0x00 ) ;
  207.   LCD_WriteReg( 0xD20F, 0xE5 ) ;
  208.   LCD_WriteReg( 0xD210, 0x01 ) ;
  209.   LCD_WriteReg( 0xD211, 0x13 ) ;
  210.   LCD_WriteReg( 0xD212, 0x01 ) ;
  211.   LCD_WriteReg( 0xD213, 0x54 ) ;
  212.   LCD_WriteReg( 0xD214, 0x01 ) ;
  213.   LCD_WriteReg( 0xD215, 0x82 ) ;
  214.   LCD_WriteReg( 0xD216, 0x01 ) ;
  215.   LCD_WriteReg( 0xD217, 0xCA ) ;
  216.   LCD_WriteReg( 0xD218, 0x02 ) ;
  217.   LCD_WriteReg( 0xD219, 0x00 ) ;
  218.   LCD_WriteReg( 0xD21A, 0x02 ) ;
  219.   LCD_WriteReg( 0xD21B, 0x01 ) ;
  220.   LCD_WriteReg( 0xD21C, 0x02 ) ;
  221.   LCD_WriteReg( 0xD21D, 0x34 ) ;
  222.   LCD_WriteReg( 0xD21E, 0x02 ) ;
  223.   LCD_WriteReg( 0xD21F, 0x67 ) ;
  224.   LCD_WriteReg( 0xD220, 0x02 ) ;
  225.   LCD_WriteReg( 0xD221, 0x84 ) ;
  226.   LCD_WriteReg( 0xD222, 0x02 ) ;
  227.   LCD_WriteReg( 0xD223, 0xA4 ) ;
  228.   LCD_WriteReg( 0xD224, 0x02 ) ;
  229.   LCD_WriteReg( 0xD225, 0xB7 ) ;
  230.   LCD_WriteReg( 0xD226, 0x02 ) ;
  231.   LCD_WriteReg( 0xD227, 0xCF ) ;
  232.   LCD_WriteReg( 0xD228, 0x02 ) ;
  233.   LCD_WriteReg( 0xD229, 0xDE ) ;
  234.   LCD_WriteReg( 0xD22A, 0x02 ) ;
  235.   LCD_WriteReg( 0xD22B, 0xF2 ) ;
  236.   LCD_WriteReg( 0xD22C, 0x02 ) ;
  237.   LCD_WriteReg( 0xD22D, 0xFE ) ;
  238.   LCD_WriteReg( 0xD22E, 0x03 ) ;
  239.   LCD_WriteReg( 0xD22F, 0x10 ) ;
  240.   LCD_WriteReg( 0xD230, 0x03 ) ;
  241.   LCD_WriteReg( 0xD231, 0x33 ) ;
  242.   LCD_WriteReg( 0xD232, 0x03 ) ;
  243.   LCD_WriteReg( 0xD233, 0x6D ) ;
  244.   LCD_WriteReg( 0xD300, 0x00 ) ;
  245.   LCD_WriteReg( 0xD301, 0x33 ) ;
  246.   LCD_WriteReg( 0xD302, 0x00 ) ;
  247.   LCD_WriteReg( 0xD303, 0x34 ) ;
  248.   LCD_WriteReg( 0xD304, 0x00 ) ;
  249.   LCD_WriteReg( 0xD305, 0x3A ) ;
  250.   LCD_WriteReg( 0xD306, 0x00 ) ;
  251.   LCD_WriteReg( 0xD307, 0x4A ) ;
  252.   LCD_WriteReg( 0xD308, 0x00 ) ;
  253.   LCD_WriteReg( 0xD309, 0x5C ) ;
  254.   LCD_WriteReg( 0xD30A, 0x00 ) ;
  255.   LCD_WriteReg( 0xD30B, 0x81 ) ;
  256.   LCD_WriteReg( 0xD30C, 0x00 ) ;
  257.   LCD_WriteReg( 0xD30D, 0xA6 ) ;
  258.   LCD_WriteReg( 0xD30E, 0x00 ) ;
  259.   LCD_WriteReg( 0xD30F, 0xE5 ) ;
  260.   LCD_WriteReg( 0xD310, 0x01 ) ;
  261.   LCD_WriteReg( 0xD311, 0x13 ) ;
  262.   LCD_WriteReg( 0xD312, 0x01 ) ;
  263.   LCD_WriteReg( 0xD313, 0x54 ) ;
  264.   LCD_WriteReg( 0xD314, 0x01 ) ;
  265.   LCD_WriteReg( 0xD315, 0x82 ) ;
  266.   LCD_WriteReg( 0xD316, 0x01 ) ;
  267.   LCD_WriteReg( 0xD317, 0xCA ) ;
  268.   LCD_WriteReg( 0xD318, 0x02 ) ;
  269.   LCD_WriteReg( 0xD319, 0x00 ) ;
  270.   LCD_WriteReg( 0xD31A, 0x02 ) ;
  271.   LCD_WriteReg( 0xD31B, 0x01 ) ;
  272.   LCD_WriteReg( 0xD31C, 0x02 ) ;
  273.   LCD_WriteReg( 0xD31D, 0x34 ) ;
  274.   LCD_WriteReg( 0xD31E, 0x02 ) ;
  275.   LCD_WriteReg( 0xD31F, 0x67 ) ;
  276.   LCD_WriteReg( 0xD320, 0x02 ) ;
  277.   LCD_WriteReg( 0xD321, 0x84 ) ;
  278.   LCD_WriteReg( 0xD322, 0x02 ) ;
  279.   LCD_WriteReg( 0xD323, 0xA4 ) ;
  280.   LCD_WriteReg( 0xD324, 0x02 ) ;
  281.   LCD_WriteReg( 0xD325, 0xB7 ) ;
  282.   LCD_WriteReg( 0xD326, 0x02 ) ;
  283.   LCD_WriteReg( 0xD327, 0xCF ) ;
  284.   LCD_WriteReg( 0xD328, 0x02 ) ;
  285.   LCD_WriteReg( 0xD329, 0xDE ) ;
  286.   LCD_WriteReg( 0xD32A, 0x02 ) ;
  287.   LCD_WriteReg( 0xD32B, 0xF2 ) ;
  288.   LCD_WriteReg( 0xD32C, 0x02 ) ;
  289.   LCD_WriteReg( 0xD32D, 0xFE ) ;
  290.   LCD_WriteReg( 0xD32E, 0x03 ) ;
  291.   LCD_WriteReg( 0xD32F, 0x10 ) ;
  292.   LCD_WriteReg( 0xD330, 0x03 ) ;
  293.   LCD_WriteReg( 0xD331, 0x33 ) ;
  294.   LCD_WriteReg( 0xD332, 0x03 ) ;
  295.   LCD_WriteReg( 0xD333, 0x6D ) ;
  296.   LCD_WriteReg( 0xD400, 0x00 ) ;
  297.   LCD_WriteReg( 0xD401, 0x33 ) ;
  298.   LCD_WriteReg( 0xD402, 0x00 ) ;
  299.   LCD_WriteReg( 0xD403, 0x34 ) ;
  300.   LCD_WriteReg( 0xD404, 0x00 ) ;
  301.   LCD_WriteReg( 0xD405, 0x3A ) ;
  302.   LCD_WriteReg( 0xD406, 0x00 ) ;
  303.   LCD_WriteReg( 0xD407, 0x4A ) ;
  304.   LCD_WriteReg( 0xD408, 0x00 ) ;
  305.   LCD_WriteReg( 0xD409, 0x5C ) ;
  306.   LCD_WriteReg( 0xD40A, 0x00 ) ;
  307.   LCD_WriteReg( 0xD40B, 0x81 ) ;
  308.   LCD_WriteReg( 0xD40C, 0x00 ) ;
  309.   LCD_WriteReg( 0xD40D, 0xA6 ) ;
  310.   LCD_WriteReg( 0xD40E, 0x00 ) ;
  311.   LCD_WriteReg( 0xD40F, 0xE5 ) ;
  312.   LCD_WriteReg( 0xD410, 0x01 ) ;
  313.   LCD_WriteReg( 0xD411, 0x13 ) ;
  314.   LCD_WriteReg( 0xD412, 0x01 ) ;
  315.   LCD_WriteReg( 0xD413, 0x54 ) ;
  316.   LCD_WriteReg( 0xD414, 0x01 ) ;
  317.   LCD_WriteReg( 0xD415, 0x82 ) ;
  318.   LCD_WriteReg( 0xD416, 0x01 ) ;
  319.   LCD_WriteReg( 0xD417, 0xCA ) ;
  320.   LCD_WriteReg( 0xD418, 0x02 ) ;
  321.   LCD_WriteReg( 0xD419, 0x00 ) ;
  322.   LCD_WriteReg( 0xD41A, 0x02 ) ;
  323.   LCD_WriteReg( 0xD41B, 0x01 ) ;
  324.   LCD_WriteReg( 0xD41C, 0x02 ) ;
  325.   LCD_WriteReg( 0xD41D, 0x34 ) ;
  326.   LCD_WriteReg( 0xD41E, 0x02 ) ;
  327.   LCD_WriteReg( 0xD41F, 0x67 ) ;
  328.   LCD_WriteReg( 0xD420, 0x02 ) ;
  329.   LCD_WriteReg( 0xD421, 0x84 ) ;
  330.   LCD_WriteReg( 0xD422, 0x02 ) ;
  331.   LCD_WriteReg( 0xD423, 0xA4 ) ;
  332.   LCD_WriteReg( 0xD424, 0x02 ) ;
  333.   LCD_WriteReg( 0xD425, 0xB7 ) ;
  334.   LCD_WriteReg( 0xD426, 0x02 ) ;
  335.   LCD_WriteReg( 0xD427, 0xCF ) ;
  336.   LCD_WriteReg( 0xD428, 0x02 ) ;
  337.   LCD_WriteReg( 0xD429, 0xDE ) ;
  338.   LCD_WriteReg( 0xD42A, 0x02 ) ;
  339.   LCD_WriteReg( 0xD42B, 0xF2 ) ;
  340.   LCD_WriteReg( 0xD42C, 0x02 ) ;
  341.   LCD_WriteReg( 0xD42D, 0xFE ) ;
  342.   LCD_WriteReg( 0xD42E, 0x03 ) ;
  343.   LCD_WriteReg( 0xD42F, 0x10 ) ;
  344.   LCD_WriteReg( 0xD430, 0x03 ) ;
  345.   LCD_WriteReg( 0xD431, 0x33 ) ;
  346.   LCD_WriteReg( 0xD432, 0x03 ) ;
  347.   LCD_WriteReg( 0xD433, 0x6D ) ;
  348.   LCD_WriteReg( 0xD500, 0x00 ) ;
  349.   LCD_WriteReg( 0xD501, 0x33 ) ;
  350.   LCD_WriteReg( 0xD502, 0x00 ) ;
  351.   LCD_WriteReg( 0xD503, 0x34 ) ;
  352.   LCD_WriteReg( 0xD504, 0x00 ) ;
  353.   LCD_WriteReg( 0xD505, 0x3A ) ;
  354.   LCD_WriteReg( 0xD506, 0x00 ) ;
  355.   LCD_WriteReg( 0xD507, 0x4A ) ;
  356.   LCD_WriteReg( 0xD508, 0x00 ) ;
  357.   LCD_WriteReg( 0xD509, 0x5C ) ;
  358.   LCD_WriteReg( 0xD50A, 0x00 ) ;
  359.   LCD_WriteReg( 0xD50B, 0x81 ) ;
  360.   LCD_WriteReg( 0xD50C, 0x00 ) ;
  361.   LCD_WriteReg( 0xD50D, 0xA6 ) ;
  362.   LCD_WriteReg( 0xD50E, 0x00 ) ;
  363.   LCD_WriteReg( 0xD50F, 0xE5 ) ;
  364.   LCD_WriteReg( 0xD510, 0x01 ) ;
  365.   LCD_WriteReg( 0xD511, 0x13 ) ;
  366.   LCD_WriteReg( 0xD512, 0x01 ) ;
  367.   LCD_WriteReg( 0xD513, 0x54 ) ;
  368.   LCD_WriteReg( 0xD514, 0x01 ) ;
  369.   LCD_WriteReg( 0xD515, 0x82 ) ;
  370.   LCD_WriteReg( 0xD516, 0x01 ) ;
  371.   LCD_WriteReg( 0xD517, 0xCA ) ;
  372.   LCD_WriteReg( 0xD518, 0x02 ) ;
  373.   LCD_WriteReg( 0xD519, 0x00 ) ;
  374.   LCD_WriteReg( 0xD51A, 0x02 ) ;
  375.   LCD_WriteReg( 0xD51B, 0x01 ) ;
  376.   LCD_WriteReg( 0xD51C, 0x02 ) ;
  377.   LCD_WriteReg( 0xD51D, 0x34 ) ;
  378.   LCD_WriteReg( 0xD51E, 0x02 ) ;
  379.   LCD_WriteReg( 0xD51F, 0x67 ) ;
  380.   LCD_WriteReg( 0xD520, 0x02 ) ;
  381.   LCD_WriteReg( 0xD521, 0x84 ) ;
  382.   LCD_WriteReg( 0xD522, 0x02 ) ;
  383.   LCD_WriteReg( 0xD523, 0xA4 ) ;
  384.   LCD_WriteReg( 0xD524, 0x02 ) ;
  385.   LCD_WriteReg( 0xD525, 0xB7 ) ;
  386.   LCD_WriteReg( 0xD526, 0x02 ) ;
  387.   LCD_WriteReg( 0xD527, 0xCF ) ;
  388.   LCD_WriteReg( 0xD528, 0x02 ) ;
  389.   LCD_WriteReg( 0xD529, 0xDE ) ;
  390.   LCD_WriteReg( 0xD52A, 0x02 ) ;
  391.   LCD_WriteReg( 0xD52B, 0xF2 ) ;
  392.   LCD_WriteReg( 0xD52C, 0x02 ) ;
  393.   LCD_WriteReg( 0xD52D, 0xFE ) ;
  394.   LCD_WriteReg( 0xD52E, 0x03 ) ;
  395.   LCD_WriteReg( 0xD52F, 0x10 ) ;
  396.   LCD_WriteReg( 0xD530, 0x03 ) ;
  397.   LCD_WriteReg( 0xD531, 0x33 ) ;
  398.   LCD_WriteReg( 0xD532, 0x03 ) ;
  399.   LCD_WriteReg( 0xD533, 0x6D ) ;
  400.   LCD_WriteReg( 0xD600, 0x00 ) ;
  401.   LCD_WriteReg( 0xD601, 0x33 ) ;
  402.   LCD_WriteReg( 0xD602, 0x00 ) ;
  403.   LCD_WriteReg( 0xD603, 0x34 ) ;
  404.   LCD_WriteReg( 0xD604, 0x00 ) ;
  405.   LCD_WriteReg( 0xD605, 0x3A ) ;
  406.   LCD_WriteReg( 0xD606, 0x00 ) ;
  407.   LCD_WriteReg( 0xD607, 0x4A ) ;
  408.   LCD_WriteReg( 0xD608, 0x00 ) ;
  409.   LCD_WriteReg( 0xD609, 0x5C ) ;
  410.   LCD_WriteReg( 0xD60A, 0x00 ) ;
  411.   LCD_WriteReg( 0xD60B, 0x81 ) ;
  412.   LCD_WriteReg( 0xD60C, 0x00 ) ;
  413.   LCD_WriteReg( 0xD60D, 0xA6 ) ;
  414.   LCD_WriteReg( 0xD60E, 0x00 ) ;
  415.   LCD_WriteReg( 0xD60F, 0xE5 ) ;
  416.   LCD_WriteReg( 0xD610, 0x01 ) ;
  417.   LCD_WriteReg( 0xD611, 0x13 ) ;
  418.   LCD_WriteReg( 0xD612, 0x01 ) ;
  419.   LCD_WriteReg( 0xD613, 0x54 ) ;
  420.   LCD_WriteReg( 0xD614, 0x01 ) ;
  421.   LCD_WriteReg( 0xD615, 0x82 ) ;
  422.   LCD_WriteReg( 0xD616, 0x01 ) ;
  423.   LCD_WriteReg( 0xD617, 0xCA ) ;
  424.   LCD_WriteReg( 0xD618, 0x02 ) ;
  425.   LCD_WriteReg( 0xD619, 0x00 ) ;
  426.   LCD_WriteReg( 0xD61A, 0x02 ) ;
  427.   LCD_WriteReg( 0xD61B, 0x01 ) ;
  428.   LCD_WriteReg( 0xD61C, 0x02 ) ;
  429.   LCD_WriteReg( 0xD61D, 0x34 ) ;
  430.   LCD_WriteReg( 0xD61E, 0x02 ) ;
  431.   LCD_WriteReg( 0xD61F, 0x67 ) ;
  432.   LCD_WriteReg( 0xD620, 0x02 ) ;
  433.   LCD_WriteReg( 0xD621, 0x84 ) ;
  434.   LCD_WriteReg( 0xD622, 0x02 ) ;
  435.   LCD_WriteReg( 0xD623, 0xA4 ) ;
  436.   LCD_WriteReg( 0xD624, 0x02 ) ;
  437.   LCD_WriteReg( 0xD625, 0xB7 ) ;
  438.   LCD_WriteReg( 0xD626, 0x02 ) ;
  439.   LCD_WriteReg( 0xD627, 0xCF ) ;
  440.   LCD_WriteReg( 0xD628, 0x02 ) ;
  441.   LCD_WriteReg( 0xD629, 0xDE ) ;
  442.   LCD_WriteReg( 0xD62A, 0x02 ) ;
  443.   LCD_WriteReg( 0xD62B, 0xF2 ) ;
  444.   LCD_WriteReg( 0xD62C, 0x02 ) ;
  445.   LCD_WriteReg( 0xD62D, 0xFE ) ;
  446.   LCD_WriteReg( 0xD62E, 0x03 ) ;
  447.   LCD_WriteReg( 0xD62F, 0x10 ) ;
  448.   LCD_WriteReg( 0xD630, 0x03 ) ;
  449.   LCD_WriteReg( 0xD631, 0x33 ) ;
  450.   LCD_WriteReg( 0xD632, 0x03 ) ;
  451.   LCD_WriteReg( 0xD633, 0x6D ) ;
  452.   //LV2 Page 0 enable
  453.   LCD_WriteReg( 0xF000, 0x55 ) ;
  454.   LCD_WriteReg( 0xF001, 0xAA ) ;
  455.   LCD_WriteReg( 0xF002, 0x52 ) ;
  456.   LCD_WriteReg( 0xF003, 0x08 ) ;
  457.   LCD_WriteReg( 0xF004, 0x00 ) ;
  458.   //Display control
  459.   LCD_WriteReg( 0xB100,  0xCC ) ;
  460.   LCD_WriteReg( 0xB101,  0x00 ) ;
  461.   //Source hold time
  462.   LCD_WriteReg( 0xB600, 0x05 ) ;
  463.   //Gate EQ control
  464.   LCD_WriteReg( 0xB700, 0x70 ) ;
  465.   LCD_WriteReg( 0xB701, 0x70 ) ;
  466.   //Source EQ control ( Mode 2 )
  467.   LCD_WriteReg( 0xB800, 0x01 ) ;
  468.   LCD_WriteReg( 0xB801, 0x03 ) ;
  469.   LCD_WriteReg( 0xB802, 0x03 ) ;
  470.   LCD_WriteReg( 0xB803, 0x03 ) ;
  471.   //Inversion mode ( 2-dot )
  472.   LCD_WriteReg( 0xBC00, 0x02 ) ;
  473.   LCD_WriteReg( 0xBC01, 0x00 ) ;
  474.   LCD_WriteReg( 0xBC02, 0x00 ) ;
  475.   //Timing control 4H w/ 4-delay
  476.   LCD_WriteReg( 0xC900, 0xD0 ) ;
  477.   LCD_WriteReg( 0xC901, 0x02 ) ;
  478.   LCD_WriteReg( 0xC902, 0x50 ) ;
  479.   LCD_WriteReg( 0xC903, 0x50 ) ;
  480.   LCD_WriteReg( 0xC904, 0x50 ) ;
  481.   LCD_WriteReg( 0x3500, 0x00 ) ;
  482.   LCD_WriteReg( 0x3A00, 0x55 ) ;                                    //16-bit/pixel
  483.   LCD->LCD_REG = 0x1100 ;
  484.   delay_us( 120 ) ;
  485.   LCD->LCD_REG = 0x2900 ;
  486.   LCD_Display_Dir() ;                    //默认为竖屏
  487.   LCD_LED = 1 ;                      //点亮背光
  488.   LCD_Clear( WHITE ) ;
  489. }
  490. void LCD_Clear( u16 color )
  491. {
  492.   u32 index = 0 ;
  493.   u32 totalpoint = lcddev.width ;
  494.   totalpoint *= lcddev.height ;                //得到总点数
  495.   LCD_SetCursor( 0, 0 ) ;                    //设置光标位置
  496.   LCD->LCD_REG = lcddev.wramcmd ;              //开始写入GRAM
  497.   for( index=0; index<totalpoint; index++ )
  498.     LCD->LCD_RAM = color ;
  499. }
  500. void LCD_Fast_DrawPoint( u16 x, u16 y, u16 color )
  501. {     
  502.   LCD_WriteReg( lcddev.setxcmd, x>>8 ) ;
  503.   LCD_WriteReg( lcddev.setxcmd+1, x&0xFF ) ;
  504.   LCD_WriteReg( lcddev.setycmd, y>>8 ) ;
  505.   LCD_WriteReg( lcddev.setycmd+1, y&0xFF ) ;
  506.   LCD_WriteReg( lcddev.wramcmd, color ) ;  
  507. }
  508. u16 POINT_COLOR=RED ;                    //画笔颜色
  509. u16 BACK_COLOR=WHITE ;                    //背景色
  510. void LCD_ShowChar( u16 x, u16 y, u8 num )
  511. {                  
  512.     u8 temp, t1, t ;
  513.   u16 y0=y ;
  514.    num = num-' ' ;                      //得到偏移后的值
  515.   for( t=0; t<16; t++ )
  516.   {   
  517.     temp = asc2_1608[ num ][ t ] ;              //调用1608字体
  518.     for( t1=0; t1<8; t1++ )
  519.     {
  520.       if( ( temp&0x80 )==0x80 )
  521.         LCD_Fast_DrawPoint( x, y, POINT_COLOR ) ;
  522.       else
  523.         LCD_Fast_DrawPoint( x, y, BACK_COLOR ) ;
  524.       temp <<= 1 ;
  525.       y ++ ;
  526.       //超区域了
  527.       if( y>=lcddev.height )
  528.         return ;
  529.       if( ( y-y0 )==16 )
  530.       {
  531.         y = y0 ;
  532.         x ++ ;
  533.         //超区域了
  534.         if( x>=lcddev.width )
  535.           return ;
  536.         break ;
  537.       }
  538.     }
  539.   }
  540. }
  541. void LCD_ShowString( u16 x, u16 y, u8 *p )
  542. {
  543.   //判断是不是非法字符
  544.     while( ( *p<='~' )&&( *p>=' ' ) )
  545.     {      
  546.     //退出
  547.         if( ( y>=lcddev.height )||( x>=lcddev.width ) )
  548.       break ;
  549.         LCD_ShowChar( x, y, *p ) ;
  550.         x += 8 ;
  551.         p ++ ;
  552.     }  
  553. }
复制代码
注1:省略的初始化代码是在采购屏幕的时候生产厂家提供的驱动代码,这部分代码包括初始化屏幕的伽马校正以及显示地址增加等功能,可以不去管,只需要复制到初始化的位置即可。


注2:清屏函数LCD_Clear


       清屏其实就是在屏幕中送入白色或者别的颜色,一般都是全部像素点写入白色,该函数也可以用于填充颜色使用,程序中首先通过横坐标点数和纵坐标点数计算出所有像素点的个数,由于初始化中设置了地址自增加功能,所以可以设定开始地址后直接不停的发送白色的数据代码,直到所有像素点全部填充后结束。


注3:显示1个字符函数LCD_ShowChar


       TFTLCD由于内部没有字库,所以所有的英文包括ASCII码,中文都需要自己取模,取模的方式类似于之前的51单片机驱动点阵,这种情况下可以采用厂家提供的现成的代码,或者自己用取模软件直接生成代码,文件中包含的头文件font.h其实就是自己通过软件得到的ASCII码的字符点阵数据。读取点阵的时候,1的位置写入设置的颜色(画笔颜色),0的位置写入背景颜色,当背景颜色和刷屏颜色一样的时候,看起来就像是显示了数据一样(也可以不写入背景颜色,直接在1的位置写入画笔颜色,0的位置不管,这种情况下可以实现字体的透明效果)。


注4:显示字符串函数LCD_ShowString


       显示字符串函数实际就是频繁调用函数LCD_ShowChar,通过while循环来判断字符串的结尾,将结尾之前的数据全部写入后退出循环。有的厂家会提供完整的例程,里面包括显示数字,显示图像,其实本质都是通过判断点阵数据来写入画笔颜色和背景颜色。


(3)创建font.h,自己通过取模软件来添加字符的字模。

  1. #ifndef _FONT_H_
  2. #define _FONT_H_
  3. //常用ASCII表
  4. //阴码+逐列式+顺向+C51格式
  5. const unsigned char asc2_1608[95][16]={   
  6. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
  7. {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
  8. {0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/
  9. {0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/
  10. {0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"[        DISCUZ_CODE_2        ]quot;,4*/
  11. {0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/
  12. {0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/
  13. {0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
  14. {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/
  15. {0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
  16. {0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/
  17. {0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/
  18. {0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
  19. {0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/
  20. {0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
  21. {0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/
  22. {0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/
  23. {0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/
  24. {0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/
  25. {0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/
  26. {0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",20*/
  27. {0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",21*/
  28. {0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",22*/
  29. {0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",23*/
  30. {0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",24*/
  31. {0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/*"9",25*/
  32. {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
  33. {0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
  34. {0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*"<",28*/
  35. {0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00},/*"=",29*/
  36. {0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00},/*">",30*/
  37. {0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00},/*"?",31*/
  38. {0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00},/*"@",32*/
  39. {0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",33*/
  40. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00},/*"B",34*/
  41. {0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00},/*"C",35*/
  42. {0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",36*/
  43. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00},/*"E",37*/
  44. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00},/*"F",38*/
  45. {0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/
  46. {0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04},/*"H",40*/
  47. {0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*"I",41*/
  48. {0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00},/*"J",42*/
  49. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00},/*"K",43*/
  50. {0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",44*/
  51. {0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},/*"M",45*/
  52. {0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00},/*"N",46*/
  53. {0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"O",47*/
  54. {0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00},/*"P",48*/
  55. {0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00},/*"Q",49*/
  56. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04},/*"R",50*/
  57. {0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00},/*"S",51*/
  58. {0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",52*/
  59. {0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00},/*"U",53*/
  60. {0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00},/*"V",54*/
  61. {0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00},/*"W",55*/
  62. {0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04},/*"X",56*/
  63. {0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00},/*"Y",57*/
  64. {0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00},/*"Z",58*/
  65. {0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"[",59*/
  66. {0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00},/*"",60*/
  67. {0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
  68. {0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*"^",62*/
  69. {0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*"_",63*/
  70. {0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
  71. {0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04},/*"a",65*/
  72. {0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"b",66*/
  73. {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*"c",67*/
  74. {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04},/*"d",68*/
  75. {0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00},/*"e",69*/
  76. {0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*"f",70*/
  77. {0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00},/*"g",71*/
  78. {0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"h",72*/
  79. {0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"i",73*/
  80. {0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00},/*"j",74*/
  81. {0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00},/*"k",75*/
  82. {0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"l",76*/
  83. {0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC},/*"m",77*/
  84. {0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"n",78*/
  85. {0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00},/*"o",79*/
  86. {0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"p",80*/
  87. {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01},/*"q",81*/
  88. {0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*"r",82*/
  89. {0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*"s",83*/
  90. {0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*"t",84*/
  91. {0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04},/*"u",85*/
  92. {0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*"v",86*/
  93. {0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/
  94. {0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/
  95. {0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/
  96. {0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/
  97. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/
  98. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
  99. {0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
  100. {0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/
  101. };

  102. #endif
复制代码




1 收藏 1 评论1 发布时间:2020-11-25 17:18

举报

1个回答
mydzxx 回答时间:2020-11-27 10:25:07
写得挺好,作为官网就应该多点这种实际运用的讲解和例程,最好能附上工程文件免费下载就锦上添花啦

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版