[Help] 16 led đơn + 4 nút nhấn => 4 chương trình chạy led ATMEGA32
Collapse
X
-
-
Em dùng codevision bác ơi . Em lấy ví dụ như thế này nha
Bấm nút 1 thì led dịch từ trái sang phải . Delay 100 ms chẳng hạn
Bấm nút 2 thì led dịch từ phải sang trái .
Bấm nút 3 thì led nhấp nháy
Bấm nút 4 thì led sáng so le
Em chỉ bí cái phần ngắt ngoài cho nút bấm thôi . Làm đến 4 nút . Còn chương trình cho led thì em có thể viết đc .
Comment
-
Cái này không cần tới ngắt ngoài đâu bạn
như vầy nha: số chân mà nối với led thì khai báo trong CV là PORT...=0xFF; PIN...=0xFF;// khai báo như vầy có nghĩa là bạn hứơng ra.
số chân mà nối với nút nhấn thì khai báo là PORT...=0xFF; PIN...=0x00;//khai báo như vầy là hứơg vào.
Bạn thấy 2 dòng khác đúng chỗ PIN cái này là khai báo chân I/O của avr nha bạn. Cái này không khó nhưng nếu không cận là nhầm đó.
Chào bạn
PS:Mình viết = đt bạn chịu khó đọc nha.
Comment
-
Thử làm thế này xem bạn:Nguyên văn bởi bbbooo Xem bài viếtEm dùng codevision bác ơi . Em lấy ví dụ như thế này nha
Bấm nút 1 thì led dịch từ trái sang phải . Delay 100 ms chẳng hạn
Bấm nút 2 thì led dịch từ phải sang trái .
Bấm nút 3 thì led nhấp nháy
Bấm nút 4 thì led sáng so le
Em chỉ bí cái phần ngắt ngoài cho nút bấm thôi . Làm đến 4 nút . Còn chương trình cho led thì em có thể viết đc .
Sử dụng một biến x để lưu trạng thái nút bâm. vd khi bấm nút 1 thì gán x=1, nút 2 thì x=2... , nut 4 thì x=4, sau đó kiểm tra điều kiện nếu x==1 thì cho chạy chương trình nhấp nháy, nếu x==2 thì sáng dồn trái, x==3 dồn phải... Vậy là có thể điều khiển được 4 chương trình với 4 nút bấm.
Comment
-
dạ để em thử xem sao ạ . Mà bác để ý là cái nút bấm 1 ngõ chung là INT0 là ngắt ngoài và 1 đầu là nối a b c d tương ứng với PORTB.0 PORTB.1 PORTB.2 ... em đang muốn viết 1 chương trình như vậy . Mà suy nghĩ hoài cũng không ra . Mong bác giúp đỡ .Nguyên văn bởi caonhan_2004 Xem bài viếtThử làm thế này xem bạn:
Sử dụng một biến x để lưu trạng thái nút bâm. vd khi bấm nút 1 thì gán x=1, nút 2 thì x=2... , nut 4 thì x=4, sau đó kiểm tra điều kiện nếu x==1 thì cho chạy chương trình nhấp nháy, nếu x==2 thì sáng dồn trái, x==3 dồn phải... Vậy là có thể điều khiển được 4 chương trình với 4 nút bấm.
Comment
-
oh. giờ mới để ý cái sơ đồ của bạn. Đặc biệt quá, mình không hiểu bạn phức tạp hóa làm gì? và cái sơ đồ của bạn mình cũng không nghĩ ra cách gì ( có lẽ là "độc".Nguyên văn bởi bbbooo Xem bài viếtdạ để em thử xem sao ạ . Mà bác để ý là cái nút bấm 1 ngõ chung là INT0 là ngắt ngoài và 1 đầu là nối a b c d tương ứng với PORTB.0 PORTB.1 PORTB.2 ... em đang muốn viết 1 chương trình như vậy . Mà suy nghĩ hoài cũng không ra . Mong bác giúp đỡ .
) ...
Comment
-
Phải trái >> trái phải 1s zzz
Have Fun !Code:#ifndef F_CPU #define F_CPU 12000000UL // 12 MHz #endif #include <avr/io.h> #include "interrupt.h" unsigned int val=1; unsigned char x=0; void phai_trai() { PORTA = val; PORTB = val >> 8; val =val/2; if (val == 0) val=0x8000; } void trai_phai() { PORTA = val; PORTB = val >> 8; val*=2; if (!val) val=1; } int main(void){ DDRA=0xFF; PORTA=0x00; DDRB=0xFF; PORTB=0x00; PORTC=0xFF; DDRC=0x00; PORTD=0xFF; DDRD=0x00; MCUCR |=(1<<ISC01); GICR |=(1<<INT0); //---------------------------------- TCCR1B = (1<<CS12); TIMSK |= (1<<TOIE1); TCNT1 = 0x85ED; sei(); while(1){ } return 0; } ISR (INT0_vect){ if(!(PINC &(1<<0))){ x=1;val=1;} if(!(PINC &(1<<1))){ x=2;val=0x8000;} } ISR (TIMER1_OVF_vect){ TCNT1 = 0x85ED; if(x==1){phai_trai();} if(x==2){trai_phai();} }Attached Files
Comment
-
Nguyên văn bởi dorothy Xem bài viếtPhải trái >> trái phải 1s zzz
Have Fun !Code:#ifndef F_CPU #define F_CPU 12000000UL // 12 MHz #endif #include <avr/io.h> #include "interrupt.h" unsigned int val=1; unsigned char x=0; void phai_trai() { PORTA = val; PORTB = val >> 8; val =val/2; if (val == 0) val=0x8000; } void trai_phai() { PORTA = val; PORTB = val >> 8; val*=2; if (!val) val=1; } int main(void){ DDRA=0xFF; PORTA=0x00; DDRB=0xFF; PORTB=0x00; PORTC=0xFF; DDRC=0x00; PORTD=0xFF; DDRD=0x00; MCUCR |=(1<<ISC01); GICR |=(1<<INT0); //---------------------------------- TCCR1B = (1<<CS12); TIMSK |= (1<<TOIE1); TCNT1 = 0x85ED; sei(); while(1){ } return 0; } ISR (INT0_vect){ if(!(PINC &(1<<0))){ x=1;val=1;} if(!(PINC &(1<<1))){ x=2;val=0x8000;} } ISR (TIMER1_OVF_vect){ TCNT1 = 0x85ED; if(x==1){phai_trai();} if(x==2){trai_phai();} }
Em cảm ơn bác đã giúp đỡ . Nhưng cho em hỏi ngu tý , hình như ko phải codevision phải không bác ? Có gì bác gửi cho em cái file proteus với . Em đọc mãi code của bác mà không biết nên để nút ấn ở đâu . Cảm ơn bác rất nhiều ạ !
Comment
-
full luôn nhé, có file mô phỏng trong đó rồi. trình biên dịch avrstudio6, proteus 8Nguyên văn bởi bbbooo Xem bài viếtEm cảm ơn bác đã giúp đỡ . Nhưng cho em hỏi ngu tý , hình như ko phải codevision phải không bác ? Có gì bác gửi cho em cái file proteus với . Em đọc mãi code của bác mà không biết nên để nút ấn ở đâu . Cảm ơn bác rất nhiều ạ !
Comment
-
Phần mềm "con bọ" chuyển sang CV không khó đâu bạn chắc mới học avr . CV lúc tạo project nó có sẵn những mục để bạn chọn vd như thạch anh , chip , timer bộ chia ...
Nhưng "con bọ" thì những chuyển đó bạn phải tự bật bit nào tắt bit nào phải = tay hết.
0ver
Comment
Bài viết mới nhất
Collapse
-
bởi ittcHic, sao nhiều anh em khuyên là đàn ông đã học thì học luôn số sàn chứ đừng học số tự động anh....-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 17:46 -
-
bởi mèomướp1. Tìm hiểu đc thì càng tốt, bận thì thôi. Ko cần quá quan trọng
2. Số tự động cho đơn giản, kiểu như đi xe ga ấy ạ
3. Học lý thuyết tử tế ok
4.ok
5.có. đủ số km, tgian cầm lái là đc
6.đi ăn tập thể,...-
Channel: Tâm tình dân kỹ thuật
14-08-2026, 16:34 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnE nhớ bác Vivanpham làm bên điện tử y sinh, có lần đó cái sơ đồ máy chụp x quang sao có mấy con thryristor làm gì mà ko ai trả lới đúng cả
...
-
Channel: Tâm tình dân kỹ thuật
07-08-2026, 09:17 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnBác kiểm tra lại đường mạch, mối hàn xem có bị hở hoặc dẫn không tốt không?
Thay cầu diode lớn hơn càng tốt không vấn đề gì cả....-
Channel: Điện thanh
07-08-2026, 09:12 -

Comment