Thông báo

Collapse
No announcement yet.

Help mình đoạn code điều khiển led đơn dùng 74595 .

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

  • Help mình đoạn code điều khiển led đơn dùng 74595 .

    Mình dùng đoạn code này để điều khiển 16 led đơn dùng 89 và 2 con 595 . Mình muốn led sáng dần từ led 0 tới led 16 thì làm ntn? mình mới làm đc chạy từ 0 đến 8 thôi . Code đây

    #include"regx52.h"
    sbit DATA = P2^1;
    sbit SCK = P2^0;
    sbit SCL = P2^2;

    void quet(unsigned char x)
    {
    int i,temp;
    for(i=0;i<8;i++)
    {
    temp=x;
    temp=temp&0x80;
    if(temp==0x80)
    DATA=1;
    else
    DATA=0;
    x*=2;

    SCK=0;
    SCK=1;
    }
    SCL=0;
    SCL=1;
    }
    void delay()
    {
    unsigned int i;
    for(i=0;i<300;i++);
    }

    void main()
    {
    unsigned int i;
    unsigned char ma[]={0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,};
    while(1)
    {
    for(i=0;i<8;i++)
    {
    quet(ma[i]);
    delay();
    }
    }}
    ................. Pleiku .................... GIA LAI ...................

  • #2
    việc này đơn giản thôi, với 1 con 595 bạn sẽ bơm từ vdk vào nó 8 bit rồi xuất ra data, vậy với 2 con 595 nối tiếp thì bạn sẽ phải bơm vào nó 1 phát 16bit, trong đó 8 bít cho con này và 8 bít cho con còn lại thì mới được cho phép xuất ra cổng data, cách ghép 2 con 595 bạn có thể tra datasheet, chỉ đơn giản là chân 14 con này đấy chân 9 con kia thôi
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #3
      Nguyên văn bởi mast090 Xem bài viết
      việc này đơn giản thôi, với 1 con 595 bạn sẽ bơm từ vdk vào nó 8 bit rồi xuất ra data, vậy với 2 con 595 nối tiếp thì bạn sẽ phải bơm vào nó 1 phát 16bit, trong đó 8 bít cho con này và 8 bít cho con còn lại thì mới được cho phép xuất ra cổng data, cách ghép 2 con 595 bạn có thể tra datasheet, chỉ đơn giản là chân 14 con này đấy chân 9 con kia thôi
      Mình cũng hiểu là như thế rồi , nhưng mình ko hiểu là phải dịch 16 bit vào 2 con 595 như thế nào ? ý là cách viết code như thế nào ấy . đoạn code trên mình chỉ mới dịch được 8 bit cho con thứ nhất , còn 8 bit cho con thứ 2 mình loay hoay mãi mà ko làm đc . Mọi người giúp mình với
      ................. Pleiku .................... GIA LAI ...................

      Comment


      • #4
        Nguyên văn bởi thi tran Xem bài viết
        Mình cũng hiểu là như thế rồi , nhưng mình ko hiểu là phải dịch 16 bit vào 2 con 595 như thế nào ? ý là cách viết code như thế nào ấy . đoạn code trên mình chỉ mới dịch được 8 bit cho con thứ nhất , còn 8 bit cho con thứ 2 mình loay hoay mãi mà ko làm đc . Mọi người giúp mình với
        code:
        Code:
           #include"regx52.h"
        sbit DATA = P2^1;
        sbit SCK = P2^0;
        sbit SCL = P2^2;
         const unsigned char ma[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
        void quet(unsigned char x)
        {
        unsigned char i,temp;
        SCK=0;
        SCL=0;
        for(i=0;i<=7;i++)
        {
        temp=x;
        temp=temp&0x80;
        if(temp==0x80)
        DATA=1;
        else
        DATA=0;
        x*=2;
        
        
        SCK=1;
        SCK=0;
        }
        SCL=1;
        SCL=0;
        }
        void delay(unsigned long int t)
        {
            unsigned long int l;
            for(l=0;l<t;l++);
        }
        
        
        void main()
        {
        unsigned char y;
        
        
        while(1)
        {
        for(y=0;y<=7;y++)
        {
        quet(0xff);
        quet(ma[y]);
        
        
        
        
        delay(5000);
        
        
        }
         for(y=0;y<=7;y++)
        {
        
        
        quet(ma[y]);
        quet(0xff);
        
        
        delay(5000);
        
        
        }
        }}
        |

        Comment


        • #5
          Dịch đủ 16 bit vào rồi mới cho output trên chân ra.Để dịch đủ 16bit thì có phải dịch 2 byte ra ko.Thế thì lặp 2 lần.Dịch đủ 16 bit vào rồi mới cho output trên chân ra.Để dịch đủ 16bit thì có phải dịch 2 byte ra ko.Thế thì lặp 2 lần.
          , , ,

          Comment


          • #6
            Sau đây là một số cách của mình, còn nhiều cách khác nữa,hy vọng giúp đc gì cho bạn (minh có thời gian mình post tiếp cho)
            - mình soạn trên notepad nên ko tiện đánh có dấu mấy dòng ghi chú, sr:
            #include"regx52.h"
            sbit DATA = P2^1;
            sbit SCK = P2^0;
            sbit SCL = P2^2;

            unsigned char i,j;// bien dem so led



            //--------------------------------------------------------------------------------------------------
            void dich(void) // dich du lieu ra 595
            {
            SCK=0;
            SCK=1;
            }

            //--------------------------------------------------------------------------------------------------

            void chot(void) // chot du lieu ra 595
            {
            SCL=0;
            SCL=1;
            }

            //--------------------------------------------------------------------------------------------------

            // ctc chon led sang o vi tri i=num ( muon nhieu led sang cung thi or them (i==num||i=...||...)
            void chon_led(usigned char num)
            {
            for(i=0;i<16;i++)
            {
            if(i==num) {DATA=1;} // =1 led sang
            else{DATA=0}; // =0 led tat
            dich();
            }
            chot();

            }

            //--------------------------------------------------------------------------------------------------
            // ctc cho led sang theo thu tu tu 0-15
            void sang_lanluot_1(void)
            {
            for(j=0;j<16;j++)
            {
            chon_led(j);
            delay(100); // tu viet ctc delay nhe, he so tuy chinh phu hop
            };
            }
            //---------------------------------------------------------------------------------------------------
            // phuong phap 2 kem linh hoat hon: cho 1 led sang roi day 15 bit '0' vao va tao tre sau moi lan day
            void sang_lan_luot_2(void)
            {
            chon_led(16); // xoa trang thai cu 595 chon num>=16 la ok | ( co the bang cach khac, minh dung luon ctc)
            chon_led(0); // cho led so "0" sang |
            delay(100); // tu viet ctc delay nhe, he so tuy chinh phu hop
            for(j=0;j<15;j++)
            {
            DATA=0;
            dich();
            delay(100); // tu viet ctc delay nhe, he so tuy chinh phu hop
            };
            chot();
            }

            //--------------------------------- Chuong Trinh Chinh -----------------------------------------------
            void main()
            {
            while(1)
            {
            sang_lanluot_1(); // cach 1
            sang_lanluot_2(); // cach 2

            };
            }
            Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
            Gmail: -Mobile: 0989.194.472

            Comment


            • #7
              #include "regx52.H"
              sbit DATA=P2^1;
              sbit SCK=P2^0;
              sbit SCL=P2^2;

              unsigned char i,j;

              void shift_byte(unsigned char byte_data)
              {
              for(j=8;j>0;j--){
              DATA=byte_data&0x80;
              SCK=1;
              SCK=0;
              byte_data<=1;
              }}
              void shift_xbyte(unsigned char x,unsigned char *String)
              {
              for(i=0;i<x;i++)
              shift_byte(String[i]);
              SCL=1;
              SCL=0;
              }
              #include "regx52.H"
              sbit DATA=P2^1;
              sbit SCK=P2^0;
              sbit SCL=P2^2;

              unsigned char i,j;

              void shift_byte(unsigned char byte_data)
              {
              for(j=8;j>0;j--){
              DATA=byte_data&0x80;
              SCK=1;
              SCK=0;
              byte_data<=1;
              }}
              void shift_xbyte(unsigned char x,unsigned char *String)
              {
              for(i=0;i<x;i++)
              shift_byte(String[i]);
              SCL=1;
              SCL=0;
              }
              , , ,

              Comment


              • #8
                Mình làm đc rồi . thanks mọi người nhé ! giờ mình muốn viết hiệu ứng điều khiển cho 16 con led đó thì fai viết như thế nào nhỉ ? mình chưa hình dung ra công việc fai làm . ví dụ như mình muốn 16 led sáng theo các kiểu như :sáng dần lên , tắt dần đi ,2 led sáng đuổi nhau ....... cách viết code ntn mọi người help mình với ! phần cứng thì vẫn như trên nha , vxl là con 89 và 2 con 595 . Mình đang tập viết code = c nên còn gà lắm . Mong mọi người chỉ thêm !
                ................. Pleiku .................... GIA LAI ...................

                Comment


                • #9
                  Xuất byte có thể viết SPI mềm.
                  Sáng dần lên + tắt dần đi => PWM.
                  Led đuổi => dịch trái, dịch phải , hoặc quay .
                  Ko thích 8051 nên chỉ biết phải làm thế. Còn code bạn tự nghĩ

                  Comment


                  • #10
                    Mấy cái đang viết là spi mềm đó.
                    , , ,

                    Comment


                    • #11
                      Nguyên văn bởi duong_act Xem bài viết
                      Xuất byte có thể viết SPI mềm.
                      Sáng dần lên + tắt dần đi => PWM.
                      Led đuổi => dịch trái, dịch phải , hoặc quay .
                      Ko thích 8051 nên chỉ biết phải làm thế. Còn code bạn tự nghĩ
                      hix , mấy pro toàn xài thuật ngữ , mình mới làm wen vs C nên chưa hỉu mô tê j cả ! Cho mình vài ví dụ về nhửng hiệu ứng trên đc ko? Có ví dụ minh họa chắc sẽ dể hỉu hơn
                      ................. Pleiku .................... GIA LAI ...................

                      Comment


                      • #12
                        Cái bạn đang viết là spi mềm đó.Bạn kia chắc cũng pro nhưng chưa hiểu rõ spi có nhiều dạng.Cái mà tôi viết cũng thế.Spi có nghĩa là giao tiếp ngoại vi đồng bộ.
                        , , ,

                        Comment


                        • #13
                          Nguyên văn bởi rptdnmqs Xem bài viết
                          Cái bạn đang viết là spi mềm đó.Bạn kia chắc cũng pro nhưng chưa hiểu rõ spi có nhiều dạng.Cái mà tôi viết cũng thế.Spi có nghĩa là giao tiếp ngoại vi đồng bộ.
                          Pro có thể cho mình vài ví dụ điều khiển 16 con led của mình theo vài hiệu ứng như : sáng dần 16 led , tắt dần 16 led , 2 ,3 led đuổi nhau chạy ko? Viết theo hướng mình đang viết ở trên nha Pro , mỗi câu lệnh kèm theo chú thích cho mình hiểu với nha .Thanks pro trước
                          ................. Pleiku .................... GIA LAI ...................

                          Comment


                          • #14
                            Mình kô có máy tính bạn ơi.Đang dÙng điện thoại.Tạm thời chưa giúp được.Sorry.Mình chỉ trả lời những câu hỏi ngắn và kô đòi hỏi phải dÙng máy tính.òi hỏi phải dÙng máy tính.
                            , , ,

                            Comment


                            • #15
                              Nguyên văn bởi thi tran Xem bài viết
                              Pro có thể cho mình vài ví dụ điều khiển 16 con led của mình theo vài hiệu ứng như : sáng dần 16 led , tắt dần 16 led , 2 ,3 led đuổi nhau chạy ko? Viết theo hướng mình đang viết ở trên nha Pro , mỗi câu lệnh kèm theo chú thích cho mình hiểu với nha .Thanks pro trước
                              viết thử cho bạn 3 hiệu ứng:
                              Code:
                                #include"regx52.h"
                              sbit DATA = P2^1;
                              sbit SCK = P2^0;
                              sbit SCL = P2^2;
                                       const unsigned char ma[4][8]={           
                                       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//
                                       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                                       0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff,//sang dan lsb..msb
                                       0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//sang dan 1 led lsb...msb
                              unsigned char y,j;
                              
                              void quet(unsigned char x)
                              {
                              unsigned char i,temp;
                              SCK=0;
                              SCL=0;
                              for(i=0;i<=7;i++)
                              {
                              temp=x;
                              temp=temp&0x80;
                              if(temp==0x80)
                              DATA=1;
                              else
                              DATA=0;
                              x*=2;
                              
                              SCK=1;
                              SCK=0;
                              }
                              SCL=1;
                              SCL=0;
                              }
                              void delay(unsigned long int t)
                              {
                                  unsigned long int l;
                                  for(l=0;l<t;l++);
                              }
                              void sang_dan()
                               {
                               for(y=0;y<=7;y++)
                              {
                              quet(ma[0][y]);
                              quet(ma[2][y]);
                              delay(5000);
                              }
                               for(y=0;y<=7;y++)
                              {
                              quet(ma[2][y]);
                              quet(ma[1][y]);
                              delay(5000);
                              }
                               }
                              void nhap_nhay()
                               {
                               for(y=0;y<=7;y++)
                              {
                              quet(0xff);
                              quet(0xff);
                              delay(5000);
                              quet(0x00);
                              quet(0x00);
                              delay(5000);
                              }
                               }
                                void sang_dan_1led()
                               {
                               for(y=0;y<=7;y++)
                              {
                              quet(ma[0][y]);
                              quet(ma[3][y]);
                              delay(5000);
                              }
                               for(y=0;y<=7;y++)
                              {
                              quet(ma[3][y]);
                              quet(ma[0][y]);
                              delay(5000);
                              }
                               }
                              void main()
                              {
                              
                              while(1)
                              {
                              sang_dan();
                              nhap_nhay();
                              sang_dan_1led();
                              }}
                              |

                              Comment

                              Về tác giả

                              Collapse

                              thi tran Tìm hiểu thêm về thi tran

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

                              Collapse

                              Đang tải...
                              X