//------------------------------------------------------------------------------ /// Shutdown the LCD //------------------------------------------------------------------------------ void LCDD_Stop(void) { // Enable peripheral clock AT91C_BASE_PMC->PMC_PCDR = 1 << AT91C_ID_LCDC; #if defined(at91sam9261) AT91C_BASE_PMC->PMC_SCDR = AT91C_PMC_HCK1; #endif // Disable the LCD and the DMA LCD_DisableDma(); LCD_Disable(0); }
//------------------------------------------------------------------------------ /// Initializes the LCD controller using the board-specific parameters (stored /// in the corresponding board.h). The LCD and DMA are not enabled by this /// function; this is done during the first call to LCDD_DisplayBuffer. //------------------------------------------------------------------------------ void LCDD_Initialize(void) { const Pin pPins[] = {PINS_LCD}; // Enable pins PIO_Configure(pPins, PIO_LISTSIZE(pPins)); // Enable peripheral clock AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_LCDC; #if defined(at91sam9261) AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_HCK1; #endif // Disable the LCD and the DMA LCD_DisableDma(); LCD_Disable(0); // Configure the LCD controller LCD_SetPixelClock(BOARD_MCK, BOARD_LCD_PIXELCLOCK); LCD_SetDisplayType(BOARD_LCD_DISPLAYTYPE); LCD_SetScanMode(AT91C_LCDC_SCANMOD_SINGLESCAN); LCD_SetBitsPerPixel(BOARD_LCD_BPP); LCD_SetPolarities(BOARD_LCD_POLARITY_INVVD, BOARD_LCD_POLARITY_INVFRAME, BOARD_LCD_POLARITY_INVLINE, BOARD_LCD_POLARITY_INVCLK, BOARD_LCD_POLARITY_INVDVAL); LCD_SetClockMode(BOARD_LCD_CLOCKMODE); LCD_SetMemoryFormat((unsigned int) AT91C_LCDC_MEMOR_LITTLEIND); LCD_SetSize(BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT); // Configure timings LCD_SetVerticalTimings(BOARD_LCD_TIMING_VFP, BOARD_LCD_TIMING_VBP, BOARD_LCD_TIMING_VPW, BOARD_LCD_TIMING_VHDLY); LCD_SetHorizontalTimings(BOARD_LCD_TIMING_HBP, BOARD_LCD_TIMING_HPW, BOARD_LCD_TIMING_HFP); // Configure contrast (TODO functions) LCD_SetContrastPrescaler(AT91C_LCDC_PS_NOTDIVIDED); LCD_SetContrastPolarity(AT91C_LCDC_POL_POSITIVEPULSE); LCD_SetContrastValue(0x80); LCD_EnableContrast(); // Configure DMA LCD_SetFrameSize(BOARD_LCD_FRAMESIZE); LCD_SetBurstLength(4); }
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; }