[ บทความ : ทดลองใช้ภาษาซีกับบอร์ด ET-BOARD V6 ] [ภาค MCS-51] ตอนที่ 4 ติดต่อกับ 7-Segment |
เราได้ทำความรู้จักกับการควบคุม LED ไปแล้ว ... ตอนนี้เรามารู้จักกับ LED อีกแบบหนึ่งที่เรียกกับว่า 7-Segment กันดีกว่า ... 7-Segment นั้น ในตัวของมันจะมีหลอด LED 8 ดวง ดังนี้
จากรูปด้านบน เมื่อเรานำมากำหนดค่า จะได้ค่าสำหรับส่งไปใน 7-segment ดังนี้
มาดูตัวอย่างโปรแกรมกันดีกว่าครับ ... ในตัวอย่างนี้จะเป็นการสั่งแสดงข้อมูลตัวเลข 0-5 ไปยังหลักต่างๆ ของ 7-Segment บนบอร์ด ET-BOARD V6 โดยเราจะเห็นว่า ทั้ง 6 หลักนั้นแสดงผลพร้อมๆ กัน แต่ในความเป็นจริงแล้ว โปรแกรมที่เราเขียนนั้น จะทำการสั่งให้ แสดงทีละหลัก เพียงแต่ว่า ความเร็วในการทำงานของไมโครคอนโทรลเลอร์นั้นสูงมาก จนตาของคนเราไม่สามารถจำแนกออกมาได้... วิธีการนี่เราเรียกว่า การ scan display ซึ่งข้อดีของวิธีการนี้ก็คือ ทำให้เราประหยัดพอร์ตลงไปได้เยอะมาก เช่น บนบอร์ด เราใช้ 7-Segment จำนวน 6 หลัก ... หลักละ 8 บิต นั่นหมายความว่าเราต้องการ I/O จำนวน 8x6 = 48 บิต แต่ด้วยหลัการทำงานแบบ scan display เราจะใช้ พอร์ตเพียง 16 บิตเท่านั้น (8 บิตสำหรับส่งข้อมูล และอีก 8 บิตสำหรับเลือก) ... โปรแกรมก็มีหน้าตาดังนี้ครับ
/* * Filename : ex04.c * Compiler : Micro-C51 V2.4 * Hardware : ET-2000 V6 [scan 7 segment] * cc51 ex04 -pio m=l */ #include <8051io.h> #include <8051reg.h> #define P_DIGIT 0xE000 #define P_SEGM 0xE001 unsigned char TAB_SEG[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D}; waiting() { int i; for (i = 0; i<5; i++); } main() { unsigned char data; data = 0; while (1) { poke(P_DIGIT,data); poke(P_SEGM,TAB_SEG[data]); if (data++ == 6) data = 0; waiting(); poke(P_SEGM,0); } }