void vLCDTask( void *pvParameters ) { long x; LCD_TypeDef *xLCD = LCD; char *pcScrollText = "FreeRTOS Energy Micro "; /* Loop through various different displays. */ for( ;; ) { /* Start by scrolling some text. */ LCD_ScrollText( xLCD, pcScrollText ); LCD_AllOff( xLCD ); /* Count down from 100 on the number section of the LCD display. */ for( x = 100; x > 0; x--) { LCD_Number( xLCD, x ); vTaskDelay( 10 ); } LCD_NumberOff( xLCD ); /* Turn on gecko and EFM32 symbol. */ LCD_Symbol( xLCD, LCD_SYMBOL_GECKO, 1 ); LCD_Symbol( xLCD, LCD_SYMBOL_EFM32, 1 ); LCD_Write( xLCD, " Gecko " ); vTaskDelay( lcdONE_SECOND ); LCD_AllOn( xLCD); vTaskDelay( lcdONE_SECOND ); LCD_AllOff( xLCD); LCD_Write( xLCD, "OOOOOOO" ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, "XXXXXXX" ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, "+++++++" ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, "@@@@@@@" ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, "ENERGY " ); vTaskDelay( lcdQUARTER_SECOND ); LCD_Write( xLCD, "@@ERGY " ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " @@RGY " ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " M@@GY " ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " MI@@Y " ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " MIC@@ " ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " MICR@@" ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " MICRO@" ); vTaskDelay( lcdSHORT_DELAY ); LCD_Write( xLCD, " MICRO " ); vTaskDelay( lcdQUARTER_SECOND ); LCD_Write( xLCD, "-EFM32-" ); vTaskDelay( lcdQUARTER_SECOND ); } }
int32_t main(void) { int32_t bLoop = true; uint32_t com, seg, onoff; uint8_t u8Item; char input; char text[LCD_DIGIT_NUM]=""; int32_t idx = 0, blinkfreq, ret; long long num; S_LCD_INIT lcdinit; STR_UART_T param; SYS_SetChipClockSrc((CLK_PWRCTL_HXT_EN | CLK_PWRCTL_LXT_EN), 1); // Wait HXT and LXT stable while(SYS_CheckChipClockSrc(CLK_CLKSTATUS_LXT_STB | CLK_CLKSTATUS_HXT_STB) != 0) ; /* Select UART Clock Source From 12MHz */ SYS_SelectIPClockSource_1(CLK_CLKSEL1_UART_MASK, CLK_CLKSEL1_UART_HXT); MFP_UART0_TO_PORTA(); param.u32BaudRate = 115200; param.u32cDataBits = DRVUART_DATABITS_8; param.u32cStopBits = DRVUART_STOPBITS_1; param.u32cParity = DRVUART_PARITY_NONE; param.u32cRxTriggerLevel = DRVUART_FIFO_1BYTES; param.u8TimeOut = 0; UART_Init(UART0, ¶m); /* Select LCD Clock Source From 32KHz */ SYS_SelectIPClockSource_1(CLK_CLKSEL1_LCD_MASK, CLK_CLKSEL1_LCD_LXT); /* Select LCD Clock Source From 10KHz */ //SYS_SelectIPClockSource_1(CLK_CLKSEL1_LCD_MASK, CLK_CLKSEL1_LCD_LIRC); /* Select LCD COMs, SEGs, V1 ~ V3, DH1, DH2 */ MFP_LCD_TYPEA(); /* LCD Initialize */ lcdinit.cpump_enable = true; lcdinit.internal_bias = false; lcdinit.cpump_freqdiv = LCD_CPUMP_DIV1; lcdinit.cpump_voltage = LCD_CPVOl_3V; lcdinit.bias = LCD_BIAS_THIRD; lcdinit.mux = LCD_MUX_ONE_FOURTH; lcdinit.freqdiv = LCD_FREQ_DIV64; LCD_Init(&lcdinit); while(bLoop) { idx = 0; strcpy(text, ""); // clear buffer TestItem(); u8Item = getchar(); printf("%c\n", u8Item); switch(u8Item) { case '0': { printf("Input text: "); while(1) { input = getchar(); printf("%c", input); if(input == 0xD) break; strcat( text, &input); idx++; if(idx >= LCD_ALPHABET_NUM) break; } printf("\n"); printf("%s \n", text); LCD_Write(text); break; } case '1': { printf("Input number: "); while(1) { input = getchar(); printf("%c", input); if(input == 0xD) break; strcat( text, &input); idx++; if(idx >= LCD_DIGIT_NUM) break; } printf("\n"); //num = atof(text); num = local_atoi(text); LCD_Number(num); break; } case '2': { //DrvLCD_Write("NUVOTON"); LCD_Number(8888888888888); input: printf("Input the frequency of blinking (ms): "); blinkfreq = sysGetNum(); printf("\n"); ret = LCD_BlinkFrequency(blinkfreq); if(ret == ERR_LCD_CAL_BLINK_FAIL) { printf("Over the time range and input again...\n"); goto input; } LCD_EnableInt(LCD_FRAMECOUNT_INT); LCD_EnableBlink(); printf("Any key to end Blinking display..."); getchar(); LCD_DisableBlink(); break; } case '3': printf("Pixel On/Off (1:On, 0:Off): "); onoff = sysGetNum(); printf("\n"); if(onoff>1) continue; printf("Input Com: "); com = sysGetNum(); printf("\nInput Segment: "); seg = sysGetNum(); if(onoff) LCD_EnableSegment(com, seg); else LCD_DisableSegment(com, seg); break; case '4': bLoop = false; break; default: printf("Wrong Item\n"); break; } } LCD_Disable(); return true; }