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
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment