[ 간략 설명 ]
◈ ATmega128 SWITCH 제어
◈ 스위치는 CPU의 PE포트와 연결 되어 있다.
SW8 -> (PE7) SW14 -> (PE6)
SW15 -> (PE5) SW16 -> (PE4)
Port E에 연결된 Switch8,14,15,16 에서 입력한 data가 Port C의 4개의 LED에 출력되게 한다.
/* ATmega128 P.95
Switch 제어실습
포트 E의 스위치 상태를 포트 C의 하위와 상위에 출력
*/
#include <mega128.h>
void main(void)
{
unsigned char Key, Lout, Mout;
DDRC = 0xff; //포트 C출력 설정
DDRE = 0b00000010; //PE4 - PE7 SWITCH 입력 설정
PORTC = 0xff;
while(1){
Key = PINE & 0xf0; // 스위치 읽어오기
Mout = 0xf0 ^ Key; // 상위 출력값 x-or
Lout = ( Key >> 4); // 하위 출력값
PORTC = Mout | Lout; // 포트 C에 or 출력
}
}//end main
위의 예제(p95)와 반대. D5, D7, D8, D9 ( D6은 다른 곳에 사용됨)
Port E에 연결된 Switch8,14,15,16 에서 입력한 data가 Port C의 4개의 LED에 출력되게 한다.
//P.96 스위치 입력 제어 ,
#include <mega128.h>
#include <delay.h>
void main(void)
{
unsigned char key, Lout, Mout;
DDRC = 0xff;
DDRE = 0b00000010;
PORTC = 0xff;
while(1) {
key = PINE & 0xf0; // 1111 **** AND 1111 0000 = 1111 0000
key >>=4; // key = (key>>4) // 0000 1111
Lout = 0x0f ^ key; //ex-or // 0000 1111 XOR 0000 1111 = 0000 0000
Mout = (key << 4); //4 left shift // 1111 0000
PORTC = Mout | Lout; //or // 1111 0000 OR 0000 0000 = 1111 0000
}
}
/*
결과값 :1111 0000 = 상위비트 와 LED 순서는 반대 ( 회로 제작시 반대로 설정된 것임_ 오해하지말자!)
LED 값 ( D1 ~ D9 ) = |ON|ON|ON|ON|OFF|OFF|OFF|OFF|
LED 번호는 실제 KIT 번호로 사용 ( 중간에 D6번 LED는 다른 곳에 쓰임)
*/
4개의 입력 스위치 (SW8,14,15,16)에 따라 점등하는 LED
/* P.97 SWITCH 입력예제 : 4개의 스위치 SW8, SW14, SW15, SW16의 입력에 대한 LED값 작동
- SW8 'ON' = LED All 'ON'
- SW14 'ON' = LED All 'OFF'
- SW15 'ON' = Even LED 'ON'
- SW16 'ON' = Odd LED 'ON'
*/
#include <mega128.h>
void main(void)
{
unsigned char Key;
DDRC = 0xff; // 포트 C 출력 설정
DDRE = 0b00000010; // PE4 - PE7 핀 입력 설정
PORTC = 0xff; // LED 모두 OFF
while(1){
Key = PINE & 0xf0; // E 포트 읽어 오기
switch(Key){
case 0b11100000:
PORTC = 0x00; // SW8 이 눌리면 모두 ON
break;
case 0b11010000:
PORTC = 0xff; // SW14 이 눌리면 모두 OFF
break;
case 0b10110000:
PORTC = 0b01010101; // SW15 이 눌리면 짝수번째 ON
break;
case 0b01110000:
PORTC = 0b10101010; // SW16 이 눌리면 짝수번째 ON
break;
default: break; // 아무 일도 하지 않음
}
}
}//end main
SW8이 눌려질때마다 POTR C의 LED를 왼쪽으로 쉬프트 점멸
/* P.98 SWITCH 입력제어
- SW8이 눌려질때 POTR C에 연결된 LED를 왼쪽으로 쉬프트 시켜가며 순차 점멸 프로그램
*/
#include <mega128.h>
void main(void)
{
unsigned char Oldkey, Key, Led;
DDRC = 0xff; // 포트 C 출력 설정
DDRE = 0b00000010; // PE4 - PE7 핀 입력 설정
Led = 0xfe;
PORTC = Led;
Oldkey = PINE & 0b00010000; // SW1 상태만 추출(과거)
while(1){
Key = PINE & 0b00010000; // SW1 상태만 추출(현재_
if(Oldkey != 0 && Key == 0) { // 관계 연산자 둘 다 만족
// 먼저 상태 OFF, 현 상태 ON ?
Led = (Led << 1) | 0x01; // 1비트 쉬프트 or
if(Led == 0xff) Led = 0xfe;
PORTC = Led;
}
Oldkey = Key; // 먼저 상태 <- 현상태
}
}