[졸업작품] atmega128을 이용한 뽑기게임(사탕뽑기) - <신나는 뽑기 게임>
본 자료는 6페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
해당 자료는 6페이지 까지만 미리보기를 제공합니다.
6페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[졸업작품] atmega128을 이용한 뽑기게임(사탕뽑기) - <신나는 뽑기 게임>에 대한 보고서 자료입니다.

목차

1. 제목
<신나는 뽑기 게임>

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초까지
  • 가격20,000
  • 페이지수19페이지
  • 등록일2014.01.07
  • 저작시기2013.5
  • 파일형식한글(hwp)
  • 자료번호#901305
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니