PORTC0 -> PORTC7 -> PORTC0 에 연결된 LED 를 무한히 좌우/상하로 이동하는 예제입니다.

 

< 시작화면: PC0 LED 를 ON 합니다. >

 

 

 

 

 

< 100mS경과: PC1 의 LED 를 ON 합니다. >

 

 

 

 

< 200mS경과: PC1 의 LED 를 ON 합니다. >

 

 

 

 

 

< 700mS경과: PC7 의 LED 를 ON 합니다. >

 

 

전체 소스 CodeVision 1.24.0 용

 

 

/*********************************************

LED 좌우(상하)로이동하기

 

PC0 -> PC1 -> PC2 -> PC3 -> PC4 -> PC5 -> PC6 -> PC7

-> PC6 -> PC5 -> PC4 -> PC3 -> PC2 -> PC1 -> PC0 순으로

무한이이동하는예제

 

 

PORTC ==> LED 연결

 

 

 

Tools : Codevision

 

http://avr128.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)        

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

    unsigned char byteData=0xFE;

    char bUp= 1; // 1:UP, 0: DOWN

 

    // 포트C 를출력으로설정

    DDRC=0xFF;

      

    // PB0 LED ON

    PORTC = byteData;

 

 

    while (1)

    {

    Delay_ms(100);

         if(byteData == 0x7F)

         {

             bUp = 0; // up -> down

        }

        else if(byteData == 0xFE)

         {

             bUp = 1; // down -> up

        }        

        if(bUp)

        {

        byteData <<= 1;

        byteData |= 1;

    }

    else

    {

    byteData >>= 1;

        byteData |= 0x80;

      

    }

      

      

         PORTC = byteData;

           

 

         

 

 

    }     

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.2 이상)으로 패치 하시기 바랍니다.

 

실행파일:   

 

 

프로젝트 파일(소스 포함):  

 

 

 

 

 

 

 

 

Posted by WhiteAT
,

  

PORTB0 ~ PORTB7 에 연결된 LED 를 교차 ON/OFF 하는 예제입니다.

 

< 시작화면: PB1, PB3, PB5, PB7 의 LED 를 ON 합니다. >

 

 

 

 

 

< 100mS경과: PB0, PB2, PB4, PB6 의 LED 를 ON 합니다. >

 

 

 

 

전체 소스 CodeVision 1.24.0 용

 

 

/*********************************************

LED 교차 점소등하기

 

PA0, PA2, PA4, PA6 이 점등되면

PA1, PA3, PA5, PA7 이 소등되어

교차 점소등 함

 

PORTB ==> LED 연결

 

 

 

Tools : Codevision

 

http://avr128.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)        

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

 

    // 포트 B 를 출력으로 설정

    DDRB=0xFF;

      

    // PB1, PB3, PB5, PB7 의 LED 를 ON

    PORTB = 0x55;

 

 

    while (1)

    {

    Delay_ms(100);

        // PB0, PB2, PB4, PB6 의 LED 를 ON

         PORTB = 0xAA;

         

        Delay_ms(100);

        // PB1, PB3, PB5, PB7 의 LED 를 ON

         PORTB = 0x55;

    }     

}

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.2 이상)으로 패치 하시기 바랍니다.

 

실행파일:

 

 

프로젝트 파일(소스 포함):

 

 

 

 

 

 

Posted by WhiteAT
,

 

PORTA에 연결된 LED 시프트

 

PORTA0 ~ PORTA7 에 연결된 LED 를 시프트하는 예제입니다.

 

< 시작화면: PA0의 LED 를 ON 합니다. >

 

 

 

 

< 500mS 경과: PA1의 LED 가 ON 됩니다. >

 

 

 

 

 

< 2500mS 경과: PA5의 LED 가 ON 됩니다. >

 

 

 

 

 

< 7500mS 경과: PA7의 LED 가 ON 됩니다. >

 

 

 

 

 

< 8000mS 경과: PA0의 LED 가 ON 됩니다. – 초기 상태와 동일 >

 

 

 

 

 

 

 

 

전체 소스 CodeVision 1.24.0 용

 

/*********************************************

LED 이동하기

PORTA ==> LED 연결

PA0 -> PA7 시프트

 

 

Tools : Codevision

 

http://avr128.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)        

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

    char byteA=0xFE;

 

    DDRA=0xFF;

    PORTA = byteA;

 

 

    while (1)

    {

    Delay_ms(500);

    byteA =     (byteA<<1) | 0x01;     

        if(0xff == byteA)

         byteA=0xFE;

           

PORTA = byteA;

}     

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.1 이상)으로 패치 하시기 바랍니다.

 

실행파일:

 

 

 

프로젝트 파일(소스 포함):

 

 

 

 

 

 

Posted by WhiteAT
,

 

4개의 키를 각각 누를 때마다 누른 횟수 증가 하는 예제

 

 

PORTA0 ~ PORTA3까지 스위치를 연결하고 각 스위치를 누를 때마다 카운터를 증가시켜 LCD에 출력 하는 CodeVisionAVR 예제입니다.

 

< 시작 화면: 모든 값이 0으로 표시됩니다 >

 

 

 

 

< SW1는 5번, SW2는 3번, SW3는 2번, SW4는 4번 눌렀을 때 결과입니다.

 

 

 

 

전체 소스 CodeVision 1.24.0 용

 

/*********************************************

Character LCD Control

PORTB ==> LCD DataLine

PORTA.7 ==> LCD E

PORTA.6 ==> LCD RW

PORTA.5 ==> LCD RS

 

PORTA.3 ==> SW1

PORTA.2 ==> SW2

PORTA.1 ==> SW3

PORTA.0 ==> SW4

 

Main Clock : 8Mhz

 

각키를누를때마다누른횟수증가하는예제

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

#include <stdio.h>

//#include <string.h>

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

#define LCD_RS 5

#define LCD_EA 7

#define LCD_DATA_PORT PORTB

#define LCD_CONTROL_PORT PORTA

 

void CLcdXY(BYTE x1, BYTE y1);

void CLcdCommand(BYTE data);

void CLcdOn();

BYTE CLcdBusyCheck();

void CLcdPutStrings(BYTE x, BYTE y, char *str);

void CLcdPutChar(BYTE chr);

void CLcdClear();

 

// time delay for us

void WaitUS(unsigned char time_us)        

{

    register unsigned char i;

    for(i = 0; i < time_us; i++)

    {

#asm

        PUSH R0 ;

        POP R0 ;

        PUSH R0 ;

        POP R0 ;

#endasm

    }

}

 

// time delay for ms

void WaitMS(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        WaitUS(250);

        WaitUS(250);

        WaitUS(250);

        WaitUS(250);

    }

}

 

 

char chTemp[17];

unsigned int g_iSwCount[4];

 

 

 

// 스위치(키)의입력값이변경되었는지와마지막값확인용

unsigned char keyvalue = -1; // -1 은입력된값이없을때

unsigned char lastkeyvalue = -1; // -1 은입력된값이없을때

 

 

 

void GetSW()

{

    keyvalue = PINA & 0x0F;

 

    // switch 의값이변경되었을때만처리하자.

    if( keyvalue != lastkeyvalue)

    {

 

        if((lastkeyvalue& 0x08) && !(keyvalue & 0x08))

        {

            g_iSwCount[0] ++;

            if(g_iSwCount[0] >999) g_iSwCount[0] = 0;

        }    

 

        if((lastkeyvalue& 0x04) && !(keyvalue & 0x04))

        {

            g_iSwCount[1] ++;

            if(g_iSwCount[1] >999) g_iSwCount[1] = 0;

        }

        if((lastkeyvalue& 0x02) && !(keyvalue & 0x02))

        {

            g_iSwCount[2] ++;

            if(g_iSwCount[2] >999) g_iSwCount[2] = 0;

        }

        

        if((lastkeyvalue& 0x01) && !(keyvalue & 0x01))

        {

            g_iSwCount[3] ++;

            if(g_iSwCount[3] >999) g_iSwCount[3] = 0;

        }

 

 

        lastkeyvalue = keyvalue;

    }

}

 

void main(void)

{

    DDRA = 0xF0;    

    DDRB = 0xFF;    

 

 

g_iSwCount[0]=0;

g_iSwCount[1]=0;

g_iSwCount[2]=0;

g_iSwCount[3]=0;

    

    SetBit(PORTD,LCD_EA);    // ENABLE

    ClearBit(PORTD,6);

 

 

    CLcdOn();

    CLcdClear();

 

    while (1)

    {

 

         sprintf(chTemp,"S1:%4d,S2:%4d." ,g_iSwCount[0],g_iSwCount[1]);

        CLcdPutStrings(0,0,chTemp);

         sprintf(chTemp,"S3:%4d,S4:%4d." ,g_iSwCount[2],g_iSwCount[3]);

        CLcdPutStrings(0,1,chTemp);

 

         GetSW();

    }

}

 

BYTE CLcdBusyCheck()

{

    WaitMS(1);

    

    return (0);

}

 

 

void CLcdPutStrings(BYTE x, BYTE y, char *str)

{

    int len = 0;

    CLcdXY(x,y);

    while(*str ){

        if(len>16) break;

        CLcdPutChar(*str++);

        len++;

    }

}

 

void CLcdPutChar(BYTE data)

{

    while(CLcdBusyCheck());

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

    SetBit(LCD_CONTROL_PORT,LCD_RS);

    WaitUS(2);

    LCD_DATA_PORT= data;

    WaitUS(50);

    SetBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(50);

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

}

 

void CLcdClear()

{

    CLcdCommand(1);

    WaitMS(1);

    CLcdCommand(2);

    WaitMS(1);

}

 

void CLcdXY(BYTE x, BYTE y)

{

    BYTE position;

    if(x>16) x = 0;

    switch(y)

    {

    case 0 :

        position = 0x80;

        break;

    case 1 :

        position = 0xC0;

        break;

    }

    CLcdCommand(position + x);

}

 

void CLcdCommand(BYTE data)

{

    while(CLcdBusyCheck()){}

    ClearBit(LCD_CONTROL_PORT,LCD_RS);

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(1);

    LCD_DATA_PORT= data;

    WaitUS(50);

    SetBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(20);

    ClearBit(LCD_CONTROL_PORT,LCD_EA);

    WaitUS(50);

}

 

void CLcdOn()

{

    CLcdCommand(0x01);// dummy

    CLcdCommand(0x38);

    CLcdCommand(0x0C );

    CLcdCommand(0x01);

    CLcdCommand(0x06);

    CLcdCommand(0x01);

    WaitMS(2);

}

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

ABC016002E57 – 1EA
Character LCD 16x2

Switch – 4EA

POWER 5V/1A

 

 

 



실행파일 다운로드

이번 예제가 추가되면서 실행파일이 업데이트 되었습니다.

이 예제를 사용하기 위해서는 최신 버전(0.2.1.0 이상)으로 패치 하시기 바랍니다.

 

 실행파일 ( 0.2.1.0)




 WATSIM 프로젝트 파일과 Codevision 소스 파일



 

 

 

Posted by WhiteAT
,

 

Switch 4개의 상태에 따른 LED ON/OFF 변화

 

PE7에 연결된 SW1을 누르면 PC0, PC2, PC4, PC6 에 연결된 LED가 ON 되고,

PE6에 연결된 SW2을 누르면 PC1, PC3, PC5, PC7 에 연결된 LED가 ON 되고,

PE5에 연결된 SW3을 누르면 모든 LED가 OFF 되고,

PE4에 연결된 SW4을 누르면 모든 LED 가 ON 되는 예제입니다.

 

 

 

 


< PE4 PE7에 연결된 SW1을 누르면 PC0, PC2, PC4, PC6 에 연결된 LED가 ON >

 

 

 

< PE6에 연결된 SW2을 누르면 PC1, PC3, PC5, PC7 에 연결된 LED가 ON >

 

 

 

 

< PE5에 연결된 SW3을 누르면 모든 LED가 OFF >

 

 

 

 

< PE4에 연결된 SW4을 누르면 모든 LED 가 ON >

 

 

 

 

< 시뮬레이션 화면 >

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

/*********************************************

LED Control & Switch Input

 

PORTC ==> LED

PORTE.7 ==> Switch 1

PORTE.6 ==> Switch 2

PORTE.5 ==> Switch 3

PORTE.4 ==> Switch 4

 

PE7에 연결된 SW1을 누르면 PC0, PC2, PC4, PC6 에 연결된 LED가 ON 되고,

PE6에 연결된 SW2을 누르면 PC1, PC3, PC5, PC7 에 연결된 LED가 ON 되고,

PE5에 연결된 SW3을 누르면 모든 LED가 OFF 되고,

PE4에 연결된 SW4을 누르면 모든 LED 가 ON 되는 예제입니다.

 

 

 

Main Clock : 8Mhz

 

 

 

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

 

void main(void)

{

unsigned char key;

 

DDRE=0x00;     // PE4-PE7 INPUT

DDRC=0xFF;     // LED OUTPUT

PORTC=0xFF; //LED OFF

 

while(1)

{

     key = PINE & 0xFF;

switch(key)

{

case 0b11100000 : //SW1이 눌리면 LED모두 ON

PORTC=0x00;

break;

 

case 0b11010000 : //SW2가 눌리면 LED모두 OFF

PORTC=0xff;

break;

 

case 0b10110000 : //SW3이 눌리면 짝수번째 LED ON

PORTC=0b01010101;

break;

 

case 0b01110000 : //SW4가 눌리면 홀수번째 LED ON

PORTC=0b10101010;

break;

 

default:

 

break;

}

 

}

}

 

 

  

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

POWER 5V/1A

 

Posted by WhiteAT
,

 

Character LCD Control

 

Character LCD 에 문자열을 출력하는 예제입니다.

LCD 에 아래의 문자열이 출력됩니다.

WATSIM LCD TEST

watsim.tistory.c

 

        

 

 

 

 

LCD_PUTSTRINGS(0,0,"WATSIM LCD TEST ");

LCD_PUTSTRINGS(0,1,"watsim.tistory.c");

 

        

 

 

 

전체 소스 Codevision 용

 

 

   

/*********************************************

Character LCD Control

PORTC ==> LCD DataLine

PORTD.7 ==> LCD RS

PORTD.6 ==> LCD RW

PORTD.5 ==> LCD E

 

 

Main Clock : 8Mhz

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

 

typedef signed int INT16S;

typedef signed int UINT16;

typedef unsigned int INT16US;

typedef unsigned char INT8US;

typedef unsigned int WORD;

typedef unsigned char UINT8;

typedef unsigned char BOOL;

typedef unsigned char BYTE;

 

 

#define SetBit(PORT,ibit)        (PORT=PORT| ((1<<ibit)))

#define ClearBit(PORT, ibit)    (PORT=PORT&(~(1<<ibit)))

 

#include <mega128.h>

#define LCD_RS 7

#define LCD_EA 5

 

void CLCD_XY(BYTE x1, BYTE y1);

void CLCD_COMMAND(BYTE data);

void CLCD_ON();

BYTE LCD_BUSYCHK();

void LCD_PUTSTRINGS(BYTE x, BYTE y, char flash *str);

void LCD_PUTCHAR(BYTE chr);

void LCD_CLEAR();

 

// time delay for us

void Delay_us(unsigned char time_us)        

{

    register unsigned char i;

    for(i = 0; i < time_us; i++)

    {

#asm

        PUSH R0 ;

        POP R0 ;

#endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

        Delay_us(250);

    }

}

 

void main(void)

{

    unsigned char chLCDdata = '0';

    DDRA = 0x00;    

    DDRC = 0xFF;    

    DDRD = 0xFF;    

 

    SetBit(PORTD,5);    // ENABLE

    ClearBit(PORTD,6);

 

 

    CLCD_ON();

    LCD_CLEAR();

 

 

    while (1)

    {

        LCD_PUTSTRINGS(0,0,"WATSIM LCD TEST ");

        LCD_PUTSTRINGS(0,1,"watsim.tistory.c");

        Delay_ms(100);

    }

}

 

BYTE LCD_BUSYCHK()

{

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    Delay_us(200);

    

    return (0);

}

 

 

void LCD_PUTSTRINGS(BYTE x, BYTE y, char flash *str)

{

    int len = 0;

    CLCD_XY(x,y);

    while(*str ){

        if(len>16) break;

        LCD_PUTCHAR(*str++);

        len++;

    }

}

 

 

 

void LCD_PUTCHAR(BYTE data)

{

    while(LCD_BUSYCHK());

    ClearBit(PORTD,LCD_EA);

    SetBit(PORTD,LCD_RS);

    Delay_us(2);

    PORTC= data;

    Delay_us(50);

    SetBit(PORTD,LCD_EA);

    Delay_us(50);

    ClearBit(PORTD,LCD_EA);

}

 

void LCD_CLEAR()

{

    CLCD_COMMAND(1);

    Delay_ms(1);

    CLCD_COMMAND(2);

    Delay_ms(1);

}

 

void CLCD_XY(BYTE x, BYTE y)

{

    BYTE position;

    if(x>16) x = 0;

    switch(y)

    {

    case 0 :

        position = 0x80;

        break;

    case 1 :

        position = 0xC0;

        break;

    }

    CLCD_COMMAND(position + x);

}

 

void CLCD_COMMAND(BYTE data)

{

    while(LCD_BUSYCHK()){}

    ClearBit(PORTD,LCD_RS);

    ClearBit(PORTD,LCD_EA);

    Delay_us(1);

    PORTC= data;

    Delay_us(50);

    SetBit(PORTD,LCD_EA);

    Delay_us(20);

    ClearBit(PORTD,LCD_EA);

    Delay_us(50);

}

 

void CLCD_ON()

{

    CLCD_COMMAND(0x01);// dummy

    CLCD_COMMAND(0x38);

    CLCD_COMMAND(0x0C );

    CLCD_COMMAND(0x01);

    CLCD_COMMAND(0x06);

    CLCD_COMMAND(0x01);

    Delay_ms(2);

}

 

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

ABC016002E57 – 1EA
Character LCD 16x2

POWER 5V/1A

 

 

Posted by WhiteAT
,

 

 

LED 순차 소등 하기 PORTC.0 => PORTC.7 순서로

 

1초 간격으로 LED 를 PORTC.0 부터 PORTC.7까지 OFF 하고, 모두 OFF 된 후에는 처음상태로 돌아간 후 반복합니다.

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

/*********************************************

LED 순차소등하기PORTC.0 => PORTC.7 순서로

PORTC ==> LED 연결

 

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for 20us

void Delay_20us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)            // 4 cycle +

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

    #endasm

    }

}

 

// time delay for ms

void Delay_1ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_20us(50);

    }

}

 

void main(void)

{

    char chTemp=0;

      

    DDRC=0xFF;

 

    while (1)

    {

        PORTC = 0x00;

        Delay_1ms(1000);

 

        for( chTemp = 0;chTemp<8;chTemp++)

        {

            PORTC |=(1<<chTemp);

            Delay_1ms(1000);

        }

    }

}

 

 

 

 

 

 

주요 부품

ATMEGA128 - 1EA

LED – 8EA

Register – 8EA

POWER 5V/1A

 

 

Posted by WhiteAT
,

 

LED 순차 점등 하기 PORTC.0 => PORTC.7 순서로

 

1초마다 LED 를 PORTC.0 부터 PORTC.7까지 ON 하고, 모두 ON 된 후에는 처음상태로 돌아간 후 반복합니다.

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

/*********************************************

LED 순차점등하기

PORTC ==> LED 연결

 

 

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_20us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)            // 4 cycle +

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

    #endasm

    }

}

 

// time delay for ms

void Delay_1ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_20us(50);

    }

}

 

void main(void)

{

    char chTemp=0;

 

    DDRC=0xFF;

 

 

    while (1)

    {

    PORTC = 0xFF;

    Delay_1ms(1000);

      

    for( chTemp = 0;chTemp<8;chTemp++)

    {

        PORTC <<=1;

         Delay_1ms(1000);

    }

    }

}

 

 

 

 

 

주요 부품

ATMEGA128

LED,

Register

 

 

Posted by WhiteAT
,

 

1초마다 1칸씩 LED 시프트하기

 

1초마다 1칸씩 LED를 시프트 합니다. 마지막 LED가 ON 되면 처음으로 돌아갑니다.

 

 

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

 /*********************************************

LED 이동하기

PORTA ==> LED 연결

 

 

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

#include <mega128.h>

 

// time delay for us

void Delay_10us(char time_us)        

{

    register char i;

    for(i = 0; i < time_us; i++)            // 4 cycle +

    {

    #asm

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

         PUSH R0 ;         // 2 cycle +

         POP R0 ;         // 2 cycle +

 

    #endasm

    }

}

 

// time delay for ms

void Delay_ms(unsigned int time_ms)    

{

    register unsigned int i;

    for(i = 0; i < time_ms; i++)

    {

        Delay_10us(50);

        Delay_10us(50);

        Delay_10us(50);

        Delay_10us(50);

        Delay_10us(50);

    }

}

 

void main(void)

{

    char byteA=0xFE;

 

    DDRA=0xFF;

//     PORTA = 1;

 

 

    while (1)

    {

    Delay_ms(100);

 

    PORTA = byteA;

    byteA =     (byteA<<1) | 0x01;     

      

    if(0xff == byteA)

         byteA=0xFE;

 

      

}

}

 

 

 

 

 

 

주요 부품

ATMEGA128

 

 

Posted by WhiteAT
,

 

 

스위치 누를 때마다 1 증가하는 카운터

 

스위치를 누를때마다 1씩 증가하는 카운터입니다.

 

 

 

 

 

 

 

 

전체 소스 Codevision 용

 

 

   

 /*********************************************

버튼 누를 때마다 카운터 1 증가

PORTA ==> FND1 에 출력

 

PORTB.0 스위치 입력

 

Tools : Codevision

http://watsim.tistory.com

*********************************************/

 

 

#include <mega128.h>

 

void FndDisplay1(char byteData);

void FndDisplay1(char byteData){

 

    switch( byteData){

    case 0: PORTA = 0b10001000; break;

    case 1: PORTA = 0b11101011; break;

    case 2: PORTA = 0b01001100; break;

    case 3: PORTA = 0b01001001; break;

    case 4: PORTA = 0b00101011; break;

    case 5: PORTA = 0b00011001; break;

    case 6: PORTA = 0b00011000; break;

    case 7: PORTA = 0b11001011; break;

    case 8: PORTA = 0x00| 0x08; break;

    case 9: PORTA = 0x01|0x08; break;

    default : PORTA = 0b11111000; break;

    }

 

}

 

void main(void)

{

    unsigned char chLastPinB=0;

    char byteA=0;

 

    DDRA=0xFF;

    DDRB=0x00;

 

    while (1)

    {

        // 키가 눌러지면

        if(0x01 != (PINB & 0x01) )

        {

             if( 0x01 != (chLastPinB & 0x01) )

             {

                  byteA ++ ;

          }

          chLastPinB = 1;

        }

        else

        {

          chLastPinB = 0;

        }

 

        FndDisplay1(byteA%10);

}

}

 

 

 

 

 

 

주요 부품

ATMEGA128

TACT SWITCH

 

 

Posted by WhiteAT
,