Thông báo

Collapse
No announcement yet.

xem giúp code cho 8051

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

  • xem giúp code cho 8051

    em mới học lập trình c cho con 8051, mọi người cho em hỏi tí, đoạn code này là e lấy trên diễn đàn.
    [code]
    //8 led sang duoi nhau
    //tai 1 thoi diem chi duy nhat 1 led sang
    #include <REGX51.H>
    #define led0 P1_0
    #define led1 P1_1
    #define led2 P1_2
    #define led3 P1_3
    #define led4 P1_4
    #define led5 P1_5
    #define led6 P1_6
    #define led7 P1_7
    #define sang 1
    #define tat 0
    //---------------
    void delay( unsigned int ms )
    {
    unsigned int i,j;
    for (i=0;i<ms;i++)
    for (j=0;j<120;j++)
    {}
    }
    //--------------
    void display_led(unsigned char number)
    {

    switch (number)
    {

    case 1:
    led0=sang;
    led1=led2=led3=led4=led5=led6=led7=tat;
    break;
    case 2:
    led1=sang;
    led0=led2=led3=led4=led5=led6=led7=tat;
    break;
    case 3:
    led2=sang;
    led1=led0=led3=led4=led5=led6=led7=tat;
    break;
    case 4:
    led3=sang;
    led1=led2=led0=led4=led5=led6=led7=tat;
    break;
    case 5:
    led4=sang;
    led1=led2=led3=led0=led5=led6=led7=tat;
    break;
    case 6:
    led5=sang;
    led1=led2=led3=led4=led0=led6=led7=tat;
    break;
    case 7:
    led6=sang;
    led1=led2=led3=led4=led5=led0=led7=tat;
    break;
    case 8:
    led7=sang;
    led1=led2=led3=led4=led5=led6=led0=tat;
    break;


    }
    }
    main ()
    {
    unsigned char m;
    while(1)
    {
    for (m=1;m<9;m++)
    {display_led(m);delay(200);}
    for (m=7;m>=0;m--)
    {display_led(m);delay(200);}
    }
    }
    [/cocde]

    trong đoạn code đó, e chạy mô phỏng thì chỉ lặp được có một lần tức là led chạy từ 0 đến 7 rồi chạy từ 7 về 0 và đứng yên ở đó, ko tiếp tục chạy nữa, mọi người kiểm tra dùm em với,
    em muốn hỏi thêm trong đoạn code đó em có thể viết ngắn lại thế nào được không vậy

  • #2
    Lập trình nên dùng mã hexa tạo thành 1 mảng 1 chiều . vừa ngắn gọn vừa k bị treo chương trình .

    Comment


    • #3
      Nguyên văn bởi boybaby Xem bài viết
      em mới học lập trình c cho con 8051, mọi người cho em hỏi tí, đoạn code này là e lấy trên diễn đàn.
      [code]
      //8 led sang duoi nhau
      //tai 1 thoi diem chi duy nhat 1 led sang
      #include <REGX51.H>
      #define led0 P1_0
      #define led1 P1_1
      #define led2 P1_2
      #define led3 P1_3
      #define led4 P1_4
      #define led5 P1_5
      #define led6 P1_6
      #define led7 P1_7
      #define sang 1
      #define tat 0
      //---------------
      void delay( unsigned int ms )
      {
      unsigned int i,j;
      for (i=0;i<ms;i++)
      for (j=0;j<120;j++)
      {}
      }
      //--------------
      void display_led(unsigned char number)
      {

      switch (number)
      {

      case 1:
      led0=sang;
      led1=led2=led3=led4=led5=led6=led7=tat;
      break;
      case 2:
      led1=sang;
      led0=led2=led3=led4=led5=led6=led7=tat;
      break;
      case 3:
      led2=sang;
      led1=led0=led3=led4=led5=led6=led7=tat;
      break;
      case 4:
      led3=sang;
      led1=led2=led0=led4=led5=led6=led7=tat;
      break;
      case 5:
      led4=sang;
      led1=led2=led3=led0=led5=led6=led7=tat;
      break;
      case 6:
      led5=sang;
      led1=led2=led3=led4=led0=led6=led7=tat;
      break;
      case 7:
      led6=sang;
      led1=led2=led3=led4=led5=led0=led7=tat;
      break;
      case 8:
      led7=sang;
      led1=led2=led3=led4=led5=led6=led0=tat;
      break;


      }
      }
      main ()
      {
      unsigned char m;
      while(1)
      {
      for (m=1;m<9;m++)
      {display_led(m);delay(200);}
      for (m=7;m>=0;m--)
      {display_led(m);delay(200);}
      }
      }
      [/cocde]

      trong đoạn code đó, e chạy mô phỏng thì chỉ lặp được có một lần tức là led chạy từ 0 đến 7 rồi chạy từ 7 về 0 và đứng yên ở đó, ko tiếp tục chạy nữa, mọi người kiểm tra dùm em với,
      em muốn hỏi thêm trong đoạn code đó em có thể viết ngắn lại thế nào được không vậy
      Mình cũng mới đụng vô VĐK! Cái này bạn phải biết sơ sơ về C. Đây là code của mình
      Code:
      void hieu_ung_3a()// *********************************port1
      {
      	unsigned char i;
      	unsigned char a[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
      	for(i=0;i<8;i++)
      	{
      		P0=a[i];
      		delay(100);
      	}
      }
      void hieu_ung_3b()// *********************************port1
      {
      	unsigned char i;
      	unsigned char a[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
      	for(i=0;i<8;i++)
      	{
      		P1=a[i];
      		delay(100);
      	}
      }
      void hieu_ung_3c()//********************************** port2
      {
      	unsigned char i;
      	unsigned char a[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
      	for(i=0;i<9;i++)
      	{
      		P2=a[i];
      		delay(100);
      	}
      }
      void hieu_ung_3d()// port3
      {
      	unsigned char i;
      	unsigned char a[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
      	for(i=0;i<9;i++)
      	{
      		P3=a[i];
      		delay(100);
      	}
      }

      Comment


      • #4
        sao ko dùng dịch bit hở bạn. như thế code sẽ ngắn hơn rất nhiều

        Comment


        • #5
          Nguyên văn bởi it_p0k3t Xem bài viết
          sao ko dùng dịch bit hở bạn. như thế code sẽ ngắn hơn rất nhiều
          Tại mình mới viết nên viết theo cách dễ hiểu nhất! Rồi từ từ mình sẽ cải tiến hơn!

          Comment


          • #6
            Nguyên văn bởi it_p0k3t Xem bài viết
            sao ko dùng dịch bit hở bạn. như thế code sẽ ngắn hơn rất nhiều
            chưa chắc đã ngắn hơn, chỉ có 1 số hiệu ứng lợi dụng đc tính dịch của ic ghi dịch mới ngắn thôi, ko thì vẫn phải tạo mảng như bình thường
            còn ở đây chân vdk thừa thãi ko tội gì dùng ghi dịch tốn kém làm j, code viết theo kiểu kia là ổn rồi, khai báo theo mảng
            Website chính thức đổi địa chỉ website thành
            Mời các bạn ghé thăm !!!

            Comment


            • #7
              Hi,
              Chương trình bị đứng do vòng lặp for bị sai.
              Thân ái.
              Đường đến những ngày vinh quang không còn xa
              Con đường chúng ta... chúng ta đã chọn.

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X