Thông báo

Collapse
No announcement yet.

giúp em cái code cho động cơ với

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

  • giúp em cái code cho động cơ với

    Em muốn điều khiển động cơ đưa 1 vật từ dưới lên trên khi vật ở dưới thì động cơ đưa lên .khi ở trên thì đưa xuống.trên và dưới có công tắc tác động mức 0.hạm công tắc thì dừng và đợi khi i =0 thì nếu vật ở trên thì đưa xuống vật ở dưới thì đưa lên .em viết thế này có được ko ạ (ps. Em học mò)
    if(i==0)
    {
    if(tren==0){xuong=1;}

    if(duoi==0){len=1;}

    if((tren==1)&&(duoi==1)){xuong=1;}

    for(lap_1s=0;lap_1s11250;lap_1s++)
    {hienthion();
    if(tren==0){len=0;}
    if(duoi==0){xuong=0;}
    if((len==0)&&(xuong==0)){break;}
    }
    }
    }
    }
    }
    Em ko viết được dấ nhỏ hơn chỗ 11250

  • #2
    Nguyên văn bởi chjpchjp1991
    Đơn giản mà bạn. Điều khiển động cơ lên xuống thì dùng cầu H, điều khiển cầu H thì lại đơn giản hơn nhiều chỉ bít 0 và 1. Dùng nút bấm nối âm hoặc dương là xong. http://www.echipkool.com/2011/11/mac...-h-bridge.html Contact: echipkool.com@gmail.com
    Thì " len " va " xuong" là tín hiệu kích cầu H đó.nhưng ko hiểu sai chỗ nào mà mạch đếm đến lúc i= 0 là đơ luôn

    Comment


    • #3
      thấy có mỗi 1 dấu mở ngoặc nhọn, còn đâu toàn đóng ngoặc thế này. Bạn phải đưa lên 1 đoạn chương trình hoàn chỉnh thì mới giúp bạn được. Quả thực nhìn thế này thì không thể hiểu được cái if nào nằm trong cái if nào đâu bạn.

      Comment


      • #4
        Nguyên văn bởi NinoNguyen_ Xem bài viết
        thấy có mỗi 1 dấu mở ngoặc nhọn, còn đâu toàn đóng ngoặc thế này. Bạn phải đưa lên 1 đoạn chương trình hoàn chỉnh thì mới giúp bạn được. Quả thực nhìn thế này thì không thể hiểu được cái if nào nằm trong cái if nào đâu bạn.
        #include regx52.h>
        #define led0 P1_0
        #define led1 P1_1
        #define led2 P1_2
        #define led3 P1_3
        #define tren P1_6
        #define duoi P1_7
        #define len P2_1
        #define xuong P2_7
        unsigned char so[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x1 0};
        int i;
        int lap_1s;
        int t;
        void delay(unsigned int ms) // Tao ham tre
        {
        unsigned int k,j;
        for (k=0;k nho hon ms;k++)
        for (j=0;j nho hon120;j++)
        {}
        }
        void hienthi()
        {
        P0=0xff;
        P1=0xff;
        P0=so[((i%1000)%100)%10]; //hien so hang don vi
        led0=0;
        delay(2);
        led0=1;
        P0=so[((i%1000)%100)/10]; //hien so hang chuc
        led1=0;
        delay(2);
        led1=1;
        P0=so[(i%1000)/100]; //hien so hang tram
        led2=0;
        delay(2);
        led2=1;
        P0=so[(i/1000)]; //hien so hang nghin
        led3=0;
        delay(2);
        led3=1;
        }
        void hienthion()
        {
        P0=0xff;
        P1=0xff;
        P0=0xbf;//hien dau -
        led0=0;
        delay(2);
        led0=1;
        P0=0xc8;//hien chu n
        led1=0;
        delay(2);
        led1=1;
        P0=0x40;//hien chu o
        led2=0;
        delay(2);
        led2=1;
        P0=0xbf;//hien dau -
        led3=0;
        delay(2);
        led3=1;
        }
        void main ()
        {
        while (1)
        {
        len=0;
        xuong=0;
        for(i=7200;inho hon=0;i--)
        {
        for(lap_1s=0;lap_1snho hon120;lap_1s++ ){//125*8ms(hàm hienthi)=1s
        hienthi();
        if(i==0)
        {
        if(tren==0){xuong=1;}
        if(duoi==0){len=1;}
        if((tren==1)&&(duoi==1)){xuong=1;}
        for(t=0;tnho hon 90;t++)
        {
        for(lap_1s=0;lap_1snho hon120;lap_1s++)
        {hienthion();
        if(tren==0){len=0;}
        if(duoi==0){xuong=0;}}
        if((len==0)&(xuong==0)){break;}
        }
        }
        }
        }
        } }
        Code em sửa lại mô phỏng chạy nhưng mạch thật ko kích cầu H mong bác xem giúp
        Ps: em viết dấu nhỏ hơn nhưng 4rum bị sao ý nên em phải viết chữ mới hiện được

        Comment


        • #5
          Chương trình của bạn có thể viết gọn lại rất nhiều nữa, nhưng mình sửa theo cách bạn viết để bạn dễ hiểu.
          Code:
          #include <regx52.h>
          #define led0 P1_0
          #define led1 P1_1
          #define led2 P1_2
          #define led3 P1_3
          #define tren P1_6
          #define duoi P1_7
          #define len P2_1
          #define xuong P2_7
          
          unsigned char so[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
          int i;
          int lap_1s;
          int t;
          
            void delay(unsigned int ms) // Tao ham tre
             {
              unsigned int k,j;
              for (k=0;k < ms;k++)
              for (j=0;j <120;j++)
              {}
             }
          
            void hienthi()
             {
              P0=so[((i%1000)%100)%10]; //hien so hang don vi
              led0=0;
              delay(2);
              led0=1;
              P0=so[((i%1000)%100)/10]; //hien so hang chuc
              led1=0;
              delay(2);
              led1=1;
              P0=so[(i%1000)/100]; //hien so hang tram
              led2=0;
              delay(2);
              led2=1;
              P0=so[(i/1000)]; //hien so hang nghin
              led3=0;
              delay(2);
              led3=1;
             }
          
           void hienthion()
             {
              P0=0xff;
              P1=0xff;
              P0=0xbf;//hien dau -
              led0=0;
              delay(2);
              led0=1;
              P0=0xc8;//hien chu n
              led1=0;
              delay(2);
              led1=1;
              P0=0x40;//hien chu o
              led2=0;
              delay(2);
              led2=1;
              P0=0xbf;//hien dau -
              led3=0;
              delay(2);
              led3=1;
             }
          
                                            
          void main ()
           {
              P0=0xff;
              P1=0xff;
              len=0;
              xuong=0;
              i=7200;
            while (1)
             {
                  {
                  for(lap_1s=0;lap_1s<120;lap_1s++ ){hienthi();}//125*8ms(hàm hienthi)=1s              
                  i--;
                  if(i==0)
                      {
                      i=7200;
                      if(tren==0){len=0;xuong=1;}
                      if(duoi==0){xuong=0;len=1;}
                      if((tren==1)&(duoi==1)){len=0;xuong=1;}
                      for(t=0;t< 90;t++)
                          {
                          for(lap_1s=0;lap_1s<120;lap_1s++ )
                              {
                              hienthion();
                              if(tren==0){len=0;}
                              if(duoi==0){xuong=0;}
                              if((len==0)&(xuong==0)){break;}
                              }                                                
                          }
                      }
                  }
              }
          }

          Comment


          • #6
            ?? Vậy code mình viết sai ở đâu bạn chỉ mình được ko?mình mô phỏng thì nó lại chạy còn làm thật thì ko chạy .cảm ơn bạn

            Comment


            • #7
              Ý tưởng viết code và cú pháp có thể không sai, nhưng tùy vào trình biên dịch, tùy vào phiên bản của trình biên dịch thì có một số cú pháp nó không cho phép mình.
              Code của bạn khi mình build trên kielC 4 thì nó không báo lỗi, nhưng chạy không đúng, khi mình kiểm tra kĩ lại thì thấy cái biến i khi nằm trong vòng for thì nó không cho truy xuất liên tục lên hàm hienthi(), do đó chương trình bị đứng.

              Comment


              • #8
                Nguyên văn bởi NinoNguyen_ Xem bài viết
                Ý tưởng viết code và cú pháp có thể không sai, nhưng tùy vào trình biên dịch, tùy vào phiên bản của trình biên dịch thì có một số cú pháp nó không cho phép mình.
                Code của bạn khi mình build trên kielC 4 thì nó không báo lỗi, nhưng chạy không đúng, khi mình kiểm tra kĩ lại thì thấy cái biến i khi nằm trong vòng for thì nó không cho truy xuất liên tục lên hàm hienthi(), do đó chương trình bị đứng.
                Nói vậy lỗi này là do trình biên dịch à bạn. Khoai nhỉ .mình học mò nên ko nắm rõ .vậy code mình viết mà biên dịch bằng pm khác thì liệu có chạy ko vậy bạn

                Comment


                • #9
                  Nguyên văn bởi hoangtruongh Xem bài viết

                  #include regx52.h>
                  #define led0 P1_0
                  #define led1 P1_1
                  #define led2 P1_2
                  #define led3 P1_3
                  #define tren P1_6
                  #define duoi P1_7
                  #define len P2_1
                  #define xuong P2_7
                  unsigned char so[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x1 0};
                  int i;
                  int lap_1s;
                  int t;
                  void delay(unsigned int ms) // Tao ham tre
                  {
                  unsigned int k,j;
                  for (k=0;k nho hon ms;k++)
                  for (j=0;j nho hon120;j++)
                  {}
                  }
                  void hienthi()
                  {
                  P0=0xff;
                  P1=0xff;
                  P0=so[((i%1000)%100)%10]; //hien so hang don vi
                  led0=0;
                  delay(2);
                  led0=1;
                  P0=so[((i%1000)%100)/10]; //hien so hang chuc
                  led1=0;
                  delay(2);
                  led1=1;
                  P0=so[(i%1000)/100]; //hien so hang tram
                  led2=0;
                  delay(2);
                  led2=1;
                  P0=so[(i/1000)]; //hien so hang nghin
                  led3=0;
                  delay(2);
                  led3=1;
                  }
                  void hienthion()
                  {
                  P0=0xff;
                  P1=0xff;
                  P0=0xbf;//hien dau -
                  led0=0;
                  delay(2);
                  led0=1;
                  P0=0xc8;//hien chu n
                  led1=0;
                  delay(2);
                  led1=1;
                  P0=0x40;//hien chu o
                  led2=0;
                  delay(2);
                  led2=1;
                  P0=0xbf;//hien dau -
                  led3=0;
                  delay(2);
                  led3=1;
                  }
                  void main ()
                  {
                  while (1)
                  {
                  len=0;
                  xuong=0;
                  for(i=7200;inho hon=0;i--)
                  {
                  for(lap_1s=0;lap_1snho hon120;lap_1s++ ){//125*8ms(hàm hienthi)=1s
                  hienthi();
                  if(i==0)
                  {
                  if(tren==0){xuong=1;}
                  if(duoi==0){len=1;}
                  if((tren==1)&&(duoi==1)){xuong=1;}
                  for(t=0;tnho hon 90;t++)
                  {
                  for(lap_1s=0;lap_1snho hon120;lap_1s++)
                  {hienthion();
                  if(tren==0){len=0;}
                  if(duoi==0){xuong=0;}}
                  if((len==0)&(xuong==0)){break;}
                  }
                  }
                  }
                  }
                  } }
                  Code em sửa lại mô phỏng chạy nhưng mạch thật ko kích cầu H mong bác xem giúp
                  Ps: em viết dấu nhỏ hơn nhưng 4rum bị sao ý nên em phải viết chữ mới hiện được
                  đặt sai dấu đóng ngoặc cho cái hienthi(); ,giải thích khi i==0 thì các câu lệnh trong if(i==0) thực hiện 120 lần lặp ,cái for(t=0;tnho hon 90;t++) thực hiện 90 lần lặp ,cái "for(lap_1s=0;lap_1snho hon120;lap_1s++)
                  {hienthion();" sẽ bị lặp 90x120 lần mà cái đó chạy 1s thì ta chạy 120x90s đợi vài tiếng đồng hồ sẽ hết treo

                  Comment


                  • #10
                    Nguyên văn bởi BytoBy Xem bài viết
                    đặt sai dấu đóng ngoặc cho cái hienthi(); ,giải thích khi i==0 thì các câu lệnh trong if(i==0) thực hiện 120 lần lặp ,cái for(t=0;tnho hon 90;t++) thực hiện 90 lần lặp ,cái &quot;for(lap_1s=0;lap_1snho hon120;lap_1s++)
                    {hienthion();&quot; sẽ bị lặp 90x120 lần mà cái đó chạy 1s thì ta chạy 120x90s đợi vài tiếng đồng hồ sẽ hết treo
                    Nó sẽ chạy 90s chứ bạn

                    Comment


                    • #11
                      Nguyên văn bởi BytoBy Xem bài viết
                      đặt sai dấu đóng ngoặc cho cái hienthi(); ,giải thích khi i==0 thì các câu lệnh trong if(i==0) thực hiện 120 lần lặp ,cái for(t=0;tnho hon 90;t++) thực hiện 90 lần lặp ,cái &quot;for(lap_1s=0;lap_1snho hon120;lap_1s++)
                      {hienthion();&quot; sẽ bị lặp 90x120 lần mà cái đó chạy 1s thì ta chạy 120x90s đợi vài tiếng đồng hồ sẽ hết treo
                      Nó sẽ chạy 90s chứ bạn

                      Comment


                      • #12
                        for(lap_1s=0;lap_1snho hon120;lap_1s++)
                        {hienthion();
                        if(tren==0){len=0;}
                        if(duoi==0){xuong=0;}}
                        if((len==0)&(xuong==0)){break;}
                        }
                        vòng for này bạn đặt chạy thời gian bao nhiêu.từ đó xem lại số lần lặp lại nó thôi

                        Comment


                        • #13
                          Nguyên văn bởi NinoNguyen_ Xem bài viết
                          Chương trình của bạn có thể viết gọn lại rất nhiều nữa, nhưng mình sửa theo cách bạn viết để bạn dễ hiểu.
                          Code:
                          #include <regx52.h>
                          #define led0 P1_0
                          #define led1 P1_1
                          #define led2 P1_2
                          #define led3 P1_3
                          #define tren P1_6
                          #define duoi P1_7
                          #define len P2_1
                          #define xuong P2_7
                          
                          unsigned char so[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
                          int i;
                          int lap_1s;
                          int t;
                          
                            void delay(unsigned int ms) // Tao ham tre
                             {
                              unsigned int k,j;
                              for (k=0;k < ms;k++)
                              for (j=0;j <120;j++)
                              {}
                             }
                          
                            void hienthi()
                             {
                              P0=so[((i%1000)%100)%10]; //hien so hang don vi
                              led0=0;
                              delay(2);
                              led0=1;
                              P0=so[((i%1000)%100)/10]; //hien so hang chuc
                              led1=0;
                              delay(2);
                              led1=1;
                              P0=so[(i%1000)/100]; //hien so hang tram
                              led2=0;
                              delay(2);
                              led2=1;
                              P0=so[(i/1000)]; //hien so hang nghin
                              led3=0;
                              delay(2);
                              led3=1;
                             }
                          
                           void hienthion()
                             {
                              P0=0xff;
                              P1=0xff;
                              P0=0xbf;//hien dau -
                              led0=0;
                              delay(2);
                              led0=1;
                              P0=0xc8;//hien chu n
                              led1=0;
                              delay(2);
                              led1=1;
                              P0=0x40;//hien chu o
                              led2=0;
                              delay(2);
                              led2=1;
                              P0=0xbf;//hien dau -
                              led3=0;
                              delay(2);
                              led3=1;
                             }
                          
                                                            
                          void main ()
                           {
                              P0=0xff;
                              P1=0xff;
                              len=0;
                              xuong=0;
                              i=7200;
                            while (1)
                             {
                                  {
                                  for(lap_1s=0;lap_1s<120;lap_1s++ ){hienthi();}//125*8ms(hàm hienthi)=1s              
                                  i--;
                                  if(i==0)
                                      {
                                      i=7200;
                                      if(tren==0){len=0;xuong=1;}
                                      if(duoi==0){xuong=0;len=1;}
                                      if((tren==1)&(duoi==1)){len=0;xuong=1;}
                                      for(t=0;t< 90;t++)
                                          {
                                          for(lap_1s=0;lap_1s<120;lap_1s++ )
                                              {
                                              hienthion();
                                              if(tren==0){len=0;}
                                              if(duoi==0){xuong=0;}
                                              if((len==0)&(xuong==0)){break;}
                                              }                                                
                                          }
                                      }
                                  }
                              }
                          }
                          Bạn ơi m làm theo code của bạn mà vẫn chạy ko đúng.khi i=0 nó bật đồng thời cả lên và xuống bạn ạ.và cái ctắc hành trình phải tác đông cả 2 cái cho bằng 0 thì nó mới tắt tín hiệu.vậy sai ở đâu vậy bạn.thank bạn

                          Comment


                          • #14

                            if(tren==0){len=0;xuong=1;} // nếu vật ở trên thì công tắc trên báo về mức 0 if(duoi==0){xuong=0;len=1;} // nếu vật ở dưới thì công tắc dưới báo về mức 0 if((tren==1)&(duoi==1)){len=0;xuong=1;} // nếu ở giữa thì đưa lên theo như code trên thì không thể xảy ra trường hợp bật cả lên và xuống được bạn ạ, theo mình nên bỏ driver động cơ ra để đo ngay tại chân VDK, kiểm tra lại công tắc hành trình cho yên tâm.

                            Comment


                            • #15
                              Nguyên văn bởi NinoNguyen_ Xem bài viết
                              if(tren==0){len=0;xuong=1;} // nếu vật ở trên thì công tắc trên báo về mức 0 if(duoi==0){xuong=0;len=1;} // nếu vật ở dưới thì công tắc dưới báo về mức 0 if((tren==1)&(duoi==1)){len=0;xuong=1;} // nếu ở giữa thì đưa lên theo như code trên thì không thể xảy ra trường hợp bật cả lên và xuống được bạn ạ, theo mình nên bỏ driver động cơ ra để đo ngay tại chân VDK, kiểm tra lại công tắc hành trình cho yên tâm.
                              Mình mới chỉ lắp con led vào chân lên ,xuống còn công tắc hành trình mình kiểm tra kĩ bằng đồng hồ rồi bạn ạ.bạn xem kĩ lại giúp mình với.nếu bạn khẳng định code đúng cũng nói mình 1 câu chắc chắn nhé.thanks bạn nhiều lắm

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X