การจำลองวงจรอิเล็กทรอนิกส์ การเขียนแบบและออกแบบด้วยคอมพิวเตอร์ การจำลองวงจรอิเล็กทรอนิกส์ อ.กฤติเดช จินดาภัทร์ www.charprom.com
7seg-com-anode 7seg-com-cathode Logictoggle Ground Power Aurduino
7 Segment คือหน้าจอแสดงผลตัวเลข - ตัวอักษร (ได้บางตัว) ที่มีหน้าจอทำมาจากการจัดวางหลอด LED ในแนวยาว เมื่อทำให้หลอด LED แต่ละดวงติดพร้อมกัน ก็จะทำให้แสดงออกมาเป็นตัวเลขทรงเหลี่ยมได้
7 Segment
7 Segment Common Anode - ขาคอมม่อนจะต้องต่ออยู่กับขั่วบวก แล้วขาอื่นๆ ต่ออยู่กับกราว์ด จึงจะทำให้ส่วนนั้นๆติดสว่าง Common Cathode - ขาคอมม่อนจะต้องต่ออยู่กับขั่วลบ แล้วขาอื่นๆ ต่ออยู่กับขั้วบวก จึงจะทำให้ส่วนนั้นๆติดสว่าง
การเขียนโปรแกรม Arduino จะอาศัยรีจิสเตอร์ DDRD และ PORTD ในการสั่งงาน ซึ่งจะง่ายกว่าการใช้งาน pinMode() และ digitalWrite() มาก เนื่องจากการเซ็คค่าเข้าไปในรีจิสเตอร์ PORTD จะทำให้สามารถสั่งขาตั้งแต่ขา 0 ถึงขา 7 ได้พร้อมๆกัน ตามวงจรได้ต่อขา 0 - 6 ไว้กับขา a - g ดังนั้นหากต้องการแสดงเลข 1 จะต้องให้แถบ b และ c ติด ซึ่งจะต้องทำให้ขา b และ c เป็นลอจิก 0 ใน 7 Segment Comon Anode และขาอื่นๆเป็นลอจิก 1 หรือลอจิก 1 ใน 7 Segment Comon Cathode และขาอื่นๆเป็นลอจิก 0
การเขียนโปรแกรม Arduino เมื่อนำมาเรียงในเลขฐาน 2 จะได้เป็น 7 Segment Comon Anode ขา g ขา f ขา e ขา d ขา c ขา b ขา a เลขฐาน 2 1 1 1 1 0 0 1 0B11111001 7 Segment Comon Cathode 0 0 0 0 1 1 0 0B00000110
การเขียนโปรแกรม Arduino ทดสอบ ต่อ Arduino uno กับ 7 sm แบบ anode // Arduino 7 Segment example Develope by Commandrone // www.commandronestore.com } int a = 2; //ขา a ต่อเข้ากับ Pin 2 int b = 3; //ขา b ต่อเข้ากับ Pin 3 int c = 4; //ขา c ต่อเข้ากับ Pin 4 int d = 5; //ขา d ต่อเข้ากับ Pin 5 int e = 6; //ขา e ต่อเข้ากับ Pin 6 int f = 7; //ขา f ต่อเข้ากับ Pin 7 int g = 8; //ขา g ต่อเข้ากับ Pin 8 int point = 9; //ขา h หรือจุด ต่อเข้ากับ Pin 9 void setup() { pinMode(a, OUTPUT); //a pinMode(b, OUTPUT); //b pinMode(c, OUTPUT); //c pinMode(d, OUTPUT); //d pinMode(e, OUTPUT); //e pinMode(f, OUTPUT); //f pinMode(g, OUTPUT); //g pinMode(point, OUTPUT); //point } void showNumber(int number) //สร้าง Function ชื่อ showNumber ที่ใช้ในการแสดงผลตัวเลข โดยรับค่า number จาก void loop มาอีกที การสร้าง fuction จะช่วยให้ประหยัดพื้นที่และทำให้ไม่สับสนในการเรียกใช้งานโปรแกรม { //เงื่อนไขที่ Segment a ไฟติด เมื่อไม่ใช่เลข 1 และเลข 4 if(number != 1 && number != 4) digitalWrite(a,LOW); //เมื่อมีสถานะเป็น LOW ไฟจะติด เพราะเป็นแบบ Common Anode //เงื่อนไขที่ Segment b ไฟติด if(number != 5 && number != 6) digitalWrite(b,LOW); //เงื่อนไขที่ Segment c ไฟติด if(number != 2) digitalWrite(c,LOW); //เงื่อนไขที่ Segment d ไฟติด if(number != 1 && number != 4 && number != 7) digitalWrite(d,LOW); //เงื่อนไขที่ Segment e ไฟติด เมื่อเป็นเลข 2 หรือ 6 หรือ 8 หรือ 0 if(number == 2 || number == 6 || number == 8 || number == 0) digitalWrite(e,LOW); //เงื่อนไขที่ Segment f ไฟติด if(number != 1 && number != 2 && number != 3 && number != 7) digitalWrite(f,LOW); //เงื่อนไขที่ Segment g ไฟติด if (number != 0 && number != 1 && number != 7) digitalWrite(g,LOW); } void turnOff() //สร้าง Function ชื่อ turnOff ที่ใช้ในการดับไฟทั้งหมด เพื่อ Reset เมื่อกำลังจะเปลี่ยนเป็นอีกตัวเลขหนึ่ง { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(point,HIGH); } void loop() { //ทำการแสดงผลเลข 0 - 9 วนไปเรื่อยๆจนกว่าจะหยุดจ่ายไฟ for(int i=0;i<10;i++) { showNumber(i); //เรียกใช้ Function showNumber โดยส่งค่า i ไปให้ตัวแปร Number ใช้ในการประมวลผล delay(1000); turnOff(); //ทำการดับไฟทั้งหมดเมื่อกำลังจะเปลี่ยนตัวเลข เพื่อไม่ให้ไฟดวงเดิมค้างสถานะติดไว้ }
การเขียนโปรแกรม Arduino ทดสอบ ต่อ Arduino uno กับ 7 sm 2 ตัว แบบ anode //SSD is Seven-Segment Display void setup() { for (int i = 0; i <= 13; i++) pinMode(i, OUTPUT); //Set all pins from 0 to 13 as OUTPUT } //The line below is the array containing all the binary numbers for the digits on a SSD from 0 to 9 const int number[11] = {0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010, 0b0000010, 0b1111000, 0b0000000, 0b0010000}; void loop() { for (int tens = 0; tens < 10; tens++) { display_tens(tens); } } void display_tens(const int tens) { int pin1, a, ones; //pin1 is just used to deal with pins of the 1st SSD which desplays the tens digit for (pin1 = 0, a = 0; pin1 < 7; pin1++, a++) { digitalWrite(pin1, bitRead(number[tens], a)); } for (ones = 0; ones < 10; ones++) { display_ones(ones); delay(300); //I have given a delay of 300 milliseconds. You can put your own Time!! } } void display_ones(const int x) { int pin2, b; //pin2 is just used to deal with pins of the 2nd SSD which desplays the ones digit for (pin2 = 7, b = 0; pin2 <= 13; pin2++, b++) { digitalWrite(pin2, bitRead(number[x], b)); } }
A & Q Thank You ! www.charprom.com