Thông báo

Collapse
No announcement yet.

Cần giúp về Led sáng dồn bằng C

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

  • #31
    code viêt ngắn quá, đọc mãi mà chưa hiểu mấy đoạn, bạn myth_coder chỉ giùm chỗ này nhé.
    Code:
    typedef{
        char b[4];
    }xData;
    
    xData trangThai={0};
    unsigned char bitIt[8]={1, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7};
    
    void setBitAt(char b0)// đặt trạng thái bit là 1 tại vị trí b0
    {
        if(b0<0)
            return;
        b0%=32;
        trangThai.b[b0/8]|=bitIt[b0%8];
    }
    cái trangThai.b[b0/8] sao lại viết được thế này nhỉ, mình không hiểu cái này !
    Last edited by daohuytien; 26-08-2013, 20:25. Lý do: hỏi sao lại có trangthai.b[..] ???
    chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
    Everything should be made as simple as possible, but not simpler

    Comment


    • #32
      Thế này nhé. do b0 chỉ có thể có giá trị từ 0-31, nên chia ra làm 4 cụm byte cái trangThai.b[b0/8] thì b0/8 sẽ mang giá trị từ 0-3 vậy là sẽ chọn ra được byte nào trong 4 byte có bit cần được đặt là 1. chỗ bitIt thì chỉ thế này
      Code:
      bitIt[]={00000001b, 00000010b, 00000100b ,........};
      cái bitIt tuơng đuơng với vị trí bit cần đựoc set trong 1 byte ấy mà.

      giả sử b0 có giá trị 25 có nghĩa là muốn set bit tại vị trí 25 trong cụm 32 bit.
      b0/8=3 (tuơng đuơng với div trong asm)
      b0%8=1
      nên byte có bit cần set là byte thứ 4 vì chỉ số trong c là từ 0 và chỉ số byte thứ 4 trong c là 3
      vị trí bit cần được set trong byte thứ 4 là vị trí số 2 có chỉ số trong c là 1
      nên sau khi gọi hàm setBitAt(25) thì trạng thái của trangThai sẽ như sau:
      (lấy gốc từ trái qua phải bác nhé)
      00000000 00000000 00000000 01000000

      Nếu gọi tiếp setBitAt(8) thì trạng thái sẽ như sau
      b0/8=1
      b0%8=0
      0000000 10000000 00000000 01000000

      gửi bác Tiến
      Last edited by myth-coder; 26-08-2013, 13:49. Lý do: lời giải thích còn thiếu :)

      Comment


      • #33
        Cái xData bao gồm có 4 byte chính là bộ đệm cho 4 port, như vậy muốn hiển thị gì ra LED thì mình vẽ vào biến trangThai sau đó mới đưa từ trangThai ra LED bằng hàm show có thể đặt ngay sau khi vẽ vào trangThai hoặc đặt ở timer để quét LED.

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X