[HỌC AVR] BÀI 9: HIỂN THỊ LED 7 THANH

0
1229

[HỌC AVR] BÀI 9: HIỂN THỊ LED 7 THANH

Chú ý : Source code bài viết dưới đây được biên dịch bằng phần mềm CodeVisionAVR để biên dịch code không lỗi xin vui lòng Download bảnCodeVisionAVR Tại Đây

Xin chào các bạn!
Trong bài viết này, mình sẽ hướng dẫn các bạn lập trình hiển thị các số từ 0 – 9999 lên Led 7 thanh với vi điều khiển Atmega16. Project chạy trên KIT AVR V4.
I.SƠ ĐỒ PHẦN CỨNG
Trên KIT AVR V4 hỗ trợ các bạn khối Led 7 thanh 4 số Anode chung có sơ đồ như sau:

 

Trong đó, các chân kết nối với Atmega16:

ØCác chân điều khiển cấp nguồn LQ1:4 kết nối lần lượt với PORTC4:7.​
ØCác chân dữ liệu A, B, C, D, E, F, G, Dp kết nối lần lượt với PORTB0:7.​

Ta có bảng mã hiển thị các số từ 0 – 9 trên Led 7 thanh:

II.LẬP TRÌNH PHẦN MỀM

1.Phương pháp quét Led 7 thanh

KIT AVR V4 hỗ trợ phần cứng Led 7 thanh 4 số Anode chung vì vậy các bạn cần sử dụng phương pháp quét Led để điều khiển hiển thị.
Phương pháp quét Led dựa trên sự lưu ảnh của mắt người. Mắt người phải mất khoảng 25 ms để xử lý một hình ảnh (40 hình/s), vậy nếu cho Led sáng tắt với khoảng thời gian nhỏ hơn 25 ms thì giá trị hiển thị trên Led giống như luôn sáng.
Để hiển thị lên màn hình Led 7 thanh 4 số, ta lần lượt cấp nguồn cho từng con Led và bắn dữ liệu vào các chân data.
Gọi thời gian giữa 2 lần cấp nguồn là T.
Vậy khoảng thời gian 1 con Led sáng – tắt là 4T < 25ms à T < 6ms.
Trong bài toán này mình sử dụng TIMER1 của Atmega16 để tạo khoảng thời gian giữa 2 lần cấp nguồn T = 1ms.

2.Lập trình hiển thị các số từ 0 – 9999 lên Led 7 thanh 4 số Anode chung

Các bạn cần cấu hình GPIO: PORTC4:7PORTB0:7 là các chân OUTPUT với mức logic đầu ra ban đầu là mức 1:

Các bạn cấu hình xảy ra ngắt tràn TIMER1 sau 1ms:

Sau 1 ms, ngắt tràn TIMER1 xảy ra, các bạn thực hiện quét Led ở trình phục vụ ngắt TIMER1 interrupt [TIM1_OVF] void timer1_ovf_isr(void):

Trong trình phục vụ ngắt mình sử dụng hàm hiển thị giá trị số lên Led 7 thanh void LED7_Display(uint16_t Value) (nằm trong File led7 thuộc Folder User):

Thực hiện thay đổi giá trị hiển thị lên Led 7 thanh trong vòng while(1):

Link dowload File Code của chương trình: TẠI ĐÂY

Trao đổi học tập

Comments