[ บทความ : ทดลองใช้ภาษาซีกับบอร์ด ET-BOARD V6 ] [ภาค MCS-51] ตอนที่ 5 ติดต่อกับ 7-Segment #2 |
บทความนี้ก็จะเป็นตอนสุดท้ายของ 7-Segment ล่ะครับ ... ความแตกต่างจากบทความ LAB #4 ก็คือ ผมทำการหน่วงเวลาเพิ่มเข้ามาเพื่อให้เราสามารถสังเกตได้ว่า การทำงานจริงๆ ของ scan display นั้นเป็นอย่างไร ... ดังนั้น เมื่อ ทำการทดสอบโปรแกรม ตอนแรกๆ นั้น 7-segment จะสว่างทีละหลักเท่านั้น แต่เมื่อทำงานไปเรื่อย การแสดงผลก็จะเร็วขึ้นเรื่อยๆ จนสุดท้ายเราก็จะเห็นว่า 7-Segment ทุกหลักนั้นติดพร้อมกัน ... ตัวอย่างโปรแกรมเป็นดังนี้ครับ
/* * Filename : ex04a.c * Compiler : Micro-C51 V2.4 * Hardware : ET-2000 V6 [scan 7 segment part 2] * cc51 ex04a -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; int dlay, count; unsigned char loops; data = 0; count = 0; dlay = 100; while (1) { poke(P_DIGIT,data); poke(P_SEGM,TAB_SEG[data]); if (data++ == 6) data = 0; count++; if (count == 120) { count = 0; dlay -= 20; } if (dlay > 0) { for (loops = 0; loops < (unsigned char)dlay; loops++) waiting(); } else { if (dlay > -2000) dlay--; if (dlay == -2000) dlay = 100; waiting(); } poke(P_SEGM,0); } }มาถึงตรงนี้ กลายเป็นว่าบทความของ MCS-51 นั้นมีมากที่สุดในบทความเรื่องต่างๆ ที่ผมทำมา ทั้งที่ผมเองอยากทำบทความด้าน 68hc11 กับ z80/z180 มากกว่า MCS-51 ก็ตามเถอะครับ (อะไรที่อยากทำ มักไม่ค่อยได้ทำ ... ) บทความตอนต่อไปจะเป็นอะไรนั้น เราก็ค่อยดูกันต่อล่ะกันครับ ตอนนี้จบแค่นี้ก่อน