การควบคุมหลอดแสดงผล LED 7-Segment ด้วย Micro controller PIC โดยใช้โปรแกรม PIC CCS Compiler
หลอดแสดงผล LED 7-Segment เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ใช้ในการแสดงผลเช่นเดียวกับหลอดแสดงผล LED ทั่วไป แต่ต่างตรงที่หลอดแสดงผล LED 7 ส่วน เป็นการนำเอาหลอดแสดงผล LED จำนวน 7 ตัวมาต่อกันเป็นรูปตัวเลข เพื่อนำมาแสดงผลเป็นตัวเลข 0 ถึง 9 โดยในบทความนี้จะพูดถึงการเขียนโปรแกรมควบคุมการทำงานของหลอดแสดงผล LED 7 ส่วน และ การประยุกต์ใช้งานไม่โครคอนโทรลเลอร์ PIC ควบคุมการทำงานของหลอดแสดงผล LED 7 ส่วน
1. โครงสร้างและการทำงานของหลอดแสดงผล LED 7 ส่วน
หลอดแสดงผล LED 7 ส่วน เป็นการนำเอาหลอด แสดงผล LED จำนวน 7 ตัวมาต่อกันเป็นรูปตัวเลขโดยมีชื่อเรียกแต่ละส่วน คือ a,b,c,d,e,f,g และ dp แสดงดังรูปที่ 1.1
รูปที่ 1.1 โครงสร้างและขาของหลอดแสดงผล LED 7-Segment
หลอดแสดงผล LED 7-Segment สามารถแบ่งตามลักษณะการต่อหลอดแสดงผล LED ทั้ง 7 หลอดได้ 2 ชนิด ดังนี้
1. ชนิดต่อแบบแอโนดร่วม หรือ คอมมอนแอโนด (Common Anode)
2. ชนิดต่อแบบแคโทดร่วม หรือ คอมมอนแคโทด (Common Cathode)
โดยโครงสร้างการต่อหลอดแสดงผล LED 7-Segment ทั้ง 2 ชนิด ดังรูปที่ 1.2
รูปที่ 1.2 โครงสร้างการต่อหลอดแสดงผล LED 7-Segment
รูปที่ 1.2(ก) เป็นการต่อหลอดแสดงผล LED 7-Segment แบบแอโนดร่วม โดยต้องป้อนไฟบวกที่ขาร่วมที่หรือขาคอมมอน (Common) และถ้าต้องการให้หลอดแสดงผล LED 7-Segment แสดงผลหรือให้สว่าง ต้องป้อนไฟลบหรือส่งลอจิก "0" มาที่ขาแคโทด
ส่วนรูปที่ 1.2(ข) เป็นการต่อหลอดแสดงผล LED 7-Segment แบบแคโทดร่วม โดยต้องป้อนไฟลบหรือกราวด์ที่ขาร่วมหรือขาคอมมอน และถ้าต้องการให้หลอดแสดงผล LED 7-Segment แสดงผลหรือสว่างต้องป้อนไฟบวกหรือส่งลอจิก "1" มาที่ขาแอโนด
2. การเชื่อต่อ PIC กับหลอดแสดงผล LED 7-Segment
สำหรับการต่อ PIC ร่วมกับหลอดแสดงผล LED 7-Segment ควรต่อไอซีบัฟเฟอร์ร่วมด้วย เพื่อขยายกระแสให้หลอดแสดงผล LED 7-Segment สว่างเท่ากันทุกหลอด และป้องกันการลัดวงจรของหลอดแสดงผล LED 7-Segment ซึ่งมีผลทำให้ Micro controller PIC เสียหายได้
รูปที่ 2.1 การเชื่อมต่อ PIC กับหลอดแสดงผล LED 7-Segment
รูปที่ 2.1 เป็นการต่อหลอดแสดงผล LED 7-Segment เข้ากับพอร์ต B ของ PIC เบอร์ 16F877 ซึ่งระหว่างหลอดแสดงผล LED 7-Segment กับพอร์ต B นั้นก็จะมีไอซีบัฟเฟอร์ต่อร่วมอยู่ด้วย ซึ่งไอซีบัฟเฟอร์เบอร์ 74LS245 นอกจากจะทำหน้าที่ขยายกระแสเพื่อให้หลอดแสดงผล LED 7-Segment สว่างเท่ากันทั้ง 7 ตัวแล้ว ยังทำหน้าที่ป้องกันความเสียหายให้กับ PIC ในกรณีที่เกิดการลัดวงจรในส่วนหลอดแสดงผล LED 7-Segment ด้วย
การต่อ PIC ร่วมกับหลอดแสดงผล LED 7-Segment เพื่อให้แสดงผลออกมาเป็นตัวเลขต่างๆ จะต้องมีการส่งข้อมูลออกพอร์ตของ PIC ที่ต่อร่วมอยู่กับหลอดแสดงผล LED 7-Segment และข้อมูลที่จะส่งออกพอร์ตนั้นก็ขึ้นอยู่กับชนิดของหลอดแสดงผล LED 7-Segment ซึ่งข้อมูลที่จะส่งออกพอร์ตของหลอดแสดงผล LED 7-Segment แบบต่อแอโนดร่วมและต่อแคโทดร่วม แสดงดังตาราง ที่ 2.1 และ 2.2
ตารางที่ 2.1 แสดงข้อมูลที่ส่งออกพอร์ตของหลอดแสดงผล LED 7-Segment
แบบต่อแอโนดร่วม (Common Anode)
ตารางที่ 2.2 แสดงข้อมูลที่ส่งออกพอร์ตของหลอดแสดงผล LED 7-Segment
แบบต่อแคโทดร่วม (Common Cathode)
3. การส่งข้อมูลออกหลอดแสดงผล LED 7-Segment
การส่งข้อมูลออกพอร์ต เพื่อส่งออกหลอดแสดงผล LED 7-Segment จะเหมือนกับการส่งข้อมูลออกหลอดแสดงผล LED ทั่วไป แต่การแสดงผลออกหลอดแสดงผล LED 7-Segment จะเป็นลักษณะของตัวเลข ดังนั้นข้อมูลที่ส่งออกพอร์ตจึงเป็นเลขฐานสิบหกของตัว
รูปแบบ output_พอร์ต(ข้อมูลเลขฐานสิบหกของตัวเลขที่ต้องการแสดง);
ตัวอย่าง output_B(0x3F);
หมายถึง ส่งค่าข้อมูล 0x3F หรือส่ง 00111111B ออกที่พอร์ต B เพื่อให้หลอดแสดงผล LED 7-Segment แสดงผลเป็นตัวเลข 0
ตัวอย่างที่ 3.1 โปรแกรมแสดงผลออกที่หลอดแสดงผล LED 7-Segment ซึ่งต่ออยู่กับพอร์ต B ของ PIC และเป็นหลอดแสดงผล LED 7-Segment แบบต่อแคโทดร่วม โดยให้แสดงผลเป็นตัวเลข 0-9 ตามลำดับ
วิธีการคิด
การเขียนโปรแกรมแสดงผลออกหลอดแสดงผล LED 7-Segment จะประกาศตัวแปรแบบอาร์เรย์ เพื่อใช้ในการเก็บข้อมูลตัวเลขที่ต้องการแสดงผล เนื่องจากง่ายต่อการเขียนโปรแกรมและสะดวกในการแก้ไขข้อมูลที่ส่งออกพอร์ตแสดงผล
เขียนโค๊ดที่ใช้งานจริง
#include <16F877.h>
#fuses HS,NOPUT,NOWDT,NOPROTECT
#use delay (clock=4Mhz)
void main()
{
int num[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
signed int i;
while(1)
{
for(i=0;i<10;i++)
{ output_B(num[i]);
delay_ms(500);
}
}
}
อธิบายโปรแกรม
บรรทัดที่ 5 ประกาศตัวแปร num[10] เพื่อเก็บข้อมูลตัวเลข 0-9 ที่ต้องการส่งออกพอร์ตจำนวน 10 ตัว
บรรทัดที่ 7 ประกาศตัวแปรแบบ signed int i; คือประกาศตัวแปร i เป็นตัวเลขชนิดจำนวนเต็มมีค่าตั้งแต่ -127 ถึง 128
บรรทัดที่ 8 ให้โปรแกรมทำงานวนรอบตลอดกาล
บรรทัดที่ 10 กำหนดให้ฟังก์ชัน for ทำงานวนรอบจำนวน 10 รอบคือ 0-9 ตามค่า i
บรรทัดที่ 11 แสดงผลตัวเลขในตัวแปรอาร์เรย์ออกพอร์ต B โดยค่าในอาร์เรย์จะเปลี่ยนตามค่าของ i
1. โครงสร้างและการทำงานของหลอดแสดงผล LED 7 ส่วน
หลอดแสดงผล LED 7 ส่วน เป็นการนำเอาหลอด แสดงผล LED จำนวน 7 ตัวมาต่อกันเป็นรูปตัวเลขโดยมีชื่อเรียกแต่ละส่วน คือ a,b,c,d,e,f,g และ dp แสดงดังรูปที่ 1.1
รูปที่ 1.1 โครงสร้างและขาของหลอดแสดงผล LED 7-Segment
หลอดแสดงผล LED 7-Segment สามารถแบ่งตามลักษณะการต่อหลอดแสดงผล LED ทั้ง 7 หลอดได้ 2 ชนิด ดังนี้
1. ชนิดต่อแบบแอโนดร่วม หรือ คอมมอนแอโนด (Common Anode)
2. ชนิดต่อแบบแคโทดร่วม หรือ คอมมอนแคโทด (Common Cathode)
โดยโครงสร้างการต่อหลอดแสดงผล LED 7-Segment ทั้ง 2 ชนิด ดังรูปที่ 1.2
รูปที่ 1.2 โครงสร้างการต่อหลอดแสดงผล LED 7-Segment
รูปที่ 1.2(ก) เป็นการต่อหลอดแสดงผล LED 7-Segment แบบแอโนดร่วม โดยต้องป้อนไฟบวกที่ขาร่วมที่หรือขาคอมมอน (Common) และถ้าต้องการให้หลอดแสดงผล LED 7-Segment แสดงผลหรือให้สว่าง ต้องป้อนไฟลบหรือส่งลอจิก "0" มาที่ขาแคโทด
ส่วนรูปที่ 1.2(ข) เป็นการต่อหลอดแสดงผล LED 7-Segment แบบแคโทดร่วม โดยต้องป้อนไฟลบหรือกราวด์ที่ขาร่วมหรือขาคอมมอน และถ้าต้องการให้หลอดแสดงผล LED 7-Segment แสดงผลหรือสว่างต้องป้อนไฟบวกหรือส่งลอจิก "1" มาที่ขาแอโนด
2. การเชื่อต่อ PIC กับหลอดแสดงผล LED 7-Segment
สำหรับการต่อ PIC ร่วมกับหลอดแสดงผล LED 7-Segment ควรต่อไอซีบัฟเฟอร์ร่วมด้วย เพื่อขยายกระแสให้หลอดแสดงผล LED 7-Segment สว่างเท่ากันทุกหลอด และป้องกันการลัดวงจรของหลอดแสดงผล LED 7-Segment ซึ่งมีผลทำให้ Micro controller PIC เสียหายได้
รูปที่ 2.1 การเชื่อมต่อ PIC กับหลอดแสดงผล LED 7-Segment
รูปที่ 2.1 เป็นการต่อหลอดแสดงผล LED 7-Segment เข้ากับพอร์ต B ของ PIC เบอร์ 16F877 ซึ่งระหว่างหลอดแสดงผล LED 7-Segment กับพอร์ต B นั้นก็จะมีไอซีบัฟเฟอร์ต่อร่วมอยู่ด้วย ซึ่งไอซีบัฟเฟอร์เบอร์ 74LS245 นอกจากจะทำหน้าที่ขยายกระแสเพื่อให้หลอดแสดงผล LED 7-Segment สว่างเท่ากันทั้ง 7 ตัวแล้ว ยังทำหน้าที่ป้องกันความเสียหายให้กับ PIC ในกรณีที่เกิดการลัดวงจรในส่วนหลอดแสดงผล LED 7-Segment ด้วย
การต่อ PIC ร่วมกับหลอดแสดงผล LED 7-Segment เพื่อให้แสดงผลออกมาเป็นตัวเลขต่างๆ จะต้องมีการส่งข้อมูลออกพอร์ตของ PIC ที่ต่อร่วมอยู่กับหลอดแสดงผล LED 7-Segment และข้อมูลที่จะส่งออกพอร์ตนั้นก็ขึ้นอยู่กับชนิดของหลอดแสดงผล LED 7-Segment ซึ่งข้อมูลที่จะส่งออกพอร์ตของหลอดแสดงผล LED 7-Segment แบบต่อแอโนดร่วมและต่อแคโทดร่วม แสดงดังตาราง ที่ 2.1 และ 2.2
ตารางที่ 2.1 แสดงข้อมูลที่ส่งออกพอร์ตของหลอดแสดงผล LED 7-Segment
แบบต่อแอโนดร่วม (Common Anode)
ตารางที่ 2.2 แสดงข้อมูลที่ส่งออกพอร์ตของหลอดแสดงผล LED 7-Segment
แบบต่อแคโทดร่วม (Common Cathode)
3. การส่งข้อมูลออกหลอดแสดงผล LED 7-Segment
การส่งข้อมูลออกพอร์ต เพื่อส่งออกหลอดแสดงผล LED 7-Segment จะเหมือนกับการส่งข้อมูลออกหลอดแสดงผล LED ทั่วไป แต่การแสดงผลออกหลอดแสดงผล LED 7-Segment จะเป็นลักษณะของตัวเลข ดังนั้นข้อมูลที่ส่งออกพอร์ตจึงเป็นเลขฐานสิบหกของตัว
รูปแบบ output_พอร์ต(ข้อมูลเลขฐานสิบหกของตัวเลขที่ต้องการแสดง);
ตัวอย่าง output_B(0x3F);
หมายถึง ส่งค่าข้อมูล 0x3F หรือส่ง 00111111B ออกที่พอร์ต B เพื่อให้หลอดแสดงผล LED 7-Segment แสดงผลเป็นตัวเลข 0
ตัวอย่างที่ 3.1 โปรแกรมแสดงผลออกที่หลอดแสดงผล LED 7-Segment ซึ่งต่ออยู่กับพอร์ต B ของ PIC และเป็นหลอดแสดงผล LED 7-Segment แบบต่อแคโทดร่วม โดยให้แสดงผลเป็นตัวเลข 0-9 ตามลำดับ
วิธีการคิด
การเขียนโปรแกรมแสดงผลออกหลอดแสดงผล LED 7-Segment จะประกาศตัวแปรแบบอาร์เรย์ เพื่อใช้ในการเก็บข้อมูลตัวเลขที่ต้องการแสดงผล เนื่องจากง่ายต่อการเขียนโปรแกรมและสะดวกในการแก้ไขข้อมูลที่ส่งออกพอร์ตแสดงผล
เขียนโค๊ดที่ใช้งานจริง
#include <16F877.h>
#fuses HS,NOPUT,NOWDT,NOPROTECT
#use delay (clock=4Mhz)
void main()
{
int num[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int num[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
signed int i;
while(1)
{
for(i=0;i<10;i++)
{ output_B(num[i]);
delay_ms(500);
}
}
}
อธิบายโปรแกรม
บรรทัดที่ 5 ประกาศตัวแปร num[10] เพื่อเก็บข้อมูลตัวเลข 0-9 ที่ต้องการส่งออกพอร์ตจำนวน 10 ตัว
บรรทัดที่ 7 ประกาศตัวแปรแบบ signed int i; คือประกาศตัวแปร i เป็นตัวเลขชนิดจำนวนเต็มมีค่าตั้งแต่ -127 ถึง 128
บรรทัดที่ 8 ให้โปรแกรมทำงานวนรอบตลอดกาล
บรรทัดที่ 10 กำหนดให้ฟังก์ชัน for ทำงานวนรอบจำนวน 10 รอบคือ 0-9 ตามค่า i
บรรทัดที่ 11 แสดงผลตัวเลขในตัวแปรอาร์เรย์ออกพอร์ต B โดยค่าในอาร์เรย์จะเปลี่ยนตามค่าของ i