Thông báo

Collapse
No announcement yet.

Sửa giúp mình Code C lập trình bảng LED

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

  • Sửa giúp mình Code C lập trình bảng LED

    /* CAU TRUC PHAN CUNG
    *vienngoai =>P0.3 ( TRANG ) va P0.4 ( DO )
    *vientrong => P1.0 (VANG ) va P1.1
    *vienduoi => P0.0 ( do ) + P0.1(xanh duong ) + P0.2 ( xanh la cay )
    *chu ILU => I > P0.5
    LOVE > P0.6
    U > P0.7
    */
    #include <REG51F.H>
    #include <stdio.h>
    sbit P1_0 = P1^0;
    sbit P1_1 = P1^1;
    sbit P0_0 = P0^0;
    sbit P0_1 = P0^1;
    sbit P0_2 = P0^2;
    sbit P0_3 = P0^3;
    sbit P0_4 = P0^4;
    sbit P0_5 = P0^5;
    sbit P0_6 = P0^6;
    sbit P0_7 = P0^7;
    /* KHAI BAO CAC CHUONG TRINH CON */
    void delay(unsigned char time)
    {
    unsigned char j,i;
    for(i=0;i<=120;i++)
    for(j=0;j<=time;j++);
    }
    // Chuong trinh con vien ngoai //
    void vienngoai_1(void) // Led duoi nhau nguoc-xuoi //
    {
    unsigned char a,a1,a2;
    for(a=0;a<=50;a++)
    {
    P0_3=0;P0_4=1;delay(100);
    P0_3=1;P0_4=0;delay(100);
    }
    for(a1=0;a1<=60;a1++)
    {
    P0_3=0; P0_4=1;delay(200);
    P0_3=1;P0_4=0;delay(200);
    }
    for(a2=0;a2<=50;a2++)
    {
    P0_0=3;P0_4=1;delay(400);
    P0_0=3;P0_4=0;delay(400);
    }
    }
    void vienngoai_2(void) // Led do sang, led trang tat va nguoc lai //
    {
    unsigned char b,b1;
    for(b=0;b<=50;b++)
    {
    P0_4=0;P0_3=1;delay(200);
    }
    for(b1=0;b1<=60;b1++)
    {
    P0_4=1;P0_3=0;delay(200);
    }
    }
    void vienngoai_3(void) // Sang tat ca led vien ngoai //
    {
    P0_3=1;P0_4=1;
    delay(300);
    P0_3=0;P0_4=0;
    delay(300);
    }
    void vienngoai(void)
    {
    unsigned char dem1,dem2,dem3;
    for(dem1=0;dem1<=50;dem1++) vienngoai_1();
    for(dem2=0;dem2<=50;dem2++) vienngoai_2();
    for(dem3=0;dem3<=50;dem3++) vienngoai_3();
    }
    // Chuong trinh con vien trong //
    void vientrong_1(void) // Led duoi nhau nguoc-xuoi //
    {
    unsigned char g,g1,g2;
    for(g=0;g<=50;g++)
    {
    P1_0=0;P1_1=1;delay(100);
    P1_0=1;P1_1=0;delay(100);
    }
    for(g1=0;g1<=60;g1++)
    {
    P1_0=0;P1_1=1;delay(200);
    P1_0=1;P1_1=0;delay(200);
    }
    for(g2=0;g2<=50;g2++)
    {
    P1_0=0;P1_1=1;delay(400);
    P1_0=1;P1_1=0;delay(400);
    }
    }
    void vientrong_2(void) // Led xanh sang, vang tat //
    {
    unsigned char d,d1;
    for(d=0;d<=10;d++)
    {
    P1_0=0;P1_1=1;
    delay(400);
    }
    for(d1=0;d1<=10;d1++)
    {
    P1_0=1;P1_1=0;
    delay(400);
    }
    }
    void vientrong(void)
    {
    unsigned char e,e1;
    for(e=0;e<=30;e++) vientrong_1();
    for(e1=0;e1<=20;e1++) vientrong_2();
    }
    // Chuong trinh con chu I LOVE YOU //
    void ilu_0(void) // Sang I LOVE YOU //
    {
    P0=0xff;
    delay(200);
    P0=0x00;
    }
    void ilu_1(void)// Sang lan luot I > LOVE > YOU va nguoc lai //
    {
    P0_5=1;P0_6=0;P0_7=0;delay(200); // duoi trai - phai //
    P0_5=0;P0_6=1;P0_7=0;delay(200);
    P0_5=0;P0_6=0;P0_7=1;delay(200);
    P0_5=0;P0_6=0;P0_7=1;delay(200);// duoi phai - trai //
    P0_5=0;P0_6=1;P0_7=0;delay(200);
    P0_5=1;P0_6=0;P0_7=0;delay(200);
    P0_5=1;P0_6=0;P0_7=1;delay(200);// sang I U;tat LOVE //
    P0_5=0;P0_6=1;P0_7=0;delay(200);// sang LOVE tat I U //
    }
    void ilu_2(void)// sang don I > love > you //
    {
    P0_5=1;P0_6=0;P0_7=0;delay(200);
    P0_5=1;P0_6=1;P0_7=0;delay(200);
    P0_5=1;P0_6=1;P0_7=1;delay(200);

    P0_5=0;P0_6=0;P0_7=1;delay(200);
    P0_5=0;P0_6=1;P0_7=1;delay(200);
    P0_5=1;P0_6=1;P0_7=1;delay(200);
    }
    void iloveyou(void)
    {
    unsigned char c,c1,c2;
    for(c=0;c<=20;c++) ilu_0();
    for(c1=0;c1<=20;c1++) ilu_1();
    for(c2=0;c2<=20;c2++) ilu_2();
    }
    // Chuong trinh con vien duoi //
    void vienduoi_0(void) // sang tat ca led vien duoi //
    {
    P0_0=0;P0_1=0;P0_2=0;
    delay(100);
    P0_0=1;P0_1=1;P0_2=1;
    delay(100);
    }
    void vienduoi_1(void) // led duoi nguoi xuoi//
    {
    P0_0=1;P0_1=0;P0_2=0; delay(200);
    P0_0=0;P0_1=1;P0_2=0; delay(200);
    P0_0=0;P0_1=0;P0_2=1; delay(200);

    P0_0=0;P0_1=0;P0_2=1; delay(200);
    P0_0=0;P0_1=1;P0_2=0; delay(200);
    P0_0=1;P0_1=0;P0_2=0; delay(200);
    }
    void vienduoi_2(void)// sang led do //
    {
    P0_0=1;P0_1=0;P0_2=0;
    }
    void vienduoi_3(void)//sang led xang duong //
    {
    P0_1=1;P0_0=0;P0_2=0;
    }
    void vienduoi_4(void)// sang led xanh la cay //
    {
    P0_2=1;P0_0=0;P0_1=0;
    }
    void vienduoi(void)
    {
    unsigned char f,f1,f2,f3,f4;
    for(f=0;f<=10;f++) vienduoi_4();
    for(f1=0;f1<=10;f1++) vienduoi_3();
    for(f2=0;f2<=10;f2++) vienduoi_2();
    for(f3=0;f3<=10;f3++) vienduoi_1();
    for(f4=0;f4<=10;f4++) vienduoi_0();
    }
    /* CHUONG TRINH CHINH */
    void main()
    { unsigned char q1,q2,q3,q4;
    P1=0xff;P0=0xff;
    delay(1000);
    while(1)
    {
    for(q1=0;q1<=2;q1++) vienngoai();
    for(q2=0;q2<=2;q2++) vientrong();
    for(q3=0;q3<=2;q3++) vienduoi();
    for(q4=0;q4<=2;q4++) iloveyou();
    }
    }



    Khi chạy thực tế thì chỉ có chương trinh con vienngoai() chạy thôi, các chương trinh khác ko chạy ! Bác nào cao thủ giúp em với nha
    " Muốn biết phải hỏi, muốn giỏi phải học "

  • #2
    Bạn có file mô phỏng không bạn. Gửi cho mình phần cứng vẽ bằng protues và các mô tả các hiệu ứng bạn cần mình sẽ viết code cho bạn sẽ thấy dễ hiểu, đơn giản, cách bạn viết dài quá và đọc rối quá, khó nắm bắt để sửa quá. delay khai bao truyền là unsigned char time mà bạn cho delay đến những 400? muốn thế phải là int time
    Thêm nữa. Bạn muốn nó nháy đuổi thì không điều khiển 2 led mà nhìn nó chạy ngược chạy xuôi đâu. ít nhất phải là 3 led thì mới nhìn ra đc. 2 led chỉ có ý nghĩa sáng tắt sáng tắt thôi.
    Last edited by trucpham189; 24-08-2010, 17:44.

    Comment


    • #3
      /* CAU TRUC PHAN CUNG
      *vienngoai =>P0.3 ( TRANG ) va P0.4 ( DO )
      *vientrong => P1.0 (VANG ) va P1.1
      *vienduoi => P0.0 ( do ) + P0.1(xanh duong ) + P0.2 ( xanh la cay )
      *chu ILU => I > P0.5
      LOVE > P0.6
      U > P0.7

      * Hieu ung la:
      Vien duoi=> Led duoi nhau
      Vien trong => Sanh tat xen kẽ
      Vien ngoai = sáng tắt xen kẽ
      Chử I LOVE U => đuổi nhau từ trái qua phai ròi ngược lại

      Bạn giúp mình với nhé !
      " Muốn biết phải hỏi, muốn giỏi phải học "

      Comment


      • #4
        #include<regx52.h>
        unsigned char dat;
        unsigned char col[10];
        void delay(int t)
        {
        unsigned char i;
        int j;
        for(i=0;i<125;i++)
        for(j=0;j<t;j++) {}
        }
        /*
        *vientrong => P1.0 (VANG ) va P1.1
        *vienduoi => P0.0 ( do ) + P0.1(xanh duong ) + P0.2 ( xanh la cay )
        *vienngoai =>P0.3 ( TRANG ) va P0.4 ( DO )
        *chu ILU => I > P0.5
        LOVE > P0.6
        U > P0.7
        Viet theo muc tich cuc 0 co nghia la 0 la sang*/
        void out()
        {
        P0_0=col[0];
        P0_1=col[1];
        P0_2=col[2];
        P0_3=col[3];
        P0_4=col[4];
        P0_5=col[5];
        P0_6=col[6];
        P0_7=col[7];
        P1_0=col[8];
        P1_1=col[9];
        }
        void filltrong(char bits)
        {
        if(bits==0) col[8]=col[9]=0;
        if(bits==1) col[8]=col[9]=1;
        }
        void fillngoai(char bits)
        {
        if(bits==0) col[3]=col[4]=0;
        if(bits==1) col[3]=col[4]=1;
        }
        void fillduoi(char bits)
        {
        if(bits==0) col[0]=col[1]=col[2]=0;
        if(bits==1) col[0]=col[1]=col[2]=1;
        }
        void filllove(char bits)
        {
        if(bits==0) col[5]=col[6]=col[7]=0;
        if(bits==1) col[5]=col[6]=col[7]=1;
        }
        void vientrong(int time,unsigned char l) //time thoi gian delay (ms) l la so lan thuc hien
        {
        unsigned char i;
        fillngoai(0); fillduoi(0);filllove(0); //bat tat ca cac led
        filltrong(1);
        while(l)
        {
        for(i=0;i<2;i++)
        {
        col[8]=i; col[9]=1-i;
        out();
        delay(time);
        }
        l--;
        }
        }
        void vienngoai(int time, unsigned char l) //time thoi gian delay (ms) l la so lan thuc hien
        {
        unsigned char i;
        filltrong(0); fillduoi(0);filllove(0); //bat tat ca cac led
        while(l)
        {
        fillngoai(1);
        for(i=0;i<2;i++)
        {
        col[3]=i; col[4]=1-i;
        out();
        delay(time);
        }
        l--;
        }
        }
        void vienduoi(int time,unsigned char l)
        {
        unsigned char i,j;
        filltrong(0); fillngoai(0);filllove(0); //bat tat ca cac led
        while(l)
        {
        fillduoi(1);
        dat=0x06;
        for(j=0;j<3;j++)
        {
        for(i=0;i<3;i++) col[i]=dat>>i&0x01;
        out();
        delay(time);
        dat=dat>>1;
        }
        l--;
        }
        }
        void iloveu(int time,unsigned char l)
        {
        unsigned char i,j;
        filltrong(0); fillduoi(0);fillngoai(0); //bat tat ca cac led
        while(l)
        {
        filllove(1);
        dat=0x06;
        for(j=0;j<3;j++)
        {
        for(i=0;i<3;i++) col[5+i]=dat>>i&0x01;
        out(); delay(time);
        dat=dat>>1;
        }
        l--;
        }
        }
        void main()
        {
        while(1)
        {
        iloveu(100,5);
        vienduoi(100,5);
        vienngoai(100,5);
        vientrong(100,5);
        iloveu(100,5);
        }
        }

        Comment


        • #5
          Có cái protues ngon thế ko dùng. Hihi. Cái này xử lí trên protues cho nhanh_Nhớ giảm thời gian delay di 1 chút cho khỏi đợi lâu. Chạy từng phần, nếu sai đâu fix lỗi luôn ở đó.


          Add: 97 Quán Nam - Lê Chân - Hải Phòng.
          Tel: 031 518648 Phone: 0904 283 505

          Comment


          • #6
            chay protues thu roi do. Ngon lanh!

            Comment


            • #7
              cảm ơn bạn trucpham189 nhiều nghe. mình lad sinh viên Cơ khí nên củng ko rành lập trình lắm. bác nào biết giải thích hộ em cái này với, em ko hiểu chổ này:
              1/ unsigned char col[10]; biến cot[10] nghĩa là j ?
              2/ nếu như lập trình như trucpham189 thi nều như ta chạy chỉ I LOVE YOU thi vien ngoai, vien trong,.. chỉ sáng thoi, ko có hiệu ứng khác được.
              em muốn tát cả các vien ngoai, viền trong, chử ILOVE YOU đông thoi chay cac hieu ứng

              hjjj cac bac giup em voi nha
              " Muốn biết phải hỏi, muốn giỏi phải học "

              Comment


              • #8
                Nguyên văn bởi fan.8051 Xem bài viết
                cảm ơn bạn trucpham189 nhiều nghe. mình lad sinh viên Cơ khí nên củng ko rành lập trình lắm. bác nào biết giải thích hộ em cái này với, em ko hiểu chổ này:
                1/ unsigned char col[10]; biến cot[10] nghĩa là j ?
                2/ nếu như lập trình như trucpham189 thi nều như ta chạy chỉ I LOVE YOU thi vien ngoai, vien trong,.. chỉ sáng thoi, ko có hiệu ứng khác được.
                em muốn tát cả các vien ngoai, viền trong, chử ILOVE YOU đông thoi chay cac hieu ứng

                hjjj cac bac giup em voi nha
                bác cần em code lại cho bác ngon lành! bác có proteus ko?em lam` mô phỏng rồi gửi bác luôn!
                code asm đc ko? hay chỉ C thôi!
                nói chung ASM hay C đều đc cả!!

                Comment


                • #9
                  thanks mr.ngoc, bác viet lại code cho em với. cả C và ASM luôn bác nhé ! ở Đà Nẳng củng có bán mạch điều khiển LED nhiều hiệu ứng đệp lắm, họ có dùng đièu xung thì phải, nhưng giá mắc wa. Bác cố gắng bỏ chút thời gina giupus em với nha !
                  " Muốn biết phải hỏi, muốn giỏi phải học "

                  Comment


                  • #10
                    CỦA BẠN ĐÂY! http://www.mediafire.com/?bh7cr6iwqqf0uar
                    2 file .c và .asm 1file hex và video mô phỏng proteus! nếu bạn thích nhiều hiệu ứng thì viết các hiệu ứng ra rồi thêm vào đơn giản thôi! hiii còn cái này mình làm theo bạn mô tả ở trên đó!
                    chúc bạn thành công!

                    Comment


                    • #11
                      gủi cho các bác một bài mà thầy em làm ví dụ với led đơn nè! viết dễ hiểu lắm,nhưng là asm thôi! các lấy về nghiên cứu nhé!
                      Attached Files

                      Comment

                      Về tác giả

                      Collapse

                      fan.8051 Say mê Điện tử Tìm hiểu thêm về fan.8051

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

                      Collapse

                      Đang tải...
                      X