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... 차례되로 출력해 주면 된다.

+ Recent posts