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]
....
....
2020년 1월 18일 토요일
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;
(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
대표적인 전처리 명령은 아래와 같다.
#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" // 절대경로의 헤더파일 지정
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" // 절대경로의 헤더파일 지정
피드 구독하기:
글 (Atom)
[C++] 연습문제 1-2
/****************************************************************************** - 피트(feet)를 인치(inch)로 변환시켜주는 프로그램을 작성 - 사용자로부터 피트를 입력받아 인치로...
-
개발보드에 7-SEGMENT 회로는 아래와 같다. PORT.A를 통해 74HC595 와 74LS138 IC를 제어하여 8자리 7-SEGMENT를 구동시키는 회로이다. 일반적으로 1개 포트를 사용해 1개의 7-SEGMENT를 제어할 수 있는데 P...
-
디스플레이 장치에 Direct bonding을 적용할 경우 광학적 개선효과 분석 필자는 2012 년도에 국내 디스플레이 대기업인 S 사와 함께 13.3”, 15.6”, 21.5”, 23.6”, 24.0” 등 다양한 개발모델을 가지고 ...
-
아두이노에 사용되는 I2C 2004 20X4 Character LCD Module Display를 Mega128를 사용하여 제어할 계획입니다. 아두이노는 간단히 LCD를 제어할 수 있지만 mega128은 포트에 직접 연결하여 제어하는 방식이 일반적...