#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <unistd.h>
#include <time.h>  //현재시간을 구하기 위해 헤더 파일 불러옴


#define IOM_LCD_BASE   0xbc
#define IOM_LCD_COMMAND_SET  _IOW(IOM_LCD_BASE,0,32)
#define IOM_LCD_FUNCTION_SET  _IOW(IOM_LCD_BASE,1,32)
#define IOM_LCD_DISPLAY_CONTROL _IOW(IOM_LCD_BASE,2,32)
#define IOM_LCD_CURSOR_SHIFT  _IOW(IOM_LCD_BASE,3,32)
#define IOM_LCD_ENTRY_MODE_SET  _IOW(IOM_LCD_BASE,4,32)
#define IOM_LCD_RETURN_HOME  _IOW(IOM_LCD_BASE,5,32)
#define IOM_LCD_CLEAR   _IOW(IOM_LCD_BASE,6,32)
#define IOM_LCD_DD_ADDRESS  _IOW(IOM_LCD_BASE,7,32)
#define IOM_LCD_WRITE_BYTE  _IOW(IOM_LCD_BASE,8,32)

struct strcommand_varible {
 char rows;
 char nfonts;
 char display_enable;
 char cursor_enable;
 char nblink;
 char set_screen;
 char set_rightshit;
 char increase;
 char nshift;
 char pos;
 char command;
 char strlength;
 char buf[20];
};

void   init_keyboard(void);
void   close_keyboard(void);
int      kbhit(void);
int     readch(void);
static struct termios initial_settings, new_settings;
static int peek_character = -1;

void init_keyboard()
{
    tcgetattr(0,&initial_settings);
    new_settings = initial_settings;
    new_settings.c_lflag &= ~ICANON;
    new_settings.c_lflag &= ~ECHO;
    new_settings.c_lflag &= ~ISIG;
    new_settings.c_cc[VMIN] = 1;
    new_settings.c_cc[VTIME] = 0;
    tcsetattr(0, TCSANOW, &new_settings);
}

void close_keyboard()
{
    tcsetattr(0, TCSANOW, &initial_settings);
}

int kbhit()
{
unsigned char ch;
int nread;

    if (peek_character != -1) return 1;
    new_settings.c_cc[VMIN]=0;
    tcsetattr(0, TCSANOW, &new_settings);
    nread = read(0,&ch,1);
    new_settings.c_cc[VMIN]=1;
    tcsetattr(0, TCSANOW, &new_settings);
    if(nread == 1)
    {
        peek_character = ch;
        return 1;
    }
    return 0;
}


int main(int argc, char **argv)
{
int i,dev;
char front[20] = "Now Time";
char row_buffer1[20];
char row_buffer2[20];
char *row_one = row_buffer1;
char *row_two = row_buffer2;
time_t t;
time(&t);

struct strcommand_varible strcommand; 
 
 
 strcommand.rows = 2;
 strcommand.nfonts = 0;
 strcommand.display_enable = 1;
 strcommand.cursor_enable = 0;
 strcommand.nblink = 0;
 strcommand.set_screen = 1;
 strcommand.set_rightshit= 0;
 strcommand.increase = 1;
 strcommand.nshift = 0;
 strcommand.pos = 10;
 strcommand.command = 1;
 strcommand.strlength = 16; 
 
 memcpy(&strcommand.buf[0],front,20);
 dev = open("/dev/TXTLCD", O_WRONLY|O_NDELAY );
 
 if (dev != -1) {
  write(dev,&strcommand,32);
  sleep(1);
  
  memset(row_one,0,20); // 0으로 리셋
  memset(row_two,0,20); // 0으로 리셋 
  
  ioctl(dev,IOM_LCD_CLEAR,&strcommand,32);
  sleep(1); 

  strcommand.pos = 3; // 첫번째 열 입출력(문자) 위치설정
  ioctl(dev,IOM_LCD_DD_ADDRESS,&strcommand,32);
  for(i = 0;i < 16;i++) {
   if(row_one[i] == '\0') break;
   memcpy(&strcommand.buf[0],&front[i],1) ;
   ioctl(dev,IOM_LCD_WRITE_BYTE,&strcommand,32);
  }
  sleep(1);

                     
     row_one = ctime(&t) //시간을 문자열로 만든다음 ARRAY에 저장
  strcommand.pos = 42; // 두번째 열 입출력(시간) 위치설정
  ioctl(dev,IOM_LCD_DD_ADDRESS,&strcommand,32);
  for(i = 11;i < 19;i++) {   // 시간만 출력하기 위해 위치 설정
   if(row_one[i] == '\0') break;
   memcpy(&strcommand.buf[0],&row_one[i],1);
   ioctl(dev,IOM_LCD_WRITE_BYTE,&strcommand,32);
  }
  sleep(1); 
   
  init_keyboard();
  for(;;){
   ioctl(dev,IOM_LCD_CURSOR_SHIFT,&strcommand,32);
   usleep(200000);
   if(kbhit()) break;
  } 
  close_keyboard();
  close(dev);
 }
 else {
  printf( "application : Device Open ERROR!\n");
  exit(-1);
 }
 return(0);
}
============================

바로 위가 코드인데요. 본래 원본 코드는 입력을 두번 받아서 그 문자열을 출력하는건데

현재 시간을 출력하게끔 바꿀려고 코드를 바꿔보았는데요.

사이트를 찾아가며 타임함수랑 모르는 함수들을 알아가며 써보았는데.

리눅스에서 make를 하면 에러가 뜹니다;ㅅ;ㅋ

 

test_lcd.c : in function 'main':

test_lcd.c : parse error before "strcommand"

make: ***[test_lcd] 오류 1

 

이게 에러 메세지인데;ㅅ; 어디가 문제인지..??

그리고 time 함수가 약간 불안한데 저렇게 하면 출력이 제대로 되는지 궁금하네요.

 

참고로 for문은 시간만 출력하기 위해 11부터 19까지 돌게끔 해뒀습니다;ㅅ;ㅋ

 

아무튼 많은 조언 및 지적 부탁드리겠습니다;ㅅ;ㅋ

 

PS. 참고루 minicom -s로 targetboard에 들어간 뒤 실행하는 것입니다;ㅅ;ㅋ

      그리고 다른 파일도 하나 더있습니다만 여기만 고치면 될 것 같아서 올리지 않았습니다'ㅅ'