/** ****************************************************************************** * @file fm33a0xxev_lcd.c * @author FM33A0XXEV Application Team * @version V1.0.0 * @date 16-April-2020 * @brief This file provides firmware functions to manage the following * functionalities of....: * */ /* Includes ------------------------------------------------------------------*/ #include "fm33a0xxev_lcd.h" /** @addtogroup fm33a0xxev_StdPeriph_Driver * @{ */ /** @defgroup LCD * @brief LCD driver modules * @{ */ /* µçÈÝÇý¶¯Ä£Ê½£¬Çý¶¯ÆµÂÊ 000£ºÆµÂÊΪ֡Ƶ*COMÊý 001£ºÆµÂÊΪLSCLK/8 010£ºÆµÂÊΪLSCLK/16 011£ºÆµÂÊΪLSCLK/32 100£ºÆµÂÊΪLSCLK/64 101£ºÆµÂÊΪLSCLK/128 110£ºÆµÂÊΪLSCLK/256 111£ºÆµÂÊΪLSCLK/512Ïà¹Øº¯Êý */ void LCD_CR_SCSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_SCSEL_Msk); tmpreg |= (SetValue & LCD_CR_SCSEL_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_SCSEL_Get(void) { return (LCD->CR & LCD_CR_SCSEL_Msk); } /* µçÈÝÇý¶¯Ä£Ê½£¬Çý¶¯·½Ê½¿ØÖÆ 00£ºµ¥´ÎÇý¶¯ 01£ºÁ¬ÐøÇý¶¯2´Î 10£ºÁ¬ÐøÇý¶¯4´Î 11£º¶à´ÎÇý¶¯ Ïà¹Øº¯Êý */ void LCD_CR_SC_CTRL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_SC_CTRL_Msk); tmpreg |= (SetValue & LCD_CR_SC_CTRL_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_SC_CTRL_Get(void) { return (LCD->CR & LCD_CR_SC_CTRL_Msk); } /* Æ«Öõç·ÊäÈëµçÁ÷Ô´´óС¿ØÖÆ (Input bias Current Control) 00£ºµçÁ÷×î´ó 01£ºµçÁ÷´Î´ó 10£ºµçÁ÷´ÎС 11£ºµçÁ÷×îС Ïà¹Øº¯Êý */ void LCD_CR_IC_CTRL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_IC_CTRL_Msk); tmpreg |= (SetValue & LCD_CR_IC_CTRL_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_IC_CTRL_Get(void) { return (LCD->CR & LCD_CR_IC_CTRL_Msk); } /* Çý¶¯Ä£Ê½Ñ¡Ôñ (LCD Enabling Mode) 0£ºRFU 1£ºÆ¬ÄÚµç×èÐÍÇý¶¯ Ïà¹Øº¯Êý */ void LCD_CR_ENMODE_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_ENMODE_Msk); tmpreg |= (SetValue & LCD_CR_ENMODE_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_ENMODE_Get(void) { return (LCD->CR & LCD_CR_ENMODE_Msk); } /* ÏÔʾÉÁ˸ʹÄÜλ (LCD Flick Enable) 1£ºÏÔʾÉÁ˸£¬ÉÁ˸ƵÂÊÓÉTONºÍTOFF¼Ä´æÆ÷ÉèÖà 0£º¹Ø±ÕÉÁ˸ Ïà¹Øº¯Êý */ void LCD_CR_FLICK_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->CR |= (LCD_CR_FLICK_Msk); } else { LCD->CR &= ~(LCD_CR_FLICK_Msk); } } FunState LCD_CR_FLICK_Getable(void) { if (LCD->CR & (LCD_CR_FLICK_Msk)) { return ENABLE; } else { return DISABLE; } } /* LCDÆ«ÖÃµçÆ½Ñ¡Ôñ룬ÓÃÓÚÏÔʾ»Ò¶È¿ØÖÆ (LCD Bias Voltage Select) Ïà¹Øº¯Êý */ void LCD_CR_BIAS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_BIAS_Msk); tmpreg |= ((SetValue<CR = tmpreg; } uint32_t LCD_CR_BIAS_Get(void) { return ((LCD->CR & LCD_CR_BIAS_Msk)>>LCD_CR_BIAS_Pos); } /* Æ«ÖÃÀàÐÍÑ¡Ôñ (Bias Mode) 1£º1/3 Bias 0£º1/4 Bias Ïà¹Øº¯Êý */ void LCD_CR_BIASMD_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_BIASMD_Msk); tmpreg |= (SetValue & LCD_CR_BIASMD_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_BIASMD_Get(void) { return (LCD->CR & LCD_CR_BIASMD_Msk); } /* ·À¼«»¯Ê¹ÄÜ (Anti-Polarization) 1£ºCOMºÍSEGÔÚLCD¹Ø±ÕÇé¿öÏÂ½ÓµØ 0£ºCOMºÍSEGÔÚLCD¹Ø±ÕÇé¿öϸ¡¿Õ Ïà¹Øº¯Êý */ void LCD_CR_ANTIPOLAR_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_ANTIPOLAR_Msk); tmpreg |= (SetValue & LCD_CR_ANTIPOLAR_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_ANTIPOLAR_Get(void) { return (LCD->CR & LCD_CR_ANTIPOLAR_Msk); } /* Çý¶¯²¨ÐÎÑ¡Ôñ (Waveform Format) 1£ºBÀನÐÎ 0£ºAÀನÐÎ Ïà¹Øº¯Êý */ void LCD_CR_WFT_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_WFT_Msk); tmpreg |= (SetValue & LCD_CR_WFT_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_WFT_Get(void) { return (LCD->CR & LCD_CR_WFT_Msk); } /* COMÊýÁ¿Ñ¡Ôñ (Segment Line Mux) 00£º4COM 01£º6COM 10/11£º8COM Ïà¹Øº¯Êý */ void LCD_CR_LMUX_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->CR; tmpreg &= ~(LCD_CR_LMUX_Msk); tmpreg |= (SetValue & LCD_CR_LMUX_Msk); LCD->CR = tmpreg; } uint32_t LCD_CR_LMUX_Get(void) { return (LCD->CR & LCD_CR_LMUX_Msk); } /* LCDÏÔʾʹÄÜλ (LCD Enable) 1£ºÆô¶¯LCDÏÔʾ 0£º¹Ø±ÕLCDÏÔʾ Ïà¹Øº¯Êý */ void LCD_CR_EN_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->CR |= (LCD_CR_EN_Msk); } else { LCD->CR &= ~(LCD_CR_EN_Msk); } } FunState LCD_CR_EN_Getable(void) { if (LCD->CR & (LCD_CR_EN_Msk)) { return ENABLE; } else { return DISABLE; } } /* LCD²âÊÔ¿ØÖÆÎ»£¬½öÔÚ²âÊÔģʽÏÂÓÐЧ (Line Constant Control) COM¡¢SEGÊä³öµçƽÓɲâÊÔģʽϵÄÒý½ÅÊä³öÊý¾Ý¼Ä´æÆ÷¾ö¶¨¡£²»Í¬ÉèÖÃÏÂSEG»òCOMÊä³öµÄ½á¹û²Î¼ûºóÎıí¸ñ¡£ Ïà¹Øº¯Êý */ void LCD_TEST_LCCTRL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->TEST; tmpreg &= ~(LCD_TEST_LCCTRL_Msk); tmpreg |= (SetValue & LCD_TEST_LCCTRL_Msk); LCD->TEST = tmpreg; } uint32_t LCD_TEST_LCCTRL_Get(void) { return (LCD->TEST & LCD_TEST_LCCTRL_Msk); } /* ²âÊÔģʽʹÄÜλ (Test mode Enable) 1£ºLCD²âÊÔģʽʹÄÜ¡£ÔÚLCD²âÊÔģʽÏ£¬LCDÒý½Å¾²Ì¬Êä³öÄ£ÄâÖ±Á÷µçƽ£¬ËùÓÐÓ붯̬ɨÃèʱ¼äÒÔ¼°É¨Ã貨ÐÎÏà¹Ø¼Ä´æÆ÷ÉèÖÃÎÞЧ 0£ºÕý³£¹¤×÷ģʽ£¬²âÊÔģʽÎÞЧ£¬Ïà¹Ø²âÊԼĴæÆ÷¿ØÖÆÎÞЧ Ïà¹Øº¯Êý */ void LCD_TEST_TESTEN_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->TEST |= (LCD_TEST_TESTEN_Msk); } else { LCD->TEST &= ~(LCD_TEST_TESTEN_Msk); } } FunState LCD_TEST_TESTEN_Getable(void) { if (LCD->TEST & (LCD_TEST_TESTEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* ÏÔʾԤ·ÖƵ¼Ä´æÆ÷ (Display Frequency) Ïà¹Øº¯Êý */ void LCD_FCR_Write(uint32_t SetValue) { LCD->FCR = (SetValue & LCD_FCR_DF_Msk); } uint32_t LCD_FCR_Read(void) { return (LCD->FCR & LCD_FCR_DF_Msk); } /* ÉÁ˸ÏÔʾϨÃðʱ¼ä¼Ä´æÆ÷ (Display-Off Time) TOFF×îС²½³¤ÎªTstep = COM*DF[7:0]*2*16/32768Hz£¬Êµ¼ÊOFFʱ¼äΪTOFF * Tstep Ïà¹Øº¯Êý */ void LCD_FLKT_TOFF_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->FLKT; tmpreg &= ~(LCD_FLKT_TOFF_Msk); tmpreg |= (SetValue & LCD_FLKT_TOFF_Msk); LCD->FLKT = tmpreg; } uint32_t LCD_FLKT_TOFF_Get(void) { return (LCD->FLKT & LCD_FLKT_TOFF_Msk); } /* ÉÁ˸ÏÔʾµãÁÁʱ¼ä¼Ä´æÆ÷ (Display-On Time) TON×îС²½³¤ÎªTstep = COM*DF[7:0]*2*16/32768Hz£¬Êµ¼ÊONʱ¼äΪTON * Tstep Ïà¹Øº¯Êý */ void LCD_FLKT_TON_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->FLKT; tmpreg &= ~(LCD_FLKT_TON_Msk); tmpreg |= (SetValue & LCD_FLKT_TON_Msk); LCD->FLKT = tmpreg; } uint32_t LCD_FLKT_TON_Get(void) { return (LCD->FLKT & LCD_FLKT_TON_Msk); } /* ÏÔʾµãÁÁÖжÏʹÄÜλ (Display-On Interrupt Enable) 1£ºÏÔʾµãÁÁÖжÏʹÄÜ 0£ºÏÔʾµãÁÁÖжϽûÖ¹ Ïà¹Øº¯Êý */ void LCD_IER_DONIE_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->IER |= (LCD_IER_DONIE_Msk); } else { LCD->IER &= ~(LCD_IER_DONIE_Msk); } } FunState LCD_IER_DONIE_Getable(void) { if (LCD->IER & (LCD_IER_DONIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ÏÔʾϨÃðÖжÏʹÄÜλ (Display-OFF Interrupt Enable) 1£ºÏÔʾϨÃðÖжÏʹÄÜ 0£ºÏÔʾϨÃðÖжϽûÖ¹ Ïà¹Øº¯Êý */ void LCD_IER_DOFFIE_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->IER |= (LCD_IER_DOFFIE_Msk); } else { LCD->IER &= ~(LCD_IER_DOFFIE_Msk); } } FunState LCD_IER_DOFFIE_Getable(void) { if (LCD->IER & (LCD_IER_DOFFIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ÏÔʾµãÁÁÖжϱêÖ¾ (Display-On Interrupt Flag,write 1 to clear) ÏÔʾÓÉÃð±äÁÁʱӲ¼þ²úÉúÖжϱêÖ¾£¬Ó²¼þÖÃ룬Èí¼þÇåÁã Ïà¹Øº¯Êý */ void LCD_ISR_DONIF_Clr(void) { LCD->ISR = LCD_ISR_DONIF_Msk; } FlagStatus LCD_ISR_DONIF_Chk(void) { if (LCD->ISR & LCD_ISR_DONIF_Msk) { return SET; } else { return RESET; } } /* ÏÔʾϨÃðÖжϱêÖ¾ (Display-OFF Interrupt Flag,write 1 to clear) ÏÔʾÓÉÁÁ±äÃðʱӲ¼þ²úÉúÖжϱêÖ¾£¬Ó²¼þÖÃ룬Èí¼þÇåÁã Ïà¹Øº¯Êý */ void LCD_ISR_DOFFIF_Clr(void) { LCD->ISR = LCD_ISR_DOFFIF_Msk; } FlagStatus LCD_ISR_DOFFIF_Chk(void) { if (LCD->ISR & LCD_ISR_DOFFIF_Msk) { return SET; } else { return RESET; } } void LCD_BSTCR_OSC_CFG_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->BSTCR; tmpreg &= ~(LCD_BSTCR_OSC_CFG_Msk); tmpreg |= (SetValue & LCD_BSTCR_OSC_CFG_Msk); LCD->BSTCR = tmpreg; } uint32_t LCD_BSTCR_OSC_CFG_Get(void) { return (LCD->BSTCR & LCD_BSTCR_OSC_CFG_Msk); } void LCD_BSTCR_BUF_OFF_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->BSTCR |= (LCD_BSTCR_BUF_OFF_Msk); } else { LCD->BSTCR &= ~(LCD_BSTCR_BUF_OFF_Msk); } } FunState LCD_BSTCR_BUF_OFF_Getable(void) { if (LCD->BSTCR & (LCD_BSTCR_BUF_OFF_Msk)) { return ENABLE; } else { return DISABLE; } } void LCD_BSTCR_BUFBYP_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->BSTCR |= (LCD_BSTCR_BUFBYP_Msk); } else { LCD->BSTCR &= ~(LCD_BSTCR_BUFBYP_Msk); } } FunState LCD_BSTCR_BUFBYP_Getable(void) { if (LCD->BSTCR & (LCD_BSTCR_BUFBYP_Msk)) { return ENABLE; } else { return DISABLE; } } void LCD_BSTCR_VLCDPD_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->BSTCR |= (LCD_BSTCR_VLCDPD_Msk); } else { LCD->BSTCR &= ~(LCD_BSTCR_VLCDPD_Msk); } } FunState LCD_BSTCR_VLCDPD_Getable(void) { if (LCD->BSTCR & (LCD_BSTCR_VLCDPD_Msk)) { return ENABLE; } else { return DISABLE; } } void LCD_BSTCR_VLCDCFG_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = LCD->BSTCR; tmpreg &= ~(LCD_BSTCR_VLCDCFG_Msk); tmpreg |= (SetValue & LCD_BSTCR_VLCDCFG_Msk); LCD->BSTCR = tmpreg; } uint32_t LCD_BSTCR_VLCDCFG_Get(void) { return (LCD->BSTCR & LCD_BSTCR_VLCDCFG_Msk); } void LCD_BSTCR_BOOST_TEN_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->BSTCR |= (LCD_BSTCR_BOOST_TEN_Msk); } else { LCD->BSTCR &= ~(LCD_BSTCR_BOOST_TEN_Msk); } } FunState LCD_BSTCR_BOOST_TEN_Getable(void) { if (LCD->BSTCR & (LCD_BSTCR_BOOST_TEN_Msk)) { return ENABLE; } else { return DISABLE; } } void LCD_BSTCR_BOOST_EN_Setable(FunState NewState) { if (NewState == ENABLE) { LCD->BSTCR |= (LCD_BSTCR_BOOST_EN_Msk); } else { LCD->BSTCR &= ~(LCD_BSTCR_BOOST_EN_Msk); } } FunState LCD_BSTCR_BOOST_EN_Getable(void) { if (LCD->BSTCR & (LCD_BSTCR_BOOST_EN_Msk)) { return ENABLE; } else { return DISABLE; } } /********************************* LCD ÏÔʾ¿ØÖƺ¯Êý ¹¦ÄÜ£ºÅäÖÃLCD COM0~3Êä³öʹÄÜ¿ØÖÆ ÊäÈë: 00-0F COM0-COM3 Êä³ö: ÎÞ *********************************/ void LCD_COM_EN_Write(uint32_t SetValue) { LCD->COMEN = (SetValue & LCD_COM_EN_COMEN_Msk); } /********************************* LCD ÏÔʾ¿ØÖƺ¯Êý ¹¦ÄÜ£º»ñÈ¡LCD COM0~3Êä³öʹÄÜ״̬ ÊäÈë: ÎÞ Êä³ö: 00-0F COM0-COM3 *********************************/ uint32_t LCD_COM_EN_Read(void) { return (LCD->COMEN & LCD_COM_EN_COMEN_Msk); } /********************************* LCD ÏÔʾ¿ØÖƺ¯Êý ¹¦ÄÜ£ºÅäÖÃLCD SEG0-31Êä³öʹÄÜ¿ØÖÆ ÊäÈë: 00000000-ffffffff SEG0-SEG31 Êä³ö: ÎÞ *********************************/ void LCD_SEG_EN0_Write(uint32_t SetValue) { LCD->SEGEN0 = (SetValue); } /********************************* LCD ÏÔʾ¿ØÖƺ¯Êý ¹¦ÄÜ£º»ñÈ¡LCD SEG0-31Êä³öʹÄÜ״̬ ÊäÈë: ÎÞ Êä³ö: 00000000-ffffffff SEG0-SEG31 *********************************/ uint32_t LCD_SEG_EN0_Read(void) { return (LCD->SEGEN0); } /********************************* LCD ÏÔʾ¿ØÖƺ¯Êý ¹¦ÄÜ£ºÅäÖÃLCD SEG32~43(COM4-7)Êä³öʹÄÜ¿ØÖÆ ÊäÈë: 00000000-00000fff SEG32~43(COM4-7) Êä³ö: ÎÞ *********************************/ void LCD_SEG_EN1_Write(uint32_t SetValue) { LCD->SEGEN1 = (SetValue & LCD_SEG_EN1_SEGENx_Msk); } /********************************* LCD ÏÔʾ¿ØÖƺ¯Êý ¹¦ÄÜ£º»ñÈ¡LCD SEG32~43(COM4-7)Êä³öʹÄÜ״̬ ÊäÈë: ÎÞ Êä³ö: 00000000-00000fff SEG32~43(COM4-7) *********************************/ uint32_t LCD_SEG_EN1_Read(void) { return (LCD->SEGEN1 & LCD_SEG_EN1_SEGENx_Msk); } /*DISPDATAxÏÔʾÊý¾Ý¼Ä´æÆ÷Ë¢ÐÂ*/ void LCD_DISPDATAx_Refresh(uint32_t* DispBuf) { LCD->DATA0 = DispBuf[0]; LCD->DATA1 = DispBuf[1]; LCD->DATA2 = DispBuf[2]; LCD->DATA3 = DispBuf[3]; LCD->DATA4 = DispBuf[4]; LCD->DATA5 = DispBuf[5]; LCD->DATA6 = DispBuf[6]; LCD->DATA7 = DispBuf[7]; LCD->DATA8 = DispBuf[8]; LCD->DATA9 = DispBuf[9]; } void LCD_Deinit(void) { //LCD->CR = 0x00010e00; //LCD->TEST = 0x00000000; //LCD->FCR = 0x00000000; //LCD->FLKT = 0x00000000; //LCD->IER = 0x00000000; //LCD->ISR = 0x00000000; //LCD->BSTCR = 0x00000000; } /******END OF FILE****/