Did you know that you can navigate the posts by swiping left and right?

lcd 비밀번호 나타내기

23 Jan 2018 . category: tech . Comments
#atmega128 #mechatronics #science knowledge

잠금상자에 스위치를 달아서 직접 스위치를 눌러 비밀번호가 눌러지게 하는 코드와 또 자신이 누른 비밀번호가 무엇인지 lcd에 나타내도록 하는 코드를 만들어 보았다. 먼저 메인문에서 출력값을 설정하고 lcd를 초기화 한다음 각 스위치가 눌릴때 행동하는 소스를 만들었는데 우선 처음 lcd에 1로 시작해 내가 누르려는 숫자가 나타나도록 설정해 준 다음 첫번째 스위치를 누르면 이 숫자가 1 증가하게 하고 두번째 스위치를 누르면 1 감소되도록 소스를 만들었다. 그리고 세번째 스위치를 누르면 지금 나타내고 있는 숫자가 입력이 되면서 lcd에 입력한 숫자가 유지되도록 저장하는 소스와 다음번 숫자가 옆쪽에 나타내도록 하는 소스를 만들었다. 추가로 3번째 스위치가 누르면 임의의 변수 record를 놓고 이 record의 위치한 비트를 숫자와 비교해 토글되도록 만들었다. 그렇게 최종적으로 총 4자리의 비밀번호가 맞게 되면 correct라는 문자가 lcd에 표시되도록 하는 소스를 만들었다. 소스를 나타내면

#include <mega128.h>
#include <delay.h>
#include <alcd.h>

#define Switch_1 (!PINE.4)
#define Switch_2 (!PINE.5)
#define Switch_3 (!PINE.6)

unsigned char number = 1;
unsigned char x = 0;
unsigned char y = 1;
unsigned char record = 0b00000000;
unsigned char record2 = 0b00001111;

void check(void)
{
    if(record == record2)
    {
        lcd_clear();
        lcd_gotoxy(0,1);
        lcd_putsf("correct");
        motor_on();
        delay_ms(100);
    }
}

void main(void)
{
    DDRC = 0xFF;
    DDRD = 0xFF;
    DDRE = 0x00;
    PORTE = 0x00;
    PORTD = 0x00;
           
    lcd_init(8);
    
    while(1)
    {      
        if(Switch_1)
        {
            number++;
            if(number >= 9)
            {
                number = 1;
            }
            delay_ms(100);
        }
        else if(Switch_2)
        {
            number--;
            if(number <= 0)
            {
                number = 8;
            }
            delay_ms(100);
        }
        switch(number)
        {
            case 1:
                lcd_gotoxy(0,0);
                lcd_putsf("1");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("1");
                    x++;
                    record ^= 0x01;
                    check(); 
                    delay_ms(100);
                }
                break;
            case 2:
                lcd_gotoxy(0,0);
                lcd_putsf("2");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("2");
                    x++;
                    record ^= 0x02;
                    check();
                    delay_ms(100);
                }
                break;
            case 3:
                lcd_gotoxy(0,0);
                lcd_putsf("3");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("3");
                    x++;
                    record ^= 0x04;
                    check();
                    delay_ms(100);
                }
                break;
            case 4:
                lcd_gotoxy(0,0);
                lcd_putsf("4");
                delay_ms(100);
                if(Switch_3)
                {        
                    lcd_gotoxy(x,y);
                    lcd_putsf("4");
                    x++;
                    record ^= 0x08;
                    check();
                    delay_ms(100);
                }
                break;
            case 5:
                lcd_gotoxy(0,0);
                lcd_putsf("5");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("5");
                    x++;
                    record ^= 0x10;
                    check(); 
                    delay_ms(100);
                }
                break;
            case 6:
                lcd_gotoxy(0,0);
                lcd_putsf("6");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("6");
                    x++;
                    record ^= 0x20;
                    check();
                    delay_ms(100);
                }
                break;
            case 7:
                lcd_gotoxy(0,0);
                lcd_putsf("7");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("7");
                    x++;
                    record ^= 0x40;
                    check();
                    delay_ms(100);
                }
                break;
            case 8:
                lcd_gotoxy(0,0);
                lcd_putsf("8");
                delay_ms(100);
                if(Switch_3)
                {   
                    lcd_gotoxy(x,y);
                    lcd_putsf("8");
                    x++;
                    record ^= 0x80;
                    check();
                    delay_ms(100);
                }
                break;          
        }
    }
}

코드는 대략 이렇게 만들었고 이후에 비밀번호를 맞추고 모터를 돌리는 소스를 만들려 한다.


Me

github를 이용해 만들어본 블로그입니다.