Đồng hồ số dùng PIC18F4580

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • longnhat
    Nhập môn đệ tử
    • Apr 2009
    • 9

    #1

    Đồng hồ số dùng PIC18F4580

    Anh (chị) nào giúp em cách dùng nhiều ngắt trong CCS được không ? Ví dụ , em viết code để làm đồng hồ số sử dụng ngắtTIMER1 để đếm h,p,s hiển thị LED7segment ; nhưng chừ em muốn dùng ngắt khác để chỉnh h,p,s bằng switch . Nhưng em thử hoài mà không thấy xảy ra ngắt (ngắt INT_EXT1).Cho em hỏi phải quan tâm đến ưu tiên không vậy ? Nếu có thì phải làm sao ?
    Cho em hỏi tiếp là làm sao khi ta ấn(SW) lần 1 thì giây lại nhấp nháy như trong đồng hồ đeo tay , lần 2 tới phút.....giúp em vấn đề này với....sao mà khó thế...nói chung em muốn làm giống y đồng hồ đeo tay
    Mong anh(chị) pro gthich càng chi tiết càng tốt . Thank trước !
  • longnhat
    Nhập môn đệ tử
    • Apr 2009
    • 9

    #2
    Các cao thủ PIC giúp em tí đi . Mong có câu trả lời sớm ...HELP ME !

    Comment

    • longnhat
      Nhập môn đệ tử
      • Apr 2009
      • 9

      #3
      Sao chán thế này nhỉ ... giúp mình với , mình ok ngắt rồi nhưng vấn đề lớn mình không biết cách làm sao khi ta ấn nút thì 2led hiển thị giây nhấp nháy mà 4led còn lại vẫn tiếp tục quét h,p...các cao thủ nào có thể thảo luận về vấn đề này được không ?

      Comment

      • tdm
        Đệ tử 7 túi
        • May 2005
        • 258

        #4
        Nguyên văn bởi longnhat View Post
        Sao chán thế này nhỉ ... giúp mình với , mình ok ngắt rồi nhưng vấn đề lớn mình không biết cách làm sao khi ta ấn nút thì 2led hiển thị giây nhấp nháy mà 4led còn lại vẫn tiếp tục quét h,p...các cao thủ nào có thể thảo luận về vấn đề này được không ?
        dùng một biến tạm để làm việc đó.
        vd:
        ngắt
        nhay=~nhay;//đảo byte
        .
        .
        .
        main
        nhay =0x00;
        quet_led();
        void quet_led(void)
        if(nhay==0x00)
        {
        hiển thị giờ phút giây
        }
        else//nhay =0xff
        {
        hiển thị giờ phút tắt giây
        }
        viết chương trình cho vdk chạy ổn định là cả một vấn đề.

        Comment

        • XuHi
          Nhập môn đệ tử
          • Oct 2010
          • 2

          #5
          Nhấp nháy led 7 đoạn

          Nguyên văn bởi tdm View Post
          dùng một biến tạm để làm việc đó.
          vd:
          ngắt
          nhay=~nhay;//đảo byte
          .
          .
          .
          main
          nhay =0x00;
          quet_led();
          void quet_led(void)
          if(nhay==0x00)
          {
          hiển thị giờ phút giây
          }
          else//nhay =0xff
          {
          hiển thị giờ phút tắt giây
          }
          Anh có thể nói rõ hơn là mình sẽ ngắt gì không? Với lại để có thể thấy nhấp nháy cũng phải cần delay khoảng 150 ms, nhưng khi quét led 7 đoạn mỗi lần delay chỉ là 1 ms thôi, nếu chương trình chạy quet_led() liên tục mỗi lần chỉ delay rất nhỏ làm sao mắt thấy được.
          Em có tham khảo code của anh Linhnc308:
          Code:
                PortB=maled7[led3];
                if(blink_min==1)     RC2=1;//LED3
                else RC2=0;
                delay_ms(1);         RC2=1;
                PortB=maled7[led4];
                if(blink_min==1)     RD0=1;//LED4
                else RD0=0;
                delay_ms(1);         RD0=1;
          Nhưng mà không dùng được?
          Người thành công không bao giờ bỏ dở giữa chừng, người bỏ dở giữa chừng thì không bao giờ thành công.

          Comment

          • tdm
            Đệ tử 7 túi
            • May 2005
            • 258

            #6
            Nguyên văn bởi XuHi View Post
            Anh có thể nói rõ hơn là mình sẽ ngắt gì không? Với lại để có thể thấy nhấp nháy cũng phải cần delay khoảng 150 ms, nhưng khi quét led 7 đoạn mỗi lần delay chỉ là 1 ms thôi, nếu chương trình chạy quet_led() liên tục mỗi lần chỉ delay rất nhỏ làm sao mắt thấy được.
            Em có tham khảo code của anh Linhnc308:
            Code:
                  PortB=maled7[led3];
                  if(blink_min==1)     RC2=1;//LED3
                  else RC2=0;
                  delay_ms(1);         RC2=1;
                  PortB=maled7[led4];
                  if(blink_min==1)     RD0=1;//LED4
                  else RD0=0;
                  delay_ms(1);         RD0=1;
            Nhưng mà không dùng được?
            đoạn code đơn giản để làm việc đó:
            Code:
            #include <16F877A.h>
            #Fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
            #use delay(clock=20000000)
            #use fast_io(c)
            #use fast_io(d)
            const unsigned char font[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
            int8 i=0,a,tao_nhay=0xaa;
            int16 count=0;
            void hien_thi(void);
            void hien_thi_1(void);
            #int_timer0
            void interrupt_timer0()
            {
            set_timer0(6);
            ++count;
            if(count == 5000) // 
            {
            count=0;
            tao_nhay=~tao_nhay;
            }}
            
            void main ()
            {
            
            set_tris_b(0);
            set_tris_d(0);
            output_b(0x00);
            setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
            set_timer0(6);// 
            enable_interrupts(int_timer0);
            enable_interrupts(global);
            while(1)
             {
              if(tao_nhay==0xaa)
              { 
              hien_thi();
              }
               else
               {
               hien_thi_1();
               }
             }
            }
            void hien_thi(void)
            {
            output_d(0xfe);
            output_b(font[i/10]);
            delay_ms(1);
            output_b(0xff);
            output_d(0xfd);
            output_b(font[i%10]);
            delay_ms(1);
            output_b(0xff);
            }
            void hien_thi_1(void)
            {
            output_d(0xfe);
            output_b(font[i/10]);
            delay_ms(1);
            output_b(0xff);
            output_d(0xfd);
            delay_ms(1);
            output_b(0xff);
            }
            Attached Files
            Last edited by tdm; 10-05-2011, 09:01 PM.
            viết chương trình cho vdk chạy ổn định là cả một vấn đề.

            Comment

            Working...