Giao Tiếp IC Ghi Dịch 74HC595 Với Arduino Uno - Điện Tử Việt
Có thể bạn quan tâm
- Đăng nhập/Đăng ký
Điện Tử Việt
Trang chủ IoT và Công nghệ Arduino Giao tiếp IC ghi dịch 74HC595 với Arduino Uno
FacebookTwitterPinterestWhatsApp Quảng cáo Google Trong bài viết này, tôi sẽ nói về thanh ghi dịch (Shift Register), một trong những IC thanh ghi dịch phổ biến đó là 74HC595 và cuối cùng là cách sử dụng IC thanh ghi dịch 74HC595 với Arduino và những lợi ích của giao tiếp này. Giới thiệu
Thông thường, đối với một ứng dụng nhỏ chẳng hạn như bạn muốn điều khiển 8 đèn LED với sự trợ giúp của Arduino (hoặc bất kỳ vi điều khiển nào). Ứng dụng này, mặc dù rất cơ bản và đơn giản, sẽ yêu cầu bạn sử dụng 8 trong số các chân Input / Output có sẵn trên board Arduino: mỗi chân cho một đèn LED.
Bây giờ hãy xem xét một ứng dụng phức tạp hơn, với yêu cầu điều khiển 8 đèn LED giống nhau, đồng thời làm các công việc khác như hiển thị thông báo hoặc bất kỳ thông tin nào trên màn hình LCD 16 × 2 hoặc giao tiếp với một thiết bị Bluetooth để điều khiển đèn LED thông qua điện thoại thông minh !!!
Loại ứng dụng lớn hơn này sẽ tiêu thụ rất nhiều chân I/O của bạn trên board Arduino và có thể không còn đủ chân để giao tiếp các thiết bị bổ sung.
Trên thực tế chúng ta có IC thanh ghi dịch để giải quyết tình huống này.
Thanh ghi dịch là gì?
Thanh ghi dịch (Shift Register) về cơ bản là một vi mạch chuyển đổi nối tiếp song song. Về cơ bản nó nhận dữ liều đầu vào nối tiếp thông qua một chân (về mặt kỹ thuật bạn cần ít nhất 3 chân, tôi sẽ nói vấn đề này sau) và chuyển đổi dữ liệu vào nối tiếp thành đầu ra song song 8 bit, do đó làm giảm số chân giao diện giữa vi điều khiển và các thiết bị đầu ra.
Có nhiều loại thanh ghi dịch như vào nối tiếp ra song song, vào nối tiếp ra nối tiếp, vào song song ra nối tiếp và vào song song ra song song.
Trong bài hướng dẫn này, tôi sẽ sử dụng một IC thanh ghi dịch VÀO nối tiếp RA song song gọi là 74HC595.
Giới thiệu IC ghi dịch 74HC595
74HC595 là IC ghi dịch (shift register) 8 bit kết hợp chốt dữ liệu, đầu vào nối tiếp, đầu ra song song.
IC này thường dùng trong các mạch quét led 7, led ma trận …để tiết kiệm số chân cho vi điều khiển. Có thể mở rộng số chân vi điều khiển bao nhiêu tùy thích mà không IC nào có thể làm được bằng cách mắc nối tiếp ngõ vào dữ liệu các IC với nhau.
Sơ đồ chân IC

Giải thích ý nghĩa các chân
| Chân | Ký hiệu | Giải thích |
| 1 | Q1 | Ngõ ra dữ liệu song song (bit 1) |
| 2 | Q2 | Ngõ ra dữ liệu song song (bit 2) |
| 3 | Q3 | Ngõ ra dữ liệu song song (bit 3) |
| 4 | Q4 | Ngõ ra dữ liệu song song (bit 4) |
| 5 | Q5 | Ngõ ra dữ liệu song song (bit 5) |
| 6 | Q6 | Ngõ ra dữ liệu song song (bit 6) |
| 7 | Q7 | Ngõ ra dữ liệu song song (bit 7) |
| 8 | GND | Chân nối đất |
| 9 | Q7′ | Ngõ ra dữ liệu nôí tiếp. Khi dùng nhiều 74HC595 mắc nối tiếp nhau thì chân này đưa vào đầu vào (DS) của IC tiếp theo khi đã dịch đủ 8 bit |
| 10 | /MR | Master Reset (tích cực mức thấp) |
| 11 | SH_CP | Ngõ vào xung clock. Khi có 1 xung clock tích cực ở sườn dương (từ 0 lên 1) thì 1 bit được dịch vào IC. |
| 12 | ST_CP | Xung clock chốt dữ liệu. Khi có 1 xung clock tích cực ở sườn dương (từ 0 lên 1) thì cho phép xuất dữ liệu trên các chân output. |
| 13 | /OE | Chân cho phép tích cực ở mức thấp (0). Khi ở mức cao, tất cả các đầu ra của 74HC595 trở về trạng thái tổng trở cao, không có ngõ ra nào được cho phép. |
| 14 | DS | Ngõ vào dữ liệu nối tiếp. Tại 1 thời điểm xung clock chỉ đưa vào được 1 bit. |
| 15 | Q0 | Ngõ ra dữ liệu song song (bit 8) |
| 16 | VCC | Chân cấp nguồn |
Hoạt động

Ta đặt dữ liệu vào chân DS, và tạo một xung SHCP thì dữ liệu tại chân DS sẽ được dịch vào thanh ghi 8-STAGE SHIFT REGISTER.
Lần lượt làm như trên 8 lần (dịch bit cao trước), thì ta được 8 bit trong thanh ghi 8-STAGE SHIFT REGISTER.
Sau đó ta tạo một xung STCP thì 8 bit trong thanh ghi 8-STAGE SHIFT REGISTER sẽ được sao chép sang thanh ghi 8-BIT STORAGE REGISTER. Lúc này nếu chân OE ở mức thấp thì ngõ ra sẽ bằng với giá trị thanh ghi 8-BIT STORAGE REGISTER, còn nếu chân OE ở mức cao thì ngõ ra ở trạng thái tổng trở cao (Hi-Z).
Chú ý:
- Khi dịch dữ liệu vào thanh ghi 8-STAGE SHIFT REGISTER, và chưa tạo xung STCP thì thanh ghi 8-BIT STORAGE REGISTER sẽ giữ nguyên trạng thái và ngõ ra cũng giữ nguyên trạng thái.
- Khi chân MR ở mức 0 thì dữ liệu trên thanh ghi 8-STAGE SHIFT REGISTER sẽ bị xóa, còn thanh ghi 8-BIT STORAGE REGISTER sẽ giữ nguyên trạng thái và ngõ ra cũng giữ nguyên trạng thái.
Chuẩn bị
Phần cứng
| Tên linh kiện | Số lượng |
| Arduino Uno | 1 |
| IC 74HC595 | 1 |
| Điện trở 220 Ω | 8 |
| LED | 8 |
| Breadboard | 1 |
| Dây cắm breadboard |
Phần mềm: Arduino IDE
Sơ đồ mạch 1
Hình ảnh sau đây cho thấy sơ đồ mạch giao tiếp IC ghi dịch 74HC595 với Arduino UNO.

Thực hiện kết nối Arduino với IC 74HC595 theo bảng hướng dẫn dưới đây
| Arduino | IC 74HC595 |
| 5 | DS |
| 6 | ST_CP |
| 7 | SH_CP |
| Lưu ý: để IC hoạt động được thì
| |
Với sơ đồ mạch được kết nối như bên trên, các bạn thấy rằng tôi sẽ chỉ sử dụng ba chân của Arduino UNO để điều khiển cho 8 đèn LED. Điều này đã giảm đi số chân Arduino được sử dụng rất nhiều.
Chương trình mẫu 1
// Chuong trinh mau 1 – Hien thi so dem nhi phan voi LED
#define DATA 5
#define LATCH 6
#define CLOCK 7
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop()
{
int i;
for (int i = 0; i < 256; i++)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, i);
digitalWrite(LATCH, HIGH);
delay(200);
}
}
Giải thích
Trong chương trình này, chúng ta thiết lập ba chân Arduino kết nối với IC ghi dịch là chân xuất tín hiệu ra (OUTPUT) trong void setup() và sau đó thêm một vòng lặp trong void loop() đếm từ 0 đến 255 và lặp lại. Điều thú vị nằm bên trong vòng lặp này. Khi chúng tôi gửi một byte dữ liệu (ví dụ, 240 hoặc 11110000B) tới thanh ghi thay đổi trong vòng lặp for, có ba điều sẽ xảy ra:
- Chân 12 (Chân chốt – Latch) của IC 74HC595 được tích cực mức THẤP (tín hiệu mức thấp này được cung cấp từ chân số 6 của Arduino ). Đây là sự chuẩn bị cho việc thiết lập ngõ ra chân 12 lên mức cao, chốt dữ liệu vào các chân đầu ra sau khi lệnh shiftOut đã hoàn thành nhiệm vụ của mình.
- Chúng ta gửi byte dữ liệu (ví dụ: 11110000B) từ chân 5 của Arduino đến IC ghi dịch và cho hàm shiftOut biết hướng của byte dữ liệu sẽ dịch chuyển. Ví dụ: nếu bạn chọn lệnh LSBFIRST thì đèn LED 1 đến 4 sẽ sáng còn các đèn LED khác tắt. Nếu bạn sử dụng lệnh MSBFIRST thì các đèn LED 5 đến 8 sẽ sáng còn các đèn LED khác sẽ tắt.
- Cuối cùng, chân 12 của IC 74HC595 được đưa lên mức CAO. Điều này cho thanh ghi dịch biết rằng tất cả các bit đã được dịch chuyển vào và sẵn sàng xuất ra. Tại thời điểm này IC ghi dịch thay đổi đầu ra của nó để phù hợp với dữ liệu nhận được.
Chương trình mẫu 2
// Chuong trinh mau 2 – Hien thi so dem nhi phan voi LED
#define DATA 5
#define LATCH 6
#define CLOCK 7
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop()
{
int i;
for (int i = 1; i < 256; i = i << 1)
{
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, i);
digitalWrite(LATCH, HIGH);
delay(1000);
}
}
Giải thích
Với chương trình này, tôi không dịch các con số từ 1 -> 256.
Ở đây, tôi cho con số i ban đầu là 1 – 0000 0001. Sau mỗi vòng lặp i sẽ dịch bit sang trái 1 lần, vậy tức là với một con số 8 bit, i lần lượt có các giá trị:
- 0000 0001 – 1
- 0000 0010 – 2
- 0000 0100 – 4
- 0000 1000 – 8
- 0001 0000 – 16
- 0010 0000 – 32
- 0100 0000 – 64
- 1000 0000 – 128
Vậy tôi sẽ giới hạn vòng lặp khi i đạt đến giá trị 256 thì dừng.
Sơ đồ mạch 2
Như tôi đã giới thiệu lúc đầu, IC 74HC595 vẫn còn 1 chân là Q7′ là chân đưa ra các bit bị tràn. Vậy dựa vào điều này, ta có thể mở rộng được thêm chân nữa tức là 1 con số 16 bit nếu ghép thêm 1 IC nữa.
Việc ghép nhiều IC ghi dịch lại với nhau rất đơn giản, bạn còn có thể ghép nhiều IC hơn nữa theo thứ tự : IC 2 lấy dữ liệu từ Q7′ của IC 1, IC 3 lấy dữ liệu từ Q7′ của IC 2, IC 4 lấy dữ liệu từ Q7′ của IC 3, ….
Ở đây, các chân CLOCK và chân LATCH của IC 2 vẫn phải được đảm bảo có giá trị tương đương với các chân CLOCK và chân LATCH của IC1. Ta kết nôí mạch như sau :

Chương trình
#define DATA 5
#define LATCH 6
#define CLOCK 7
#define HC595_count 2
void setup()
{
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
}
void loop()
{
char* temp;
unsigned int i;
temp = (char*) &i;
for( i = 1 ; i < 32768 ; i = i << 1)
{
digitalWrite(LATCH, LOW);
for (int j = 0; j < HC595_count; j++)
{
shiftOut(DATA, CLOCK, LSBFIRST, *(temp + j));
}
digitalWrite(LATCH, HIGH);
delay(1000);
}
digitalWrite(LATCH, LOW);
for (int j = 0; j < HC595_count; j++)
{
shiftOut(DATA, CLOCK, LSBFIRST, *(temp + j));
}
digitalWrite(LATCH, HIGH);
delay(1000);
}
Giải thích
HC595_count chính là số lượng IC 74HC595 đang dùng.
Hàm shiftOut() chỉ có thể dịch 1 lần 8bit mà thôi. Ở đây ta đang dùng đến 16 bit, tức là một biến 2 byte, nên ở đây tôi dùng unsigned int là một biến 2 byte không dấu. Khi i đạt đến giá trị 16 384 – 0100 0000 0000 0000 thì thoát vòng lặp, nên bạn để ý bên dưới tôi tiếp tục dịch i qua trái thêm một lần nữa để có giá trị là 32 768 – 1000 0000 0000 0000, để có thể hiển thị đèn LED cuối cùng.
BÀI VIẾT LIÊN QUANXEM THÊM
Giao tiếp module điều khiển động cơ bước TMC2208 với Arduino
Giao tiếp màn hình OLED SSD1306 0.96 với ESP8266 NodeMCU theo chuẩn I2C
Mạch nguồn điều chỉnh điện áp dùng IC LM317
BÌNH LUẬN Hủy trả lời
Vui lòng nhập bình luận của bạn Vui lòng nhập tên của bạn ở đây Bạn đã nhập một địa chỉ email không chính xác! Vui lòng nhập địa chỉ email của bạn ở đâyLưu tên, email và trang web của tôi trong trình duyệt này cho lần tiếp theo tôi nhận xét.
KHO EBOOK KỸ THUẬT ĐIỆN - ĐIỆN TỬ
BÀI VIẾT MỚI NHẤT
Mạch nhắc nhở tự động
Nguyễn Hữu Phước - 9 Tháng 12, 2025 0
Mạch điều khiển đèn bằng âm thanh
Nguyễn Hữu Phước - 31 Tháng 10, 2025 0
Giáo trình Mạch điện – Tài liệu học tập chuẩn dành...
Nguyễn Hữu Phước - 22 Tháng 10, 2025 0
Giáo trình điều khiển và lập trình với Arduino Uno
Nguyễn Hữu Phước - 14 Tháng 10, 2025 0
Giáo trình Điện tử công suất
Nguyễn Hữu Phước - 8 Tháng 10, 2025 0BÀI VIẾT NỔI BẬT
Nhận biết màu sắc dùng cảm biến màu TCS3200
19 Tháng 10, 2020
Hướng dẫn lập trình ESP8266 NodeMCU dùng Arduino IDE
6 Tháng 3, 2021
Hướng dẫn cài đặt Proteus 8.9 không bị lỗi tự tắt
9 Tháng 6, 2020
Điều khiển động cơ servo sử dụng Arduino
31 Tháng 10, 2018
Mạch bàn phím đơn giản dùng IC 74LS147
22 Tháng 5, 2019 Xem thêmTÀI LIỆU - GIÁO TRÌNH
Giáo trình Mạch điện – Tài liệu học tập chuẩn dành cho sinh viên kỹ thuật
Nguyễn Hữu Phước - 22 Tháng 10, 2025 0
Giáo trình điều khiển và lập trình với Arduino Uno
Nguyễn Hữu Phước - 14 Tháng 10, 2025 0
Giáo trình Điện tử công suất
Nguyễn Hữu Phước - 8 Tháng 10, 2025 0
Download phần mềm Fritzing
Nguyễn Hữu Phước - 9 Tháng 7, 2023 0
Tài liệu hướng dẫn sử dụng Altium Designer
Nguyễn Hữu Phước - 25 Tháng 4, 2022 0KÊNH YOUTUBE ĐIỆN TỬ VIỆT
Chào các bạn! Website này được tạo ra nhằm mục đích chia sẽ miễn phí những kiến thức liên quan đến lĩnh vực điện tử và IoT, giúp bạn học hỏi, khám phá và ứng dụng công nghệ dễ dàng hơn mỗi ngày. Chúng tôi luôn trân trọng mọi ý kiến đóng góp để cùng xây dựng một cộng đồng yêu công nghệ ngày càng lớn mạnh. Cảm ơn bạn đã đồng hành cùng Điện Tử Việt!Liên hệ chúng tôi: [email protected] DANH MỤC NỔI BẬT
- Hướng dẫn48
- Arduino41
- Điện tử cơ bản29
- IoT - Internet of Things25
- Điện tử công suất24
- Linh kiện điện tử23
- Sách điện tử18
- Điện tử ứng dụng18
KÊNH YOUTUBE ĐIỆN TỬ VIỆT
© Copywright 2025 - Điện Tử Việt NHIỀU BÀI VIẾT HƠN
Mạch nhắc nhở tự động
Nguyễn Hữu Phước - 9 Tháng 12, 2025 0 Mạch nhắc nhở tự động đang trở thành một giải pháp hết sức cần thiết trong môi trường làm việc hiện đại, nơi nhiều... Thanh Liên Hệ Nổi- Chat Zalo
- Gọi điện
- Messenger
- Telegram
Từ khóa » Cách Sử Dụng 74hc595
-
Cách Sử Dụng 74HC595 - Mobitool
-
IC 74HC595 Là Gì, Sơ đồ Chân, Cách Sử Dụng, Datasheet
-
Cách Dùng 74HC595 - CHIPN24.COM
-
8051 | Bài 6 - Hướng Dẫn Sử Dụng IC GHI DỊCH 74HC595 - Part 1
-
74hc595 Là Gì ? Hướng Dẫn Sử Dụng IC 74hc595 - Học Wiki
-
Cách Sử Dụng 74HC595 - Học Điện Tử - Blog OLP Tiếng Anh
-
Arduino Với IC 74HC595 — Điện Tử Ứng Dụng
-
Arduino: điều Khiển Nhiều LED Dùng IC 74HC595 | Anh Nguyễn
-
Cách Sử Dụng 74Hc595 — Điện Tử Ứng Dụng, Giao Tiếp Với Ic Ghi ...
-
Tìm Hiểu Cách Sử Dụng IC 74HC595 Trong Việc Hiển Thị Số Với LED 7 ...
-
[Kiến Thức] IC Thanh Ghi Dịch 74HC595 Giao Tiếp Với Arduino
-
Lập Trình LCD 1602 Với Chip 74HC595 | Cộng đồng Arduino Việt Nam
-
Giao Tiếp Với IC Ghi Dịch 74HC595 - Thiết Kế Mạch Điện Tử
-
Cách Sử Dụng 74HC595 - Mobitool - CungDayThang.Com