Thông báo

Collapse
No announcement yet.

led sao băng

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

  • led sao băng

    các ơi bac nào có mạch nguyên lí mạch led sao băng lám ơn gửi cho em với
    anhtuan.nt277@gmail.com
    cảm ơn các bác rất nhiều

  • #2
    có gì đâu mà cần nguyên lý nhỉ ??? 1 dây 8-10con led mắc thành// nhiều dây lại là ok thành viền sao băng lun ý chứ
    good luck !!!

    Email:
    Gmail:

    Comment


    • #3
      Nguyên văn bởi tuankep6 Xem bài viết
      có gì đâu mà cần nguyên lý nhỉ ??? 1 dây 8-10con led mắc thành// nhiều dây lại là ok thành viền sao băng lun ý chứ
      good luck !!!
      Bạn nói rõ tí hơn, mình chưa hiểu lắm. Mình tưởng phải dùng VDK chứ???

      Comment


      • #4
        bạn dùng 8 con led mắc vào 8 chân vdk 89s52, rồi viết ct, là nó chạy đc sao băng. không dùng vdk, có tết con voi cũng khó làm sao băng được.chúc bạn thành công
        không tiếp nhận cuộc gọi qua điện thoại vì đi làm toàn tập, tính khí thất thường, hay nóng võ công lại cao

        Comment


        • #5
          cảm ơn nhưng mình mới học môn này thật sự mình chua hiểu lắm về viết code bác nào có cho em xin với để em còn học tập

          Comment


          • #6
            Nguyên văn bởi hoanghung92 Xem bài viết
            Bạn nói rõ tí hơn, mình chưa hiểu lắm. Mình tưởng phải dùng VDK chứ???
            thì đúng rồi dùng VĐK nhưng bạn kia hỏi nguyên lý mà
            nếu làm nhiều dây (ghép thành viền) thì mắc như trên ak dễ thui có gì đâu nhỉ

            Email:
            Gmail:

            Comment


            • #7
              Nguyên văn bởi anhtuannt Xem bài viết
              cảm ơn nhưng mình mới học môn này thật sự mình chua hiểu lắm về viết code bác nào có cho em xin với để em còn học tập
              dùng ledim pro gì gì ấy dễ thôi

              Email:
              Gmail:

              Comment


              • #8
                cái này có thể giúp bạn hiểu
                SAO BANG.rar

                Comment


                • #9
                  cảm ơn các bác nhiều nhiều nha

                  Comment


                  • #10
                    cảm ơn bạn nhé

                    Comment


                    • #11
                      Nguyên văn bởi chjpchjp1991
                      của bạn nè..topic dientuvietnam http://www.dientuvietnam.net/forums/...-chuan-140464/
                      cảm ơn ban nhiều nha

                      Comment


                      • #12
                        Nguyên văn bởi phunghe Xem bài viết
                        cái này có thể giúp bạn hiểu
                        SAO BANG.rar
                        thanks bạn

                        Comment


                        • #13
                          Nguyên lý led sao băng là tạo một dãy led có độ sáng giảm dần gây hiệu ứng như vệt đuôi sao băng. Để điều chỉnh độ sáng của led ta dùng pwm (điều chế độ rộng xung).
                          Giả sử ta chọn vệt sao băng tạo bởi 8 led, ta đưa lần lượt 0x11111111b + delay_1ms, 0x01111111b+delay_30ms, 0x00111111b+delay_60ms, 0x00011111b+delay_60ms, 0x00001111b+delay_90ms, 0x00000111b+delay_120ms, 0x00000011b+delay_150ms, 0x00000001b+delay_180ms. Sau đó lặp lại khoảng 10 lần, rồi xoay một bit, bit dư sẽ chuyển sang chân của cổng kế tiếp. Cứ như vậy ta sẽ được hiệu ứng led sao băng. Ở đây không sử dụng độ trễ của các led đều nhau vì mắt không thể cảm nhận sự khác biệt rõ rệt với khoảng thời gian đều nhau như vậy.
                          Nếu muốn mở rộng số led, ta có thể dùng nhiều 74hc595, tao thành thanh ghi dịch nối tiếp sang song song. Khi đó cần chú ý tới fan-out của uC, để xem mở rộng được bao nhiêu, và lợi dụng 74hc595 có 2 thanh ghi (ghi dịch và chốt) để tạo ánh sáng không bị gián đoạn

                          Comment


                          • #14
                            Sử dụng 74hc595 rắc rối, băm sung em nó ra là ok. Đây nè
                            #include<regx51.h>
                            #define NumPort 32
                            char PWM[NumPort];
                            char chuki=0;

                            /*------------------------------------------------------------------------*/
                            void SetPort(char i, char v)
                            {
                            switch (i)
                            {
                            case 0: P1_0 = v; return;
                            case 1: P1_1 = v; return;
                            case 2: P1_2 = v; return;
                            case 3: P1_3 = v; return;
                            case 4: P1_4 = v; return;
                            case 5: P1_5 = v; return;
                            case 6: P1_6 = v; return;
                            case 7: P1_7 = v; return;

                            case 8: P3_0 = v; return;
                            case 9: P3_1 = v; return;
                            case 10: P3_2 = v; return;
                            case 11: P3_3 = v; return;
                            case 12: P3_4 = v; return;
                            case 13: P3_5 = v; return;
                            case 14: P3_6 = v; return;
                            case 15: P3_7 = v; return;

                            case 16: P2_0 = v; return;
                            case 17: P2_1 = v; return;
                            case 18: P2_2 = v; return;
                            case 19: P2_3 = v; return;
                            case 20: P2_4 = v; return;
                            case 21: P2_5 = v; return;
                            case 22: P2_6 = v; return;
                            case 23: P2_7 = v; return;

                            case 24: P0_7 = v; return;
                            case 25: P0_6 = v; return;
                            case 26: P0_5 = v; return;
                            case 27: P0_4 = v; return;
                            case 28: P0_3 = v; return;
                            case 29: P0_2 = v; return;
                            case 30: P0_1 = v; return;
                            case 31: P0_0 = v; return;
                            }
                            }
                            /*------------------------------------------------------------------------*/
                            void Timer0()interrupt 1
                            {
                            char i;
                            TF0=0;
                            TR0=0; //stop ngat
                            for (i=0 ; i<NumPort ; i++)
                            if (chuki < PWM[i]) SetPort(i, 1);
                            else SetPort(i, 0);

                            chuki += 5; //cho tu 5 den 10 se it ca dut, tuy hy nhe
                            if (chuki >= 100) chuki=0;
                            TR0=1; //tiep tuc ngat
                            }
                            void delay(unsigned int ms)
                            {
                            for (ms=ms*120; ms>0 ; ms--);
                            }
                            /*------------------------------------------------------------------------*/
                            void ShiftRightArray(char Arr[], char v1, char v2) // 0--------------->n
                            {
                            char i, temp=Arr[v2];
                            for (i=v2 ; i>v1 ; i--) Arr[i] = Arr[i-1];
                            Arr[v1] = temp;
                            }
                            void ShiftLeftArray(char Arr[], char v1, char v2) // 0<---------------n
                            {
                            char i, temp=Arr[v1];
                            for (i=v1 ; i < v2 ; i++) Arr[i] = Arr[i+1];
                            Arr[v2] = temp;
                            }
                            char MinArray(char Arr[], char v1, char v2)
                            {
                            char i, vMin=v1;
                            for (i=v1+1 ; i <= v2 ; i++)
                            if (Arr[i] < Arr[vMin]) vMin=i;
                            return vMin;
                            }
                            char MaxArray(char Arr[], char v1, char v2)
                            {
                            char i, vMax=v1;
                            for (i=v1+1 ; i <= v2 ; i++)
                            if (Arr[i] > Arr[vMax]) vMax=i;
                            return vMax;
                            }
                            void SetArray(char Arr[], char v1, char v2, unsigned char val)
                            {
                            char i;
                            for (i=v1 ; i <= v2 ; i++) Arr[i]=val;
                            }
                            /*---------------Hieu ung vien sao bang gom 8 cang cuc dep nhe---------------------------------*/
                            char IdBorder=0;
                            unsigned int StepBorder=0;
                            void Border()
                            {
                            if (StepBorder == 0)
                            {
                            PWM[0]=10; StepBorder++;
                            SetArray(PWM, 1, 7, 0);
                            }
                            else if (StepBorder < 224)
                            {
                            if (StepBorder%32 ==0)
                            {
                            IdBorder = MaxArray(PWM, 0, 7);
                            if (PWM[IdBorder] == 100)
                            {
                            PWM[0]=10;
                            SetArray(PWM, 1, 7, 0);
                            }
                            else PWM[(IdBorder+1)%8] = PWM[IdBorder] + 15;
                            }
                            StepBorder++;
                            ShiftRightArray(PWM, 0, 7);
                            }
                            else if (StepBorder == 224)
                            {
                            PWM[0]=10; StepBorder++;
                            SetArray(PWM, 1, 7, 0);
                            }
                            else if (StepBorder < 448)
                            {
                            if (StepBorder%32 ==0)
                            {
                            IdBorder = MaxArray(PWM, 0, 7);
                            if (PWM[IdBorder] == 100)
                            {
                            PWM[0]=10;
                            SetArray(PWM, 1,7,0);
                            }
                            else if (IdBorder == 0) PWM[7] = PWM[0] + 15;
                            else PWM[IdBorder-1] = PWM[IdBorder] + 15;
                            }
                            StepBorder++;
                            ShiftLeftArray(PWM, 0, 7);
                            }
                            else if (StepBorder == 448)
                            {
                            SetArray(PWM, 0, 7, 0);
                            IdBorder = 0; StepBorder++;
                            }
                            else if (StepBorder < 460)
                            {
                            if (StepBorder%2 == 0)
                            {
                            IdBorder =(IdBorder)?0:100;
                            SetArray(PWM, 0, 7, IdBorder);
                            }
                            StepBorder++;
                            }
                            else StepBorder=0;
                            }
                            /*------------------------------------------------------------------------
                            PWM[0] ...PWM[31] ung voi 32 cang 89c52
                            moi 1 bien PWM[i] co gia tri tu 0 -> 100 ung voi do sang
                            ---------------------------------------------------------------------------*/
                            main()
                            {
                            EA=0;
                            TMOD=0x02; //timer 0: che do 2: 8 bit tu dong nap lai
                            TH0 = 156;
                            TL0 = 156;
                            ET0=1;
                            EA=1;
                            TR0=1;

                            while (1)
                            {
                            TF0=0;
                            TR0=0; //stop ngat

                            Border();

                            TR0=1; //tiep tuc ngat
                            delay(5);
                            }
                            }
                            /**************************Chu thot thank cai di ************************************/

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X