Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về 74hc595 điều khiển led đơn

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

  • Cần giúp đỡ về 74hc595 điều khiển led đơn

    Mình đang thử làm mạch điều khiển led đơn dùng 595.
    Mình viết ct như sau. Bỏ qua ctc nhé.
    Void main()
    {
    while(1)
    {
    for(i=0;i<24;i++)
    {
    if(i>8) quet(0x00); else quet(led[i]);
    if(i>16) quet(0x00); else quet(led[i-8]);
    if(i>24) quet(0x00); else quet(led[i-16]);
    }
    }
    }
    sau khi nạp cho vđk mình thấy nó chạy lung ta lung tung.
    Mình muốn nó sáng từ led này sang led kế tiếp thì phải viết code ntn. Mong mấy Pr0 giú p đỡ.


  • #2
    Code:
    #include <REGX52.H>
    sbit SDO = P2^1;
    sbit SCK = P2^0;
    sbit SCL = P2^2;
    sbit MR =  P2^3;   // reset thanh ghi
    sbit EN = P2^4;
    unsigned char m[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    int k,i;
    void delay(long time)
    {        long n;
             for(n=0;n<time;n++)
              {
               ;
              }
    }
    void quet(unsigned char x)
    {
            int tam;
            for(i=0;i<8;i++)
               {
                 tam=x;
                 tam=tam&0x80;	 //	 lay tung bit
                 if(tam==0x80)	 //
                 SDO=1; 			 //
                 else			 //
                 SDO=0; 			 //
                 x<<=1; 			 //
                 SCK=0; 			 //	tao xung, moi xung nhet vao 595 1 bit
                 SCK=1;
                 }
    }
    void main()
    {     EN=0;			 // enable 595
          MR=0;			 // reset thanh ghi
          MR=1;
             while(1)	  
                {
    			 quet(m[k]);
    			 k++;
    			 if(k==8)
    			 k=0;
                 delay(2000);
                 SCL=0;		   // chot dua du lieu ra 595
                 SCL=1;
                 MR=0;		   // reset thanh ghi
                 MR=1;
                 }
    }
    ko biết có đúng ý bạn ko
    Nguyễn Huy Biên - 01649 802 694
    gmail :

    Comment


    • #3
      Nguyên văn bởi bienhou Xem bài viết
      Code:
      #include <REGX52.H>
      sbit SDO = P2^1;
      sbit SCK = P2^0;
      sbit SCL = P2^2;
      sbit MR =  P2^3;   // reset thanh ghi
      sbit EN = P2^4;
      unsigned char m[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
      int k,i;
      void delay(long time)
      {        long n;
               for(n=0;n<time;n++)
                {
                 ;
                }
      }
      void quet(unsigned char x)
      {
              int tam;
              for(i=0;i<8;i++)
                 {
                   tam=x;
                   tam=tam&0x80;	 //	 lay tung bit
                   if(tam==0x80)	 //
                   SDO=1; 			 //
                   else			 //
                   SDO=0; 			 //
                   x<<=1; 			 //
                   SCK=0; 			 //	tao xung, moi xung nhet vao 595 1 bit
                   SCK=1;
                   }
      }
      void main()
      {     EN=0;			 // enable 595
            MR=0;			 // reset thanh ghi
            MR=1;
               while(1)	  
                  {
      			 quet(m[k]);
      			 k++;
      			 if(k==8)
      			 k=0;
                   delay(2000);
                   SCL=0;		   // chot dua du lieu ra 595
                   SCL=1;
                   MR=0;		   // reset thanh ghi
                   MR=1;
                   }
      }
      ko biết có đúng ý bạn ko
      thank.
      Nhưng mà nếu muốn 3 con 595 đk 24 led đơn sáng lần lượt thì ntn.
      Thank

      Comment


      • #4
        ở đây dùng 4 con 595 bạn nhé..muốn 3 thì sửa lại thôi!


        #include<reg52.h>
        #include<stdio.h>
        #include<intrins.h>


        sbit dulieu = P2^1;
        sbit xung = P2^0;
        sbit chot = P2^2;
        unsigned int n,m,k;
        void delay(unsigned char ms )
        {
        int i,j;
        for(i=0;i<ms;i++)
        {
        for(j=0;j<800;j++);

        }
        }

        void dich(unsigned char x)
        {
        int i,tam;
        for(i=0;i<8;i++)
        {
        tam=x;
        tam=tam&0x80;
        if(tam==0x80) dulieu=1;
        else dulieu=0;
        x=x<<1;
        xung=0;
        xung=1;
        }
        }
        void dich3(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
        {
        dich(d);
        dich(c);
        dich(b);
        dich(a);
        }

        void nhapnhay()
        {
        int j,p;
        unsigned char code led1[]={0xaa,0x55};
        unsigned char code led2[]={0x55,0xaa};

        for(p=0;p<18;p++)
        for(j=0;j<2;j++)
        {
        dich3(led1[j],led2[j],led1[j],led2[j]);
        chot=0;
        chot=1;
        delay(8);
        }
        dich3(255,255,255,255);
        chot=0;
        chot=1;
        }

        void main(void)
        {
        nhapnhay();
        }

        Comment


        • #5
          Nguyên văn bởi huydo7new Xem bài viết
          ở đây dùng 4 con 595 bạn nhé..muốn 3 thì sửa lại thôi!


          #include<reg52.h>
          #include<stdio.h>
          #include<intrins.h>


          sbit dulieu = P2^1;
          sbit xung = P2^0;
          sbit chot = P2^2;
          unsigned int n,m,k;
          void delay(unsigned char ms )
          {
          int i,j;
          for(i=0;i<ms;i++)
          {
          for(j=0;j<800;j++);

          }
          }

          void dich(unsigned char x)
          {
          int i,tam;
          for(i=0;i<8;i++)
          {
          tam=x;
          tam=tam&0x80;
          if(tam==0x80) dulieu=1;
          else dulieu=0;
          x=x<<1;
          xung=0;
          xung=1;
          }
          }
          void dich3(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
          {
          dich(d);
          dich(c);
          dich(b);
          dich(a);
          }

          void nhapnhay()
          {
          int j,p;
          unsigned char code led1[]={0xaa,0x55};
          unsigned char code led2[]={0x55,0xaa};

          for(p=0;p<18;p++)
          for(j=0;j<2;j++)
          {
          dich3(led1[j],led2[j],led1[j],led2[j]);
          chot=0;
          chot=1;
          delay(8);
          }
          dich3(255,255,255,255);
          chot=0;
          chot=1;
          }

          void main(void)
          {
          nhapnhay();
          }
          Nếu sửa lại code ntn thì có ảnh hưởng gì ko.
          void dich3(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
          {
          dich(a);
          dich(b);
          dich(c);
          dich(d);
          }

          Comment


          • #6
            Mấx bác Pr0 vào giúp đỡ đê

            Comment


            • #7
              cậu muốn giúp cái gì..? miêu tả cụ thể và ngắn gọn thôi.

              Comment


              • #8
                Nguyên văn bởi tan0710 Xem bài viết
                cậu muốn giúp cái gì..? miêu tả cụ thể và ngắn gọn thôi.
                Ý mình là dùng 3 con 595 điều khiển 24 con led nháy tuần tự. Con thứ nhất sáng rùi tắt,sau đó led thứ 2 sáng rùi tắt và cứ như thế đến con led 24.
                Thank mọi người.

                Comment


                • #9
                  sax..thế thì cho dịch giá trị là 1....
                  rồi cho tín hiêu chốt theo thòi gian mà mình muốn sáng led là đc

                  Comment


                  • #10
                    Mình thấy người ta thường dùng 595 để điều khiển khi có quá nhiều led thôi,mỗi chân điều khiển hẳn 1 chữ trên bảng led chẳng hạn,hoặc dùng quét led matrix,led cube,chứ nháy led đơn này thì nối hẳn vào chân vđk cho xong. Nếu như bạn muốn điều khiển như vậy thì cứ mỗi khi có 1 bit vào 595 thì bạn lại phải chốt nó ở đầu ra luôn,lôi thôi lắm
                    vanduc0211@gmail.com

                    Comment


                    • #11
                      Nguyên văn bởi tan0710 Xem bài viết
                      sax..thế thì cho dịch giá trị là 1....
                      rồi cho tín hiêu chốt theo thòi gian mà mình muốn sáng led là đc
                      Bạn cho mình xin cái code C cụ thể đi.

                      Comment


                      • #12
                        Nguyên văn bởi maingochoc Xem bài viết
                        Bạn cho mình xin cái code C cụ thể đi.
                        Code:
                        #include"regx52.h"
                        sbit DATA = P2^1;
                        sbit SCK = P2^0;
                        sbit SCL = P2^2;
                        void delay(int i)
                        {
                        	while(i) i--;
                        }
                        void quet(unsigned char x)
                        {
                        	int i,temp;
                        	for(i=0;i<8;i++)
                        	{
                        		temp=x;//gan bien
                        		temp=temp&0x80;//lay ra bit dau tien (bit 7)
                        		if(temp==0x80)
                        			DATA=1; //bang 1 thi xuat vao chip =1
                        		else
                        			DATA=0; //nguoc lai bang 0
                        		x*=2; //dich bit lay bit trong so thap
                        		SCK=0; //tao xung tren chan 11
                        		SCK=1; //1 xung dua vào 1 bít
                        	}
                        	SCL=0; //xuat du lieu ra output
                        	SCL=1;
                        }
                        // chuong trinh tren là cach lap trinh day du cho moi mã 8bit...neu muon dùng 24bit (24 led) thì thay số 8 thành 24..
                        //nhung do y/c là chỉ dich gia tri 1 nên có the viet nhu sau
                        void quet1(unsigned char x)
                        {
                        	int i;
                        	for(i=0;i<24;i++)  //do là 24 led
                        	{
                        		if(i=0)	DATA=1; //xuat vao chip =1
                        		else	        DATA=0; //xuat vao chip =0
                        		SCK=0; //tao xung tren chan 11
                        		SCK=1; //1 xung dua vào 1 bít
                                        SCL=0; //xuat du lieu ra output
                        	        SCL=1;
                                        delay(3000);
                        	}
                        }
                        void main()
                        {
                        	unsigned int i, k=0;
                        	unsigned char ma=1; //vi 595 dich 8 bit/ IC nên đặt biến là unsigned char
                        	while(1)
                        	{
                        		quet(0); //xoa het cac bit trong 595
                        		quet1(ma);
                        		//   delay(3000);
                        //thay doi gia tri trong delay de co thoi gian dich led theo ý cạu
                        	}
                        }

                        OK..?
                        Last edited by tan0710; 01-10-2012, 09:42.

                        Comment

                        Về tác giả

                        Collapse

                        maingochoc Lalalala Tìm hiểu thêm về maingochoc

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

                        Collapse

                        Đang tải...
                        X