[ บทความ : ทดลองใช้ภาษาซีกับบอร์ด 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 ก็ตามเถอะครับ (อะไรที่อยากทำ มักไม่ค่อยได้ทำ ... ) บทความตอนต่อไปจะเป็นอะไรนั้น เราก็ค่อยดูกันต่อล่ะกันครับ ตอนนี้จบแค่นี้ก่อน


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