We're no longer updating This wiki!!

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
en:xu4_16x2lcd_example [2015/07/21 12:06]
charles.park
en:xu4_16x2lcd_example [2015/07/21 12:13] (current)
charles.park
Line 1: Line 1:
 +Compile and run the example source code. 
 +<​code>​ 
 +# gcc -o example-lcd example-lcd.c -lwiringPi -lwiringPiDev -lpthread 
 +</​code>​ 
 +<file c example-lcd.c>​ 
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// ODROID-XU4 16x2 LCD / LED / Button Test Application. 
 +// 
 +// Defined port number is wiringPi port number. 
 +// 
 +// Compile : gcc -o <create excute file name> <source file name> -lwiringPi -lwiringPiDev -lpthread 
 +// Run : sudo ./<​created excute file name> 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +#include <​stdio.h>​ 
 +#include <​stdlib.h>​ 
 +#include <​stdint.h>​ 
 +  
 +#include <​unistd.h>​ 
 +#include <​string.h>​ 
 +#include <​time.h>​ 
 +  
 +#include <​wiringPi.h>​ 
 +#include <​wiringPiI2C.h>​ 
 +#include <​wiringSerial.h>​ 
 +#include <​lcd.h>​ 
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// Global handle Define 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// LCD: 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +#define LCD_ROW ​            ​2 ​  // 16 Char 
 +#define LCD_COL ​            ​16 ​ // 2 Line 
 +#define LCD_BUS ​            ​4 ​  // Interface 4 Bit mode 
 +#define LCD_UPDATE_PERIOD ​  300 // 300ms 
 +  
 +static unsigned char lcdFb[LCD_ROW][LCD_COL] = {0, }; 
 +  
 +static int lcdHandle ​ = 0; 
 +static int lcdDispPos = 0; 
 +  
 +#define PORT_LCD_RS ​    ​7 ​  // GPX1.2(#​18) 
 +#define PORT_LCD_E ​     0   // GPA0.3(#​174) 
 +#define PORT_LCD_D4 ​    ​2 ​  // GPX1.5(#​21) 
 +#define PORT_LCD_D5 ​    ​3 ​  // GPX1.6(#​22) 
 +#define PORT_LCD_D6 ​    ​1 ​  // GPA0.2(#​173) 
 +#define PORT_LCD_D7 ​    ​4 ​  // GPX1.3(#​19) 
 +  
 +const unsigned char lcdDispString[LCD_ROW][LCD_COL] = { 
 +    //​1234567890123456 
 +     "​ Hello! ODROID! ", 
 +     "​ - HardKernel - ", 
 +}; 
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// Button: 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +#define PORT_BUTTON1 ​   5   // GPX1.7(#​23) 
 +#define PORT_BUTTON2 ​   6   // GPX2.0(#​24) 
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// LED: 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +static int ledPos = 0; 
 +  
 +const int ledPorts[] = { 
 +    21, // GPX2.4(#​28) 
 +    22, // GPX2.6(#​30) 
 +    23, // GPX2.7(#​31) 
 +    24, // PWR_ON(This LED can't control!!) 
 +    11, // GPX2.1(#​25) 
 +    26, // GPX2.5(#​29) 
 +    27, // GPX3.1(#​33) 
 +}; 
 +  
 +#define MAX_LED_CNT sizeof(ledPorts) / sizeof(ledPorts[0]) 
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// LCD Update Function: 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +static void lcd_update (void) 
 +
 +    int i, j; 
 +  
 +    memset((void *)&​lcdFb,​ ' ', sizeof(lcdFb));​ 
 +  
 +    if(lcdDispPos) ​   lcdDispPos %= LCD_COL;  
 +     
 +    // LCD Display Shift 
 +    if(lcdDispPos < 0)  { 
 +        strncpy(&​lcdFb[0][abs(lcdDispPos)],​ &​lcdDispString[0][0],​ LCD_COL - abs(lcdDispPos));​ 
 +        strncpy(&​lcdFb[1][abs(lcdDispPos)],​ &​lcdDispString[1][0],​ LCD_COL - abs(lcdDispPos));​ 
 +    } 
 +    else    { 
 +        strncpy(&​lcdFb[0][0],​ &​lcdDispString[0][lcdDispPos],​ LCD_COL - lcdDispPos);​ 
 +        strncpy(&​lcdFb[1][0],​ &​lcdDispString[1][lcdDispPos],​ LCD_COL - lcdDispPos);​ 
 +    } 
 +  
 +    for(i = 0; i < LCD_ROW; i++)    { 
 +  
 +        lcdPosition (lcdHandle, 0, i); 
 +  
 +        for(j = 0; j < LCD_COL; j++)    lcdPutchar(lcdHandle,​ lcdFb[i][j]);​ 
 +    } 
 +
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// system init 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +int system_init(void) 
 +
 +    int i; 
 +  
 +    // LCD Init    
 +    lcdHandle = lcdInit (LCD_ROW, LCD_COL, LCD_BUS, 
 +                         ​PORT_LCD_RS,​ PORT_LCD_E,​ 
 +                         ​PORT_LCD_D4,​ PORT_LCD_D5,​ PORT_LCD_D6,​ PORT_LCD_D7,​ 0, 0, 0, 0); 
 +  
 +    if(lcdHandle < 0)   { 
 +        fprintf(stderr,​ "%s : lcdInit failed!\n",​ __func__); ​   return -1; 
 +    } 
 +  
 +    // GPIO Init(LED Port ALL Output) 
 +    for(i = 0; i < MAX_LED_CNT;​ i++)    { 
 +        pinMode (ledPorts[i],​ OUTPUT); ​ pullUpDnControl (PORT_BUTTON1,​ PUD_OFF); 
 +    } 
 +  
 +    // Button Pull Up Enable. 
 +    pinMode (PORT_BUTTON1,​ INPUT); ​   pullUpDnControl (PORT_BUTTON1,​ PUD_UP); 
 +    pinMode (PORT_BUTTON2,​ INPUT); ​   pullUpDnControl (PORT_BUTTON2,​ PUD_UP); 
 +  
 +    return ​ 0; 
 + } 
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// board data update 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +void boardDataUpdate(void) 
 +
 +    int i; 
 +  
 +    //  LED Control 
 +    for(i = 0; i < MAX_LED_CNT;​ i++)    digitalWrite (ledPorts[i],​ 0); // LED All Clear 
 +  
 +    digitalWrite(ledPorts[ledPos++],​ 1); 
 +  
 +    if(ledPos) ​ ledPos %= MAX_LED_CNT;​ 
 +  
 +    // button status read 
 +    if(!digitalRead (PORT_BUTTON1)) lcdDispPos++;​ 
 +    if(!digitalRead (PORT_BUTTON2)) lcdDispPos--;​ 
 +
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +// 
 +// Start Program 
 +// 
 +//​------------------------------------------------------------------------------------------------------------ 
 +int main (int argc, char *argv[]) 
 +
 +    int timer = 0 ; 
 +  
 +    wiringPiSetup (); 
 +  
 +    if (system_init() < 0) 
 +    { 
 +        fprintf (stderr, "%s: System Init failed\n",​ __func__); ​    ​return -1; 
 +    } 
 +  
 +    for(;;​) ​   { 
 +         
 +        if (millis () < timer) ​ { 
 +            usleep(100000); ​   // 100ms sleep state 
 +            continue ; 
 +        } 
 +  
 +        timer = millis () + LCD_UPDATE_PERIOD;​ 
 +  
 +        // All Data update 
 +        boardDataUpdate();​ 
 +  
 +        // lcd update 
 +        lcd_update();​ 
 +    } 
 +  
 +    return 0 ; 
 +
 +  
 +//​------------------------------------------------------------------------------------------------------------ 
 +//​------------------------------------------------------------------------------------------------------------ 
 +</​file>​
en/xu4_16x2lcd_example.txt · Last modified: 2015/07/21 12:13 by charles.park
CC Attribution-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0