목차
1. 제목
<신나는 뽑기 게임>
2. 작품개요(동작개요)
3. 회로도
1) 회로
2) 사용포트
3) 부품리스트
4. 처리 흐름도(flow chart)
5. 소스 리스트
6. 작품사진
<신나는 뽑기 게임>
2. 작품개요(동작개요)
3. 회로도
1) 회로
2) 사용포트
3) 부품리스트
4. 처리 흐름도(flow chart)
5. 소스 리스트
6. 작품사진
본문내용
임이 끝나면 타이머0 정지
if(n < m_bit[i]){ // 박자를 다 안 채우면
TCNT0 = note[i]; // 타이머 초기값 재설정
PORTC.7 = !PORTC.7; // 토글하여 파형 만들기
n++;
}
else{
n = 0;
i++; // 박자 다 채우면 다음 음게, 박자를 위한 증가
}
if(i == 24) i = 0; // 음악 끝나면 처음부터
}
interrupt [TIM1_OVF] void timer_int1(void) // 타이머1, 게임 시간
{
if(t_cnt > 0 && start == 1){ // 시간이 지나지 않았으면
t_cnt--; // 시간 감소
TCNT1 = 49911; // 초기값 재설정
}
else{ // 시간이 끝나면
t_cnt = time_r; // 시간 재설정
start = 0; // 시작 변수 = 0
PORTC = PORTC & 0xC0;
fin = 1;
TCNT1 = 49911; // 초기값 재설정
TCCR1B = 0; // 타이머 정지
}
}
interrupt [TIM2_OVF] void timer_int2(void) // 사탕 잡는 함수
{
TCNT2 = 0; // 타이머 초기값 재설정
d_cnt++; // 집게 다운 카운터 증가
if(d_cnt < delay_t) PORTC.0 = 1; // 다운 시간 동안 모터 아래로
else if(d_cnt < (2*delay_t)){ // 다운 시간 끝나면 모터 위로
PORTC.0 = 0;
PORTC.1 = 1;
}
else{ // 모터 움직임 끝나면 초기화
PORTC.1 = 0;
d_fin = 1;
TCCR2 = 0;
start = 0;
}
}
void game_state(void) // 모터 동작 함수
{
if(PINA.0 == 1 && down == 0){ // 아래쪽 스위치 눌리면
down = 1; // 모터 다운 변수 증가
d_cnt = 0; // 다운 시간 초기화
delay_t = 50; // 다운 시간 값 설정
TCCR2 = 0x05; // 모터 다운 카운터 시작
}
else if(PINA.2 == 1 && st_r == 1) PORTC.2 = 1; // 오른쪽
else if(PINA.3 == 1 && st_l == 1) PORTC.3 = 1; // 왼쪽
else if(PINA.4 == 1 && st_f == 1) PORTC.4 = 1; // 앞쪽
else if(PINA.5 == 1 && st_b == 1) PORTC.5 = 1; //뒤쪽
else PORTC = PORTC & 0xC3; // 스위치 안눌리면 모터정지
}
void check_limit(void) // 이동 위치 제한
{
lm_sw = PING & 0b00001111; // 스위치 값 받기
st_l = 1;
st_r = 1; // 초기값 설정
st_b = 1;
st_f = 1;
if(lm_sw == 0b00000100 | lm_sw == 0b00000110 | lm_sw == 0b00000101) st_l = 0; // 왼쪽 리미트 변수
if(lm_sw == 0b00001000 | lm_sw == 0b00001010 | lm_sw == 0b00001001) st_r = 0; // 오른쪽 리미트 변수
if(lm_sw == 0b00000001 | lm_sw == 0b00000101 | lm_sw == 0b00001001) st_f = 0; // 앞쪽 리미트 변수
if(lm_sw == 0b00000010 | lm_sw == 0b00000110 | lm_sw == 0b00001010) st_b = 0; // 뒤쪽 리미트 변수
}
void ini_loca(void) // 초기 위치 설정 함수
{
if(down == 0){ // 아래쪽 모터 작동 안했으면
down = 1; // 모터 다운 변수 증가
d_fin = 0; // 초기 위치 가기 위한 변수 설정
d_cnt = 0; // 다운 시간 초기화
delay_t = 50; // 다운 시간 값 설정
TCCR2 = 0x05; // 모터 다운 카운터 시작
}
if(st_l != 0 && d_fin == 1) PORTC.3 = 1; // 리미트 스위치 눌릴때까지 왼쪽 이동
else PORTC.3 = 0;
if(st_f != 0 && d_fin == 1) PORTC.4 = 1; // 리미트 스위치 눌릴때까지 앞쪽 이동
else PORTC.4 = 0;
if(down == 1 && st_f == 0 && st_l == 0){ // 초기 위치에서 사탕 놓기
down = 2; // 두번째 모터 내려가기에서 다운 변수 증가
d_cnt = 0;
i = 0;
delay_t = 10;
TCCR2 = 0x05;
}
}
void Time_out(void) // 값 표시 함수
{
u_char seg1, seg2;
if(ch_time == 1) { // 시간 변경 모드의 경우 A, 시간 표시
seg1 = 10;
seg2 = time_r;
}
else { // 게임 동작 모드의 경우 동전, 시간 표시
seg1 = coin_en % 10;
seg2 = t_cnt;
}
PORTF = 0b11100000; // SEG 1, 초1단위
PORTB = seg_pat[seg1];
delay_ms(5);
PORTF = 0b10110000; // SEG 3, 초2단위
PORTB = seg_pat[seg2 % 10];
delay_ms(5);
PORTF = 0b01110000; // SEG 4, 동전표시
PORTB = seg_pat[seg2 / 10];
delay_ms(5);
}
void AD_chan(int val) // ADC값 변환 함수
{
float fval;
fval = (float)val * 20.0 / 1024;
time_r = (int)(fval + 10.5); // 10-30까지 표시
}
작품사진
전체적 외관
시간, 동전 표시 부분
모터 내부
lb1630 테스트
스피커
리미트 스위치 연결 부분
방향 스위치 연결 부분
모터제어부분, 스피커 구동 회로
동작 사진
동전 동작 사진
시간 조정 모드 10초부터
시간 조정 모드 30초까지
if(n < m_bit[i]){ // 박자를 다 안 채우면
TCNT0 = note[i]; // 타이머 초기값 재설정
PORTC.7 = !PORTC.7; // 토글하여 파형 만들기
n++;
}
else{
n = 0;
i++; // 박자 다 채우면 다음 음게, 박자를 위한 증가
}
if(i == 24) i = 0; // 음악 끝나면 처음부터
}
interrupt [TIM1_OVF] void timer_int1(void) // 타이머1, 게임 시간
{
if(t_cnt > 0 && start == 1){ // 시간이 지나지 않았으면
t_cnt--; // 시간 감소
TCNT1 = 49911; // 초기값 재설정
}
else{ // 시간이 끝나면
t_cnt = time_r; // 시간 재설정
start = 0; // 시작 변수 = 0
PORTC = PORTC & 0xC0;
fin = 1;
TCNT1 = 49911; // 초기값 재설정
TCCR1B = 0; // 타이머 정지
}
}
interrupt [TIM2_OVF] void timer_int2(void) // 사탕 잡는 함수
{
TCNT2 = 0; // 타이머 초기값 재설정
d_cnt++; // 집게 다운 카운터 증가
if(d_cnt < delay_t) PORTC.0 = 1; // 다운 시간 동안 모터 아래로
else if(d_cnt < (2*delay_t)){ // 다운 시간 끝나면 모터 위로
PORTC.0 = 0;
PORTC.1 = 1;
}
else{ // 모터 움직임 끝나면 초기화
PORTC.1 = 0;
d_fin = 1;
TCCR2 = 0;
start = 0;
}
}
void game_state(void) // 모터 동작 함수
{
if(PINA.0 == 1 && down == 0){ // 아래쪽 스위치 눌리면
down = 1; // 모터 다운 변수 증가
d_cnt = 0; // 다운 시간 초기화
delay_t = 50; // 다운 시간 값 설정
TCCR2 = 0x05; // 모터 다운 카운터 시작
}
else if(PINA.2 == 1 && st_r == 1) PORTC.2 = 1; // 오른쪽
else if(PINA.3 == 1 && st_l == 1) PORTC.3 = 1; // 왼쪽
else if(PINA.4 == 1 && st_f == 1) PORTC.4 = 1; // 앞쪽
else if(PINA.5 == 1 && st_b == 1) PORTC.5 = 1; //뒤쪽
else PORTC = PORTC & 0xC3; // 스위치 안눌리면 모터정지
}
void check_limit(void) // 이동 위치 제한
{
lm_sw = PING & 0b00001111; // 스위치 값 받기
st_l = 1;
st_r = 1; // 초기값 설정
st_b = 1;
st_f = 1;
if(lm_sw == 0b00000100 | lm_sw == 0b00000110 | lm_sw == 0b00000101) st_l = 0; // 왼쪽 리미트 변수
if(lm_sw == 0b00001000 | lm_sw == 0b00001010 | lm_sw == 0b00001001) st_r = 0; // 오른쪽 리미트 변수
if(lm_sw == 0b00000001 | lm_sw == 0b00000101 | lm_sw == 0b00001001) st_f = 0; // 앞쪽 리미트 변수
if(lm_sw == 0b00000010 | lm_sw == 0b00000110 | lm_sw == 0b00001010) st_b = 0; // 뒤쪽 리미트 변수
}
void ini_loca(void) // 초기 위치 설정 함수
{
if(down == 0){ // 아래쪽 모터 작동 안했으면
down = 1; // 모터 다운 변수 증가
d_fin = 0; // 초기 위치 가기 위한 변수 설정
d_cnt = 0; // 다운 시간 초기화
delay_t = 50; // 다운 시간 값 설정
TCCR2 = 0x05; // 모터 다운 카운터 시작
}
if(st_l != 0 && d_fin == 1) PORTC.3 = 1; // 리미트 스위치 눌릴때까지 왼쪽 이동
else PORTC.3 = 0;
if(st_f != 0 && d_fin == 1) PORTC.4 = 1; // 리미트 스위치 눌릴때까지 앞쪽 이동
else PORTC.4 = 0;
if(down == 1 && st_f == 0 && st_l == 0){ // 초기 위치에서 사탕 놓기
down = 2; // 두번째 모터 내려가기에서 다운 변수 증가
d_cnt = 0;
i = 0;
delay_t = 10;
TCCR2 = 0x05;
}
}
void Time_out(void) // 값 표시 함수
{
u_char seg1, seg2;
if(ch_time == 1) { // 시간 변경 모드의 경우 A, 시간 표시
seg1 = 10;
seg2 = time_r;
}
else { // 게임 동작 모드의 경우 동전, 시간 표시
seg1 = coin_en % 10;
seg2 = t_cnt;
}
PORTF = 0b11100000; // SEG 1, 초1단위
PORTB = seg_pat[seg1];
delay_ms(5);
PORTF = 0b10110000; // SEG 3, 초2단위
PORTB = seg_pat[seg2 % 10];
delay_ms(5);
PORTF = 0b01110000; // SEG 4, 동전표시
PORTB = seg_pat[seg2 / 10];
delay_ms(5);
}
void AD_chan(int val) // ADC값 변환 함수
{
float fval;
fval = (float)val * 20.0 / 1024;
time_r = (int)(fval + 10.5); // 10-30까지 표시
}
작품사진
전체적 외관
시간, 동전 표시 부분
모터 내부
lb1630 테스트
스피커
리미트 스위치 연결 부분
방향 스위치 연결 부분
모터제어부분, 스피커 구동 회로
동작 사진
동전 동작 사진
시간 조정 모드 10초부터
시간 조정 모드 30초까지
추천자료
<클럽 버터 플라이>의 스와핑...
17대 국회의원선거로 본 한국민주주의
인사고과사례
카지노게임의 종류
고교평준화의 대안책 - 자립형 사립고, 자율학교, 특성화학교
고교평준화에 대한 비평 및 찬반토론 조사
(임대주택) 임대주택의 필요성과 개념 및 현황과 임대주택 문제 개선방안
골프의 역사
[학습전략][교육전략][수업전략][교수학습전략]국어과교육 학습전략, 영어과교육 학습전략, ...
[비즈니스/경제] 리더십 [분석/조사]
★★스와핑의 정의와 원인 및 스와핑에 대한 의견 고찰★★
<만3세 부분수업계획안>주제: 동식물과 자연/동물- '숲 속 작은집 창가에' 새노래 수업계획...
소개글