- /**************************************************************************//**
- * [url=home.php?mod=space&uid=288409]@file[/url] main.c
- * [url=home.php?mod=space&uid=895143]@version[/url] V3.00
- * [url=home.php?mod=space&uid=247401]@brief[/url] This example code uses NK-M258KG as an example to show how to finish
- * a COM/SEG LCD project with using NuTool-LCDView and print text on RHE6616TP01(8-COM, 40-SEG, 1/4 Bias) LCD.
- *
- *
- * SPDX-License-Identifier: Apache-2.0
- * [url=home.php?mod=space&uid=17282]@CopyRight[/url] (C) 2022 Nuvoton Technology Corp. All rights reserved.
- ******************************************************************************/
- #include <stdio.h>
- #include <string.h>
- #include <stdint.h>
- #include "NuMicro.h"
- #include "lcdlib.h"
- /*---------------------------------------------------------------------------------------------------------*/
- /* Functions and variables declaration */
- /*---------------------------------------------------------------------------------------------------------*/
- static S_LCD_CFG_T g_LCDCfg =
- {
- __LIRC, /*!< LCD clock source frequency */
- LCD_COM_DUTY_1_8, /*!< COM duty */
- LCD_BIAS_LV_1_4, /*!< Bias level */
- 64, /*!< Operation frame rate */
- LCD_WAVEFORM_TYPE_A_NORMAL, /*!< Waveform type */
- LCD_DISABLE_ALL_INT, /*!< Interrupt source */
- LCD_HIGH_DRIVING_OFF_AND_BUF_ON, /*!< Driving mode */
- LCD_VOLTAGE_SOURCE_CP, /*!< Voltage source */
- };
- void LCD_Init(void);
- void SYS_Init(void);
- void LCD_Start(void);
- void M258KG_init_lcd(void);
- /*----------------------------------------------------------------------*/
- /* M258KG_init_lcd() is generated from NuTool-PinConfigure, which defines multifunction pin of LCD */
- /*----------------------------------------------------------------------*/
- void M258KG_init_lcd(void)
- {
- /*
- Summary of LCD pin usage:
- COM 0~3 : PB.5, PB.4, PB.3, PB.2
- COM 4~5 : PD.11, PD.10
- COM 6~7 : PE.13, PC.8
- SEG 0~1 : PB.0, PB.1
- SEG 2~3 : PC.9, PC.10
- SEG 4~13 : PB.6, PB.7, PB.8, PB.9, PB.10, PB.11, PB.12, PB.13, PB.14, PB.15
- SEG 14 : PC.14
- SEG 15~16 : PE.6, PE.7
- SEG 17~20 : PE.11, PE.10, PE.9, PE.8
- SEG 21~25 : PD.13, PD.0, PD.1, PD.2, PD.3
- SEG 26~31 : PC.0, PC.1, PC.2, PC.3, PC.4, PC.5
- SEG 32~33 : PD.8, PD.9
- SEG 34 : PE.14
- SEG 35 : PF.15
- SEG 36~37 : PA.6, PA.7
- SEG 38~39 : PC.6, PC.7
- */
- SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA7MFP_Msk | SYS_GPA_MFPL_PA6MFP_Msk);
- SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA7MFP_LCD_SEG37 | SYS_GPA_MFPL_PA6MFP_LCD_SEG36);
- SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB15MFP_Msk | SYS_GPB_MFPH_PB14MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk | SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB11MFP_Msk | SYS_GPB_MFPH_PB10MFP_Msk |
- SYS_GPB_MFPH_PB9MFP_Msk | SYS_GPB_MFPH_PB8MFP_Msk);
- SYS->GPB_MFPH |= (SYS_GPB_MFPH_PB15MFP_LCD_SEG13 | SYS_GPB_MFPH_PB14MFP_LCD_SEG12 | SYS_GPB_MFPH_PB13MFP_LCD_SEG11 | SYS_GPB_MFPH_PB12MFP_LCD_SEG10 | SYS_GPB_MFPH_PB11MFP_LCD_SEG9 |
- SYS_GPB_MFPH_PB10MFP_LCD_SEG8 | SYS_GPB_MFPH_PB9MFP_LCD_SEG7 | SYS_GPB_MFPH_PB8MFP_LCD_SEG6);
- SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB7MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB4MFP_Msk | SYS_GPB_MFPL_PB3MFP_Msk | SYS_GPB_MFPL_PB2MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk |
- SYS_GPB_MFPL_PB0MFP_Msk);
- SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB7MFP_LCD_SEG5 | SYS_GPB_MFPL_PB6MFP_LCD_SEG4 | SYS_GPB_MFPL_PB5MFP_LCD_COM0 | SYS_GPB_MFPL_PB4MFP_LCD_COM1 | SYS_GPB_MFPL_PB3MFP_LCD_COM2 |
- SYS_GPB_MFPL_PB2MFP_LCD_COM3 | SYS_GPB_MFPL_PB1MFP_LCD_SEG1 | SYS_GPB_MFPL_PB0MFP_LCD_SEG0);
- SYS->GPC_MFPH &= ~(SYS_GPC_MFPH_PC14MFP_Msk | SYS_GPC_MFPH_PC10MFP_Msk | SYS_GPC_MFPH_PC9MFP_Msk | SYS_GPC_MFPH_PC8MFP_Msk);
- SYS->GPC_MFPH |= (SYS_GPC_MFPH_PC14MFP_LCD_SEG14 | SYS_GPC_MFPH_PC10MFP_LCD_SEG3 | SYS_GPC_MFPH_PC9MFP_LCD_SEG2 | SYS_GPC_MFPH_PC8MFP_LCD_COM7);
- SYS->GPC_MFPL &= ~(SYS_GPC_MFPL_PC7MFP_Msk | SYS_GPC_MFPL_PC6MFP_Msk | SYS_GPC_MFPL_PC5MFP_Msk | SYS_GPC_MFPL_PC4MFP_Msk | SYS_GPC_MFPL_PC3MFP_Msk | SYS_GPC_MFPL_PC2MFP_Msk | SYS_GPC_MFPL_PC1MFP_Msk |
- SYS_GPC_MFPL_PC0MFP_Msk);
- SYS->GPC_MFPL |= (SYS_GPC_MFPL_PC7MFP_LCD_SEG39 | SYS_GPC_MFPL_PC6MFP_LCD_SEG38 | SYS_GPC_MFPL_PC5MFP_LCD_SEG31 | SYS_GPC_MFPL_PC4MFP_LCD_SEG30 | SYS_GPC_MFPL_PC3MFP_LCD_SEG29 |
- SYS_GPC_MFPL_PC2MFP_LCD_SEG28 | SYS_GPC_MFPL_PC1MFP_LCD_SEG27 | SYS_GPC_MFPL_PC0MFP_LCD_SEG26);
- SYS->GPD_MFPH &= ~(SYS_GPD_MFPH_PD13MFP_Msk | SYS_GPD_MFPH_PD11MFP_Msk | SYS_GPD_MFPH_PD10MFP_Msk | SYS_GPD_MFPH_PD9MFP_Msk | SYS_GPD_MFPH_PD8MFP_Msk);
- SYS->GPD_MFPH |= (SYS_GPD_MFPH_PD13MFP_LCD_SEG21 | SYS_GPD_MFPH_PD11MFP_LCD_COM4 | SYS_GPD_MFPH_PD10MFP_LCD_COM5 | SYS_GPD_MFPH_PD9MFP_LCD_SEG33 | SYS_GPD_MFPH_PD8MFP_LCD_SEG32);
- SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD3MFP_Msk | SYS_GPD_MFPL_PD2MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk | SYS_GPD_MFPL_PD0MFP_Msk);
- SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD3MFP_LCD_SEG25 | SYS_GPD_MFPL_PD2MFP_LCD_SEG24 | SYS_GPD_MFPL_PD1MFP_LCD_SEG23 | SYS_GPD_MFPL_PD0MFP_LCD_SEG22);
- SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE14MFP_Msk | SYS_GPE_MFPH_PE13MFP_Msk | SYS_GPE_MFPH_PE11MFP_Msk | SYS_GPE_MFPH_PE10MFP_Msk | SYS_GPE_MFPH_PE9MFP_Msk | SYS_GPE_MFPH_PE8MFP_Msk);
- SYS->GPE_MFPH |= (SYS_GPE_MFPH_PE14MFP_LCD_SEG34 | SYS_GPE_MFPH_PE13MFP_LCD_COM6 | SYS_GPE_MFPH_PE11MFP_LCD_SEG17 | SYS_GPE_MFPH_PE10MFP_LCD_SEG18 | SYS_GPE_MFPH_PE9MFP_LCD_SEG19 |
- SYS_GPE_MFPH_PE8MFP_LCD_SEG20);
- SYS->GPE_MFPL &= ~(SYS_GPE_MFPL_PE7MFP_Msk | SYS_GPE_MFPL_PE6MFP_Msk);
- SYS->GPE_MFPL |= (SYS_GPE_MFPL_PE7MFP_LCD_SEG16 | SYS_GPE_MFPL_PE6MFP_LCD_SEG15);
- SYS->GPF_MFPH &= ~(SYS_GPF_MFPH_PF15MFP_Msk);
- SYS->GPF_MFPH |= (SYS_GPF_MFPH_PF15MFP_LCD_SEG35);
- return;
- }
- /*----------------------------------------------------------------------*/
- /* Init LCD */
- /*----------------------------------------------------------------------*/
- void LCD_Init(void)
- {
- uint32_t u32ActiveFPS;
- /* The definition of multifunction pin is generated from NuTool-PinConfigure.*/
- M258KG_init_lcd();
-
- /* Reset LCD module */
- SYS_ResetModule(LCD_RST);
- /* Output Setting Select */
- LCD_OUTPUT_SET(LCD_OUTPUT_SEL8_TO_COM4 | LCD_OUTPUT_SEL9_TO_COM5 | LCD_OUTPUT_SEL10_TO_SEG20 | LCD_OUTPUT_SEL11_TO_SEG19 |
- LCD_OUTPUT_SEL12_TO_SEG18 | LCD_OUTPUT_SEL13_TO_SEG17 | LCD_OUTPUT_SEL14_TO_COM6 | LCD_OUTPUT_SEL15_TO_COM7 |
- LCD_OUTPUT_SEL24_TO_SEG31 | LCD_OUTPUT_SEL25_TO_SEG30 | LCD_OUTPUT_SEL26_TO_SEG29 | LCD_OUTPUT_SEL27_TO_SEG28 |
- LCD_OUTPUT_SEL28_TO_SEG27 | LCD_OUTPUT_SEL29_TO_SEG26 | LCD_OUTPUT_SEL41_TO_SEG14 | LCD_OUTPUT_SEL42_TO_SEG13 |
- LCD_OUTPUT_SEL47_TO_SEG8 | LCD_OUTPUT_SEL48_TO_SEG7 | LCD_OUTPUT_SEL49_TO_SEG6);
- /* LCD Initialize and calculate real frame rate */
- u32ActiveFPS = LCD_Open(&g_LCDCfg);
- /* Select output voltage level 9 for 4.8V */
- LCD_SET_CP_VOLTAGE(LCD_CP_VOLTAGE_LV_9);
- }
- void SYS_Init(void)
- {
- /* Enable all GPIO clock */
- CLK->AHBCLK |= (CLK_AHBCLK_GPACKEN_Msk | CLK_AHBCLK_GPBCKEN_Msk | CLK_AHBCLK_GPCCKEN_Msk | CLK_AHBCLK_GPDCKEN_Msk |
- CLK_AHBCLK_GPECKEN_Msk | CLK_AHBCLK_GPFCKEN_Msk);
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init System Clock */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Enable HIRC clock */
- CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
- /* Waiting for HIRC clock ready */
- CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);
- /* Enable LIRC clock */
- CLK_EnableXtalRC(CLK_PWRCTL_LIRCEN_Msk);
- /* Waiting for LIRC clock ready */
- CLK_WaitClockReady(CLK_STATUS_LIRCSTB_Msk);
- /* Switch HCLK clock source to HIRC */
- CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));
- /* Set SysTick source to HCLK/2*/
- CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HCLK_DIV2);
- /* Configure LCD module clock */
- CLK_EnableModuleClock(LCD_MODULE);
- CLK_SetModuleClock(LCD_MODULE, CLK_CLKSEL2_LCDSEL_LIRC, 0);
- }
- void LCD_Start(void)
- {
- /* Enable LCD display */
- LCD_ENABLE_DISPLAY();
- /*---------------------------------------------------------------------------------------------------------*/
- /* Set the text to show on LCD. Please refer to the NK-M258KG_EC_LCD.nvt to check the definition of the name. */
- /*---------------------------------------------------------------------------------------------------------*/
- /*Show text on the specific group with using LCDLIB_Printf */
- LCDLIB_Printf(ZONE_MAIN_DIGIT, "M258"); // the "MAIN" group
- /*Show char on the specific position of the group with using LCDLIB_PutChar() */
- LCDLIB_PutChar(ZONE_MAIN_DIGIT, 4, 'K'); // the 5th position of the "MAIN" group
- LCDLIB_PutChar(ZONE_MAIN_DIGIT, 5, 'G'); // the 6th position of the "MAIN" group
- /* Show number on the specific group with using LCDLIB_PrintNumber() */
- LCDLIB_PrintNumber(ZONE_TIME_DIGIT, 1352); // the "TIME" group
- LCDLIB_PrintNumber(ZONE_NUMICRO_DIGIT, 258); // the "NUMOCRO" group
- LCDLIB_PrintNumber(ZONE_PPM_DIGIT, 123); // the "ppm" group
- LCDLIB_PrintNumber(ZONE_TEMP_DIGIT, 36); // the "TEMP" group
- LCDLIB_PrintNumber(ZONE_VER_DIGIT, 105004); // the "VER" group
- /* Show the specific Symbol with using LCDLIB_SetSymbol() */
- LCDLIB_SetSymbol(SYMBOL_COL_9, 1); // the dot symbol, which is inter the "TIME" group
- LCDLIB_SetSymbol(SYMBOL_COL_10, 1); // the dot symbol, which is inter "TIME" group
- LCDLIB_SetSymbol(SYMBOL_NVT_11, 1); // the "nuvoton" symbol
- LCDLIB_SetSymbol(SYMBOL_WIFI_12, 1); // the "wifi" symbol
- LCDLIB_SetSymbol(SYMBOL_SOUND_14, 1); // the "sound" symbol
- LCDLIB_SetSymbol(SYMBOL_BAT_FRAME_13, 1); // the frame of the battery symbol
- LCDLIB_SetSymbol(SYMBOL_BAT_1_13, 1); // the 1st level of the battery symbol
- LCDLIB_SetSymbol(SYMBOL_BAT_2_13, 1); // the 2nd level of the battery stmbol
- LCDLIB_SetSymbol(SYMBOL_BAT_3_13, 0); // the 3rd level of the battery symbol
- LCDLIB_SetSymbol(SYMBOL_NUMICRO_15, 1); // the "NuMicro M" symbol
- LCDLIB_SetSymbol(SYMBOL_PLUS_19, 1); // the "plus" symbol, which is on the left side of the screen
- LCDLIB_SetSymbol(SYMBOL_COL_69, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_68, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_70, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_71, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_72, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_73, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_74, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_75, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_76, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_COL_77, 1); // the dot symbol, which is inter the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_A_29, 1); // the "A" symbol, which is on the right side of the "MAIN" group
- LCDLIB_SetSymbol(SYMBOL_S01_47, 1); // the 1st block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S07_47, 1); // the 7th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S13_47, 1); // the 13th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S19_47, 1); // the 19th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S25_47, 1); // the 25th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S29_47, 1); // the 29th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S33_47, 1); // the 33th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_S37_47, 1); // the 37th block, which is inter the 5x8 block on the right side of the screen
- LCDLIB_SetSymbol(SYMBOL_CIRCLE_UP_48, 1); // the "up-circle" symbol, which is on the bottom left side of the screen
- LCDLIB_SetSymbol(SYMBOL_ARROW_UP_48, 1); // the "up-arrow" symbol, which is on the bottom left side of the screen
- LCDLIB_SetSymbol(SYMBOL_TEMP_C_57, 1); // the celsius temeperature symbol
- LCDLIB_SetSymbol(SYMBOL_PPM_53, 1); // the ppm symbol
- LCDLIB_SetSymbol(SYMBOL_VERSION_59, 1); // the version symbol
- LCDLIB_SetSymbol(SYMBOL_P_66, 1); // the dot symbol, which is inter the "version" group
- LCDLIB_SetSymbol(SYMBOL_P_67, 1); // the dot symbol, which is inter the "version" group
- }
- /*---------------------------------------------------------------------------------------------------------*/
- /* M258_LCDView MAIN function */
- /*---------------------------------------------------------------------------------------------------------*/
- int main(void)
- {
- /* Unlock protected registers */
- SYS_UnlockReg();
- /* Init System, peripheral clock and multi-function I/O */
- SYS_Init();
- /* Lock protected registers */
- SYS_LockReg();
- /* Init LCD multi-function pins and settings */
- LCD_Init();
- /* Start showing the specific text */
- LCD_Start();
- while (1) {}
- }