Led, Vi điều khiển – Lập trình Pic16F877A hiệu ứng tắt dần – Bài 6

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

Nguyên lý nối led đơn với vi điều khiển

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

Khai báo thư việ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

Khai báo biế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

Hiệu ứng tắt dần trực tiếp

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

Đầu00000000
>>100000000
|0x8010000000
=10000000

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

Hiệu ứng tắt dần chạy bằng for

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

11111111

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

0111111111111111

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

Chương trình chính

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.

Leave a Comment

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *