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 1Mườ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ángMộ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);
Thử thách
Trung bìnhMã 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ỗiitừ 0 đến 6, đặtsegmentPins[i]thànhLOWkhi biticủadigits[n]là 1, và thànhHIGHkhi 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);
}
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
1Màn hình LED 7 đoạn
Màn hình LED 7 đoạnMẫu chữ số trong byteĐếm trên màn hìnhĐếm ngược về 0Trình mô phỏng xúc xắcTự luyện tập: Playground Arduino