<div>// ex3-16.c</div> <div><br></div> <div>#include <mega128.h> </div> <div><br></div> <div>#include <delay.h></div> <div><br></div> <div> </div> <div><br></div> <div>typedef unsigned char u_char;</div> <div><br></div> <div> </div> <div><br></div> <div>flash u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};</div> <div><br></div> <div>u_char hour = 12, min = 0, sec = 0;</div> <div><br></div> <div>u_char N1000 = 0, N100 = 0, N10 = 0, N1 = 0; </div> <div><br></div> <div>u_char pos = 0; // 0 : 1자리, 1 : 10자리 , 2 : 100자리 , 3 : 1000자리 </div> <div><br></div> <div> int CntFlg=0, KeyFlg=0;</div> <div><br></div> <div>void time_Disp(void); // 시간 표시</div> <div><br></div> <div>void sw_key1(void); // SW1 입력 처리 함수</div> <div><br></div> <div>void sw_key2(void); // SW2 입력 처리 함수</div> <div><br></div> <div>void sw_key3(void); // SW3 입력 처리 함수</div> <div><br></div> <div>void sw_key4(void); // SW4 입력 처리 함수</div> <div><br></div> <div> </div> <div><br></div> <div>void main(void) // 스위치입력확인 초랑 분 더하기.</div> <div>{</div> <div><br></div> <div> u_char old_sw, sw, n, ; </div> <div> int CntFlg=0, KeyFlg=0;</div> <div><br></div> <div> </div> <div><br></div> <div> DDRB = 0xF0; // 포트 B 상위 4비트 출력 설정</div> <div><br></div> <div> DDRD = 0xF0; // 포트 D 상위 4비트 출력 설정</div> <div><br></div> <div> DDRG = 0x0F; // 포트 G 하위 4비트 출력 설정</div> <div><br></div> <div> DDRE = 0x0; // 포트 E 입력설정</div> <div><br></div> <div> </div> <div><br></div> <div> PORTB = 0x0; // E, F, G, DP off</div> <div><br></div> <div> PORTD = 0x0; // A, B, C, D off</div> <div><br></div> <div> </div> <div><br></div> <div> old_sw = PINE & 0b11110000; // SW1 상태값 추출</div> <div><br></div> <div> while(1){</div> <div><br></div> <div> for(n = 0;n < 10;n++){ // 약 1초 경과 루틴 </div> <div><br></div> <div> time_Disp(); // 현재 시간 표시</div> <div><br></div> <div> </div> <div><br></div> <div> sw = PINE & 0b11110000; // SW1 상태값 추출</div> <div><br></div> <div> if(sw == old_sw) continue; // 스위치 상태 변화 없으면 선두로</div> <div><br></div> <div> </div> <div><br></div> <div> if(old_sw == 0b11110000 && </div> <div><br></div> <div> sw == 0b11100000) sw_key1(); // SW1 입력 처리</div> <div><br></div> <div> else if(old_sw == 0b11110000 && </div> <div><br></div> <div> sw == 0b11010000) sw_key2(); // SW2 입력 처리</div> <div> if(old_sw == 0b11110000 && // sw3 입력 처 </div> <div> sw == 0b10110000)sw_key3(); </div> <div> </div> <div> </div> <div> </div> <div> }</div> <div> </div> <div> //sw4 누르면 시계정지</div> <div> if(sw != 0b01110000)</div> <div> sec++; </div> <div> }</div> <div> if(sec == 60){ // 초값 =60이면 분값 증가</div> <div><br></div> <div> sec = 0;</div> <div><br></div> <div> min++;</div> <div><br></div> <div> </div> <div><br></div> <div> if(min == 60) { // 분값 =60이면 시간 증가</div> <div><br></div> <div> min = 0;</div> <div><br></div> <div> </div> <div> }</div> <div><br></div> <div> }</div> <div><br></div> <div> }</div> <div><br></div> <div><br></div> <div> </div> <div><br></div> <div>// 현재 시간 출력</div> <div><br></div> <div>void time_Disp() //min이랑sec에서 분과 초값을 추출하기, min,sec값으로 세그먼트화면에 표시한다.</div> <div><br></div> <div>{ </div> <div><br></div> <div> int i;</div> <div><br></div> <div> </div> <div><br></div> <div> N1000 = min / 10; // 시간 10자리 추출</div> <div><br></div> <div> N100 = min % 10; // 시간 1자리 추출</div> <div><br></div> <div> </div> <div><br></div> <div> N10 = sec / 10; // 분 10자리 추출</div> <div><br></div> <div> N1 = sec % 10; // 분 1자리 추출 </div> <div><br></div> <div> </div> <div><br></div> <div> for(i = 0;i < 5;i++){ </div> <div><br></div> <div> PORTG = 0b00001000; // 7-Seg DIG4 ON(PG3=1), 분 1자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N1] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N1] & 0x70 ) | (PORTB & 0x0F);</div> <div><br></div> <div> delay_ms(5);</div> <div><br></div> <div> </div> <div><br></div> <div> PORTG = 0b00000100; // 7-Seg DIG3 ON(PG2=1), 분 10자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N10] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N10] & 0x70 ) | (PORTB & 0x0F); </div> <div><br></div> <div> delay_ms(5); </div> <div><br></div> <div> </div> <div><br></div> <div> PORTG = 0b00000010; // 7-Seg DIG2 ON(PG1=1), 시간 1자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N100] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N100] & 0x70 ) | (PORTB & 0x0F); </div> <div><br></div> <div> delay_ms(5);</div> <div><br></div> <div> </div> <div><br></div> <div> PORTG = 0b00000001; // 7-Seg DIG1 ON(PG0=1), 시간 10자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N1000] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N1000] & 0x70 ) | (PORTB & 0x0F); </div> <div><br></div> <div> delay_ms(5);</div> <div><br></div> <div> } </div> <div><br></div> <div>}</div> <div><br></div> <div> </div> <div><br></div> <div>// sw1 입력처리</div> <div><br></div> <div>void sw_key1(void)</div> <div><br></div> <div>{</div> <div><br></div> <div> N1 = sec % 10; // 현재 초 1자리 추출</div> <div><br></div> <div> N10 = sec / 10; // 현재 초 10자리 추출</div> <div><br></div> <div> N100 = min % 10; // 현재 분 1자리 추출</div> <div><br></div> <div> N1000 = min / 10; // 현재 분 10자리 추출</div> <div><br></div> <div> </div> <div><br></div> <div> if(pos == 0) N1 = (N1 + 1) % 10; // 초 1단위 +1 </div> <div><br></div> <div> else if(pos == 1) N10 = (N10 + 1) % 6; // 초 10단위 +1</div> <div><br></div> <div> else if(pos == 2) N100 = (N100 + 1) % 10; // 분 1단위 +1 </div> <div> </div> <div> else if(pos == 3) N1000 = (N1000 + 1) % 6; // 초 10단위 +1</div> <div><br></div> <div> </div> <div><br></div> <div> </div> <div><br></div> <div> min = N1000 * 10 + N100; // 시간 계산</div> <div><br></div> <div> sec = N10 * 10 + N1; // 분 계산</div> <div><br></div> <div>} </div> <div><br></div> <div> </div> <div><br></div> <div>// sw2 입력처리</div> <div><br></div> <div>void sw_key2(void)</div> <div><br></div> <div>{ </div> <div><br></div> <div> pos = (pos + 1) % 4; // 입력 자리 이동</div> <div><br></div> <div>} </div> <div><br></div> <div>void sw_key3(void)</div> <div>{ </div> <div> sec = 0;</div> <div> min = 0;</div> <div>}</div> <div> </div> <div>void sw_key4(void)</div> <div>{ if(KeyFlg==0)</div> <div>KeyFlg=1;</div> <div>else KeyFlg =0;</div> <div>}</div> <div>위의소스는</div> <div>atmega128구동하기위해서 짠건데 스위치 4를 눌렀을때 시간흐르던게 멈추는데 누르는거 유지안하고 한번만 눌러도 시간이 멈췄따가 다시누르면 시간이 흐르는 코드를 못짜겠어서 여쭤보려고 합니다...도와주세요 ㅠㅠ </div> <div>본삭금 걸었습니다. 감사합니다... 아래는 제가 짜본건데 Error: C:\cvavreval\BIN\samplewatch.c(96): declaration syntax error 라고떠서 안되네요... 이소스만되면 가능한데; 도대체 왜 에러가뜨는지 모르겠습니다.. 알려주시면 감사하겠습니다 읽어주셔서 감사합니다.</div> <div> <div>// ex3-16.c</div> <div><br></div> <div>#include <mega128.h> </div> <div><br></div> <div>#include <delay.h></div> <div><br></div> <div> </div> <div><br></div> <div>typedef unsigned char u_char;</div> <div><br></div> <div> </div> <div><br></div> <div>flash u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};</div> <div><br></div> <div>u_char hour = 12, min = 0, sec = 0;</div> <div><br></div> <div>u_char N1000 = 0, N100 = 0, N10 = 0, N1 = 0; </div> <div><br></div> <div>u_char pos = 0; // 0 : 1자리, 1 : 10자리 , 2 : 100자리 , 3 : 1000자리 </div> <div><br></div> <div> int CntFlg=0, KeyFlg=0;</div> <div><br></div> <div>void time_Disp(void); // 시간 표시</div> <div><br></div> <div>void sw_key1(void); // SW1 입력 처리 함수</div> <div><br></div> <div>void sw_key2(void); // SW2 입력 처리 함수</div> <div><br></div> <div>void sw_key3(void); // SW3 입력 처리 함수</div> <div><br></div> <div>void sw_key4(void); // SW4 입력 처리 함수</div> <div><br></div> <div> </div> <div><br></div> <div>void main(void) // 스위치입력확인 초랑 분 더하기.</div> <div>{</div> <div><br></div> <div> u_char old_sw, sw, n, ; </div> <div> int CntFlg=0, KeyFlg=0;</div> <div><br></div> <div> </div> <div><br></div> <div> DDRB = 0xF0; // 포트 B 상위 4비트 출력 설정</div> <div><br></div> <div> DDRD = 0xF0; // 포트 D 상위 4비트 출력 설정</div> <div><br></div> <div> DDRG = 0x0F; // 포트 G 하위 4비트 출력 설정</div> <div><br></div> <div> DDRE = 0x0; // 포트 E 입력설정</div> <div><br></div> <div> </div> <div><br></div> <div> PORTB = 0x0; // E, F, G, DP off</div> <div><br></div> <div> PORTD = 0x0; // A, B, C, D off</div> <div><br></div> <div> </div> <div><br></div> <div> old_sw = PINE & 0b11110000; // SW1 상태값 추출</div> <div><br></div> <div> while(1){</div> <div><br></div> <div> for(n = 0;n < 10;n++){ // 약 1초 경과 루틴 </div> <div><br></div> <div> time_Disp(); // 현재 시간 표시</div> <div><br></div> <div> </div> <div><br></div> <div> sw = PINE & 0b11110000; // SW1 상태값 추출</div> <div><br></div> <div> if(sw == old_sw) continue; // 스위치 상태 변화 없으면 선두로</div> <div><br></div> <div> </div> <div><br></div> <div> if(old_sw == 0b11110000 && </div> <div><br></div> <div> sw == 0b11100000) sw_key1(); // SW1 입력 처리</div> <div><br></div> <div> else if(old_sw == 0b11110000 && </div> <div><br></div> <div> sw == 0b11010000) sw_key2(); // SW2 입력 처리</div> <div> if(old_sw == 0b11110000 && // sw3 입력 처 </div> <div> sw == 0b10110000)sw_key3(); </div> <div> </div> <div> </div> <div> </div> <div> }</div> <div> </div> <div> if( sw == 0b01110000 )sw_key4(); //sw4 누르면 시계정지</div> <div> if(KeyFlg == CntFlg )</div> <div> sec++; }</div> <div> </div> <div> </div> <div> </div> <div> }</div> <div> if(sec == 60){ // 초값 =60이면 분값 증가</div> <div><br></div> <div> sec = 0;</div> <div><br></div> <div> min++;</div> <div><br></div> <div> </div> <div><br></div> <div> if(min == 60) { // 분값 =60이면 시간 증가</div> <div><br></div> <div> min = 0;</div> <div><br></div> <div> </div> <div> }</div> <div><br></div> <div> }</div> <div><br></div> <div> }</div> <div><br></div> <div><br></div> <div> </div> <div><br></div> <div>// 현재 시간 출력</div> <div><br></div> <div>void time_Disp() //min이랑sec에서 분과 초값을 추출하기, min,sec값으로 세그먼트화면에 표시한다.</div> <div><br></div> <div>{ </div> <div><br></div> <div> int i;</div> <div><br></div> <div> </div> <div><br></div> <div> N1000 = min / 10; // 시간 10자리 추출</div> <div><br></div> <div> N100 = min % 10; // 시간 1자리 추출</div> <div><br></div> <div> </div> <div><br></div> <div> N10 = sec / 10; // 분 10자리 추출</div> <div><br></div> <div> N1 = sec % 10; // 분 1자리 추출 </div> <div><br></div> <div> </div> <div><br></div> <div> for(i = 0;i < 5;i++){ </div> <div><br></div> <div> PORTG = 0b00001000; // 7-Seg DIG4 ON(PG3=1), 분 1자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N1] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N1] & 0x70 ) | (PORTB & 0x0F);</div> <div><br></div> <div> delay_ms(5);</div> <div><br></div> <div> </div> <div><br></div> <div> PORTG = 0b00000100; // 7-Seg DIG3 ON(PG2=1), 분 10자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N10] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N10] & 0x70 ) | (PORTB & 0x0F); </div> <div><br></div> <div> delay_ms(5); </div> <div><br></div> <div> </div> <div><br></div> <div> PORTG = 0b00000010; // 7-Seg DIG2 ON(PG1=1), 시간 1자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N100] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N100] & 0x70 ) | (PORTB & 0x0F); </div> <div><br></div> <div> delay_ms(5);</div> <div><br></div> <div> </div> <div><br></div> <div> PORTG = 0b00000001; // 7-Seg DIG1 ON(PG0=1), 시간 10자리 표시</div> <div><br></div> <div> PORTD = ((seg_pat[N1000] & 0x0F) << 4) | (PORTD & 0x0F);</div> <div><br></div> <div> PORTB = (seg_pat[N1000] & 0x70 ) | (PORTB & 0x0F); </div> <div><br></div> <div> delay_ms(5);</div> <div><br></div> <div> } </div> <div><br></div> <div>}</div> <div><br></div> <div> </div> <div><br></div> <div>// sw1 입력처리</div> <div><br></div> <div>void sw_key1(void)</div> <div><br></div> <div>{</div> <div><br></div> <div> N1 = sec % 10; // 현재 초 1자리 추출</div> <div><br></div> <div> N10 = sec / 10; // 현재 초 10자리 추출</div> <div><br></div> <div> N100 = min % 10; // 현재 분 1자리 추출</div> <div><br></div> <div> N1000 = min / 10; // 현재 분 10자리 추출</div> <div><br></div> <div> </div> <div><br></div> <div> if(pos == 0) N1 = (N1 + 1) % 10; // 초 1단위 +1 </div> <div><br></div> <div> else if(pos == 1) N10 = (N10 + 1) % 6; // 초 10단위 +1</div> <div><br></div> <div> else if(pos == 2) N100 = (N100 + 1) % 10; // 분 1단위 +1 </div> <div> </div> <div> else if(pos == 3) N1000 = (N1000 + 1) % 6; // 초 10단위 +1</div> <div><br></div> <div> </div> <div><br></div> <div> </div> <div><br></div> <div> min = N1000 * 10 + N100; // 시간 계산</div> <div><br></div> <div> sec = N10 * 10 + N1; // 분 계산</div> <div><br></div> <div>} </div> <div><br></div> <div> </div> <div><br></div> <div>// sw2 입력처리</div> <div><br></div> <div>void sw_key2(void)</div> <div><br></div> <div>{ </div> <div><br></div> <div> pos = (pos + 1) % 4; // 입력 자리 이동</div> <div><br></div> <div>} </div> <div><br></div> <div>void sw_key3(void)</div> <div>{ </div> <div> sec = 0;</div> <div> min = 0;</div> <div>}</div> <div> </div> <div>void sw_key4(void)</div> <div>{ if(KeyFlg==0)</div> <div>KeyFlg=1;</div> <div>else KeyFlg =0;</div> <div>}</div> <div> </div> <div><br></div> <div><br></div></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.