Led đơn sẽ sở hữu rất nhiều hiệu ứng đẹp tiêu dùng để những bạn sở hữu thể chạy led trái tim, hình ngôi sao, tiêu dùng trang trí làm bảng hiệu, bằng những hiệu ứng sáng đuổi,sáng dần… ngoài ra còn nhiều hiệu ứng khác nữa.
Hi vọng bài này sẽ đem tới cho những bạn thật nhiều tri thức bổ ich.
Sắm linh kiện điện tử tại
Điện tử Nhật Tùng
Khóa học Vi điều khiển sở hữu phí
Tải phần Tổng hợp hiệu ứng led đơn
Nguyên lý kết nối led đơn với vi điều khiển
Cách nối phần cứng
Giảng giải cách nối
Đối với nguyên lý này muốn led sáng hay tắt phụ thuộc vào chân VDK
Nếu VDK=1 thì hai đầu đều bằng Một tức sảy ra hiện tượng đẳng áp nên làm led tắt.
Nếu VDK=0 thì điện áp lúc này sẽ đổ nguồn qua chân A và qua chân VDK, led sáng
Phần tính điện trở R32 thì đơn thuần mình ko bàn ở trong này nhé.
Chương trình hiệu ứng led đơn tắt dần
Khởi đầu đi giảng giải những phần nào.
Khai báo thư viện cho led đơn sáng dần
Tiền sử lý
Định cấu hình
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP // dòng lệnh này định cấu hình cho Pic
Chức năng những thông số như sau:
- NOWDT: là ko sử dụng bộ định thời giám sát (No watchdog timer)
- PUT: là sử dụng bộ định thời lúc sở hữu nguồn để kéo dài them thời kì reset vi điều khiển để chờ nguồn điện ổn định, thời kì kéo dài thêm 72ms (Power up timer)
- HS: là sử dụng bộ dao động tần số cao từ 4MHz tới 20MHz (High Speed)
- NOPROTECT: là ko sử dụng bảo vệ mã code nạp vào bộ nhớ flash bên trong
- NOLVP: là ko sử dụng chế độ nạp code tiêu dùng nguồn điện áp thấp 5V mà tiêu dùng nguồn 12,5V.
- Ngoài ra thì còn nhiều thông số khác những bạn xem thêm trong thư viện Pic16F887 nhé.
Thư viện delay
#use delay (clock =20M) // nếu sử dụng thạch anh nội thì từ 37k tới 8M, còn thạch anh ngoài thì 4M tới 20M, Lúc bạn sử dụng thạch anh nào thì nhớ khai báo đúng ở đây là được.
Khai báo biến phục vụ cho chương trình led đơn
- Biến y tiêu dùng xuất trị giá ra cho led , vì nó 8bit nên chỉ xuất tối đa là 8 led thôi nhé
- Biến i tiêu dùng để đếm số vòng lặp for cho trị giá chỉ chạy từ 0 tới 8 hoặc 0 tới 16 nên ko cần khai báo to nhằm tiết kiệm bộ nhớ.
- Biến h tiêu dùng lưu trị giá và xuất ra cho hai port C và D.
Lưu ý: Nếu chương trình nhỏ những bạn ko kiểm soát biến tốt thì nên tiêu dùng biến sở hữu dấu 32bit.
Những chương trình con led đơn tắt dần
Chương trình con tắt dần 4 led từ trái qua phải.
Sở hữu hai hình thức viết hiệu ứng tắt dần:
Kê khai từng trị giá cụ thể.
0000 1111 = 0x0f // cho sáng 4 bóng
1000 1111 = 0x8f // tắt bóng trước tiên
1100 1111 = 0xcf //tắt hai bóng
1110 1111 = 0xef
1111 1111 = 0xff
Lúc mình xuất số 0 thì led sáng, xuất số Một thì led tắt.
Những đổi từ số hai sang số hex những bạn xem phần video nhé.
Từ cách tính đó mình sở hữu được chương trình con như sau:
Cách viết chương trình
Xuất tuần tự từng trị giá ra, mỗi lần xuất mình delay một khoảng thời kì để dễ quan sát.
Phần cứng mạch thực tế những bạn xem phần video nhé
Viết vòng lặp For, công thức chung cho 8 led trái sang phải
Nếu cứ đi kê khai từng trị giá thế thì chương trình trở nên dài và khó khăn cho những hiệu ứng 32 led…
Từ đó mình phải đi tìm công thức chung cho hiệu ứng tắt dần.
Trước nhất phải cho sáng những led trước
0000 0000 = 0x00
Sau đó khởi đầu dịch lần vô dịch lần vô là được
Toán tử dịch
Đầu | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
>>1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|0x80 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
= | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Theo như trên chổ dịch Một thì những bạn thấy vị trí số 0 sẽ bị mất và vị trí số 7 bị trống và vi điều khiển sẽ lấp đầy bằng trị giá số 0 nên trị giá là : 0000 0000
Nhưng vì trạng thái thứ hai phải là 1000 0000
Toán tử OR
từ đó phải | (OR) với 0x80 để làm cho trạng thái của led số 7 luôn lên 1.
Từ đó mình đưa ra chương trình như sau
Cách viết chương trình
Trước nhất mình phải cho sáng hết bằng cách cho y = 0x00, xuất ra và delay để quan sát.
Tương tự là đã xong 8 led Phần cứng mạch thực tế những bạn xem phần video nhé
Viết vòng lặp For, công thức chung cho 16 led trái sang phải
Tương tự như 8 led nhé
Hiệu ứng tắt dần chạy 16led
Những bạn lúc này phải tiêu dùng biến 16bit nhé.
Vì là 16bit nên trị giá ban sơ từ trái sang phải là 0000 0000 0000 0000 = 0x0000;
Mỗi port của vi điều khiển chỉ xuất cho 8led, vì thế muốn xuất được 16led phải tiêu dùng hai port C.D
Ví dụ
H = 0111 1111 1111 1111
Mình sắp xếp vào cho đúng nhé: giả sử 8 ô đầu là của Port C, còn lại của Port D
Lúc mình Output_d(h) thì VĐK chỉ lấy trị giá từ bít thấp lên bit cao, đủ 8 bit thì ngưng
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Lúc đã lấy trị giá cho 8bit của PortD thì còn lại 8 bit cao phải xuất cho Port C là : 0111 1111
Vì chỉ lấy trị giá từ thấp tới cao nên ko thể xuất trực tiếp cho Port C được
Mà phải tiến hành dịch 8 lần để 8bit cao xuống 8bit thấp lúc dịch
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Tương tự là đã lấy đủ 16bit cho hai port mà ko bị chồng dữ liệu.
Tương tự cho chương trình con ở trên thôi nhé.
Chương trình chính của led đơn tắt dần
Vi điều khiển chạy lúc sở hữu chương trình chính
Vì tín hiệu đều được ra ngoài led đơn nên khỏi tạo trị giá đều đi ra.
Trước nhất phải tắt những led lúc chạy.
Vòng lặp tuần hoàn chỉ cần gọi chương trình con ra là xong.