Thông báo

Collapse
No announcement yet.

[help!!!] giúp em về hiển thị từ 00-99 trên led 7 đoạn

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [help!!!] giúp em về hiển thị từ 00-99 trên led 7 đoạn

    Tình hình là em mới tập tành về PIC. Em muốn hiển thị từ 00-99 trên LED 7 đọan tăng dần. Cứ cách 1s tăng 1 số. Code đây ạ:
    #include <16f877a.h>
    #use delay(clock=20000000)
    unsigned int8 so[10]={0b11000000,0b11111001,0b10100100,0b10110000,0b10 011001,0b10010010,0b10000010,0b11111000,0b10000000 ,0b10010000};
    void bat_led1()
    {
    output_c(0b00000001);
    }
    void bat_led2()
    {
    output_c(0b000000010);
    }
    void hienthi(unsigned int16 x)
    {
    unsigned int8 chuc=x/10;
    unsigned int8 donvi=x%10;
    bat_led1();
    output_b(so[chuc]);
    delay_ms(5);
    bat_led2();
    output_b(so[donvi]);
    delay_ms(5);
    }
    void main()
    {
    while(true)
    {
    unsigned int16 i;
    for(i=00;i<100;i++)
    {
    hienthi(i);
    delay_ms(1000);
    }
    }
    }

    Khổ là nếu giữ nguyên code như vậy thì mạch mô phỏng vẫn chạy, nhưng LED1 chỉ nhấp nháy(theo code là 5ms) và LED2 thì sáng đến tận 1s. . Cứ như vậy. Em đã cho vòng lặp while() ở trong phần hienthi() nhưng nếu như vậy thì mạch mô phỏng chỉ hiện lên số 00. . Vậy có cách nào khắc phục không ạ? Anh nào chỉ em với

  • #2
    Nguyên văn bởi nguyennha15 Xem bài viết
    Tình hình là em mới tập tành về PIC. Em muốn hiển thị từ 00-99 trên LED 7 đọan tăng dần. Cứ cách 1s tăng 1 số. Code đây ạ:
    #include <16f877a.h>
    #use delay(clock=20000000)
    unsigned int8 so[10]={0b11000000,0b11111001,0b10100100,0b10110000,0b10 011001,0b10010010,0b10000010,0b11111000,0b10000000 ,0b10010000};
    void bat_led1()
    {
    output_c(0b00000001);
    }
    void bat_led2()
    {
    output_c(0b000000010);
    }
    void hienthi(unsigned int16 x)
    {
    unsigned int8 chuc=x/10;
    unsigned int8 donvi=x%10;
    bat_led1();
    output_b(so[chuc]);
    delay_ms(5);
    bat_led2();
    output_b(so[donvi]);
    delay_ms(5);
    }
    void main()
    {
    while(true)
    {
    unsigned int16 i;
    for(i=00;i<100;i++)
    {
    hienthi(i);
    delay_ms(1000);
    }
    }
    }

    Khổ là nếu giữ nguyên code như vậy thì mạch mô phỏng vẫn chạy, nhưng LED1 chỉ nhấp nháy(theo code là 5ms) và LED2 thì sáng đến tận 1s. . Cứ như vậy. Em đã cho vòng lặp while() ở trong phần hienthi() nhưng nếu như vậy thì mạch mô phỏng chỉ hiện lên số 00. . Vậy có cách nào khắc phục không ạ? Anh nào chỉ em với
    mình lập trình ccs cho con pic16f877a, bạn tham khảo nha
    test.zip
    hoangduc2304

    01884653780

    Comment


    • #3
      Nguyên văn bởi nguyennha15 Xem bài viết
      Tình hình là em mới tập tành về PIC. Em muốn hiển thị từ 00-99 trên LED 7 đọan tăng dần. Cứ cách 1s tăng 1 số. Code đây ạ:
      #include <16f877a.h>
      #use delay(clock=20000000)
      unsigned int8 so[10]={0b11000000,0b11111001,0b10100100,0b10110000,0b10 011001,0b10010010,0b10000010,0b11111000,0b10000000 ,0b10010000};
      void bat_led1()
      {
      output_c(0b00000001);
      }
      void bat_led2()
      {
      output_c(0b000000010);
      }
      void hienthi(unsigned int16 x)
      {
      unsigned int8 chuc=x/10;
      unsigned int8 donvi=x%10;
      bat_led1();
      output_b(so[chuc]);
      delay_ms(5);
      bat_led2();
      output_b(so[donvi]);
      delay_ms(5);
      }
      void main()
      {
      while(true)
      {
      unsigned int16 i;
      for(i=00;i<100;i++)
      {
      hienthi(i);
      delay_ms(1000);
      }
      }
      }

      Khổ là nếu giữ nguyên code như vậy thì mạch mô phỏng vẫn chạy, nhưng LED1 chỉ nhấp nháy(theo code là 5ms) và LED2 thì sáng đến tận 1s. . Cứ như vậy. Em đã cho vòng lặp while() ở trong phần hienthi() nhưng nếu như vậy thì mạch mô phỏng chỉ hiện lên số 00. . Vậy có cách nào khắc phục không ạ? Anh nào chỉ em với
      mình hướng dãn bạn giải thuật như thé nàyd nha.
      nếu bạn không cần thời gian thật chính xác thì bạn dùng vòng lắp for. bạn làm sao tính toán số vòng lặp đó nó bằng 1s rồi nó thực hiện xong Và thoát khỏi vòng lặp rồi nó thực hiện phép tính cộng or trừ rồi bạn lại tiếp tục thực hiện vòng lặp for đó,
      nếu bạn muón cho nó thật chính xác thì bạn dùng ngắt TM1 vả thạch anh 32,768kHz, phần hiển thị bạn cho nó thực hiện trong vòng lặp while, còn phàn tăng thì bạn để trong phần ngắt, khi nó đủ 1 s nó sẽ tự động tăng lên.




      facebook:

      Comment


      • #4
        tks bạn datinhlakho2. Nhưng khi chạy mô phỏng, không hiểu sao 2 led 7 đoạn vẫn còn hiện tượng nhấp nháy. Bạn còn cách nào khắc phục hiện tượng đó k?

        Comment


        • #5
          tks bạn thsang auto. Nhưng bạn có thể giải thích rõ hơn được k? Mình muốn tổng hợp ý kiến

          Comment


          • #6
            Hi,
            Cái này bác dùng 1 timer 8 bít là đủ. Chương trình ngắt timer sẽ có hai nhiệm vụ: 1> Tăng biến đếm cnt từ 0-99 sau mỗi 1s, 2> Quét 2 led 7 đoạn vs tần số >24HZ. Thực tế tôi làm thấy tần số quét led vào khoảng 60-100Hz là đẹp. Còn chương trình chính thì điều khiển các port dữ liệu và điều khiển thôi
            Thân

            Comment


            • #7
              Nguyên văn bởi nguyennha15 Xem bài viết
              tks bạn datinhlakho2. Nhưng khi chạy mô phỏng, không hiểu sao 2 led 7 đoạn vẫn còn hiện tượng nhấp nháy. Bạn còn cách nào khắc phục hiện tượng đó k?
              do chương trình mô phỏng thôi bạn ơi. mình wet led với tần số 50Hz (bằng tần số điện lưới 2 pha) nên khi bạn làm trên mạch thật thì đảm bảo sẽ không có hiện tượng giật đâu bạn. mình làm rồi, rất OK
              hoangduc2304

              01884653780

              Comment


              • #8
                tks các bác để xem... chắc là được hehe

                Comment

                Về tác giả

                Collapse

                nguyennha15 Tìm hiểu thêm về nguyennha15

                Bài viết mới nhất

                Collapse

                • bqviet
                  Trả lời cho Đấu tắt điện cho máy tính bảng
                  bởi bqviet
                  Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                  06-12-2025, 17:17
                • nguyendinhvan
                  Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                  bởi nguyendinhvan
                  Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                  05-12-2025, 19:59
                • afrendly
                  Trả lời cho Đấu tắt điện cho máy tính bảng
                  bởi afrendly
                  Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                  04-12-2025, 01:27
                • nick22
                  Trả lời cho Máy điện châm ?
                  bởi nick22
                  Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                  01-12-2025, 13:23
                Đang tải...
                X