레이블이 C언어인 게시물을 표시합니다. 모든 게시물 표시
레이블이 C언어인 게시물을 표시합니다. 모든 게시물 표시

2020년 1월 18일 토요일

enum을 사용하여 간단하게 switch case문 구현하기

enumeration data type(열거 데이터 유형)

enum은 아래와 같은 데이터 유형을 사용한다.

enum 열거형 이름 {원소1=1, 원소2, 원소3, 원소4, ····, 원소n} 변수1, ···, 변수n;

다음 예제는 enum을 사용하여 switch case를 구현한 예제 코드 이다.

웹컴파일러 : https://www.onlinegdb.com/

(예제코드)

#include <stdio.h>

enum xSTAGE_Filter_t {Step1_Standby=1, Step2_Calcuration, Step3_Run, Step4_Reset} xStage_Filter;

int nCount = 0;

int main()
{
    xStage_Filter = Step1_Standby;
    while(1)
    {
        nCount++;
        switch(xStage_Filter)
        {
            case Step1_Standby:
                printf("Stage = %d[%d]\n", xStage_Filter,nCount);
                xStage_Filter = Step2_Calcuration;
                break;
            case Step2_Calcuration:
                printf("Stage = %d[%d]\n", xStage_Filter,nCount);
                xStage_Filter = Step3_Run;
                break;
            case Step3_Run:
                printf("Stage = %d[%d]\n", xStage_Filter,nCount);
                xStage_Filter = Step4_Reset;
                break;
            case Step4_Reset:
                printf("Stage = %d[%d]\n", xStage_Filter,nCount);
                xStage_Filter = Step1_Standby;
                break;
        }     
    }
}

(실행결과)
Stage = 1 [1]
Stage = 2 [2]
Stage = 3 [3]
Stage = 4 [4]
Stage = 1 [5]
Stage = 2 [6]
Stage = 3 [7]
Stage = 4 [8]
Stage = 1 [9]
....
....

2014년 7월 20일 일요일

[C언어] AVR MCU를 위한 비트 제어 방법 (Bit control methods for AVR MCU)

다양한 방법을 통해 MCU의 비트를 제어할 수 있습니다.
(The bit of MCU can control through many method.)

아래와 같이 간단한 정의를 통해 비트 제어를 정의하고 수행될 수 있습니다.
(As below, through the simple definitions the bit control can be defined ans executed.)

1. 하나의 비트를 "1"로 Set 하기
(1. one of bit set to "1")

#define sbi(PORTX,BITX) PORTX|=(1<<BITX)

-For Example
PORTA=0xBF; //ob10111111
sbi(PORTA,7); // PORTA|=0x40; or PORTA|=64;


만약 여러 비트를 set하고 싶다면 아래와 같은 명령어를 사용하면 된다.
(If you want to be the set of several bits, you can used like as below.)

#define sbis(PORTX,BITX) PORTX|=BITX;

-For Example
PORTA=0x0F;
sbis(PORTA,0xF0);


2. 하나의 비트를 "0"로 Clear 하기
(2. one of bit clear to "0")

#define cbi(PORTX,BITX) PORTX&=~(1<<BITX)

- For example
PORTA=0xFF; //ob11111111
cbi(PORTA,8);PORTA&=~0x80;


만약 여러 비트를 clear 하고 싶다면 아래와 같은 명령어를 사용하면 된다.
(If you want to be the clear of several bits, you can used like as below.)

#define sbis(PORTX,BITX) PORTX|=BITX;

-For Example
PORTA=0x0F;
cbis(PORTA,0x0F); //PORTA&=~0x0F;


2014년 7월 8일 화요일

[C언어] 전처리 명령 #include, #define, #undef, #if, #ifdef, #ifndef, #else, #endif

main.c 소스코드를 열어보면 가장 맨 앞에 위치하는 #으로 시작하는 코드들은 모두 전처리 명령이다.

대표적인 전처리 명령은 아래와 같다.

#include : 특정파일의 코드 포함

#define : 매크로 정의

#undef : 정의된 매크로 해제

#if, #ifdef, #ifndef, #else, #endif : 전처리 조건문

★ 전처리 조건문

- 예시#1
: 하나의 정의 내용에 대하여 연관된 다른 정의를 능동적으로 수행하고자 할때 아래와 같이 정의할 수 있다. 예를 들어 16by2 또는 16by4 LCD Display에 DDRAM Address를 정의하고자 한다. 2줄과 4줄 LCD는 각 줄에 시작 주소가 다르므로 아래와 같이 코드를 작성한다면 lcd_row 에 정의된 값에 따라 능동적으로 시킬 수 있다.

#define lcd_row=4
#define LCD_START_LINE1 0x00
#if LCD_DRIVER==KS0074
 #elif lcd_row==4 // << lcd_row가 4이므로 1~4줄에 시작 주소를 정의함.
  #define LCD_START_LINE2 0x20
  #define LCD_START_LINE3 0x40
  #define LCD_START_LINE4 0x60
 #elif lcd_row==2 // << lcd_row가 2일 때 1~2 줄에 시작 주소를 정의함.
  #define LCD_START_LINE2 0x40
#endif

- 예시 #2
: 주로 header file을 포함시키고 다른 코드에서 중복으로 사용되는 경우가 있다. 이때 이미 정의된것이 있다면 중복 정의 되지 않도록 코드를 작성할 수 있다. 예를 들어 LCD_H라는 정의가 되어 있지 않다면 #ifndef LCD_H 부터 #endif 사이에 작성된 정의를 수행하도록 하는 코드이다.

#ifndef LCD_H
#define LCD_H
/*
정의 내용 작성
*/
#endif

[C언어] 헤더 선언 #include

Avrstudio 4.x 를 기준으로 '#include' 선언에 대하여 설명하도록 하겠다.

1. Header로 선언 할 수 있는 내용
- 함수 선언
- 상수의 정의
- 매크로 정의


2. 기본적인 지정경로의 헤더파일 지정 : 컴파일러에서 제공하는 헤더파일
- 형식 :  #include<xxx.h>
* 예시 (1) #include <avr/io.h>
* 예시 (2) $include <util/delay.h>

3. 사용자 정의 헤더파일 : 사용자가 만든 헤더파일
- 형식 : #include"xxx.h"
* 예시 (1) : #include "io.h"                         // 현재 위치의 헤더파일 지정
* 예시 (2) : #include "./io.h"                       // 상대 경로의 헤더파일 지정
* 예시 (3) : #include "/test/led_shift/io.h"    // 절대경로의 헤더파일 지정

[C++] 연습문제 1-2

 /****************************************************************************** - 피트(feet)를 인치(inch)로 변환시켜주는 프로그램을 작성 - 사용자로부터 피트를 입력받아 인치로...