Tình hình là mình đã đọc vài bài viết trên diễn đàn về con ic 74hc595 nhưng vẫn chưa hình dung được hết cách truyền dữ liệu 2 byte trở lên vào con này thế nào.Ví dụ như mình muốn điều khiển 2 led matrix 8x8 dùng 2 con 74hc595 đưa dữ liệu từ 89c51 hiển thị ra led ma trận.Ở đây mình muốn hiển thị 2 chử A và B chạy ngang .Mong các anh chị diễn đàn giúp đỡ về code và giải thuật thế nào.Mình đang học code c nên chỉ biết code C và chưa tìm hiểu về timer và ngắt nên chỉ dùng được hàm delay ^^.
Thông báo
Collapse
No announcement yet.
Cần ACE giúp đỡ về ic 74hc595
Collapse
X
-
Vào mà đọc nguyên lý của 595
IC ghi dịch 74HC595
Matrix có số cột lớn người ta sẽ quét hàng để đảm bảo độ sáng của led lớn hơn 50%
-
Cảm ơn anh chung nha nhưng thực sự mình chỉ biết cách đưa dữ liệu 1 byte vào đó thôi còn 2 byte thì chưa biết cách làm sao để chốt để có thể đưa tiếp byte tiếp theo.Anh có thể viết 1 ví dụ bằng code c về cách dịch 2 byte không ?.Cám ơn anh nhiều ^^.Nguyên văn bởi chung1608 Xem bài viếtVào mà đọc nguyên lý của 595
IC ghi dịch 74HC595
Matrix có số cột lớn người ta sẽ quét hàng để đảm bảo độ sáng của led lớn hơn 50%
Comment
-
khi kết nối nhiều 595, ta quang tâm số lượng cổng ra cảu tất cả 595. Ví dụ: nếu bạn kết nối 2 con 595 ta sẽ dịch 16 bit ra cho 595.Nguyên văn bởi phanthienvu Xem bài viếtCảm ơn anh chung nha nhưng thực sự mình chỉ biết cách đưa dữ liệu 1 byte vào đó thôi còn 2 byte thì chưa biết cách làm sao để chốt để có thể đưa tiếp byte tiếp theo.Anh có thể viết 1 ví dụ bằng code c về cách dịch 2 byte không ?.Cám ơn anh nhiều ^^.
4 con 595 thì i<32 cứ như thế. Mỗi lần dịch nó sẽ tràn đẩy hết giá trị của lần dịch trước nên ko cần xóa trước khi dịchCode:for(i=0;i<16;i++){ DATAS=cái gì đó; CLOCK=0; CLOCK=1; } LATCH=0; LACTH=1;
Comment
-
HI.Cuối cùng thì mình cũng hình dung ra được.Không ngờ nó đơn giản vậy.Mình có code này mong anh Chung xem nhé.Nguyên văn bởi chung1608 Xem bài viếtkhi kết nối nhiều 595, ta quang tâm số lượng cổng ra cảu tất cả 595. Ví dụ: nếu bạn kết nối 2 con 595 ta sẽ dịch 16 bit ra cho 595.
4 con 595 thì i<32 cứ như thế. Mỗi lần dịch nó sẽ tràn đẩy hết giá trị của lần dịch trước nên ko cần xóa trước khi dịchCode:for(i=0;i<16;i++){ DATAS=cái gì đó; CLOCK=0; CLOCK=1; } LATCH=0; LACTH=1;
#include"regx52.h"
sbit DATA = P2^1;
sbit SCK = P2^0;
sbit SCL = P2^2;
void quet(unsigned char x)
{int i,temp;
for(i=0;i<8;i++)
{temp=x;//gan bien
temp=temp&0x80;//lay ra bit dau tien (bit 7)
if(temp==0x80)//so sanh bit
DATA=1; //bang 1 thi xuat vao chip =1
else
DATA=0; //nguoc lai bang 0
x*=2; //dich bit lay bit trong so thap
SCK=0; //tao xung tren chan 11
SCK=1; //1 xung dua vào 1 bít
}SCL=0; //xuat du lieu ra output
SCL=1;}
Như vậy để có thể xuất 16 bit thì mình sẽ đổi số 8 bằng số 16 và 0x80 bằng 0x8000 phải không anh?
Comment
-
led ma trận nếu từ 8x16 trở lên bạn nên quét hàng vì nếu quét cột số cột nhiều thì thời gian tích cực của 1 cột quá ngắn ko thể làm led sáng thậm chí là có thể led sẽ ko sáng.Nguyên văn bởi phanthienvu Xem bài viếtHI.Cuối cùng thì mình cũng hình dung ra được.Không ngờ nó đơn giản vậy.Mình có code này mong anh Chung xem nhé.
#include"regx52.h"
sbit DATA = P2^1;
sbit SCK = P2^0;
sbit SCL = P2^2;
void quet(unsigned char x)
{int i,temp;
for(i=0;i<8;i++)
{temp=x;//gan bien
temp=temp&0x80;//lay ra bit dau tien (bit 7)
if(temp==0x80)//so sanh bit
DATA=1; //bang 1 thi xuat vao chip =1
else
DATA=0; //nguoc lai bang 0
x*=2; //dich bit lay bit trong so thap
SCK=0; //tao xung tren chan 11
SCK=1; //1 xung dua vào 1 bít
}SCL=0; //xuat du lieu ra output
SCL=1;}
Như vậy để có thể xuất 16 bit thì mình sẽ đổi số 8 bằng số 16 và 0x80 bằng 0x8000 phải không anh?
- Để quét hàng thì bạn sử dụng 1 phần mềm dịch mã ma trận và dịch ra 1 bảng tra theo cột.
- Tiếp theo, ví dụ bạn có 16 cột, bạn sẽ nạp vào 1 vùng RAM 16 giá trị của bảng mã. Khi dịch, bạn dịch 16 bit ra cho 595 với các bit theo vị trí theo hàng. Ví dụ bảng 16 giá trị thì bạn dịch hết bit đầu tiên của 16 giá trị vào hàng 1, rồi bạn dịch bit thứ 2 của 16 giá trị vào hàng 2 cứ thế cho cả 8 bit.
Bạn có thể xem ví dụ dưới mình viết cho ATmega 8x40
Code:#include "tableMT.c" sfr io unsigned short ROW absolute 0x38; //PORTB sbit SH at PORTC0_bit; sbit DS at PORTC1_bit; sbit EO at PORTC2_bit; const int lens=400; char m; unsigned int start_addr; char tempR[100] absolute 500; void shift595(); void copy_to_ram(); void main() { DDRC=0b00010111; PORTC=0xFF; DDRB=0xFF; ROW=0xFF; delay_ms(500); while(1){ start_addr=0; while(start_addr<lens){ for(m=0;m<2;m++){ copy_to_ram(); shift595(); } start_addr++; } } } void shift595(){char i,j; SH=0;EO=0; j=0x80; while(j!=0){ for(i=0;i<40;i++){ DS=tempR[i]; SH=1; SH=0; tempR[i]=tempR[i]>>1; } EO=1;EO=0; ROW=j; j=j>>1; delay_ms(2); ROW=0; } } void copy_to_ram(){short i;unsigned int L; L=start_addr; for(i=0;i<40;i++) tempR[i]=table[L++]; }Attached Files
Comment
Bài viết mới nhất
Collapse
-
bởi FotiniChào mọi người.
Cấu trúc khung giàn của tôi sử dụng một động cơ servo tích hợp trên mỗi trục (https://www.oyostepper.es/category-8...integrado.html), với một dây nối đất chung.
Việc kích hoạt từng trục riêng lẻ hoạt động tốt, nhưng...-
Channel: Điện tử dành cho người mới bắt đầu
18-06-2026, 14:03 -
-
Trả lời cho Cấu hình chiến game "quốc dân" cho nền tảng AM5: Lựa chọn tối ưu ngân sách với Ryzen 5 7500Fbởi kumarbrMình đồng ý với hướng build AM5 bằng 7500F, nhưng nếu có thể cố thêm ngân sách thì nên lên RX 7600 ngay từ đầu. 4GB VRAM của RX 6500 XT bắt đầu khá chật với nhiều game mới, còn RX 7600 sẽ dùng thoải mái hơn trong vài năm tới.
-
Channel: Đánh giá sản phẩm DTVN
16-06-2026, 15:49 -
-
bởi theidiotcatTrong thời buổi vật giá leo thang, việc sắm một bộ máy tính chơi game đáp ứng đủ tiêu chí "ngon, bổ, rẻ" là ưu tiên hàng đầu của nhiều bạn trẻ. Lúc này, combo sử dụng vi xử lý AMD Ryzen 5 7500F kết hợp cùng card màn hình Radeon...
-
Channel: Đánh giá sản phẩm DTVN
16-06-2026, 10:16 -
-
bởi theidiotcatAMD Ryzen 9 9950X3D không chỉ là một bộ vi xử lý đơn thuần; nó là lời khẳng định về sức mạnh của kiến trúc Zen 5 kết hợp cùng công nghệ 3D V-Cache đột phá. Trong bối cảnh thị trường linh kiện PC cạnh tranh khốc liệt, đây được xem...
-
Channel: Đánh giá sản phẩm DTVN
15-06-2026, 09:21 -
-
bởi theidiotcatBộ đôi Ryzen 9 9950X3D2 và Radeon RX 9070 XT 16GB là sự kết hợp phần cứng cao cấp nhất của AMD hiện nay. Đây không chỉ là một dàn máy tính để giải trí thông thường, mà là công cụ làm việc mạnh mẽ dành cho những ai có nhu cầu xử lý cường...
-
Channel: Đánh giá sản phẩm DTVN
15-06-2026, 09:09 -
-
bởi theidiotcatKhi ráp một bộ máy tính cấu hình cao, việc cân đối ngân sách cho từng linh kiện là rất quan trọng. Sự kết hợp giữa vi xử lý AMD Ryzen thế hệ mới có công nghệ 3D V-Cache và card đồ họa Radeon RX 9070 XT đang là lựa chọn rất đáng tiền....
-
Channel: Đánh giá sản phẩm DTVN
11-06-2026, 10:43 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Giới thiệu bản nhạc đệm mới nhộn nhịp tươi vui, nghe là muốn... xuất gia đi tu liền!!!!😁...
-
Channel: Tâm tình dân kỹ thuật
11-06-2026, 09:51 -

Comment