ARM

์บ๋ฆญํ„ฐ LCD๋กœ ๋ฉ”๋‰ด ์ „ํ™˜ํ•˜๊ธฐ — ๋ฒ„ํŠผ์œผ๋กœ UI ๊ตฌ์„ฑ

๊ฒŒ์ž„๊ต์ˆ˜ 2025. 4. 18. 07:55
๋ฐ˜์‘ํ˜•

๐Ÿ“บ ์บ๋ฆญํ„ฐ LCD๋กœ ๋ฉ”๋‰ด ์ „ํ™˜ํ•˜๊ธฐ โ€” ๋ฒ„ํŠผ UI ๊ตฌ์„ฑ

์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค LCD ํ™”๋ฉด์˜ ๋‚ด์šฉ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”๋‰ด ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด๋ด…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์€ ๊ฐ„๋‹จํ•œ ๋””๋ฐ”์ด์Šค UI ๊ตฌ์„ฑ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ดˆ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๐Ÿงฐ ์ค€๋น„๋ฌผ

  • ABOV A31G123ML ๋ณด๋“œ
  • 16x2 ์บ๋ฆญํ„ฐ LCD (HD44780)
  • ํ‘ธ์‹œ๋ฒ„ํŠผ 1๊ฐœ
  • 10kฮฉ ํ’€๋‹ค์šด ์ €ํ•ญ

๐Ÿ”Œ ํ•€ ์—ฐ๊ฒฐ

  • LCD: RS~D7 โ†’ P1.0 ~ P1.5
  • ๋ฒ„ํŠผ: P2.1 (์ž…๋ ฅ)

๐Ÿ’ป ์ฝ”๋“œ ์˜ˆ์‹œ: ๋ฒ„ํŠผ์œผ๋กœ ๋ฉ”๋‰ด ์ˆœํ™˜

#include "A31G123.h"
#include "lcd.h"

volatile int menu = 0;

void delay_ms(int ms) {
    for (volatile int i = 0; i < ms * 800; i++);
}

void lcd_show_menu(int index) {
    lcd_clear();
    switch (index) {
        case 0: lcd_puts("๐ŸŒก Temp Display"); break;
        case 1: lcd_puts("๐Ÿ’ก Brightness View"); break;
        case 2: lcd_puts("๐Ÿ”ง System Info"); break;
    }
}

int main(void)
{
    lcd_init();

    PORT2->MODE &= ~(1 << 1);     // P2.1 ์ž…๋ ฅ
    PORT2->PULLUP |= (1 << 1);    // ํ’€์—… (๋˜๋Š” ์™ธ๋ถ€ ํ’€๋‹ค์šด)

    lcd_show_menu(menu);

    while (1) {
        if (!(PORT2->IN & (1 << 1))) { // ๋ฒ„ํŠผ ๋ˆŒ๋ฆผ (Low)
            menu = (menu + 1) % 3;
            lcd_show_menu(menu);
            delay_ms(300); // ๋””๋ฐ”์šด์‹ฑ
        }
    }
}

โœ… ํ™•์ธ ํฌ์ธํŠธ

  • ๋ฒ„ํŠผ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค LCD ํ™”๋ฉด ์ „ํ™˜
  • 3๊ฐœ ๋ฉ”๋‰ด ์ˆœํ™˜: ์˜จ๋„, ๋ฐ๊ธฐ, ์‹œ์Šคํ…œ ์ •๋ณด
  • ํ–ฅํ›„ ๊ฐ ๋ฉ”๋‰ด์— ๊ธฐ๋Šฅ ์—ฐ๋™ ๊ฐ€๋Šฅ

๐Ÿ“š ๋งˆ๋ฌด๋ฆฌ

์ด์ œ ๋ฒ„ํŠผ ๊ธฐ๋ฐ˜ LCD ๋ฉ”๋‰ด ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”.
๋‹ค์Œ์€ ๊ฐ ๋ฉ”๋‰ด์— ์„ผ์„œ ์—ฐ๋™ ๋˜๋Š” ์„ค์ • ์กฐ์ ˆ

๋ฐ˜์‘ํ˜•