** บทความและโครงงานนี้เป็นความคิดเห็นของผู้เขียนเอง ซึ่งผู้อ่านไม่จำเป็นต้องเห็นด้วยเสมอไปครับ
หาก มีข้อเสนอแนะ หรือพบข้อความใดๆ ผิก กรุณาแจ้งมายังผู้เขียนด้วยครับ จะได้ทำการแก้ไขข้อมุลให้
ถูกต้อง ครับ
กลับหน้าหลัก บทความ
 

PIC ภาษา C ตอน แสดงตัวเลข 7- Segment

บทความนี้จะมาต่อจากครั้งที่แล้วครับ ตอนที่ผ่านจะจะเป็นการเขียนแบบขับหลอด LED โดยใช้ port B และการใช้งาน ฟังก์ชัน delay_ms() มาแล้ว มาบทความนี้จะมาใช้วิธีดังกล่าวแต่มาต่อกับตัวแสงผล 7 ส่วน หรือ 7 Segment ดูบ้างครับ แต่ถ้ายัง ไมีรู้จัก 7 Segment ลองดูบทความ เรื่อง อุปกรณ์ ตอน 7 Segment (ตัวแสดงผล 7 ส่วน) ซึ่งอยู่ลำดับที่ 23 ครับ แต่ตอนนี้ลองมาดูการต่อวงจรกันก่อนดีกว่า


เมื่อต่อวงจรแล้ว คราวนี้มากำหนดค่าของ outport_b กันบ้าง ซึ่งค่าของตัวเลขต่างๆจาก 0 - 9 จะได้ตามตารางดังกล่าวครับ


วิธีที่กำหนดค่าที่ได้มาจากตาราง ที่แนะนำวิธีคือ การกำหนดค่าแบบ code 8421 ครับ ซึ่งจะกำหนดการต่อ port ได้ดังนี้


จากรูปจะเห็นว่า
portB0 0จะต่อกับตำแหน่งของขา a ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 1
portB1 0จะต่อกับตำแหน่งของขา b ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 2
portB2 0จะต่อกับตำแหน่งของขา c ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 4
portB3 0จะต่อกับตำแหน่งของขา d ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 8
portB4 0จะต่อกับตำแหน่งของขา e ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 1(ของ 4 bit ถัดไป)
portB5 0จะต่อกับตำแหน่งของขา f ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 2
portB6 0จะต่อกับตำแหน่งของขา g ซึ่งจะตรงกับ code 8421 ตำแหน่ง ที่ 4


ถ้าลองเทียบเลข 0 ซึ่งเราจะได้ 011 1111 ซึ่งถ้าเทียบกับ 421 8421 แล้วจะได้ค่า 3F
ถ้าลองเทียบเลข 7 ซึ่งเราจะได้ 000 0111 ซึ่งถ้าเทียบกับ 421 8421 แล้วจะได้ค่า 07
ถ้าลองเทียบเลข 9 ซึ่งเราจะได้ 110 0111 ซึ่งถ้าเทียบกับ 421 8421 แล้วจะได้ค่า 67


เมื่อนำมาเขียน code เช่นต้องการให้ออกเป็นเลข 0 จะเขียนได้ outport_b(oX3F) เป็นต้น
ซึ่งจะเห็นว่าการคิดแบบนี้ไม่ว่าเราจะเปลี่ยนเป็น port อื่น หรือ จะเริ่มจากตำแหน่งไหนก่อนก็สามารถใช้วิธีนี้ได้เหมือนกัน

คราวนี้ มาดู code ในการเขียนบ้าง โดยจะเริ่มการนับเลข 0 ไปจนถึง 9 แล้ววนกลับมาเหมือนเดิม

#include<16F877.h>
#FUSES NOWDT,NOPROTECT,NOLVP,XT
#USE delay(clock=20000000)
#USE fast_io(b)
void main()
{
set_tris_b(0);
while(1)
{
output_b(0X3F); //0
delay_ms(1000);
output_b(0X06); //1
delay_ms(1000);
output_b(0X5B); // 2
delay_ms(1000);
output_b(0X4F); //3
delay_ms(1000);
output_b(0X66); //4
delay_ms(1000);
output_b(0X6D); //5
delay_ms(1000);
output_b(0X7C); //6
delay_ms(1000);
output_b(0X07); //7
delay_ms(1000);
output_b(0X7F); //8
delay_ms(1000);
output_b(0X67); //9
delay_ms(1000);
}
}

ซึ่งจะเห็นว่าไม่ยากเลยครับ
แล้วถ้าหากต้องการเปลี่ยน 7 Segment จากคอมมอน K มาเป็น คอมมอน A ก็สามารถแก้ตรงการเปลี่ยน จาก 1 เป็น 0 แล้วลองมาแปลงเป็น code 8421 ใหม่เท่านั้นเอง ลองทำดูนะครับได้ผลยังไงก็แนะนำกันมาบ้างก็แล้วกัน

ในบทความตอนต่อไปของPIC จะเป็นเรื่องของการรับค่าจากสวิตช์ ใช้ในการเปิดปิดหลอด LED ครับ


เขียนเมื่อ 2 มี.ค. 2554