STM32F407笔记——LCD

从LCD开始,应该算是stm32的进阶玩法了,可以通过驱动程序,点亮液晶显示屏,实现一些业务功能。前面所学的USART,SPI,I2C,SRAM,FLASH,FSMC等等外设就可以慢慢逐步登场发挥其能力了。

说到显示屏,再回忆以下,目前的主流的显示有LCD液晶显示和OLED显示,而日后将会是OLED的天下,因为其种种特点(具体什么忘记了,但肯定有一点,就是其自带发光源led)。但目前主流的仍是LCD。

LCD这一部分主要用到了FSMC存储器管理器来模拟LCD本有的8080时序(类似FSMC管理SRAM),其次还用到USART串口作为调试工具。可以实现的功能有:
1.显示一个像素点
2.显示直线、矩形、圆形
3.显示中英文(可任意大小)
4.
5…

配置一个LCD使其初始化主要有:
1.初始化并且使能GPIO、FSMC、USART
2.初始化LCD寄存器
static void ILI9806G_REG_Config ( void ),一般显示器厂商会附带其驱动指令,只需加入此函数即可。
3.读写数据

__inline void ILI9806G_Write_Cmd ( uint16_t usCmd )
{
   
	* ( __IO uint16_t * ) ( FSMC_Addr_ILI9806G_CMD ) = usCmd;
	
}
__inline void ILI9806G_Write_Data ( uint16_t usData )
{
   
	* ( __IO uint16_t * ) ( FSMC_Addr_ILI9806G_DATA ) = usData;
	
}
__inline uint16_t ILI9806G_Read_Data ( void )
{
   
	return ( * ( __IO uint16_t * ) ( FSMC_Addr_ILI9806G_DATA ) );
	
}

扩展其业务功能主要用到的函数有:
(1)基础函数

//点亮一个像素点
void ILI9806G_SetPointPixel ( uint16_t usX, uint16_t usY )	
{
   	
	if ( ( usX < LCD_X_LENGTH ) && ( usY < LCD_Y_LENGTH ) )
  {
   
		ILI9806G_SetCursor ( usX, usY );
		
		ILI9806G_FillColor ( 1, CurrentTextColor );
	}
	
}
//填充像素点
static __inline void ILI9806G_FillColor ( uint32_t ulAmout_Point, uint16_t usColor )
{
   
	uint32_t i = 0;
	
	
	/* memory write */
	ILI9806G_Write_Cmd ( CMD_SetPixel );	
		
	for ( i = 0; i < ulAmout_Point; i ++ )
		ILI9806G_Write_Data ( usColor );
}
//设置像素点光标
static void ILI9806G_SetCursor ( uint16_t usX, uint16_t usY )	
{
   
	ILI9806G_OpenWindow ( usX, usY, 1, 1 );
}

其次还有一个主要的函数就是设置窗口大小,其作用就是向LCD发送命令,使其对一定大小的屏幕初始化,使其可以写入数据到LCD。

void ILI9806G_OpenWindow ( uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight )
{
   	
	ILI9806G_Write_Cmd ( CMD_SetCoordinateX ); 				
	ILI9806G_Write_Data ( usX 

你可能感兴趣的:(stm32,嵌入式)