Bare-Metal Multiplexing: Raw 8x8 LED Matrix
บทเรียนส่วนใหญ่จะบอกให้คุณซื้อ 8x8 Matrix ที่มีชิป Driver ในตัว โปรเจกต์นี้ห้ามสิ่งนั้นโดยเด็ดขาด โปรเจกต์ Interfacing 8x8 Dot Matrix จะบังคับให้คุณใช้ LED 64 ดวงแบบเปลือยๆ และควบคุมมันทั้งหมดทางคณิตศาสตร์ โดยใช้การจัดการ Array พื้นฐานของวิทยาการคอมพิวเตอร์ และลูป C++ polling ที่เร็วสุดขีด นี่คือบททดสอบที่บริสุทธิ์ที่สุดของวิศวกรรมการจับเวลาเชิงตรรกะ!

The Persistence of Vision (POV) Deception
คุณมี LED 64 ดวง แต่มี Pin เพียง 16 Pin (8 Rows, 8 Columns) ถ้าคุณเปิด Row 1 (5V) และ Col 1 (GND) LED ด้านซ้ายบนจะสว่างขึ้น!
- กับดักทางกายภาพหลัก: หากคุณเปิด
Row 1, Row 2และCol 1, Col 2เพื่อพยายามวาดสี่เหลี่ยม คุณจะทำให้ LED สว่าง 4 ดวงโดยไม่ตั้งใจ แทนที่จะเป็น 2 ดวง! ทางกายภาพแล้ว คุณไม่สามารถวาดรูปทรงที่แตกต่างกันสองรูปทรงพร้อมกันบนกริดอนาล็อกเดียวกันโดยไม่มี Crosstalk ได้! - คุณต้องอาศัยหลักการของ Persistence of Vision (POV)
- คุณจ่าย 5V เข้า
Row 1ทั้งหมด คุณต่อColumns 3, 4, 5ลง GND เส้นบนสุดจะสว่างขึ้น! - คุณปิด Row 1 ทันที คุณจ่าย 5V เข้า
Row 2! คุณต่อColumns 1 and 8ลง - คุณต้องเขียนลูป
forสำหรับการวนซ้ำ Array ที่เจ็บปวด ซึ่งจะสแกนลงไปทั้ง 8 Rows อย่างสมบูรณ์ ทีละ Row นับพันครั้งต่อวินาที!delayMicroseconds(500);คือขีดจำกัดเวลาที่สำคัญ หากค้างแม้เพียง 2 มิลลิวินาที ดวงตาของมนุษย์จะมองเห็นการกระพริบที่น่ากลัวและรุนแรง!
Pin Exhaustion and Array Mapping
เนื่องจากต้องใช้ 16 Pins ทำให้ Arduino Uno เกือบจะถูกใช้จนหมดโดย Array สี่เหลี่ยมเดี่ยวนี้!
- คุณต้องแมป Array จำนวนเต็มขนาดใหญ่สองตัว:
int rowPins[8] = { 2, 3, 4, 5, 6, 7, 8, 9 };int colPins[8] = { 10, 11, 12, 13, A0, A1, A2, A3 };// คุณต้องใช้ Pin อนาล็อกเป็นเอาต์พุตดิจิทัล! - โค้ดใช้ตรรกะ Bitwise ที่น่าหวาดเสียว:
if (imageArray[x] & (128 >> y))เพื่อดึง1และ0ออกจาก Hex Byte Matrix แบบ Recurse และส่งพวกมันเข้าสู่คิวการ Execute ของdigitalWriteทางกายภาพ!
Masochistic Screen Hardware
- Arduino Uno/Nano (ต้องใช้ทุก Pin ที่มี รวมถึง Pin อนาล็อกด้วย!).
- บล็อก Raw, Bare-metal 16-pin 8x8 LED Dot Matrix (โปรดระบุให้ชัดเจนว่าเป็น Common-Row Anode หรือ Common-Row Cathode เพราะจะทำให้แผนผังการเดินสาย 16 Pin ขนาดใหญ่และตรรกะ
HIGH/LOWกลับด้านโดยสิ้นเชิง!). - ตัวต้านทาน 220 Ohm แปดตัว บน Anode Columns!
- (คำเตือน: การเดินสายที่ยุ่งเหยิงบน Breadboard นี้เป็นเรื่องน่ากลัว โปรดใช้ความระมัดระวังอย่างยิ่งในการเชื่อมต่อสาย Jumper 16 เส้นขนาน!).