// sw3.c
// switch input test
// PD(port D) : SW7,6,5,4 LED3,2,1,0
#include <avr/io.h>
#include <util/delay.h>
void switch4();
void switch5();
int main(void) {
unsigned char led;
int dir = 0;
DDRD = 0x0f; // 0000:input, 1111:output
while(1) {
led = PIND | 0x0f; // 1111 1111 : light off // when switch not pressed,
if(led != 0xff) { // when switch pressed,
led >>= 4;
led |= 0xf0;
if(led == 0xfe)
switch4();
else if(led == 0xfd)
switch5();
else if(led == 0xfc){
switch4();
switch5();
}
else if(led == 0xfb)
PORTD = !led;
}
else // if switch not pressed,
PORTD = 0xff; // led off
_delay_ms(100);
}//while
return(0);
}
void switch4(){
while(1){
led <<= 1; // shift left 1bit
led |= 0xf1; // 1111 0001, 우측에 1을 삽입
if(led == 0xff)
led = 0xfe;
PORTD = led; // LED on concerning sw pressed,
}
}
void switch5(){
while(1){
led >>= 1;
led |= 0x80;
if(led == 0xff)
led = 0xf7;
PORTD = led; // LED on concerning sw pressed,
}
}
// switch input test
// PD(port D) : SW7,6,5,4 LED3,2,1,0
#include <avr/io.h>
#include <util/delay.h>
void switch4();
void switch5();
int main(void) {
unsigned char led;
int dir = 0;
DDRD = 0x0f; // 0000:input, 1111:output
while(1) {
led = PIND | 0x0f; // 1111 1111 : light off // when switch not pressed,
if(led != 0xff) { // when switch pressed,
led >>= 4;
led |= 0xf0;
if(led == 0xfe)
switch4();
else if(led == 0xfd)
switch5();
else if(led == 0xfc){
switch4();
switch5();
}
else if(led == 0xfb)
PORTD = !led;
}
else // if switch not pressed,
PORTD = 0xff; // led off
_delay_ms(100);
}//while
return(0);
}
void switch4(){
while(1){
led <<= 1; // shift left 1bit
led |= 0xf1; // 1111 0001, 우측에 1을 삽입
if(led == 0xff)
led = 0xfe;
PORTD = led; // LED on concerning sw pressed,
}
}
void switch5(){
while(1){
led >>= 1;
led |= 0x80;
if(led == 0xff)
led = 0xf7;
PORTD = led; // LED on concerning sw pressed,
}
}
댓글 없음:
댓글 쓰기