Em muốn dùng 595 để quét 6 con LED 7 nhưng loay hoay ko biết làm cách nào để on rồi off trên từng chân 595 nối với LED 7.Các bác giúp cho em đoạn Code on off chắc em hiểu luôn.
Thông báo
Collapse
No announcement yet.
Ai có thể chỉ giúp em cách dùng 74hc595 để quét LED 7 thanh
Collapse
X
-
Tưởng gì! chip AT đây mà! Dễ ợt!Nguyên văn bởi vuquangpsoc Xem bài viếtEm muốn dùng 595 để quét 6 con LED 7 nhưng loay hoay ko biết làm cách nào để on rồi off trên từng chân 595 nối với LED 7.Các bác giúp cho em đoạn Code on off chắc em hiểu luôn.
Nhưng mà mình không biết!
Bạn xem cái file kèm theo nhé!
Nó trong cái này:
http://www.attiny.com/7segments.htmAttached Files
-
cảm ơn anh nhiều.Nguyên văn bởi mrgiang99 Xem bài viếtTưởng gì! chip AT đây mà! Dễ ợt!
Nhưng mà mình không biết!
Bạn xem cái file kèm theo nhé!
Nó trong cái này:
http://www.attiny.com/7segments.htmMobile: 0914.658.856
Yahoo: quang85_2004
Comment
-
Dùng 6 con 595.
Cách kết nối:
- Các chân shcp và stcp nối chung với nhau và nối vào vi điều khiển.
- Chân DS của 595 đầu tiên nối vào một chân của vi điều khiển để đưa dữ liệu dạng nối tiếp ra ngoài.
- Chân DS của 595 thứ 2 nối vào chân D7' của 595 thứ nhất.
- Chân DS của 595 thứ 3 nối vào chân D7' của 595 thứ 2.
....................
- Chân DS của 595 thứ 6 nối vào chân D7' của 595 thứ 5.
Đây là một ví dụ để dịch giá trị của biến data ra các chân D0-->D7 của 595.
void shift_out(unsigned char data)
{
unsigned char i;
unsigned int k;
k=128;
for(i=0;i<8;i++)
{
if((data & k)==k)
DS=1;
else
DS=0;
SHCP=0;
SHCP=1;
STCP=1;
STCP=0;
k >>= 1;
}
}
Comment
-
Anh hungnp cho em hỏi em làm như sau có đúng ko.Nguyên văn bởi hungnp Xem bài viếtDùng 6 con 595.
Cách kết nối:
- Các chân shcp và stcp nối chung với nhau và nối vào vi điều khiển.
- Chân DS của 595 đầu tiên nối vào một chân của vi điều khiển để đưa dữ liệu dạng nối tiếp ra ngoài.
- Chân DS của 595 thứ 2 nối vào chân D7' của 595 thứ nhất.
- Chân DS của 595 thứ 3 nối vào chân D7' của 595 thứ 2.
....................
- Chân DS của 595 thứ 6 nối vào chân D7' của 595 thứ 5.
Đây là một ví dụ để dịch giá trị của biến data ra các chân D0-->D7 của 595.
shift_out(dữ liệu cho LED 6);
shift_out(dữ liệu cho LED 5);
shift_out(dữ liệu cho LED 4);
shift_out(dữ liệu cho LED 3);
shift_out(dữ liệu cho LED 2);
shift_out(dữ liệu cho LED 1);
led6=1;delay_us(500);led6=0;
led5=1;delay_us(500);led5=0;
led4=1;delay_us(500);led4=0;
led3=1;delay_us(500);led3=0;
led2=1;delay_us(500);led2=0;
led1=1;delay_us(500);led1=0;
với led6,....,led1 là các chân Anode chung của các led.Em nghĩ là phải xuất dữ liệu cho 595 liên tục như trên mới đc và dữ liệu đầu tiên xuất sẽ nằm ở con 595 cuối cùng đúng ko anh.
với 595 thì ko làm theo kiểu này đc đúng ko anh?
shift_out(dữ liệu cho LED 6);
led6=1;delay_us(500);led6=0;
shift_out(dữ liệu cho LED 5);
led5=1;delay_us(500);led5=0;
..........................
led1=1;delay_us(500);led1=0;
shift_out(dữ liệu cho LED 1);
Rất mong anh cho ý kiến.Mobile: 0914.658.856
Yahoo: quang85_2004
Comment
-
Không hiểu bạn định quét led hay cấp nguồn cố định?
Nếu cấp nguồn cố định led bạn dùng phải là led đơn. Các Anode của led được nối lên nguồn qua một trở hạn dòng còn 7 Katot của led và dot được nối vào 8 chân song song của 595.
Nếu dùng pp Quét led thì mạch in sẽ đơn giản hơn, Không cần dùng 595, Nhưng viết code sẽ vất vả hơn nếu chip phải làm nhiều nhiệm vụ.
Comment
-
Vì em muốn quét LED 7 thanh mà anh em muốn quét 20 con LED 7 thanh cơ nếu ko dùng 595 thì ko đủ chân vì em còn fải dùng chân VĐK làm việc khác nữa.Lần trước em cứ nghĩ là dùng 595 nối vào Anode hoặc Cathode chung của LED 7 thanh để on/off cơ nhưng em thấy mọi người toàn hướng dẫn là dùng 595 để xuất dữ liệu nếu xuất dữ liệu thì cũng tiết kiệm được chân.Anh xem kỹ lại thắc mắc của em bên trên.Em rất cảm ơn anh.Em nghĩ anh có thể giúp đc em mà.Nguyên văn bởi hungnp Xem bài viếtKhông hiểu bạn định quét led hay cấp nguồn cố định?
Nếu cấp nguồn cố định led bạn dùng phải là led đơn. Các Anode của led được nối lên nguồn qua một trở hạn dòng còn 7 Katot của led và dot được nối vào 8 chân song song của 595.
Nếu dùng pp Quét led thì mạch in sẽ đơn giản hơn, Không cần dùng 595, Nhưng viết code sẽ vất vả hơn nếu chip phải làm nhiều nhiệm vụ.Mobile: 0914.658.856
Yahoo: quang85_2004
Comment
-
Thế này bạn ạ, thường đã dùng 595 để hiển thị LED 7 thanh thì ít ai dùng PP quét cả. Vì mỗi con 595 - 8 cổng ra nối luôn 8 LED của LED 7 thanh rồi, 20 con LED 7 thanh thì hết 20 con 595. Nối tiếp data 3 con này lại , CLK và STR nối chung. Như vậy VĐK chỉ tốn có 3 chân mà code lại gọn, trong lúc hiển thị giá trị hiện tại thì VĐK vẫn làm được việc khác.Nguyên văn bởi vuquangpsoc Xem bài viếtVì em muốn quét LED 7 thanh mà anh em muốn quét 20 con LED 7 thanh cơ nếu ko dùng 595 thì ko đủ chân vì em còn fải dùng chân VĐK làm việc khác nữa.Lần trước em cứ nghĩ là dùng 595 nối vào Anode hoặc Cathode chung của LED 7 thanh để on/off cơ nhưng em thấy mọi người toàn hướng dẫn là dùng 595 để xuất dữ liệu nếu xuất dữ liệu thì cũng tiết kiệm được chân.Anh xem kỹ lại thắc mắc của em bên trên.Em rất cảm ơn anh.Em nghĩ anh có thể giúp đc em mà.
Còn nếu bạn vẫn muốn dùng 595 để quét LED - giảm chân nối với VĐK thì bạn làm như sau:
-1 con 595 nối 8 cổng ra // với 8 LED của 20 con LED 7 thanh.
-3 con 595 có 24 cổng ra - bạn dùng 20 cổng để làm on-off chọn LED ( có thể thêm transitor).
cả 4 con này nối tiếp nhau, con 595 để nối // với 20 LED 7 thanh có thể đặt ở đầu hoặc cuối dẫy 595.
trong VĐK bạn làm bộ đệm 4 byte, Mỗi lần quét bạn đặt lại byte dữ liệu và các byte chọn LED (on-off) và dùng 4 lần shift_out để đưa dữ liệu ra. Bạn lặp 20 lần là quét đủ 20 LED-hix tốn thời gian lắm đấy.
Ví dụ: con 595 để nối // với 20 LED 7 thanh đặt ở đầu
cho sáng con LED đầu- dữ liệu xếp như sau:
10101010b(dữ liệu),0,0,00000001b
cho sáng con LED 2- dữ liệu xếp như sau:
10101000b(dữ liệu),0,0,00000010b
....
email:mahaco@fpt.vn
Comment
-
Vậy cách thông thường mà anh nói là cách này đúng ko anh?Nguyên văn bởi hoctro89xxx Xem bài viếtThế này bạn ạ, thường đã dùng 595 để hiển thị LED 7 thanh thì ít ai dùng PP quét cả. Vì mỗi con 595 - 8 cổng ra nối luôn 8 LED của LED 7 thanh rồi, 20 con LED 7 thanh thì hết 20 con 595. Nối tiếp data 3 con này lại , CLK và STR nối chung. Như vậy VĐK chỉ tốn có 3 chân mà code lại gọn, trong lúc hiển thị giá trị hiện tại thì VĐK vẫn làm được việc khác.
....
Dùng 6 con 595.
Cách kết nối:
- Các chân shcp và stcp nối chung với nhau và nối vào vi điều khiển.
- Chân DS của 595 đầu tiên nối vào một chân của vi điều khiển để đưa dữ liệu dạng nối tiếp ra ngoài.
- Chân DS của 595 thứ 2 nối vào chân D7' của 595 thứ nhất.
- Chân DS của 595 thứ 3 nối vào chân D7' của 595 thứ 2.
....................
- Chân DS của 595 thứ 6 nối vào chân D7' của 595 thứ 5.
Đây là một ví dụ để dịch giá trị của biến data ra các chân D0-->D7 của 595.
Vậy còn chân Anode/Cathode chung thì vẫn sử dụng như phương pháp quét thông thường hả anh mỗi chân chung nối với Tranzitor rồi nối với VĐK hả anh?Mobile: 0914.658.856
Yahoo: quang85_2004
Comment
-
e hiểu ý a là dùng tín hiệu nối tiếp (qua 1 chân) để hiển thị led nhưng vẫn dùng phương pháp quét chứ gì, làm thế làm gì cho phức tạp, sợ thiếu chân thì gắn thêm con mega8 nữa vào thực hiện riêng việc quét led cho thoải mái mà tốc độ lại nhanh, hơn nữa mình dễ dàng thay đổi (mềm)Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
-
Anh hungnp ơi
Em đã hiểu cách nối anh nói rồi như vậy là bi h em chỉ cần dùng shift_out() để xuất dữ liệu ra thôi đúng ko anh.
nếu dùng con 6 LED 7thanh thì xuất dữ liệu như thế này ạ
shift_out(dữ liệu cho LED 1);
delay_ms(100);//chẳng hạn
shift_out(dữ liệu cho LED 2);
delay_ms(100);
shift_out(dữ liệu cho LED 3);
delay_ms(100);
shift_out(dữ liệu cho LED 4);
delay_ms(100);
shift_out(dữ liệu cho LED 5);
delay_ms(100);
shift_out(dữ liệu cho LED 6);
delay_ms(100);
dữ liệu cho LED1 sẽ nằm ở con 595 cuối cùng còn dữ liệu cho LED6 sẽ nằm ở con 595 đầu tiên có chân DS nối với VĐK.Em hiểu thế này đã đúng chưa các anh.Em là người mới nên hỏi hơi nhiều mong mọi người thông cảm.Rất cảm ơn mọi người về sự giúp đỡ.Last edited by vuquangpsoc; 25-10-2008, 22:18.Mobile: 0914.658.856
Yahoo: quang85_2004
Comment
-
để dễ hiểu thì bạn nên làm cách này, dùng 1 port của VDK dể out data, còn mấy con 959 thì bạn cho nối vào chân anod hoặc catot của led 7 thanh, nếu bạn quét 20 led thì cần 3 con 595, cách quét thế này, đầu tiên bạn xuất data của led 1 ra port trước rồi sau đó cho dịch bit chọn led (có thể là 0 hoặc 1) vào rồi delay khoảng 50ms. rồi tiép tục xuất data của led 2 rồi cấp xung cho 959 dịch tiếp 1 lần rồi lại delay, rồi tiếp tục xuất data của led 3 rồi cấp xung cho 595 dịch tiếp...... đến con led thứ 20 xong bạn chỉ cần xóa dữ liệu trên các con 595 là được. thế là có thể quét được 20 con rồi. nếu bạn muón tiết kiệm chân của VDK nữa thì bạn thay việc xuất data ra port bằng cách thêm 1 con 959 rồi xuất data nối tiếp như cách xuất ở trên như vậy bạn cần tất cả 4 con 595 để quét được 20 con led 7 thanh và 4 chân của VDk, đây là cách tiết kiệm nhất rồi đấy. có thể thay con 595 bằng con 4094, con này dễ sử dụng và dễ mua hơn. chúc bạn thành công nhé.Nguyên văn bởi vuquangpsoc Xem bài viếtAnh hungnp ơi
Em đã hiểu cách nối anh nói rồi như vậy là bi h em chỉ cần dùng shift_out() để xuất dữ liệu ra thôi đúng ko anh.
nếu dùng con 6 LED 7thanh thì xuất dữ liệu như thế này ạ
shift_out(dữ liệu cho LED 1);
delay_ms(100);//chẳng hạn
shift_out(dữ liệu cho LED 2);
delay_ms(100);
shift_out(dữ liệu cho LED 3);
delay_ms(100);
shift_out(dữ liệu cho LED 4);
delay_ms(100);
shift_out(dữ liệu cho LED 5);
delay_ms(100);
shift_out(dữ liệu cho LED 6);
delay_ms(100);
dữ liệu cho LED1 sẽ nằm ở con 595 cuối cùng còn dữ liệu cho LED6 sẽ nằm ở con 595 đầu tiên có chân DS nối với VĐK.Em hiểu thế này đã đúng chưa các anh.Em là người mới nên hỏi hơi nhiều mong mọi người thông cảm.Rất cảm ơn mọi người về sự giúp đỡ.hãy cố gắng dù vướn phải thất bại!!!!!!!!
Comment
-
Trong hình vẽ của mình không sử dụng cho phương pháp quét led mà là cấp áp cố định cho led vì thế trong code cũng không delay_ms(100) mà dữ liệu được xuất ra liên tục. Byte đầu tiên sẽ được dịch ra con IC 595 cuối cùng.Nguyên văn bởi vuquangpsoc Xem bài viếtAnh hungnp ơi
Em đã hiểu cách nối anh nói rồi như vậy là bi h em chỉ cần dùng shift_out() để xuất dữ liệu ra thôi đúng ko anh.
nếu dùng con 6 LED 7thanh thì xuất dữ liệu như thế này ạ
shift_out(dữ liệu cho LED 1);
delay_ms(100);//chẳng hạn
shift_out(dữ liệu cho LED 2);
delay_ms(100);
shift_out(dữ liệu cho LED 3);
delay_ms(100);
shift_out(dữ liệu cho LED 4);
delay_ms(100);
shift_out(dữ liệu cho LED 5);
delay_ms(100);
shift_out(dữ liệu cho LED 6);
delay_ms(100);
dữ liệu cho LED1 sẽ nằm ở con 595 cuối cùng còn dữ liệu cho LED6 sẽ nằm ở con 595 đầu tiên có chân DS nối với VĐK.Em hiểu thế này đã đúng chưa các anh.Em là người mới nên hỏi hơi nhiều mong mọi người thông cảm.Rất cảm ơn mọi người về sự giúp đỡ.
Nếu chương trình của bạn phải làm nhiều nhiệm vụ khác thì nên sử dụng pp này, nó vừa tiết kiệm chân cho vi điều khiển, vi điều khiển làm các việc khác mà không ảnh hưởng đến led(Led không nháy). Tuy nhiên, sẽ tốn nhiều IC và mạch cũng cồng kềnh hơn, Tùy vào ứng dụng của bạn để chọn pp nào cho hợp lý. Nếu dùng pp quét thì làm như bài viết phía trên.
Comment
-

mình làm theo mạch vẽ bên trên, code đơn giản thử cái cho nó hiện từ 0..9 rồi quay lại 0
chạy trên Proteus thì ok, ko hiểu sao lúc lắp mạch thật nó ko thể hiện đúng được số,thi thoảng mới hiện được 1 số. đã check đi check lại, bảo đảm ko lắp sai chân. Ko biết có phải do linh kiện mua chợ zời nó thế ko (thử 2 con 74HC595 rồi vẫn ko được)Code:/***************************************************** This program was produced by the CodeWizardAVR V1.25.9 Standard Automatic Program Generator © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 4/6/2009 Author : HoangNQ Company : hn Comments: Chip type : ATmega8 Program type : Application Clock frequency : 8.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega8.h> #include <delay.h> #define DS PORTC.0 #define SHCP PORTC.1 #define STCP PORTC.2 void shift_out(unsigned char data) { unsigned char i; unsigned int k; k=128; //k=1000 0000 for(i=0;i<8;i++) { if((data & k)==0) DS=0; else DS=1; SHCP=0; //delay_us(100); SHCP=1; k>>=1; } STCP=0; //delay_us(100); STCP=1; } void shift_number(unsigned char x)// Ham dua chu so ra led { switch(x) // Tuy thuoc vao bien dau vao ma dua du lieu ra tu 0...9 { case 0: { shift_out(0xC0); break; } // So 0 case 1: { shift_out(0xF9); break; } // So 1 case 2: { shift_out(0xA4); break; } // So 2 case 3: { shift_out(0xB0); break; } // So 3 case 4: { shift_out(0x99); break; } // So 4 case 5: { shift_out(0x92); break; } // So 5 case 6: { shift_out(0x82); break; } // So 6 case 7: { shift_out(0xF8); break; } // So 7 case 8: { shift_out(0x80); break; } // So 8 case 9: { shift_out(0x90); break; } // So 9 } } // Declare your global variables here void main(void) { // Declare your local variables here unsigned char count = 0; // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0x00; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x07; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; while (1) { // Place your code here count++; if(count>9) count = 0; shift_number(count); delay_ms(100); }; }
nghi ngờ tần số con 595 ko tương thích với cái đoạn lật chân SHCP,STCP , cho thêm cái delay vào nhưng mà tình hình vẫn thế
ai chỉ giúp mình với|
Comment
Bài viết mới nhất
Collapse
-
bởi Abril9Chào mọi người, động cơ bước có hộp số (https://www.oyostepper.es/category-2...eductores.html) trên thiết bị của tôi đã được sử dụng khoảng sáu tháng. Gần đây, tôi nhận thấy dầu rò rỉ từ trục đầu ra. Mỡ bôi trơn đã bị chảy và nhỏ giọt...
-
Channel: Các hệ thống tự động hóa khác
Hôm qua, 13:26 -
-
bởi AbirChào mọi người, gần đây tôi có một ý tưởng mới.
Tôi muốn nâng cấp thiết bị của mình để tăng tốc độ, vì vậy tôi đã thay đổi nguồn cấp cho mạch điều khiển từ 24V lên 48V. Động cơ vẫn giữ nguyên và dòng điện định...-
Channel: Điện tử công nghiệp
Hôm qua, 09:49 -
-
bởi nguyendinhvanCó một chi tiết sai cơ bản trong kỹ thuật điện tử....
-
Channel: Tâm tình dân kỹ thuật
26-03-2026, 19:31 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Bài hát mới, nhạc Phật: Về Giữa Chiêm Bao, sáng tác: Hoàng Đình Thường.
[Verse 1] Nhân gian bao thay đổi
ĐỜI là giấc CHIÊM BAO
Người mê lầm tranh đấu
KHỔ ĐAU mãi LUÂN HỒI.
VÔ THƯỜNG nào ai thấu
THAM vơ...-
Channel: Tâm tình dân kỹ thuật
25-03-2026, 19:01 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi davidcopyBạn muốn hỏi nguyên lý làm việc của mạch nào...
-
Channel: Hỗ trợ học tập
24-03-2026, 22:50 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi N_Tu_Hoc_HoiBạn cần sơ đồ mạch ổn áp bao nhiêu Volt, Nếu giống anh bạn guiwr có khả năng ổn áp dùng iC họ 78XX, 79XX. Những mạch này bạn tim kiếm trên google sẽ thấy!!
-
Channel: Hỗ trợ học tập
23-03-2026, 02:32 -
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:03 -

Comment