3.stm32 LCD

发布者:CrystalRose最新更新时间:2025-03-05 来源: jianshu关键字:stm32  LCD 手机看文章 扫描二维码
随时随地手机看文章

蓝桥杯LCD外设电路

1.OLED与LCD

OLED是有机发光二极管,自发光,不用背光。
“OLED是一种利用多层有机薄膜结构产生电致发光的器件,它很容易制作,而且只需要低的驱动电压,这些主要的特征使得OLED在满足平面显示器的应用上显得非常突出。OLED显示屏比LCD更轻薄、亮度高、功耗低、响应快、清晰度高、柔性好、发光效率高”——来自百度百科
TFTLCD是薄膜晶体管液晶显示器的缩写,名字来源于液晶显示屏每个像素上都设有薄膜晶体管(TFT),亮度高,对比度,有色彩。
“LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。”——来自百度百科

2.8080并口读写数据的过程

设置RS为高(数据)/低(命令),然后拉低片选。
读数据:RD为低,在RD的上升沿去读取数据线上的数据。
写数据:WR为低,在WR的上升沿写数据到数据线上。

在蓝桥杯比赛中调用官方LCD例程开发极为方便。
下面着重叙述几个重要的函数:
首先是显示颜色:White Black Red等常用颜色已经在lcd.h中有宏定义,可以直接使用。
对RGB颜色有额外需求的话,可以访问这个网站【RGB颜色对照表 (917118.com)获取常见的颜色RGB码。

RGB颜色码表




LCD_Clear():用设置的颜色填充整个LCD屏

LCD_SetBackColor():设置背景色

LCD_SetTextColor():设置文字颜色

LCD_DisplayStringLine(Linex,'  文字内容 ');

Linex代表行数,从Line0到Line9,屏幕从上到下分为10行

“”:字符串中填写所要显示的内容,一行显示20个字符。“ ”中的内容如果多于20,则多于内容不显示;若少于20,则空余字符位置显示LCD_Clear()中设置的底层颜色。

总结:LCD屏有10行20列。


引用头文件后


#include 'lcd.h'

即可在主函数main.c中实现LCD功能

显示效果:上半屏幕为蓝色,显示白色字体Hello World;下半屏幕为白色,显示蓝色字体Author: somebody。


int main(void){

  HAL_Init();//重置所有外设,初始化Flash接口,初始化滴答定时器

  SystemClock_config();//设置系统时钟

  MX_GPIO_Init();//初始化IO口

  LCD_Init();//初始化LCD屏幕


  LCD_Clear(White);//清空屏幕,用白色为底色


  LCD_SetBackColor(Blue);//设置行的底色

  LCD_SetTextColor(White);//设置文字颜色

  LCD_DisplayStringLine(Line0, (uint8_t *)'                    ');

  LCD_DisplayStringLine(Line1, (uint8_t *)'                    ');

  LCD_DisplayStringLine(Line2, (uint8_t *)'      Hello World         ');

  LCD_DisplayStringLine(Line3, (uint8_t *)'                    ');

  LCD_DisplayStringLine(Line4, (uint8_t *)'                    ');

    

  LCD_SetBackColor(White);//设置行的颜色

  LCD_SetTextColor(Blue);//设置文字颜色

  LCD_DisplayStringLine(Line5, (uint8_t *)'                    ');

  LCD_DisplayStringLine(Line6, (uint8_t *)'       Author:      ');

  LCD_DisplayStringLine(Line7, (uint8_t *)'                    ');

  LCD_DisplayStringLine(Line8, (uint8_t *)'         somebody       ');

  LCD_DisplayStringLine(Line9, (uint8_t *)'                    ');

    

  while(1){

  

  }}

lcd.h文件整体如下:


/* Define to prevent recursive inclusion -------------------------------------*/#ifndef __LCD_H#define __LCD_H/* Includes ------------------------------------------------------------------*/#include 'main.h'/* Exported types ------------------------------------------------------------*//* Exported constants --------------------------------------------------------*//* LCD Registers */#define R0             0x00#define R1             0x01#define R2             0x02#define R3             0x03#define R4             0x04#define R5             0x05#define R6             0x06#define R7             0x07#define R8             0x08#define R9             0x09#define R10            0x0A#define R12            0x0C#define R13            0x0D#define R14            0x0E#define R15            0x0F#define R16            0x10#define R17            0x11#define R18            0x12#define R19            0x13#define R20            0x14#define R21            0x15#define R22            0x16#define R23            0x17#define R24            0x18#define R25            0x19#define R26            0x1A#define R27            0x1B#define R28            0x1C#define R29            0x1D#define R30            0x1E#define R31            0x1F#define R32            0x20#define R33            0x21#define R34            0x22#define R36            0x24#define R37            0x25#define R40            0x28#define R41            0x29#define R43            0x2B#define R45            0x2D#define R48            0x30#define R49            0x31#define R50            0x32#define R51            0x33#define R52            0x34#define R53            0x35#define R54            0x36#define R55            0x37#define R56            0x38#define R57            0x39#define R59            0x3B#define R60            0x3C#define R61            0x3D#define R62            0x3E#define R63            0x3F#define R64            0x40#define R65            0x41#define R66            0x42#define R67            0x43#define R68            0x44#define R69            0x45#define R70            0x46#define R71            0x47#define R72            0x48#define R73            0x49#define R74            0x4A#define R75            0x4B#define R76            0x4C#define R77            0x4D#define R78            0x4E#define R79            0x4F#define R80            0x50#define R81            0x51#define R82            0x52#define R83            0x53#define R96            0x60#define R97            0x61#define R106           0x6A#define R118           0x76#define R128           0x80#define R129           0x81#define R130           0x82#define R131           0x83#define R132           0x84#define R133           0x85#define R134           0x86#define R135           0x87#define R136           0x88#define R137           0x89#define R139           0x8B#define R140           0x8C#define R141           0x8D#define R143           0x8F#define R144           0x90#define R145           0x91#define R146           0x92#define R147           0x93#define R148           0x94#define R149           0x95#define R150           0x96#define R151           0x97#define R152           0x98#define R153           0x99#define R154           0x9A#define R157           0x9D#define R192           0xC0#define R193           0xC1#define R227           0xE3#define R229           0xE5#define R231           0xE7#define R239           0xEF/* LCD Control pins *///#define CtrlPin_NCS    GPIO_Pin_9   /* PB.9 *///#define CtrlPin_RS     GPIO_Pin_8   /* PB.8 *///#define CtrlPin_NWR    GPIO_Pin_5  /* Pb.5 *///#define CtrlPin_NRD    GPIO_Pin_10  /* Pb.10 *//* LCD color */#define White          0xFFFF#define Black          0x0000#define Grey           0xF7DE#define Blue           0x001F#define Blue2          0x051F#define Red            0xF800#define Magenta        0xF81F#define Green          0x07E0#define Cyan           0x7FFF#define Yellow         0xFFE0#define Line0          0#define Line1          24#define Line2          48#define Line3          72#define Line4          96#define Line5          120#define Line6          144#define Line7          168#define Line8          192#define Line9          216#define Horizontal     0x00#define Vertical       0x01/* Exported macro ------------------------------------------------------------*//* Exported functions ------------------------------------------------------- *//*----- High layer function -----*/typedef int32_t  s32;typedef int16_t s16;typedef int8_t  s8;typedef __IO uint32_t  vu32;typedef __IO uint16_t vu16;typedef __IO uint8_t  vu8;typedef uint32_t  u32;typedef uint16_t u16;typedef uint8_t  u8;typedef const uint32_t uc32;  /*!< Read Only */typedef const uint16_t uc16;  /*!< Read Only */typedef const uint8_t uc8;   /*!< Read Only */void LCD_Init(void);void LCD_SetTextColor(vu16 Color);void LCD_SetBackColor(vu16 Color);void LCD_ClearLine(u8 Line);void LCD_Clear(u16 Color);void LCD_SetCursor(u8 Xpos, u16 Ypos);void LCD_DrawChar(u8 Xpos, u16 Ypos, uc16 *c);void LCD_DisplayChar(u8 Line, u16 Column, u8 Ascii);void LCD_DisplayStringLine(u8 Line, u8 *ptr);void LCD_SetDisplayWindow(u8 Xpos, u16 Ypos, u8 Height, u16 Width);void LCD_WindowModeDisable(void);void LCD_DrawLine(u8 Xpos, u16 Ypos, u16 Length, u8 Direction);void LCD_DrawRect(u8 Xpos, u16 Ypos, u8 Height, u16 Width);void LCD_DrawCircle(u8 Xpos, u16 Ypos, u16 Radius);void LCD_DrawMonoPict(uc32 *Pict);void LCD_WriteBMP(u32 BmpAddress);void LCD_DrawBMP(u32 BmpAddress);void LCD_DrawPicture(const u8* picture);/*----- Medium layer function -----*/void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);u16 LCD_ReadReg(u8 LCD_Reg);void LCD_WriteRAM_Prepare(void);void LCD_WriteRAM(u16 RGB_Code);u16 LCD_ReadRAM(void);void LCD_PowerOn(void);void LCD_DisplayOn(void);void LCD_DisplayOff(void);/*----- Low layer function -----*/void LCD_CtrlLinesConfig(void);void LCD_BusIn(void);void LCD_BusOut(void);#endif /* __LCD_H *//******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/

[1] [2] [3] [4] [5]
关键字:stm32  LCD 引用地址:3.stm32 LCD

上一篇:4.stm32 ADC与DAC
下一篇:2.stm32串口

推荐阅读最新更新时间:2026-02-20 13:46

STM32用FSMC点亮LCD
FSMC是Flexible static memory controller(可变静态存储控制器)的简称,是STM32系列采用的一种新型的存储器扩展技术,支持SRAM、Nor Flash、LCD、PSRAM、NAND Flash、PC Card等。只在某些芯片上有,使用前要查看对应的手册确定。 在FSMC的角度来看,外部存储分成了4个固定的大小为256MB的bank。 Bank1分成了4个子bank,每一个64MB大小,并且每个bank都有独立的片选,用来控制Nor Flash、RAM、PSRAM。Bank2和Bank3用来控制NAND Flash。Bank4控制PC Card。 不同的Bank共享了地址、数据、读、写
[单片机]
STM32 通过 I2C PCF8574 使用 4线LCD1602不显示文字?
问题产生环境和现象: 1、STM32F1 MCU 中通过GPIOA使用PA6、 PA7实现I2C通信,I2C通信部分代码测试没有问题; 2、LCD1602接3.3V,SCL、SDA分别接STM32F1的PA6和PA7引脚,PA7有电压; 3、1602屏亮,MCU下载程序后,1026会闪一下屏,之后一直亮屏无文字。 问题原因: LCD1602对显示比度不对,即文字和屏底色一样了。 问题解决: LCD1602 屏后有个旋钮,用螺丝刀调整一下即可。
[单片机]
STM32单片机学习笔记(1):LCD1602
项目简介 利用CubMX生成基于32单片机的HAl库工程,然后编写程序在Proteus上仿真验证,首先是对LCD1602的学习。 硬件模块 STM32F103R4 LCD1602 74HC373缓存驱动芯片 软件工具 CubMX Proteus Keil 电路连接图 工作流程 首先创建好一个CubaMX工程,设置好PC0--PC7为LCD1602的8个数据位 PB0--PB2分别为LCD1602的片选位,读写位和使能位 然后设置时钟,仿真的话最好还是用内部时钟,因为后面如果需要串口通信,外部时钟可能会出现一些错误 其余根据自己习惯即可 然后进入生成的KEIL工程,编写好相应程序即可,主要程序代
[单片机]
<font color='red'>STM32</font>单片机学习笔记(1):<font color='red'>LCD</font>1602
如何将ADC与带有LCDstm32 Discovery板一起使用
步骤1:ADC 使用HAL Cube,ADC的实现非常简单(在第1部分中提到)。 我正在使用 12位ADC模块 ADC预分频器= 8 转换数= 1 ADC分辨率= 128 采样时间为112个周期。 我们还可以将ADC与DMA一起使用。用于它的IRQ处理程序是 HAL_DMA_IRQHandler(AdcHandle.DMA_Handle) ,其中AdcHandle是ADC_HandleTypeDef类型。 要显示ADC值,我们必须使用uint32t uhADCxConvertedValue的外部值。它将值从0转换为4096(2 ^ 12),因此如果要显示从0开始的电压-3V,我们必须做简单的计算 uhADCxConverted
[单片机]
如何将ADC与带有<font color='red'>LCD</font>的<font color='red'>stm32</font> Discovery板一起使用
STM32入门学习笔记之TFTLCD显示实验1
10.1 概述 之前在51为核心的系统里面,常用的显示器件有LED,数码管,LCD1602和LCD12864,这些器件都有一个共同的特点,那就是只有一个颜色,没有办法显示彩色图片,为了显示彩色图片,我们引入了TFT显示模组。TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:ThinFilmTransistor-Liquid Crystal Display。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。 目前常用的TFT显
[单片机]
<font color='red'>STM32</font>入门学习笔记之TFT<font color='red'>LCD</font>显示实验1
深度解析STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 01驱动流程 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信号
[单片机]
深度解析<font color='red'>STM32</font>驱动<font color='red'>LCD</font>原理
STM32是如何驱动LCD的?
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 ▲驱动流程01 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信
[单片机]
<font color='red'>STM32</font>是如何驱动<font color='red'>LCD</font>的?
嵌入式开发:STM32 FSMC接口驱动TFT-LCD设计
TFT-LCD技术是微电子技术和LCD技术巧妙结合的高新技术。随着人们对图像清晰度、刷新率、保真度的要求越来越高,TFT-LCD的应用范围越来越广。本文提出了一种能直接驱动数字液晶屏的设计方案,方案先介绍了TFT数字彩屏的工作原理,利用STM32处理器的FSMC接口设计的硬件电路和软件程序均能对显示控制芯片进行有效的控制。在实际应用中显示清晰流畅,并且CPU有足够的时间来处理用户程序。该方案能成功应用在电脑横机的人机界面显示中,且其硬件电路结构简单、控制方式灵活、对于其他型号的接口芯片也能提供参考。 0 引言 随着电子产品的不断更新,各种显示界面的开发越来越多,由于TFT彩屏的性价比高,因而被广泛用在各种电子设备上作为显示屏。目前
[单片机]
嵌入式开发:<font color='red'>STM32</font> FSMC接口驱动TFT-<font color='red'>LCD</font>设计
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved