Thông báo

Collapse
No announcement yet.

Quét led 7 thanh

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

  • Quét led 7 thanh

    Em đang làm bài tập lớn với con 16f877 các bác ạ.Đến phần hiển thị ra Led thì gặp vấn đề. Em đọc 1 số tài liệu hướng dẫn quét Led thì thấy đơn giản lắm, nhưng khi thực hiện thì sao Led nó nháy ghê quá.
    Yêu cầu của em là hiển thị ra 1 số có 3 chữ số (đầu vào đo không nói đến ở đây). Em ngồi tính để lưu ảnh trên võng mạc cần 24frame/s, 3 led là tầm 72 frame/s. Em để delay 10ms thì lại nháy rất từ từ như là delay 1s vậy,em để delay 25ms thì nó nháy ghê quá, còn hiển thị lung tung nữa, tăng delay lên 40ms thì k hiển thị lung tung nữa nhưng bác xem dùm em nha.
    Đây là đoạn code em thử nghiệm:

    trisD=0x00;
    trisB=0x00;
    portd=0x00;
    while(1){
    portb=0b00000001;portd=1;delay_ms(10);
    portb=0x00;
    portb=0b00000010;portd=2;delay_ms(10);
    portb=0x00;
    portb=0b00000100;portd=3;delay_ms(10);
    portb=0x00;
    }


    À,các bác giúp em phần code để hiện thị ra số có 3 chữ số nữa với, em làm với số có 2 chữ số như sau thì đúng mà 3 chữ số lại sai (đây là phần cho 2 chữ số,còn 3 chữ số là cả phần trong // nữa)
    x=45;//so nay de thu nghiem
    if(x%10==0)
    {z=0;
    y=x/10;
    if (y%10==0)
    {t=0;u=y/10;}
    else t=y%10;u=(y-t)/10;
    }
    else
    //{
    z=x%10;y=(x-z)/10;
    //if (y%10==0)
    //{t=0;u=y/10;}
    //else t=y%10;u=(y-t)/10;}


    Các bác giúp đỡ nha,thanks.
    Attached Files

  • #2
    Bạn dùng proteus không mô phỏng được đâu. nên dùng mạch thật cho trường hợp này.

    Comment


    • #3
      Trong phần quét Led 7 thanh, bạn để 10ms mỗi lần là hơi lâu, với ít Led như vậy, bạn để dưới 5ms là OK rồi.
      Chắc bạn mới làm với PIC. Vào đây tham khảo tài liệu và code mẫu.
      link: http://linhnc308.googlepages.com/myprojects
      Ethernet-RS232, PIC Webserver, RFID Reader
      CallerID, Cảnh báo BTS, ...
      0988006696
      linhnc308@gmail.com
      http://linhnc308.blogspot.com

      Comment


      • #4
        Cái đầu tiên thường thì đưa data vào rồi mới turn on cái 7seg led đấy. delay thì hạ thấp xuống như anh Linh đề nghị.
        Cái ct hiển thị số như bạn hình như hơi loằng ngoằng. Tớ nghĩ với số có 2 chữ số x=45 như bạn nêu ví dụ chỉ cần: các biến là int
        led1 = x%10;
        led2 = x/10;

        Comment


        • #5
          Nguyên văn bởi linhnc308 Xem bài viết
          Trong phần quét Led 7 thanh, bạn để 10ms mỗi lần là hơi lâu, với ít Led như vậy, bạn để dưới 5ms là OK rồi.
          Chắc bạn mới làm với PIC. Vào đây tham khảo tài liệu và code mẫu.
          link: http://linhnc308.googlepages.com/myprojects
          Phần code cua anh Linh k có quet Led 7 thanh và PWM a,hik hik.Cho em hỏi Pic 16f877 va 16f876 khác nhau ở chỗ nào ạ?

          Comment


          • #6
            Nguyên văn bởi hikaru Xem bài viết
            Phần code cua anh Linh k có quet Led 7 thanh và PWM a,hik hik.Cho em hỏi Pic 16f877 va 16f876 khác nhau ở chỗ nào ạ?
            Bạn đọc datasheet là có mà ^^

            Comment


            • #7
              Nguyên văn bởi hikaru Xem bài viết
              Em đang làm bài tập lớn với con 16f877 các bác ạ.Đến phần hiển thị ra Led thì gặp vấn đề. Em đọc 1 số tài liệu hướng dẫn quét Led thì thấy đơn giản lắm, nhưng khi thực hiện thì sao Led nó nháy ghê quá.
              Yêu cầu của em là hiển thị ra 1 số có 3 chữ số (đầu vào đo không nói đến ở đây). Em ngồi tính để lưu ảnh trên võng mạc cần 24frame/s, 3 led là tầm 72 frame/s. Em để delay 10ms thì lại nháy rất từ từ như là delay 1s vậy,em để delay 25ms thì nó nháy ghê quá, còn hiển thị lung tung nữa, tăng delay lên 40ms thì k hiển thị lung tung nữa nhưng bác xem dùm em nha.
              Đây là đoạn code em thử nghiệm:

              trisD=0x00;
              trisB=0x00;
              portd=0x00;
              while(1){
              portb=0b00000001;portd=1;delay_ms(10);
              portb=0x00;
              portb=0b00000010;portd=2;delay_ms(10);
              portb=0x00;
              portb=0b00000100;portd=3;delay_ms(10);
              portb=0x00;
              }


              À,các bác giúp em phần code để hiện thị ra số có 3 chữ số nữa với, em làm với số có 2 chữ số như sau thì đúng mà 3 chữ số lại sai (đây là phần cho 2 chữ số,còn 3 chữ số là cả phần trong // nữa)
              x=45;//so nay de thu nghiem
              if(x%10==0)
              {z=0;
              y=x/10;
              if (y%10==0)
              {t=0;u=y/10;}
              else t=y%10;u=(y-t)/10;
              }
              else
              //{
              z=x%10;y=(x-z)/10;
              //if (y%10==0)
              //{t=0;u=y/10;}
              //else t=y%10;u=(y-t)/10;}


              Các bác giúp đỡ nha,thanks.
              các pác chỉ bậy wa... mạch thế kia sao ma chạy dc
              quét led 7 đoạn trong Proteus phải dùng bảng led 7 đoạn kìa
              Cái mà 2 hoặc 4 hoặc 6 con chung 1 bảng ah
              cái đó mới dùng để quét...còn mạch này ko chạy đâu

              Comment


              • #8
                Nguyên văn bởi leemanhtuan Xem bài viết
                các pác chỉ bậy wa... mạch thế kia sao ma chạy dc
                quét led 7 đoạn trong Proteus phải dùng bảng led 7 đoạn kìa
                Cái mà 2 hoặc 4 hoặc 6 con chung 1 bảng ah
                cái đó mới dùng để quét...còn mạch này ko chạy đâu
                cho mình hỏi, nhưng ở mạch ngoài mình gắn thì là led đơn chứ ko có 1 bảng LED thì chả lẽ chịu chết à, mà mình làm 1 bài tương tự vậy là random 3 con LED dùng quét led. mình chỉ có 3 con LED đơn và mình ko xài cái IC giải mã, ko xài transistor. Tình hình thì 1,2 con ok bắt đầu mở port thứ 3 ra thì nó lung tung. Nói chung ko hiểu nữa . Ai xem giúp mình với được không?
                Attached Files

                Comment


                • #9
                  Nguyên văn bởi hikaru Xem bài viết
                  trisD=0x00;
                  trisB=0x00;
                  portd=0x00;
                  while(1){
                  portb=0b00000001;portd=1;delay_ms(10);
                  portb=0x00;
                  portb=0b00000010;portd=2;delay_ms(10);
                  portb=0x00;
                  portb=0b00000100;portd=3;delay_ms(10);
                  portb=0x00;
                  }
                  Về lý thuyết, chương trình của bạn hoàn toàn có thể chạy được. Tuy nhiên, phần cứng như thế thì không thể chạy được rùi. Hơn nữa, mỗi chân PIC khi muốn sử dụng làm I/O thì cần tắt các chức năng khác của nó.
                  Tặng bạn chương trình con bên dưới viết bằng ccs.
                  Attached Files
                  Last edited by kevo1tinh; 06-10-2011, 01:43.

                  Comment


                  • #10
                    các bác ơi, khi mà hiển thị số led lớn (21 con) thì mình phải làm thế nào ạ, em có tham khảo mấy bài hướng dẫn thấy đơn giản mà sao khi làm lại không được
                    code của e đây, bác nào bit sai thì hướng dẫn zum ạ!
                    void quetled(unsigned int8 SW1,SW2,SW3,SW4,led1,led2,ngc,ngd,thc,thd,nat,nac, nad,gic,gid,pc,pd,gc,gd,nc,nd)
                    unsigned int8 scancode,i;
                    unsigned int8 a[21];
                    scancode = oxFE;
                    a[0]=SW1;
                    a[1]=SW2;
                    a[2]=SW3;
                    a[3]=SW4;
                    a[4]=led1;
                    a[5]=led2;
                    a[6]=ngc;
                    a[7]=ngd;
                    a[8]=thc;
                    a[9]=thd;
                    a[10]=nat;
                    a[11]=nac;
                    a[12]=nad;
                    a[13]=gic;
                    a[14]=gid;
                    a[15]=pc;
                    a[16]=pd;
                    a[17]=gc;
                    a[18]=gd;
                    a[19]=nc;
                    a[20]=nd;
                    for(i=0;i<=20;i++)
                    {
                    output_A(a[i]);
                    output_C(a[i]);
                    output_D(a[i]);
                    output_E(a[i]);
                    output_B(scancode);
                    delay_ms(3);
                    output_B(oxFF);
                    rotate_left(&scancode,1);
                    }

                    lỗi báo là Expecting a declaration!!!
                    đây là file gốc DONGHO.C
                    Last edited by kiemlucdt; 13-05-2012, 03:35.

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X