1번 스위치 : 홀수 번째 LED 점등
2번 스위치 : 짝수 번째 LED 점등
3번 스위치 : LED들이 Shift Left
4번 스위치 : LED들이 Shift Right
5번 스위치 : 모든 LED 점등
6번 스위치 : 두개의 LED들이 Shift Left되며 점등
7번 스위치 : 두개의 LED들이 Shift Right되며 점등
8번 스위치 : 크리스마스 트리.
/*
날짜 : 2023-10-17
작성자 : 권xx
설명 : 스위치 입력에 따라 LED를 제어하는 프로그램.
*/
#include <mega128.h>
#include <delay.h>
#define LED_CON *((unsigned char *)0x8000) // LED Control bus
void main(void)
{
unsigned char SW = 0; // 변수 SW 선언
int i = 0; // 변수 i 선언
unsigned char buff = 0; // 변수 buff 선언
DDRB = 0x00; // PORTB INPUTPORT 설정
MCUCR = 0x80; // 외부 메모리와 I/O 제어 활성화
// 외부 I/O 초기화
LED_CON = 0x00; // LED GLCD 제어 버스
while (1)
{
SW = PINB;
switch (SW)
{
case 0xFE: // 홀수 LED 점등
LED_CON = 0x55;
break;
case 0xFD: // 짝수 LED 점등
LED_CON = 0xAA;
break;
case 0xFB: // 왼쪽으로 LED 이동
for (i = 0; i < 8; i++)
{
LED_CON = 1 << i;
delay_ms(100); // 이동 속도를 일정하게 설정
}
break;
case 0xF7: // 오른쪽으로 LED 이동
for (i = 7; i >= 0; i--)
{
LED_CON = 1 << i;
delay_ms(100); // 이동 속도를 일정하게 설정
}
break;
case 0xEF: // 모든 LED 점등
LED_CON = 0xFF;
break;
case 0xDF: // 두 개씩 왼쪽으로 이동
for (i = 0; i < 4; i++)
{
LED_CON = (1 << (2 * i)) | (1 << (2 * i + 1));
delay_ms(200); // 이동 속도를 일정하게 설정
}
break;
case 0xBF: // 두 개씩 오른쪽으로 이동
for (i = 0; i < 4; i++)
{
LED_CON = (1 << (6 - 2 * i)) | (1 << (7 - 2 * i));
delay_ms(200); // 이동 속도를 일정하게 설정
}
break;
case 0x7F: // 홀수와 짝수 번갈아가며 점등
for (i = 0; i < 4; i++)
{
LED_CON = 0x55;
delay_ms(400); // 이동 속도를 일정하게 설정
LED_CON = 0xAA;
delay_ms(400); // 이동 속도를 일정하게 설정
}
break;
default:
LED_CON = 0x00;
break;
}
}
}
728x90
'C, C++ > 임베디드 시스템' 카테고리의 다른 글
임베디드시스템 릴레이 부저 제어 테스트 (0) | 2023.11.18 |
---|---|
임베디드시스템 포토센서를 활용한 외부 인터럽트 제어 (0) | 2023.11.18 |
임베디드시스템 간단한 택시미터기 (0) | 2023.11.08 |
임베디드시스템 FND 숫자 증가 제어 (1) | 2023.11.08 |
임베디드 시스템 LED 쉬프트 출력 (0) | 2023.11.08 |