[ บทความ : ทดลองใช้ภาษาซีกับบอร์ด 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);
	    }
	}


เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง : ๑๓ ก.ค.. ๒๕๔๓, ๒๘ ก.ค. ๒๕๔๓