ผู้จัดทำ
นาย คมสันต์ รั่วลี 1 สทค 1 6031280004
นาย ชัยวัฒน์ มาลาเอี่ยม 1 สทค 1 6031280010
อุปกรณ์ที่ใช้
1. 7 segment
2. ตัวต้านทาน 220R 1 ตัว
3. สายไฟ 9 เส้น
4. บอร์ด Arduino
5. สาย USB
6. โฟโต้บอร์ด
Code
void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pins:
for (int thisPin = 2; thisPin < 9; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// read the sensor:
if (Serial.available() > 0) {
int inByte = Serial.read();
// do something different depending on the character received.
// The switch statement expects single number values for each case; in this
// example, though, you're using single quotes to tell the controller to get
// the ASCII value for the character. For example 'a' = 97, 'b' = 98,
// and so forth:
switch (inByte) {
case '0':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
break;
case '1':
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case '2':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
break;
case '3':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
break;
case '4':
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
case '5':
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
case '6':
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
case '7':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case '8':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
case '9':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
break;
default:
// turn all the LEDs off:
for (int thisPin = 2; thisPin < 7; thisPin++) {
digitalWrite(thisPin, LOW);
}
}
}
}
ดาวโหลด Code : คลิก!
--------------------------------------------------------------------------------------------------------------------------
ทฤษฎี 7 segment
การควบคุมหลอดแสดงผล 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. โครงสร้างและการทำงานของหลอดแสดงผล 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
4. การส่งข้อมูลออกที่หลอดแสดงผล LED 7-Segment จำนวน 2 ตัว
ในการเชื่อมต่อไมโครคอนโทรลเลอร์ PIC กับหลอดแสดงผล LED 7-Segment จำนวน 2 ตัวเพื่อแสดงผลตัวเลขจำนวน 2 หลักคือ หลักหน่วยและหลักสิบ สามารถทำได้โดยการนำหลอดแสดงผล LED 7-Segment ต่อออกจากพอร์ต PIC ได้โดยตรง เนื่องจาก PIC เบอร์ 16F877 มีพอร์ตอินพุตและเอาต์พุต สำหรับต่อใช้งานหลายพอร์ตจึงสามารถใช้ 1 พอร์ตต่อหลอดแสดงผล LED 7-Segment จำนวน 1 ตัวได้
จากรูปที่ 4.1 เป็นการต่อหลอดแสดงผล LED 7-Segment จำนวน 2 ตัวเข้ากับ PIC ซึ่งหลอดแสดงผล LED 7-Segment ตัวที่ 1 ต่อออกจากพอร์ต B และหลอดแสดงผล LED 7-Segment ส่วนตัวที่ 2 ต่อออกจากพอร์ต D ของ PIC โดยมีไอซีเบอร์ 74LS245 ทำหน้าที่เป็นบัฟเฟอร์ การต่อลักษณะหนึ่งพอร์ตต่อหลอดแสดงผล LED 7-Segment ส่วนตัวนี้ ถ้าเป็น PIC เบอร์ 16F877 จะสามารถต่อหลอดแสดงผล LED 7-Segment ได้สูงสุด 4 ตัว
ในการเชื่อมต่อไมโครคอนโทรลเลอร์ PIC กับหลอดแสดงผล LED 7-Segment จำนวน 2 ตัวเพื่อแสดงผลตัวเลขจำนวน 2 หลักคือ หลักหน่วยและหลักสิบ สามารถทำได้โดยการนำหลอดแสดงผล LED 7-Segment ต่อออกจากพอร์ต PIC ได้โดยตรง เนื่องจาก PIC เบอร์ 16F877 มีพอร์ตอินพุตและเอาต์พุต สำหรับต่อใช้งานหลายพอร์ตจึงสามารถใช้ 1 พอร์ตต่อหลอดแสดงผล LED 7-Segment จำนวน 1 ตัวได้
รูปที่ 4.1 การเชื่อมต่อ PIC กับหลอดแสดงผล LED 7-Segment จำนวน 2 ตัว
5. การส่งข้อมูลออกหลอดแสดงผล LED 7-Segment โดยใช้ไอซีถอดรหัส
การเชื่อมต่อไมโครคอนโทรลเลอร์ PIC กับหลอดแสดงผล LED 7-Segment จำนวน 2 ตัวโดยใช้ไอซีถอดรหัสเบอร์ 74LS48 สำหรับหลอดแสดงผล LED 7-Segment ชนิดแคโทดร่วม และไอซีถอดรหัส เบอร์ 74LS47 สำหรับหลอดแสดงผล LED 7-Segment ชนิดแอโนดร่วม จะทำให้ประหยัดพอร์ตของ PIC เพราะหลอดแสดงผล LED 7-Segment ส่วนที่ต่อเข้ากับไอซีถอดรหัสจะใช้พอร์ตเพียง 4 บิตเท่านั้น นั่นคือ ปกติพอร์ตของ PIC จะมีขนาด 8 บิต ก็จะสามารถต่อหลอดแสดงผล LED 7-Segment ได้ 2 ตัวนั่นเอง ดังแสดงในรูปที่ 5.1
รูปที่ 5.1 การเชื่อมต่อ PIC กับหลอดแสดงผล LED 7-Segment จำนวน 2 ตัวโดยใช้ไอซีถอดรหัส
จากรูปที่ 5.1 เป็นการต่อหลอดแสดงผล LED 7-Segment จำนวน 2 ตัว แสดงผลเป็นตัวเลข 2 หลัก คือ หลักหน่วยและหลักสิบ โดยหลักสิบจะต่ออยู่กับพอร์ต B4-B7 และหลักหน่วยต่ออยู่กับพอร์ตB0-B3 โดยหลอดแสดงผล LED 7-Segment ทั้งสองตัวต่อผ่านไอซีถอดรหัสเบอร์ 74LS48 เพราะหลอดแสดงผล LED 7-Segment ที่ใช้เป็นชนิดแคโทดร่วม ทำหน้าที่แปลงเลขฐานสองให้แสดงเป็นเลขฐานสิบที่หลอดแสดงผล LED 7-Segmentรูปที่ 5.1 การเชื่อมต่อ PIC กับหลอดแสดงผล LED 7-Segment จำนวน 2 ตัวโดยใช้ไอซีถอดรหัส
จากรูปที่ 5.1 เป็นการต่อหลอดแสดงผล LED 7-Segment จำนวน 2 ตัว แสดงผลเป็นตัวเลข 2 หลัก คือ หลักหน่วยและหลักสิบ โดยหลักสิบจะต่ออยู่กับพอร์ต B4-B7 และหลักหน่วยต่ออยู่กับพอร์ตB0-B3 โดยหลอดแสดงผล LED 7-Segment ทั้งสองตัวต่อผ่านไอซีถอดรหัสเบอร์ 74LS48 เพราะหลอดแสดงผล LED 7-Segment ที่ใช้เป็นชนิดแคโทดร่วม ทำหน้าที่แปลงเลขฐานสองให้แสดงเป็นเลขฐานสิบที่หลอดแสดงผล LED 7-Segment
การใช้ไอซีถอดรหัสเบอร์ 74LS48 ซึ่งเป็นไอซีที่ทำหน้าที่แปลงเลขฐานสองให้เป็นรหัสแสดงตัวเลขของหลอดแสดงผล LED 7-Segment ดังตารางที่ 5.1
ตารางที่ 5.1 แสดงการแปลงเลขฐานสองให้เป็นรหัสแสดงตัวเลขของหลอดแสดงผล LED 7-Segment
รูปวงจร
---------------------------------------------------------------------------------












ไม่มีความคิดเห็น:
แสดงความคิดเห็น