모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_22292
    작성자 : 밥보
    추천 : 0
    조회수 : 838
    IP : 220.149.***.136
    댓글 : 6개
    등록시간 : 2018/04/13 21:19:02
    http://todayhumor.com/?programmer_22292 모바일
    버튼을 눌렀다가 때면 시간이 멈추는 스탑워치 설계중인데 질문드립니다 ㅠㅠ
    옵션
    • 본인삭제금지
    // ex3-16.c

    #include <mega128.h> 

    #include <delay.h>

     

    typedef unsigned char u_char;

     

    flash u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

    u_char  hour = 12, min = 0, sec = 0;

    u_char  N1000 = 0, N100 = 0, N10 = 0, N1 = 0;  

    u_char  pos = 0;        // 0 : 1자리, 1 : 10자리 , 2 : 100자리 , 3 : 1000자리 

     int CntFlg=0, KeyFlg=0;

    void time_Disp(void);   // 시간 표시

    void sw_key1(void);     // SW1 입력 처리 함수

    void sw_key2(void);     // SW2 입력 처리 함수

    void sw_key3(void);     // SW3 입력 처리 함수

    void sw_key4(void);     // SW4 입력 처리 함수

     

    void main(void)   // 스위치입력확인 초랑 분 더하기.
    {

        u_char old_sw, sw, n, ;        
        int CntFlg=0, KeyFlg=0;

                        

        DDRB = 0xF0;                // 포트 B 상위 4비트 출력 설정

        DDRD = 0xF0;                // 포트 D 상위 4비트 출력 설정

        DDRG = 0x0F;                // 포트 G 하위 4비트 출력 설정

        DDRE = 0x0;                 // 포트 E 입력설정

         

        PORTB = 0x0;                // E, F, G, DP off

        PORTD = 0x0;                // A, B, C, D off

                     

        old_sw = PINE & 0b11110000;         // SW1 상태값 추출

        while(1){

            for(n = 0;n < 10;n++){          // 약 1초 경과 루틴        

                time_Disp();                 // 현재 시간 표시

               

                sw = PINE & 0b11110000;     // SW1 상태값 추출

                if(sw == old_sw) continue;  // 스위치 상태 변화 없으면 선두로

                                 

                if(old_sw == 0b11110000 && 

                   sw == 0b11100000) sw_key1();     // SW1 입력 처리

               else if(old_sw == 0b11110000 && 

                   sw == 0b11010000) sw_key2();     // SW2 입력 처리
                if(old_sw == 0b11110000 &&     // sw3 입력 처 
                    sw == 0b10110000)sw_key3();          
              
               
                
            }
                         
                    //sw4 누르면 시계정지
             if(sw != 0b01110000)
            sec++;  
                 }
            if(sec == 60){          // 초값 =60이면 분값 증가

                sec = 0;

                min++;

                

                if(min == 60) {     // 분값 =60이면 시간 증가

                    min = 0;

                   
                }

            }

        }


     

    // 현재 시간 출력

    void time_Disp()  //min이랑sec에서 분과 초값을 추출하기, min,sec값으로 세그먼트화면에 표시한다.

    {                   

        int  i;

        

        N1000 = min  / 10;              // 시간 10자리 추출

        N100 = min % 10;               // 시간 1자리 추출

        

        N10 = sec / 10;                 // 분 10자리 추출

        N1 = sec % 10;                  // 분 1자리 추출    

        

        for(i = 0;i < 5;i++){   

            PORTG = 0b00001000;         // 7-Seg DIG4 ON(PG3=1), 분 1자리 표시

            PORTD = ((seg_pat[N1] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N1] & 0x70 ) | (PORTB & 0x0F);

            delay_ms(5);

                 

            PORTG = 0b00000100;         // 7-Seg DIG3 ON(PG2=1), 분 10자리 표시

            PORTD = ((seg_pat[N10] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N10] & 0x70 ) | (PORTB & 0x0F);            

            delay_ms(5);                          

        

            PORTG = 0b00000010;         // 7-Seg DIG2 ON(PG1=1), 시간 1자리 표시

            PORTD = ((seg_pat[N100] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N100] & 0x70 ) | (PORTB & 0x0F);      

            delay_ms(5);

                 

            PORTG = 0b00000001;         // 7-Seg DIG1 ON(PG0=1), 시간 10자리 표시

            PORTD = ((seg_pat[N1000] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N1000] & 0x70 ) | (PORTB & 0x0F);            

            delay_ms(5);

        } 

    }

     

    // sw1 입력처리

    void sw_key1(void)

    {

        N1 = sec % 10;              // 현재 초 1자리 추출

        N10 = sec  / 10;             // 현재 초  10자리 추출

        N100 = min  % 10;           // 현재 분 1자리 추출

        N1000 = min / 10;          // 현재 분 10자리 추출

       

        if(pos == 0) N1 = (N1 + 1) % 10;        // 초 1단위 +1     

        else if(pos == 1) N10 = (N10 + 1) % 6;  // 초 10단위 +1

        else if(pos == 2)  N100 = (N100 + 1) % 10;            // 분 1단위 +1    
        
        else if(pos == 3) N1000 = (N1000 + 1) % 6;  // 초 10단위 +1

       

         

        min  = N1000 * 10 + N100;               // 시간 계산

        sec = N10 * 10 + N1;                    // 분 계산

    }    

     

    // sw2 입력처리

    void sw_key2(void)

    {   

        pos = (pos + 1) % 4;                    // 입력 자리 이동


    void sw_key3(void)
    {   
       sec = 0;
       min = 0;
    }
        
    void sw_key4(void)
    {   if(KeyFlg==0)
    KeyFlg=1;
    else KeyFlg =0;
    }
    위의소스는
    atmega128구동하기위해서 짠건데 스위치 4를 눌렀을때 시간흐르던게 멈추는데 누르는거 유지안하고 한번만 눌러도 시간이 멈췄따가 다시누르면 시간이 흐르는 코드를 못짜겠어서 여쭤보려고 합니다...도와주세요 ㅠㅠ   
    본삭금 걸었습니다. 감사합니다... 아래는 제가 짜본건데 Error: C:\cvavreval\BIN\samplewatch.c(96): declaration syntax error 라고떠서 안되네요... 이소스만되면 가능한데; 도대체 왜 에러가뜨는지 모르겠습니다.. 알려주시면 감사하겠습니다 읽어주셔서 감사합니다.
    // ex3-16.c

    #include <mega128.h> 

    #include <delay.h>

     

    typedef unsigned char u_char;

     

    flash u_char seg_pat[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

    u_char  hour = 12, min = 0, sec = 0;

    u_char  N1000 = 0, N100 = 0, N10 = 0, N1 = 0;  

    u_char  pos = 0;        // 0 : 1자리, 1 : 10자리 , 2 : 100자리 , 3 : 1000자리 

     int CntFlg=0, KeyFlg=0;

    void time_Disp(void);   // 시간 표시

    void sw_key1(void);     // SW1 입력 처리 함수

    void sw_key2(void);     // SW2 입력 처리 함수

    void sw_key3(void);     // SW3 입력 처리 함수

    void sw_key4(void);     // SW4 입력 처리 함수

     

    void main(void)   // 스위치입력확인 초랑 분 더하기.
    {

        u_char old_sw, sw, n, ;        
        int CntFlg=0, KeyFlg=0;

                        

        DDRB = 0xF0;                // 포트 B 상위 4비트 출력 설정

        DDRD = 0xF0;                // 포트 D 상위 4비트 출력 설정

        DDRG = 0x0F;                // 포트 G 하위 4비트 출력 설정

        DDRE = 0x0;                 // 포트 E 입력설정

         

        PORTB = 0x0;                // E, F, G, DP off

        PORTD = 0x0;                // A, B, C, D off

                     

        old_sw = PINE & 0b11110000;         // SW1 상태값 추출

        while(1){

            for(n = 0;n < 10;n++){          // 약 1초 경과 루틴        

                time_Disp();                 // 현재 시간 표시

               

                sw = PINE & 0b11110000;     // SW1 상태값 추출

                if(sw == old_sw) continue;  // 스위치 상태 변화 없으면 선두로

                                 

                if(old_sw == 0b11110000 && 

                   sw == 0b11100000) sw_key1();     // SW1 입력 처리

               else if(old_sw == 0b11110000 && 

                   sw == 0b11010000) sw_key2();     // SW2 입력 처리
                if(old_sw == 0b11110000 &&     // sw3 입력 처 
                    sw == 0b10110000)sw_key3();          
              
               
                
            }
                         
             if( sw == 0b01110000 )sw_key4();       //sw4 누르면 시계정지
        if(KeyFlg == CntFlg )
                           sec++;    }
            
              
            
                 }
            if(sec == 60){          // 초값 =60이면 분값 증가

                sec = 0;

                min++;

                

                if(min == 60) {     // 분값 =60이면 시간 증가

                    min = 0;

                   
                }

            }

        }


     

    // 현재 시간 출력

    void time_Disp()  //min이랑sec에서 분과 초값을 추출하기, min,sec값으로 세그먼트화면에 표시한다.

    {                   

        int  i;

        

        N1000 = min  / 10;              // 시간 10자리 추출

        N100 = min % 10;               // 시간 1자리 추출

        

        N10 = sec / 10;                 // 분 10자리 추출

        N1 = sec % 10;                  // 분 1자리 추출    

        

        for(i = 0;i < 5;i++){   

            PORTG = 0b00001000;         // 7-Seg DIG4 ON(PG3=1), 분 1자리 표시

            PORTD = ((seg_pat[N1] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N1] & 0x70 ) | (PORTB & 0x0F);

            delay_ms(5);

                 

            PORTG = 0b00000100;         // 7-Seg DIG3 ON(PG2=1), 분 10자리 표시

            PORTD = ((seg_pat[N10] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N10] & 0x70 ) | (PORTB & 0x0F);            

            delay_ms(5);                          

        

            PORTG = 0b00000010;         // 7-Seg DIG2 ON(PG1=1), 시간 1자리 표시

            PORTD = ((seg_pat[N100] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N100] & 0x70 ) | (PORTB & 0x0F);      

            delay_ms(5);

                 

            PORTG = 0b00000001;         // 7-Seg DIG1 ON(PG0=1), 시간 10자리 표시

            PORTD = ((seg_pat[N1000] & 0x0F) << 4) | (PORTD & 0x0F);

            PORTB = (seg_pat[N1000] & 0x70 ) | (PORTB & 0x0F);            

            delay_ms(5);

        } 

    }

     

    // sw1 입력처리

    void sw_key1(void)

    {

        N1 = sec % 10;              // 현재 초 1자리 추출

        N10 = sec  / 10;             // 현재 초  10자리 추출

        N100 = min  % 10;           // 현재 분 1자리 추출

        N1000 = min / 10;          // 현재 분 10자리 추출

       

        if(pos == 0) N1 = (N1 + 1) % 10;        // 초 1단위 +1     

        else if(pos == 1) N10 = (N10 + 1) % 6;  // 초 10단위 +1

        else if(pos == 2)  N100 = (N100 + 1) % 10;            // 분 1단위 +1    
        
        else if(pos == 3) N1000 = (N1000 + 1) % 6;  // 초 10단위 +1

       

         

        min  = N1000 * 10 + N100;               // 시간 계산

        sec = N10 * 10 + N1;                    // 분 계산

    }    

     

    // sw2 입력처리

    void sw_key2(void)

    {   

        pos = (pos + 1) % 4;                    // 입력 자리 이동


    void sw_key3(void)
    {   
       sec = 0;
       min = 0;
    }
        
    void sw_key4(void)
    {   if(KeyFlg==0)
    KeyFlg=1;
    else KeyFlg =0;
    }
        



    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    22305
    객체지향말고 이런곳에서 인스턴스는 도대체 뭘 의미하는거죠? [5] 본인삭제금지 her2814 18/04/16 11:21 600 0
    22304
    포트란 등의 프로그래밍을 잘 하기 위해선 프로그래므스트한 시야가 필요합니 [2] Sole_male 18/04/16 02:03 544 0
    22303
    랜섬웨어 FTP 백업서버 감염 가능성 문의 [9] 본인삭제금지 야광눈 18/04/15 23:30 2818 0
    22302
    [본삭금] c++ c2664해결방법좀 알려주세요 ㅠㅠ [3] 본인삭제금지 안녕하세 18/04/15 22:32 698 0
    22301
    [본삭금] 디비 설계 질문드립니다. (멤버들 간의 대결 기록) [5] 김치즈 18/04/15 04:20 590 0
    22299
    포트란ㄴㄴ진ㅉ차ㅏㅏㅏㅁ치려뻐러ㅣㄹ꺼깥따찐짜 [1] Sole_male 18/04/15 02:56 645 3
    22297
    SQL문에서 3단 JOIN 이상 한 상태에 해당값이 없으면 JOIN된 해 [1] 취업희망 18/04/15 00:56 538 0
    22296
    시리얼 통신 개발 관련 도움 요청드립니다! [5] 본인삭제금지 방향 18/04/15 00:47 819 0
    22295
    유니티 스크립트 질문있습니다! [2] 의적당근 18/04/15 00:32 743 0
    22294
    개발자 커뮤니티 최고의 답변 IPID 18/04/14 19:33 953 2
    22293
    XSLT 관련 질문 드립니다!! [1] 창작글베스트금지베오베금지본인삭제금지 Benny 18/04/14 08:03 416 0
    버튼을 눌렀다가 때면 시간이 멈추는 스탑워치 설계중인데 질문드립니다 ㅠㅠ [6] 본인삭제금지 밥보 18/04/13 21:19 839 0
    22291
    [html 생초보 질문글] 홈페이지 상단에 동영상 넣는 방법 여쭤봅니다 [5] snowsun 18/04/13 20:31 433 0
    22290
    undo, redo 뭐라고 부르세요?? [8] 다이어트1일차 18/04/13 18:55 1019 0
    22289
    .Net 프레임워크 2.0 에서 Dictionary에 인덱스로 접근하기? [4] 본인삭제금지 pangloss 18/04/13 17:00 432 0
    22288
    [안드로이드] 어떠한 상황에서 앱을 화면에 띄우기 질문입니다. [3] 본인삭제금지 달려라하니~ 18/04/12 19:45 523 0
    22287
    C++) 혹시 이런 기능을 구현할 수 있나요? [2] 훗날닭집사장 18/04/12 12:48 651 0
    22286
    변수나 함수의 줄임을 쓰고자 하는대 모음이나 좋은 아이디어가 없나요? [9] 한시운 18/04/12 09:47 840 0
    22285
    웹개발자와 웹 솔루션 개발자 차이가 뭔가요??? [2] 웃대메템 18/04/12 01:36 890 0
    22284
    자바스크립트에서 "return !!~"가 의미하는 것은 무엇일까요? [9] 첫댓평생솔로 18/04/12 01:30 848 1
    22283
    1년전에... 게임개발 하고 싶다고 글올렸었는데요.. 출시했습니다..ㅠ [5] 창작글 틴울프 18/04/12 00:03 858 8
    22282
    파이선 프로그래밍 고수님들 도움주세여.. [1] 산다락방 18/04/11 14:26 682 0
    22280
    Haskell 하시는분 계시나요? [2] 창작글본인삭제금지외부펌금지 KOTHAICHI 18/04/11 11:27 547 0
    22279
    일하다가 너무 우울해졌습니다 ㅠㅠ [7] Environment 18/04/10 21:36 828 0
    22278
    https 로 리다이렉트 예제 만들었는데 한번 봐주세요 창작글본인삭제금지외부펌금지 타라123 18/04/10 18:30 598 0
    22277
    [JAVA] input name을 VO로 보낼때 처리한다면? 본인삭제금지 쉬룐 18/04/10 07:38 798 0
    22275
    웹사이트를 관리하는 관리자 페이지를 다시 새롭게 만들려고 합니다. [6] 취업희망 18/04/09 23:46 964 0
    22274
    리눅스 gcc 질문드립니다... [1] 창작글본인삭제금지 zzzjinwook 18/04/09 21:06 955 0
    22273
    클래스 설계 질문 [1] 본인삭제금지 DJ.A 18/04/09 16:46 527 0
    22272
    VS 2008] Release 모드에서 디버깅 해보신 분들 도움부탁드려용 본인삭제금지 훗날닭집사장 18/04/09 10:14 427 0
    [◀이전10개] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈