74hc595 7 segment 8 digit ทดลอง_001
โปรแกรมแสดง ผล LED 7 Segment 8 digit โดยแสดงผลลัพพ์เป็น 0-9 จากนั้นแสดง เป็น เวลา 00:00:00 - 23:59:59
1.หลักการทำงาน
หลักการทำงานของ 7 Segment คือการส่งสัญญาณไฟฟ้ามาประกอบกันเพื่อสร้างรูปแบบตัวเลข 7 ตัว โดยจะมี 7 ส่วนสำหรับแสดงผล ทั้งนี้ส่วนของ 7 Segment มีรูปแบบเดียวกันทุกตัว แต่จะแตกต่างกันตามการเชื่อมต่อกับวงจร ซึ่งส่วนของ 7 Segment จะแสดงผลตัวเลขโดยการประกอบไปด้วย 7 ส่วนหรือเซกเมนต์โดยแต่ละส่วนจะมีชื่อว่า a, b, c, d, e, f, g
2.การต่อวงจร
อุปกรณ์ที่ใช้ในวงจรนี้จะมีอยู่ 2 ตัว และ โปรแกรมสำหรับเขียน Code : Arduino IDE
2.1.WeMos D1 Mini
WeMos D1 mini เป็นบอร์ดพัฒนา ESP8266
บนบอร์ดมีชิปสำหรับ USB to TTL อยู่บนบอร์ดแล้ว
ทำให้สามารถเสียบเข้ากับคอมพิวเตอร์ผ่านพอร์ต USB
2.2. 74HC595 7 Segment 8 Digit
74HC595 7 Segment 8 Digit เป็นวงจรที่ใช้ในการแสดงผลตัวเลข
8 หลัก (8 digits) โดยใช้ 7
Segment Display และ IC 74HC595 เพื่อควบคุมการแสดงผล
ซึ่งเป็นวงจรที่มักนำมาใช้ในการแสดงผลเวลา หรือข้อมูลต่าง ๆ
ที่ต้องแสดงผลในรูปแบบตัวเลข
2.3. Arduino IDE
Arduino IDE เป็นโปรแกรมที่ใช้สำหรับการเขียนโปรแกรมควบคุมและสามารถทำการแปลงไฟล์ดังกล่าวเพื่อนำไปอัพโหลดลงยังบอร์ด
Arduino
2.4 ลักษณะการต่อวงจร
ขา Vcc ต่อ 3v3
ขา GND ต่อ GND
ขา SCLK ต่อ D5
ขา RCLK ต่อ D6
ขา DIO ต่อ D7
3.โฟลว์ชาร์ตของโปรแกรม
4.วิธีการทดสอบโปรแกรมและCode
ต่อสายจ่ายไฟเลี้ยงเสร็จจากนั้น led
7degmeant จะรันตัวเลข 0 จะไปถึง 9 จากนั้นจะ reset แล้วแสดงผลเป็นนาฬิกาขึ้นมาแทน
Code
#include <TridentTD_7Segs74HC595.h>
#define SCLK D5
#define RCLK D6
#define DIO D7
TridentTD_7Segs74HC595 my7SEGMENT(SCLK, RCLK, DIO);
// ตำแหน่งแสดงตัวเลข
char disp_c[] = { '8', '7', '6', '5', '4', '3', '2', '1' };
int disp[8];
// ค่าเวลาสำหรับวิธีแก้ปัญหาการหน่วงเวลา
unsigned long prev = 0;
unsigned long waitMS = 20;
void setup() {
pinMode(RCLK, OUTPUT);
pinMode(DIO, OUTPUT);
pinMode(SCLK, OUTPUT);
showDisplay();
}
int n;
int j;
int o;
int m;
int a;
int y;
int unsigned long start = millis();
byte b = 0;
void loop() {
showDisplay();
if (b == 0) {
b++;
wait(100); // หน่วงเวลาแสดงข้อความต้อนรับ
}
else {
if (millis() > (prev + waitMS))
{
// จุดที่แก้ไข
disp_c[0] = y % 10; // แสดงผลหลัก หน่วย
disp_c[1] = (y / 10) % 10; // แสดงผลหลัก สิบ
disp_c[2] = j % 10; // แสดงผลหลัก ร้อย
disp_c[3] = (j / 10) % 10; // แสดงผลหลัก พัน
disp_c[4] = o % 10;
disp_c[5] = (o / 10) % 10;
disp_c[6] = (y / 100000) % 10;
disp_c[7] = m % 10;
y++;
if (a == 1) {
disp_c[0] = n % 10; // แสดงผลหลัก หน่วย
disp_c[1] = (n / 10) % 10; // แสดงผลหลัก สิบ
disp_c[2] = j % 10; // แสดงผลหลัก ร้อย
disp_c[3] = (j / 10) % 10; // แสดงผลหลัก พัน
disp_c[4] = o % 10;
disp_c[5] = (o / 10) % 10;
disp_c[6] = (n / 100000) % 10;
disp_c[7] = m % 10;
n++;
}
if (y == 10) {
a = 1;
n = 0;
y = 10;
a = 1;
}
if (n == 60) {
j++;
n = 0;
}
if (j == 60) {
j = 0;
o++;
}
if (o == 24) {
j = 0;
n = 0;
o = 0;
}
// หน่วงเวลา
wait(1000);
}
}
}
//ฟังก์ชั่นแสดงผล
void showDisplay() {
setDisp();
for (int i = 0; i < 8; i++) {
setDigit(i, disp[i]);
for (int a = 0; a < 9; a++) {}
}
}
void setDigit(int dig, int character) {
int digits[] = {
128, 64, 32, 16, 8, 4, 2, 1
};
//ตั้งค่าตัวหนังสือ (0-9)0-9
// (10-19)0.-9.
// (20-45)A-Z
// (46-71)a-z
// (72)- (73) space
int characters[] = {
3, 159, 37, 13, 153, 73, 65, 31, 1, 9,
2, 158, 36, 12, 152, 72, 64, 30, 0, 8,
17, 1, 99, 3, 97, 113, 67, 145, 243, 135, 145, 227, 85, 19, 3, 49, 25, 115, 73, 31, 129, 129, 169, 145, 137, 37,
5, 193, 229, 133, 33, 113, 9, 209, 247, 143, 81, 227, 85, 213, 197, 49, 25, 245, 73, 225, 199, 199, 169, 145, 137, 37,
253, 255
};
digitalWrite(RCLK, LOW);
shiftOut(DIO, SCLK, LSBFIRST, characters[character]);
shiftOut(DIO, SCLK, LSBFIRST, digits[dig]);
digitalWrite(RCLK, HIGH);
}
void setDisp() {
for (int i = 0; i < 8; i++) {
int val = disp_c[i];
if ((val >= 32) && (val <= 47)) { // ! ถึง / ไม่ให้แสดง
switch (val) {
case 45:
val = 72;
break; // เครื่องหมาย -
default:
val = 73;
break; // ค่าอื่นระหว่างนี้ ไม่ให้แสดง
}
} else if ((val >= 48) && (val <= 57)) //0-9
{
val -= 48;
} else if ((val >= 65) && (val <= 90)) //A-Z
{
val -= 45;
} else if ((val >= 97) && (val <= 122)) //a-z
{
val -= 51;
}
disp[i] = val;
}
}
void wait(unsigned long milsec) {
prev = millis();
waitMS = milsec;
}
5.คลิปทดสอบโปรแกรม
6.แหล่งข้อมูล
6.1 ข้อมูล : https://www.allnewstep.com/product/128/eight-digital-tube-module-led-display-eight-serial-74hc595-drivers-พร้อมสายไฟ
6.2 ข้อมูล : https://chat.openai.com/chat
ความคิดเห็น
แสดงความคิดเห็น