BASIC4MCU | 질문게시판 | atmega 128 bit flag 관련 질문드립니다
페이지 정보
작성자 코드비전마스터 작성일2021-04-13 20:16 조회3,221회 댓글1건본문
하드웨어 연결
1. PD2에 SW1 연결
2. PORTC에 Bar LED 연결
동작
(1) 프로그램이 시작하면 0번 LED on
(2) 스위치를 누를 때마다 왼쪽으로 한 칸씩 쉬프트
(3) 7번 비트에 불이 켜진 뒤에는 스위치를 누를 때마다 오른쪽으로 한 칸씩 쉬프트
(4) 0번 비트에 불이 켜진 뒤에는 스위치를 누를 때마다 왼쪽으로 한 칸씩 쉬프트
(5) 3, 4번을 반복하도록 프로그램 작성
여기서 저는 #include <stdlib.h>
#include <math.h>
#include <mega128.h>
#include <delay.h>
void main(void){
char key, oldkey, led;
char flag = 0;
DDRD = 0b00000000;
DDRC = 0b11111111;
led = 0b11111110;
PORTC = led;
while(1){
key = PIND & 0b00000100;
if(oldkey != 0 && key == 0) {
flag = flag +1
if(flag%7==0){
led = (led<<1) | 0x01;
if(led == 0xFF) led = 0xFE;
PORTC = led;
}
if(flag%14==0){
led = (led>>1) | 0x80;
if(led == 0xFF) led = 0x7F;
PORTC = led;
}
oldkey =key;
delay_ms(100);
}
}
}
이렇게 짰는데 안나오더라구요.. 어떻게 하면 될까요?
댓글 1
조회수 3,221master님의 댓글
master 작성일
if(flag%7==0){}
if(flag%14==0){}
위 조건식으로 원하는대로 동작 할까요?
#include <stdlib.h>
#include <math.h>
#include <mega128.h>
#include <delay.h>
//
void main(void){
char key,oldkey,led=0,flag=0;
DDRC =0b11111111;
PORTC=led;
while(1){
key=PIND&4;
if(oldkey && key==0){
if(++led>15)flag=0;
if(flag<8){ PORTC=~(0x01<<led); }
else { PORTC=~(0x80>>(led-8)); }
delay_ms(100);
}
oldkey=key;
}
}