/* ****************************************************************************** * @file HAL_LCD.h * @version V1.0.0 * @date 2020 * @brief Header file of lcd HAL module. ****************************************************************************** */ #ifndef __HAL_LCD_H__ #define __HAL_LCD_H__ #include "ACM32Fxx_HAL.h" /******************************************************************************/ /* */ /* LCD Controller (LCD) */ /* */ /******************************************************************************/ /******************************************************************************/ /* Peripheral Registers Bits Definition */ /******************************************************************************/ /******************* Bit definition for LCD_CR0 register *********************/ #define LCD_CR0_LCDEN_Pos (0U) #define LCD_CR0_LCDEN_Msk (0x1UL << LCD_CR0_LCDEN_Pos) #define LCD_CR0_LCDEN LCD_CR0_LCDEN_Msk #define LCD_CR0_LCDCLK_Pos (1U) #define LCD_CR0_LCDCLK_Msk (0x7UL << LCD_CR0_LCDCLK_Pos) #define LCD_CR0_LCDCLK LCD_CR0_LCDCLK_Msk #define LCD_CR0_LCDCLK_0 (0x1UL << LCD_CR0_LCDCLK_Pos) #define LCD_CR0_LCDCLK_1 (0x2UL << LCD_CR0_LCDCLK_Pos) #define LCD_CR0_STATIC_Pos (4U) #define LCD_CR0_STATIC_Msk (0x1UL << LCD_CR0_STATIC_Pos) #define LCD_CR0_STATIC LCD_CR0_STATIC_Msk #define LCD_CR0_BIAS_Pos (5U) #define LCD_CR0_BIAS_Msk (0x3UL << LCD_CR0_BIAS_Pos) #define LCD_CR0_BIAS LCD_CR0_BIAS_Msk #define LCD_CR0_BIAS_0 (0x1UL << LCD_CR0_BIAS_Pos) #define LCD_CR0_BIAS_1 (0x2UL << LCD_CR0_BIAS_Pos) #define LCD_CR0_DUTY_Pos (7U) #define LCD_CR0_DUTY_Msk (0x7UL << LCD_CR0_DUTY_Pos) #define LCD_CR0_DUTY LCD_CR0_DUTY_Msk #define LCD_CR0_DUTY_0 (0x1UL << LCD_CR0_DUTY_Pos) #define LCD_CR0_DUTY_1 (0x2UL << LCD_CR0_DUTY_Pos) #define LCD_CR0_DUTY_2 (0x4UL << LCD_CR0_DUTY_Pos) #define LCD_CR0_MOD_Pos (11U) #define LCD_CR0_MOD_Msk (0x3UL << LCD_CR0_MOD_Pos) #define LCD_CR0_MOD LCD_CR0_MOD_Msk #define LCD_CR0_MOD_0 (0x1UL << LCD_CR0_MOD_Pos) #define LCD_CR0_MOD_1 (0x2UL << LCD_CR0_MOD_Pos) #define LCD_CR0_CONTRAST_Pos (13U) #define LCD_CR0_CONTRAST_Msk (0xfUL << LCD_CR0_CONTRAST_Pos) #define LCD_CR0_CONTRAST LCD_CR0_CONTRAST_Msk #define LCD_CR0_CONTRAST_0 (0x1UL << LCD_CR0_CONTRAST_Pos) #define LCD_CR0_CONTRAST_1 (0x2UL << LCD_CR0_CONTRAST_Pos) #define LCD_CR0_CONTRAST_2 (0x4UL << LCD_CR0_CONTRAST_Pos) #define LCD_CR0_CONTRAST_3 (0x8UL << LCD_CR0_CONTRAST_Pos) #define LCD_CR0_WSEL_Pos (17U) #define LCD_CR0_WSEL_Msk (0x1UL << LCD_CR0_WSEL_Pos) #define LCD_CR0_WSEL LCD_CR0_WSEL_Msk /******************* Bit definition for LCD_CR1 register *********************/ #define LCD_CR1_BLINKCNT_Pos (0U) #define LCD_CR1_BLINKCNT_Msk (0x3FUL << LCD_CR1_BLINKCNT_Pos) #define LCD_CR1_BLINKCNT LCD_CR1_BLINKCNT_Msk #define LCD_CR1_BLINKEN_Pos (6U) #define LCD_CR1_BLINKEN_Msk (0x1UL << LCD_CR1_BLINKEN_Pos) #define LCD_CR1_BLINKEN LCD_CR1_BLINKEN_Msk #define LCD_CR1_MODE_Pos (8U) #define LCD_CR1_MODE_Msk (0x1UL << LCD_CR1_MODE_Pos) #define LCD_CR1_MODE LCD_CR1_MODE_Msk #define LCD_CR1_IE_Pos (9U) #define LCD_CR1_IE_Msk (0x1UL << LCD_CR1_IE_Pos) #define LCD_CR1_IE LCD_CR1_IE_Msk #define LCD_CR1_DMAEN_Pos (10U) #define LCD_CR1_DMAEN_Msk (0x1UL << LCD_CR1_DMAEN_Pos) #define LCD_CR1_DMAEN LCD_CR1_DMAEN_Msk #define LCD_CR1_INTF_Pos (11U) #define LCD_CR1_INTF_Msk (0x1UL << LCD_CR1_INTF_Pos) #define LCD_CR1_INTF LCD_CR1_INTF_Msk #define LCD_CR1_FCC_Pos (12U) #define LCD_CR1_FCC_Msk (0x1UL << LCD_CR1_FCC_Pos) #define LCD_CR1_FCC LCD_CR1_FCC_Msk #define LCD_CR1_MODSEL_Pos (13U) #define LCD_CR1_MODSEL_Msk (0x3UL << LCD_CR1_MODSEL_Pos) #define LCD_CR1_MODSEL LCD_CR1_MODSEL_Msk #define LCD_CR1_MODSEL_0 (0x1UL << LCD_CR1_MODSEL_Pos) #define LCD_CR1_MODSEL_1 (0x2UL << LCD_CR1_MODSEL_Pos) #define LCD_CR1_RSEL_Pos (15U) #define LCD_CR1_RSEL_Msk (0x1UL << LCD_CR1_RSEL_Pos) #define LCD_CR1_RSEL LCD_CR1_RSEL_Msk #define LCD_CR1_PON_Pos (13U) #define LCD_CR1_PON_Msk (0x3fUL << LCD_CR1_PON_Pos) #define LCD_CR1_PON LCD_CR1_PON_Msk /******************* Bit definition for LCD_CR1 register *********************/ #define LCD_INTCLR_INTF_Pos (10U) #define LCD_INTCLR_INTF_Msk (0x1UL << LCD_INTCLR_INTF_Pos) #define LCD_INTCLR_INTFT LCD_INTCLR_INTF_Msk /** * @brief LCD SegCom Init structure definition */ typedef struct { uint32_t SEG0_31; /*!< Configures the SEG0 to SEG31 Enable or Disable. This parameter can be a value between 0x0 and 0xFFFFFFFF */ union{ uint32_t SEG32_39_COM0_8; /*!< Configures the SEG32-35 and COM0-8 Enable or Disable. This parameter can be a value between 0x0 and 0xFFF */ struct { uint32_t SEG32_35 :4; /*!< Configures the SEG32-35 Enable or Disable. This parameter can be a value between 0x0 and 0xF */ uint32_t SEG36_COM7 :1; /*!< Configures the SEG36/COM7 Enable or Disable. */ uint32_t SEG37_COM6 :1; /*!< Configures the SEG37/COM6 Enable or Disable. */ uint32_t SEG38_COM5 :1; /*!< Configures the SEG38/COM5 Enable or Disable. */ uint32_t SEG39_COM4 :1; /*!< Configures the SEG39/COM4 Enable or Disable. */ uint32_t COM0_3 :4; /*!< Configures the COM0-3 Enable or Disable. This parameter can be a value between 0x0 and 0xF */ }SEGCOM_bit; }Stc_SEG32_39_COM0_8; }LCD_SegComInitTypeDef; /** * @brief LCD Init structure definition */ typedef struct { uint32_t PONTime; /*!< Configures the Pulse ON duration time. This parameter can be a value between 0x00 and 0x3F */ uint32_t BiasRes; /*!< Configures the LCD BiasRes. This parameter can be one value of @ref BiasRes */ uint32_t DriveMod; /*!< Configures the LCD DriveMod. This parameter can be one value of @ref DriveMod */ uint32_t FastCharge; /*!< Configures the LCD FastCharge. This parameter can be one value of @ref FastCharge */ uint32_t Contrast; /*!< Configures the LCD Contrast. This parameter can be one value of @ref LCD_Contrast */ }LCD_InResInitTypeDef; /** * @brief LCD Init structure definition */ typedef struct { uint32_t Duty; /*!< Configures the LCD Duty. This parameter can be one value of @ref LCD_Duty */ uint32_t Bias; /*!< Configures the LCD Bias. This parameter can be one value of @ref LCD_Bias */ uint32_t Driving_Waveform; /*!< Configures the LCD Drive Waveform. This parameter can be one value of @ref Driving_Waveform */ uint32_t BiasSrc; /*!< Configures the LCD Bias Src. This parameter can be one value of @ref BiasSrc*/ uint32_t DisplayMode; /*!< Configures the LCD DisplayMode. This parameter can be one value of @ref DisplayMode*/ uint32_t StaticPower; /*!< Configures the LCD StaticPower. This parameter can be one value of @ref StaticPower*/ uint32_t LCDFrequency; /*!< Configures the LCD LCDFrequency. This parameter can be one value of @ref LCDFrequency*/ uint32_t BlinkEN; /*!< Configures the LCD BlinkEN. This parameter can be one value of @ref BlinkEN */ uint32_t BlinkFrequency; /*!< Configures the LCD Blink frequency. This parameter can be a value between 0x00 and 0x3F */ }LCD_InitTypeDef; /** * @brief LCD handle Structure definition */ typedef struct { LCD_TypeDef *Instance; /* LCD registers base address */ LCD_InitTypeDef Init; /* LCD communication parameters */ DMA_HandleTypeDef *DMA_Handle; /*!< UART Rx DMA handle parameters */ }LCD_HandleTypeDef; #define IS_LCD_PERIPH(PERIPH) (((PERIPH) == LCD)) /** @defgroup LCD_Duty LCD Duty * @{ */ #define LCD_DUTY_STATIC ((uint32_t)0x00000000U) /*!< Static duty */ #define LCD_DUTY_1_2 LCD_CR0_DUTY_0 /*!< 1/2 duty */ #define LCD_DUTY_1_3 LCD_CR0_DUTY_1 /*!< 1/3 duty */ #define LCD_DUTY_1_4 ((LCD_CR0_DUTY_1 | LCD_CR0_DUTY_0)) /*!< 1/4 duty */ #define LCD_DUTY_1_6 ((LCD_CR0_DUTY_2 | LCD_CR0_DUTY_0)) /*!< 1/6 duty */ #define LCD_DUTY_1_8 ((LCD_CR0_DUTY_2 | LCD_CR0_DUTY_1 | LCD_CR0_DUTY_0)) /*!< 1/8 duty */ #define IS_LCD_DUTY(DUTY) (((DUTY) == LCD_DUTY_STATIC) || \ ((DUTY) == LCD_DUTY_1_2) || \ ((DUTY) == LCD_DUTY_1_3) || \ ((DUTY) == LCD_DUTY_1_4) || \ ((DUTY) == LCD_DUTY_1_6) || \ ((DUTY) == LCD_DUTY_1_8)) /** * @} */ /** * @} */ /** @defgroup LCD_Bias LCD Bias * @{ */ #define LCD_BIAS_1_4 ((uint32_t)0x00000000U) /*!< 1/4 Bias */ #define LCD_BIAS_1_2 LCD_CR0_BIAS_0 /*!< 1/2 Bias */ #define LCD_BIAS_1_3 LCD_CR0_BIAS_1 /*!< 1/3 Bias */ #define IS_LCD_BIAS(__BIAS__) (((__BIAS__) == LCD_BIAS_1_4) || \ ((__BIAS__) == LCD_BIAS_1_2) || \ ((__BIAS__) == LCD_BIAS_1_3)) /** * @} */ /** @defgroup Driving_Waveform Driving_Waveform * @{ */ #define LCD_Driving_Waveform_A ((uint32_t)0x00000000U) /*!< A类波形*/ #define LCD_Driving_Waveform_B LCD_CR0_WSEL /*!< B类波形 */ #define IS_LCD_Driving_Waveform(__Driving_Waveform__) (((__Driving_Waveform__) == LCD_Driving_Waveform_A) || \ ((__Driving_Waveform__) == LCD_Driving_Waveform_B)) /** * @} */ /** @defgroup BiasSrc * @{ */ #define LCD_BiasSrc_InRes_Seg31_35_Normal ((uint32_t)0x00000000U) /*!< LCD Bias来源:内部电阻分压,且SEG31-35可以作为SEG/IO*/ #define LCD_BiasSrc_InRes_Seg31_35_Cap LCD_CR0_MOD_0 /*!< LCD Bias来源:内部电阻分压,且SEG31-35用于外接电容滤波,SEG/IO功能关闭 */ #define LCD_BiasSrc_ExRes_Seg31_35_Cap LCD_CR0_MOD_1 /*!< LCD Bias来源:外部电阻分压,且SEG31-35用于外接分压电阻和滤波电容,SEG/IO功能关闭 */ #define IS_LCD_BiasSrc(__BiasSrc__) (((__BiasSrc__) == LCD_BiasSrc_InRes_Seg31_35_Normal) || \ ((__BiasSrc__) == LCD_BiasSrc_InRes_Seg31_35_Cap)||\ ((__BiasSrc__) == LCD_BiasSrc_ExRes_Seg31_35_Cap)) /** * @} */ /** @defgroup DisplayMode * @{ */ #define LCD_DisplayMode_0 ((uint32_t)0x00000000U) /*!< LCD RAM显示模式0*/ #define LCD_DisplayMode_1 LCD_CR1_MODE /*!< LCD RAM显示模式1 */ #define IS_LCD_DisplayMode(__DisplayMode__) (((__DisplayMode__) == LCD_DisplayMode_0)||\ ((__DisplayMode__) == LCD_DisplayMode_1)) /** * @} */ /** @defgroup StaticPower * @{ */ #define LCD_StaticPower_NormalPower ((uint32_t)0x00000000U) /*!< LCD RAM显示模式0*/ #define LCD_StaticPower_LowPower LCD_CR0_STATIC /*!< LCD RAM显示模式1 */ #define IS_LCD_StaticPower(__StaticPower__) (((__StaticPower__) == LCD_StaticPower_NormalPower) || \ ((__StaticPower__) == LCD_StaticPower_LowPower)) /** * @} */ /** @defgroup LCDFrequency * @{ */ #define LCD_LCDFrequency_64HZ ((uint32_t)0x00000000U) /*!< LCD扫描频率选择*/ #define LCD_LCDFrequency_128HZ LCD_CR0_LCDCLK_0 /*!< LCD扫描频率选择 */ #define LCD_LCDFrequency_256HZ LCD_CR0_LCDCLK_1 /*!< LCD扫描频率选择 */ #define LCD_LCDFrequency_512HZ ((LCD_CR0_LCDCLK_0 | LCD_CR0_LCDCLK_1)) /*!< LCD扫描频率选择*/ #define IS_LCD_LCDFrequency(__LCDFrequency__) (((__LCDFrequency__) == LCD_LCDFrequency_64HZ) || \ ((__LCDFrequency__) == LCD_LCDFrequency_128HZ)||\ ((__LCDFrequency__) == LCD_LCDFrequency_256HZ)||\ ((__LCDFrequency__) == LCD_LCDFrequency_512HZ)) /** * @} */ /** @defgroup BlinkEN * @{ */ #define LCD_BlinkEN_Disable ((uint32_t)0x00000000U) /*!