Thông báo

Collapse
No announcement yet.

Cách quét LED 7 đoạn

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

  • #16
    Nguyên văn bởi kitty511 Xem bài viết
    Chào anh em cũng đang học avr, bước đầu tìm hiểu cách quét led 7 đoạn. chương trình anh viết có thể giải thích cho em được ko? thanks anh.
    mình có chú thích cho bạn đây nè. những dòng chú thích đứng sau dấu"//"


    #include <mega16.h> //khai báo thư viện cho atmega16
    #include<delay.h> //khai báo thư viện cho hàm delay

    // Declare your global variables here
    char num[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
    // các mã hex ứng với các số từ 0-9
    char dv;
    char ch;
    char i;
    void main(void)
    {
    // Declare your local variables here

    PORTA=0x00; // PORTA la 8 output
    DDRA=0xFF;

    PORTB=0x00; //PORTB la 2 input để điều khiển việc quét led
    DDRB=0x03;
    dv=0; //biến đơn vị gán bằng 0
    ch=0; //biến chục gàn bằng 0
    while (1) //vòng lặp vô hạn
    {
    // Place your code here
    if(ch>9) //đặt điều kiện nếu số đó lớn hơn 100 thì quay trở về đếm bắt đầu từ 0
    {
    dv=0;
    ch=0;
    }
    else
    {
    if( dv>9) nếu biến đơn vị >9 thì tăng lên biến hàng chục lên 1 đơn vị
    {
    ch++ ;
    dv=0 ;
    }
    else
    {
    for(i=0;i<=240;i++)
    {
    PORTB.0=0;
    PORTA=num[dv];
    PORTB.1=1;
    delay_us(300);
    PORTB.1=0;
    PORTA=num[ch];
    PORTB.0=1;
    delay_us(300);
    }
    dv++;
    }
    }
    };
    }
    Never forget who you are!

    Comment


    • #17
      Nguyên văn bởi nhquangdt3k5 Xem bài viết
      mình có chú thích cho bạn đây nè. những dòng chú thích đứng sau dấu"//"


      #include <mega16.h> //khai báo thư viện cho atmega16
      #include<delay.h> //khai báo thư viện cho hàm delay

      // Declare your global variables here
      char num[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
      // các mã hex ứng với các số từ 0-9
      char dv;
      char ch;
      char i;
      void main(void)
      {
      // Declare your local variables here

      PORTA=0x00; // PORTA la 8 output
      DDRA=0xFF;

      PORTB=0x00; //PORTB la 2 input để điều khiển việc quét led
      DDRB=0x03;
      dv=0; //biến đơn vị gán bằng 0
      ch=0; //biến chục gàn bằng 0
      while (1) //vòng lặp vô hạn
      {
      // Place your code here
      if(ch>9) //đặt điều kiện nếu số đó lớn hơn 100 thì quay trở về đếm bắt đầu từ 0
      {
      dv=0;
      ch=0;
      }
      else
      {
      if( dv>9) nếu biến đơn vị >9 thì tăng lên biến hàng chục lên 1 đơn vị
      {
      ch++ ;
      dv=0 ;
      }
      else
      {
      for(i=0;i<=240;i++)
      {
      PORTB.0=0;
      PORTA=num[dv];
      PORTB.1=1;
      delay_us(300);
      PORTB.1=0;
      PORTA=num[ch];
      PORTB.0=1;
      delay_us(300);
      }
      dv++;
      }
      }
      };
      }
      Rất cám ơn anh đã trả lời câu hỏi của em. Nhưng em vẫn còn nhiều chỗ không hiểu, em cũng chẳng biết mình bị hỏng kiến thức chỗ nào. Anh ơi, anh có thể hướng dẫn em lập trình đếm 1 led 7 seg trước được không anh.

      Comment


      • #18
        Bạn muốn làm được bài này thì bạn cần phải nắm được: Lập trình C cơ bản, Đọc về led 7 thanh thì bạn sẽ lập trình đếm 1 led 7 thanh ok. Còn quét led 7 thanh thì bạn phải tim hiểu thuật toán quét led trước đã, nếu bạn không hiểu thuật toán thì có giải thích cả đống code kia bạn cũng chả hiểu gì đâu. Code chỉ là cái để thực hiện thuật toán thôi!!

        Comment


        • #19
          Còn đoạn này giải thích sao anh, em không hiểu lắm.

          for(i=0;i<=240;i++)
          {
          PORTB.0=0;
          PORTA=num[dv];
          PORTB.1=1;
          delay_us(300);
          PORTB.1=0;
          PORTA=num[ch];
          PORTB.0=1;
          delay_us(300);
          }
          dv++;

          Comment


          • #20
            Nguyên văn bởi kitty511 Xem bài viết
            Còn đoạn này giải thích sao anh, em không hiểu lắm.

            for(i=0;i<=240;i++)
            {
            PORTB.0=0;
            PORTA=num[dv];
            PORTB.1=1;
            delay_us(300);
            PORTB.1=0;
            PORTA=num[ch];
            PORTB.0=1;
            delay_us(300);
            }
            dv++;
            Đây chỉ là code hiển thị thôi. VD như PORTB.0=0; ( xuất giá trị 0 ra portB chân B0) sao đó kèm theo là xuất giá trị dv ra led ở PortA đồng thời cho led chục ở portA tắt nên cho PORTB.1=1;đoạn còn lại tương tự, thời gian delay là để tạo độ trể để hiển thị khi quét led. Với dạng này thì led chục và led đơn vị cùng gắn vào cùng một portA và sử dụng 2 chân ở portB để quét mức tích cực mức thấp.
            "Hãy nhìn người yêu mình là đẹp
            Chứ đừng nhìn người đẹp mà yêu"

            Comment


            • #21
              Giờ thì em hiểu rồi. Tại mấy coment trên kia để PORTB là 2 input....em cứ nghĩ nó là ngõ vào của nút nhấn hay gì gì đó. nên nghĩ không ra. thanks anh.

              Comment


              • #22
                các anh ơi cho em xin hình ảnh cách mắc mạch của chương trình trên được không ạ.Trong mÔ phỏng ấy.em mới tập nên không biệt ạ.e cảm ơn trước...

                Comment


                • #23
                  co a e nao biet su dung module 4 con led 7 doan ko ? mi nh dang mo phong nhung ko hieu sao no lai hien? thi. cung mot. so nhu nhau chu ko chiu. khac ( minh cho so 08 ma ko ra)

                  Comment


                  • #24
                    Chào cả nhà: mình tham khảo trang web này, thấy mấy bạn hay giúp nhiều bạn khác chưa biết làm.
                    mình có thể nhờ mấy bạn một vấn đề này không! Mình có 1 đồ án vi điều khiển: thầy bảo chọn 1 đề tài, mấy bạn ở lớp thì nhờ or đặt mạch. Mình muốn tự tay làm một mạch, không biết việc hiển thị một dòng chữ chạy ngang wa một bản mạch đối với mấy bạn có lẽ sẽ dễ dàng, nhưng mình thật sự chưa biết phải chọn led nào và cấu tạo của 1 con led dài..
                    Hy vọng nhờ mấy bạn.Mình sẽ tạo dòng chữ theo tên, lớp mình để làm báo cáo! (à! hiển thị số: vd số 0-9 cho led 7 đoạn thì mình chạy được vì led 7 đoạn mình học cấu tạo rồi, còn led dài để chạy chữ mình chưa học nên cũng không rõ lắm)

                    Comment


                    • #25
                      Led đó là Led matrix. Có thể ghép sẵn bằng các led thường hoặc mua modul ghép sẵn của TQ.
                      Để làm được điều này phải biết về vi điều khiển và biết phương pháp quét Led matrix.
                      ____
                      Trong phương pháp quét led 7 đoạn, khi kết nối chân A,B....H của led tới 1PORT nào đó của vi điều khiển thì không nhất thiết là A-0,B1,C-2... mà có thể tùy chọn để có phần cứng tối ưu nhất ( không phải câu dây ) mà vẫn đảm bảo hoạt động đúng bằng cách sửa mã led.

                      Comment


                      • #26
                        dứoi đây mình có chương trình chạy led
                        mình làm cái này trước đây rồi có 8led thôi . hỳ hỳ.
                        bạn xem đúng ý bạn k nhé
                        CT:
                        #include <18F452.h> // khai bao chip su dung
                        #fuses HS,NOWDT,NOPROTECT
                        #device ADC = 8
                        #use delay(clock=20000000)
                        #include <def_18f452.c>

                        #define LED1 RC0
                        #define LED2 RC1
                        #define LED3 RC2
                        #define LED4 RC3
                        #define LED5 RC4
                        #define LED6 RC5
                        #define LED7 RC6
                        #define LED8 RC7
                        #define BUTTON1 RA0
                        #define BUTTON2 RA1
                        #define BUTTON3 RA2
                        #define BUTTON4 RA3
                        #define BUTTON5 RA5
                        #define BUTTON6 RE0
                        #define BUTTON7 RE1
                        #define BUTTON8 RE2

                        int8 Tat_Don[8] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
                        int8 Sang_Don[8] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
                        void main()
                        {
                        int8 I;
                        // thiet lap cho portA
                        SET_TRIS_A(0xff); // tat ca cac portA deu truyen dl
                        SET_TRIS_C (0x00);
                        output_C (0xff);
                        while(4)
                        {
                        if(button1==0)
                        {
                        {
                        for(i=0;i<9;i++)
                        {
                        output_C(Tat_Don[i-1]);
                        delay_ms(500);
                        }
                        }
                        }
                        if(button2==0)
                        {
                        for(i=8;i>0;i--)
                        {
                        output_C(Sang_Don[i-2]);
                        Delay_ms(500);
                        }
                        }
                        }
                        }

                        Comment


                        • #27
                          có CT viết bằng Keil C k bạn. mình cần lắm hiển thị từ o đến 256 trên Led 7 đoạn.nếu có gửi vào đây giúp mình nhé dangbao0@gmai.com thank nhiều

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X