Menu
CoddyTech

Mẫu chữ số trong byte

Thuộc phần Màn hình và cảm biến trong hành trình Arduino của Coddy. Bài học 2 trên 24.

Bảy dòng digitalWrite() cho mỗi chữ số là khá nhiều code. Lưu mỗi chữ số dưới dạng một mẫu: mỗi bit ứng với một đoạn, 1 là sáng và 0 là tắt.

byte là một số nguyên từ 0 đến 255 gồm tám bit. Viết nó ở dạng nhị phân với 0b ở phía trước. Đọc các bit từ phải sang trái: bit cuối cùng là đoạn a, bit ngay trước đó là b, cứ thế cho đến g.

//           gfedcba
byte one = 0b0000110;  // b và c: bằng 1

Mười mẫu có thể chứa trong một mảng (array), nên digits[3] là mẫu của số 3. bitRead(), từ bộ đếm nhị phân, đọc một bit của mẫu, đếm từ phải sang trái và bắt đầu từ 0:

bitRead(0b0000110, 0)  // 0: đoạn a tắt
bitRead(0b0000110, 1)  // 1: đoạn b sáng

Một hàm (function) có thể duyệt qua bảy bit bằng vòng lặp for và thiết lập chân của từng đoạn, vì vậy chỉ cần gọi một lần để hiển thị bất kỳ chữ số nào: showDigit(7);

challenge icon

Thử thách

Trung bình

Mã khởi đầu có đủ mọi mẫu trừ 4 và 7, còn loop() hiển thị 1, 4 và 7.

  • điền mẫu cho 4 (các đoạn b, c, f, g) và 7 (a, b, c)
  • viết showDigit(n): với mỗi i từ 0 đến 6, đặt segmentPins[i] thành LOW khi bit i của digits[n] là 1, và thành HIGH khi bit đó là 0

Nhấn Chạy, rồi nhấn Kiểm tra.

Tự làm thử

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// Mỗi chữ số có một mẫu, đọc từ phải sang trái: bit cuối cùng ứng với đoạn a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: điền vào
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: điền vào
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // Bật sáng các đoạn của digits[n], tắt các đoạn còn lại
}

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
}

void loop() {
  showDigit(1);
  delay(1000);
  showDigit(4);
  delay(1000);
  showDigit(7);
  delay(1000);
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Màn hình và cảm biến

Tự luyện tập: Playground Arduino