DK128간 통신으로 LED 켜기
DK128간 서로 통신하여 한 번씩 LED를 ON 시키는 코드를 작성해 보았다. 즉 A DK128에서 8개의 LED를 차례되로 ON 시킨 후 B DK128에 신호를 준다. 그러면 B DK128이 8개의 LED를 차례되로 ON 시킨 후 다시 A DK128에 신호를 주면 A DK128이 다시 LED ON 동작을 반복하는 코드이다.
main.c
#include
"port.h" // 각핀들에대한정의가선언되어있다
int main()
{
int flag = 1; //입출력여부확인flag
unsigned
int us = 0; //시간딜레이를위한변수
unsigned
int ms = 0;
unsigned
char led = 0x01;
unsigned
char check = 0;
DDRF = 0xff;
PORTF = 0xff - led; //portf 초기값led 하나만켜지는상태
DDRC = 0x01; //0번은출력1번은입력으로사용
PORTC = 0x00;
while(1)
{
us++;
if(us >= 1000)
{
ms++;
us = 0;
}
if(PINC & 0x02) // 1번핀으로입력이들어오면
{
flag = 1;
if(led == 0x00)
{
led = 0x01;
PORTF = 0xff - led;
}
}
if(ms >= 500)
{
if(check) // 출력을하고있을때
{
PORTC = 0x00; // C핀출력을리셋
check = 0;
}
if(flag)
{
led = led << 1;
PORTF = 0xff - led;
if(led == 0x00) // led이동이끝난후
{
flag = 0;
PORTC = 0x01; // 0번핀으로High 신호출력
check = 1;
}
}
ms = 0;
}
}
return 0;
}
// F핀은 LED 출력으로 사용하고, C핀은 DK128간 통신을 하는데 사용하고 있다. A DK128은 C0핀을 입력으로 C1핀을 출력으로 B DK128은 C1핀을 입력으로 C0핀을 출력으로 사용한다.
// 코드를 보면 입력을 받으면 LED 출력 여부를 판별하는 flag를 1로 셋팅해주는 코드가 있는데 이 코드가 us 카운트 밑에 있다. 이는 두 DK128간 통신 동기화를 위해서 us 카운트하는 코드 존재한다.
C언어 for 문
for문은 반복문으로 while문과 비교해서 동작에는 차이가 없다. 다만 초기식, 조건식, 증감식 양식만 조금 다르다고 생각하면 된다
for(초기식 ; 조건식 ; 증감식)
{
명령문
}
p3-21.c
#include
<stdio.h>
int main()
{
int i;
// i = 1;
// while(i <= 5)
for(i = 1; i <= 5 ; i++)
{
printf("%d\t", i);
// i++;
}
putchar('\n');
return 0;
}
// 1부터 5까지의 정수를 화면에 출력하는 프로그램이다. for문으로 작성된 이 코드는 while문으로 변경이 가능하다 위의 코드에서 현재 주석처리 된 부분을 해제하고 for문 한 줄만 주석처리 하면 완전한 동일한 동작을 하는 코드가 된다.
p3-23.c
#include
<stdio.h>
#include
<conio.h>
int main()
{
char ch;
int i;
printf("Please enter any character: ");
for(i = 0 ; (ch = getche()) != '$' ; i++)
{
printf("\nYou typed : %c\n", ch);
printf("Please enter any character: ");
}
putchar('\n');
return 0;
}
// for문 조건식 안에 함수를 사용하였다. '$'이 입력 될 때까지 계속해서 for문 블록 안의 명령이 계속 반복해서 실행된다
main.c
#include
<stdio.h>
int main()
{
int i, j;
for(j = 1 ; 10 > j ; j++)
{
for(i = 3 ; 9 > i ; i++)
{
printf("%d * %d = %d\t", i, j, i * j);
}
putchar('\n');
}
return 0;
}
// 3단부터 8단까지 가로로 출력하는 프로그램
// 각 구구단을 가로로 출력하기 위해서는 각 단의 *1을부터 가로로 다 출력하고 그 다음 *2, *3... 차례되로 출력해 주면 된다.