[ บทความ : ทดลองใช้ภาษาซีกับบอร์ด ET-BOARD V6 ] [ภาค MCS-51] ตอนที่ 3 ติดต่อกับ LED#2

ตัวอย่างโปรแกรมในบทความนี้จะเป้นการปรับปรุงการทำงานของโปรแกรมจาก LAB#1 คือ ตอนที่แล้วนั้น โปรแกรมของเราได้ทำการสั่งให้ LED สว่างทีละดวงจากทางขวาไปซ้าย แล้วก็วนต่อไปเรื่อยๆ ... ในตอนนี้เราจะมาปรับปรุงโปรแกรมกันใหม่ คือ นอกจากจะเป็นการสั่งให้ LED วิ่งจากทางขวาไปซ้ายแล้วเมื่อ LED ไปถึงทางซ้ายสุด ก็จะทำการวิ่งกลับมาทางขวา สลับไปมาอย่างนี้ เรื่อยๆ ... จะเห็นว่าโปรแกรมในตอนนี้จะซับซ้อนกว่าบทความแรกอยู่บ้าง คือ มีการสร้างตัวแปรภายนอกชื่อว่า template ซึ่งเป็นตัแปร แบบ unsigned char สำหรับทำหน้าที่เก็บรูปแบบของค่าที่เราจะส่งไปที่พอร์ตเพื่อขับหลอด LED เช่น 0x01 (หรือ 00000001 ในเลขฐานสอง) ก็เป็นการกำหนดให้ LED หลอดทางขวาสุดติด 0x02 (หรือ 00000010) ก็เป็นการสั่งให้ LED ดวงที่ 2 จากทางขวาติดและดวงอื่นๆ ดับ เป็นต้น วิธีการที่เราสร้างรูปแบบ (template หรือ pattern) ขึ้นมาล่วงหน้านี้มีข้อดีตรงที่ เราลดการคำนวณของโปรแกรมลงไป ทำให้โปรแกรมมีความเร็วในการทำงานที่ดีขึ้น แต่เราก็ต้องเสียหน่วยความจำไปบางส่วนเพื่อใช้ในการเก็บข้อมูล (จากโปรแกรมจะเห็นว่าเราเสียหน่วยความจำไป 16 ไบต์) ... เมื่อเข้าใจหลักการทำงานแล้วก็ทำการพิมพ์โปรแกรม พร้อมทั้งทำการคอมไพล์ หลังจากนั้นก็โหลดลงตัวบอร์ดได้เลยครับ

	/*
	 * Filename : ex02.c
	 * Compiler : Micro-C51 V2.4
	 * Hardware : ET-2000 V6 [Moving LED flag]
	 *            cc51 ex02 -pio m=l
	 */

	#include <8051io.h>
	#include <8051reg.h>

	#define 	P_DIGIT   	0xE000
	#define 	P_SEGM    	0xE001
	#define 	P_CONTROL 	0xE003

	unsigned char template[] = {
	  0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
	  0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00
	};
	
	config8255usr()
	{
	    poke(P_CONTROL,0x88);
	    delay();
	}
	
	delay()
	{
	    unsigned char i,o;
	
	    for (o=0; o<10; o++) for (i=0; i< 255; i++);
	}

	main()
	{
	    unsigned char pattern;

	    config8255usr();

	    pattern = 0x06;
	    poke(P_DIGIT,pattern);
	    delay();

	    pattern = 0x01;

	    while (1) {
	        poke(P_SEGM,template[pattern]);
	        delay();
	        if (pattern == 15) {
	            pattern = 0;
	        }
	        else {
	            pattern++;
	        }
	    }
	}

ตัวอย่างโปรแกรมเกี่ยวกับ LED คงจบลงเท่านี้ครับ ... ต่อไปเรามาดูถึงการควบคุม 7-Segment กันดีกว่าครับ


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