#include <stdio.h>
#include
 "smart.h"

void inst_clear(void);    //화면클리어
void inst_return(void);   //커서제일앞으로
void inst_entry(void);    //커서이동방향 할당 및 전체디스플레이변화를 가능하게함
void inst_display(void);  //디스플레이 설정
void inst_cursor(void);   //커서무빙설정 디스플레이 방향설정
void inst_function(void); //DL:8/4bit 설정N:도트라인 설정
void data_a(void);        //데이터 집어넣는 부분
void lcd_init(void);      //설정한값을 넣는 부분

int main(void)
{

  lcd_init();
  data_a();
  data_a();
  data_a();
  data_a();
  data_a();
  

  
  while(1);
  {
  
  }        
  return 0;
}
void inst_clear(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E); //DDRA방향세개를 출력으로 바꿈
  DDRC = 0xFF;                               //DDRC방향 모두를 출력으로 바꿈
  PORTA = (0<<PIN_E);

  PORTA=(0<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC=0x01;
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void inst_return(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(0<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC=0x02;
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void inst_entry(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(0<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC=0x06;
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void inst_display(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E); 
  DDRC = 0xFF;                               //DDRC방향 모두를 출력으로 바꿈
  PORTA = (0<<PIN_E);

  PORTA=(0<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC=0xF;
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void inst_cursor(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(0<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC=0x14;
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void inst_function(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(0<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC=0x3C;
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void data_a(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(1<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC='A';
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void lcd_init(void)
{
  volatile unsigned int uicnt;
  DELAY(500);
  inst_function();
  inst_entry();
  inst_cursor();
  inst_display();
  inst_clear();
  inst_return();
  
}



'디지털회로' 카테고리의 다른 글

20140425  (0) 2014.04.25
20140424 USART  (0) 2014.04.24
20144022 문자열 숫자, 출력하기  (0) 2014.04.22
20140417 LCD  (0) 2014.04.17
20140409 WinAVR설치  (0) 2014.04.09
by 날라차숑 2014. 4. 21. 13:55






'디지털회로' 카테고리의 다른 글

20140425  (0) 2014.04.25
20140424 USART  (0) 2014.04.24
20144022 문자열 숫자, 출력하기  (0) 2014.04.22
20140421 LCD2  (0) 2014.04.21
20140409 WinAVR설치  (0) 2014.04.09
by 날라차숑 2014. 4. 17. 17:28


링크드 리스트

 #include "LINKEDLIST.H"


int main()
{
  node * head;
  node * temp1;
  node * new;
  node * temp2;
  
  head=malloc(sizeof(node));
  head->data='a';
  head->next=malloc(sizeof(node));
  head->next->data='b';
  head->next->next = malloc(sizeof(node));
  head->next->next->data='c';
  head->next->next->next=NULL;
  nodeprint_print(head);
  A-B-Z-C //Z의 삽입
  new=malloc(sizeof(node));
  new->data='z';
  new->next=0;

  temp1=head;
  temp1=temp1->next;
  temp2=temp1->next;
  temp1->next=new;
  new->next=temp2;

  printf("\n\n");
  nodeprint_print(head);
  printf("\n\n");

 1-A-B-Z-C //1의 삽입
  new=malloc(sizeof(node));
  new->data='1';
  new->next=0;

  temp1=head;
  head=new;
  new->next=temp1;
  nodeprint_print(head);
  printf("\n\n");
  nodefree_free(head);
  
  return 0;
}


by 날라차숑 2014. 4. 17. 16:53

분할컴파일



main.c linkedlist.c 두개의 파일을 컴파일 해보자

도스창에서 cl /c main.c 라고 치면 main.obj파일 생성

도스창에서 cl /c linkedlist.c 라고치면 linkedlist.obj파일 생성

두개의 파일을 cl main.obj linkedlist.obj 라고 치면 main.exe파일 생성

아니면 cl *.obj 을 쳐도 main.exe파일 생성 (여러개의 obj파일 같이 동작)

cl main.c linkedlist.c 라고 쳐도 파일 생성

cl *.c (가장 느림)

 컴파일 할때 obj(기계어)로 변화하는 과정이 오래걸림 파일이 많을때 cl *.c 는 미친짓이다.





'C언어' 카테고리의 다른 글

20140421 링크드리스트  (0) 2014.04.21
20140417 링크드리스트  (0) 2014.04.17
20140416 소스인사이트 프로젝트생성하는법  (0) 2014.04.16
20140415 연결리스트  (0) 2014.04.15
20140414 atmega구조  (0) 2014.04.14
by 날라차숑 2014. 4. 16. 17:00







헤더파일 작성



'C언어' 카테고리의 다른 글

20140417 링크드리스트  (0) 2014.04.17
20140406 링크드리스트 분할컴파일  (0) 2014.04.16
20140415 연결리스트  (0) 2014.04.15
20140414 atmega구조  (0) 2014.04.14
20140411 구조체  (0) 2014.04.11
by 날라차숑 2014. 4. 16. 10:08

 #include <stdio.h>

#include <stdlib.h>
typedef struct _node  
{
  char data;
  struct _node * next;    //자기 참조형 포인트 //뒤에있는 node보다 _node가 앞에 있다.
} node;


int main()
{
  node * head;
  node * new1;
  node * new2;

  head = malloc(sizeof(node));
  new1 = malloc(sizeof(node));
  new2 = malloc(sizeof(node));

  head->data = 'a';
  new1->data = 'b';
  new2->data = 'c';

  head->next = new1;
//  new1->next = new2;  //head->next->next = new2; 과 같다. 같은방법
  new2->next = 0;

  head->next->next = new2;

  printf("%c \n", head->data);
  printf("%c \n", head->next->data);
  printf("%c \n", head->next->next->data);

  free(head);
  free(new1);
  free(new2);

  return 0;
}



'C언어' 카테고리의 다른 글

20140406 링크드리스트 분할컴파일  (0) 2014.04.16
20140416 소스인사이트 프로젝트생성하는법  (0) 2014.04.16
20140414 atmega구조  (0) 2014.04.14
20140411 구조체  (0) 2014.04.11
20140410 구조체 변수와 포인터  (0) 2014.04.10
by 날라차숑 2014. 4. 15. 16:22















연결 리스트

 #include <stdio.h>


struct smart
{
  int iNum;
  struct smart * self;
};

int main()
{
  struct smart A = {10};  
  struct smart B = {20};
  struct smart C = {30};
  struct smart D = {40};
  struct smart * p;
  
  A.self = &B;                     
  B.self = &C;
  C.self = &D;
  
  p = &A;

  while(0 != p)
  {
    printf("%d->", p->iNum); 
    p = p->self;
  
  }
  printf("NULL \n");
  return 0;
}




 #include <stdio.h>


struct bigdata
{
  int iNum;
  char data[1000];
  struct bigdata * next;    
};

int main()
{
  struct bigdata test[4];
  struct bigdata temp;
  struct bigdata * p;
  int iCnt;

  test[0].iNum = 0;
  test[1].iNum = 1;
  test[2].iNum = 2;
  test[3].iNum = 3;

  test[0].next = &test[1];
  test[1].next = &test[2];
  test[2].next = &test[3];
  test[3].next = 0;



  for(iCnt=04>iCnt; iCnt++)
  {
    printf("%d->", test[iCnt].iNum);
  }

//  temp.iNum = test[0].iNum;
//        test[0].iNum = test[1].iNum;
//        test[1].iNum = temp.iNum;

  printf("\n");
  for(iCnt=04>iCnt; iCnt++)
  {
    printf("%d->", test[iCnt].iNum);
  }

  printf("\n");
  
  for(p=test; p!=0; p=p->next)
  {
    printf("%d->", p->iNum);
  }
  
  printf("\n");

  = &test[1];      //
  test[0].next = &test[2];
  p->next = test[2].next;
  test[2].next = p;

  for(p=test; p!=0; p=p->next)
  {
    
    printf("%d->", p->iNum);
  }

  return 0;  
}

위의 노란펜부분의 메모리 구조





변수선언으러 보는 메모리 다섯가지 구조

 #include <stdio.h>


  int A;
  int B;
  int C;    //비에스에스영역
  int D = 100;  
  int E = 200;  
  int F = 300;  //데이타영역

int main()
{
  int G;  //스택영역
  int H;  
  int I;  
  
  int * p;
  p = malloc(4);  //힙영역
      //말록은 주소값을 반환
  free(p);
  
  printf("Code (%08X)\n"&main); //코드영역
  printf("Bss  (%08X)\n"&A); 
  printf("Data (%08X)\n"&D); 
  printf("Stack(%08X)\n"&G); 
  printf("Heap (%08X)\n", p);  

  return 0;
}



'C언어' 카테고리의 다른 글

20140416 소스인사이트 프로젝트생성하는법  (0) 2014.04.16
20140415 연결리스트  (0) 2014.04.15
20140411 구조체  (0) 2014.04.11
20140410 구조체 변수와 포인터  (0) 2014.04.10
20140409 구조체 효율높이기  (0) 2014.04.09
by 날라차숑 2014. 4. 14. 10:40


 #include <stdio.h>


typedef struct point
{
  int xpos;
  int ypos;
} Point;


int main()
{
  Point pos1={12};

  Point pos2;
  pos2 = pos1;                           //구조체의 대입연산이 되는가?

  printf("크기: %d \n"sizeof(pos1));  //구조체의 sizeof연산이 되는가?
  printf("%d %d \n"pos1.xpos, pos1.ypos);


  printf("크기: %d \n"sizeof(pos2));  //구조체에 대입연산이 되었는가?
  printf("%d %d \n"pos2.xpos, pos2.ypos);



  return 0;
}


 #include <stdio.h>


typedef struct point
{
  int xpos;
  int ypos;
} Point;    //Point구조체 선언

Point AddPoint(Point pos1, Point pos2)  //구조체 덧셈을 가능하게하는 함수
{
  Point pos={pos1.xpos+pos2.xpos, pos1.ypos+pos2.ypos};
  return pos;
}
Point MinPoint(Point pos1, Point pos2)  //구조체 뺄셈을 가능하게하는 함수
{
  Point pos={pos1.xpos-pos2.xpos, pos1.ypos-pos2.ypos};
  return pos;

}

int main()
{
  Point pos1={56};  
  Point pos2={29};
  Point result;

  result=AddPoint(pos1, pos2);
  printf("[%d, %d] \n", result.xpos, result.ypos);
  result=MinPoint(pos1, pos2);
  printf("[%d, %d] \n", result.xpos, result.ypos);
  return 0;
}


 #include <stdio.h>


typedef struct _Point
{
  int xpos;
  int ypos;
} point;

typedef struct _Circle
{
  point cen;  //구조체의 변수를 선언
  double rad;
} circle;

void ShowCircleInfo(circle * cptr)
{
  printf("[%d, %d] \n"(cptr->cen).xpos, (cptr->cen).ypos);

  printf("raduis: %g \n\n", cptr->rad);
}



int main()
{
  circle c1={{1,2}, 3.5}; 중괄호를 써서 초기화할수있다.

  circle c2={24 ,3.9};  차례대로도 할수있다.

  ShowCircleInfo(&c1);
  ShowCircleInfo(&c2);
  

  return 0;
}



 #include <stdio.h>


union smart
{
  int A;
  short B;
  char C;
};

int main()
{
  union smart test;
  test.A = 0x12345678;   

  printf("%X \n", test.A);  메모리에 들어가는 순서 78/56/34/12
  printf("%X \n", test.B);
  printf("%X \n", test.C);

  test.B = 0xAAAA;
  test.C = 0xFF;

  printf("%X \n", test.A);
  printf("%X \n", test.B);
  printf("%X \n", test.C);

  return 0;
}




'C언어' 카테고리의 다른 글

20140415 연결리스트  (0) 2014.04.15
20140414 atmega구조  (0) 2014.04.14
20140410 구조체 변수와 포인터  (0) 2014.04.10
20140409 구조체 효율높이기  (0) 2014.04.09
20140408 구조체  (0) 2014.04.08
by 날라차숑 2014. 4. 11. 16:49


 #include <stdio.h>


struct smart
{
  int A;
  short B;
  float C;
  char D;
  int E;
  
};

int main()
{
  struct smart test = {100,50,4.1,10,1};    //만들자마자 초기화 하는 방법
  void * vp = &test;  //배열과 다르게 취급하니 주소표시(&)붙이자
  printf("A=%d \n", test.A); 
  printf("A=%d \n", *((int *)vp));     //vp 보이드 라서 캐스팅함.
  vp = (char *)vp+4;
  printf("B=%d \n", *((short *)vp)); 
  vp = (char *)vp+4;
  printf("C=%f \n", *((float *)vp)); 
  vp = (char *)vp+4;  
  printf("D=%d \n", *((char *)vp)); 
  vp = (char *)vp+4;  
  printf("E=%d \n", *((char *)vp)); 
  return 0;
}

변수 메모리 배치

A(int)

 B(short)

 

 

 C(Float)

 D(char)

 

 

 

 E(int)




 #include <stdio.h>


struct smart
{
  int A;
  short B;
  float C;
  char D;
  int E;
  
};

int main()
{
  struct smart test = {100,50,4.1,10,1};    
  struct smart *  stP = &test;

  printf("A=%d \n", stP->A);       
  printf("B=%d \n", stP->B); 
  printf("C=%f \n", stP->C); 
  printf("D=%d \n", stP->D); 
  printf("E=%d \n", stP->E); 

  printf("\n");

  printf("A=%d \n", test.A);       
  printf("B=%d \n", test.B); 
  printf("C=%f \n", (*stP).C); 
  printf("D=%d \n", (*stP).D); 
  printf("E=%d \n", (*stP).E); 

 결과  printf("A=%d \n", stP->A);  
       printf("A
=%d \n", test.A);

       printf("C=%f \n", (*stP).C);

                모두 같음.             

 
  return 0;
}



'C언어' 카테고리의 다른 글

20140414 atmega구조  (0) 2014.04.14
20140411 구조체  (0) 2014.04.11
20140409 구조체 효율높이기  (0) 2014.04.09
20140408 구조체  (0) 2014.04.08
20140307 입출력함수  (0) 2014.04.07
by 날라차숑 2014. 4. 10. 14:23

20140409데세랄 산기념

2014. 4. 9. 21:59

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

| 1 ··· 4 5 6 7 8 9 10 11 |