Chào các bạn!
Led 7 thanh (Led 7 đoạn) được sử dụng rộng rãi trong các thiết bị điện tử, dùng để hiển thị số, ký tự. Hôm nay, mình xin chia sẻ với các bạn lập trình hiển thị led 7 thanh với 8051.I. Cấu tạo led 7 thanh.
Led 7 thanh được chia làm 2 loại, Led anot chung và led katot chung. Cả hai loại này có đều có cấu tạo từ 8 con led đơn ghép lại với nhau thành hình số 8 và 1 dấu chấm (xem hình dưới).
Hình 1.1: Cấu tạo chung của led 7 thanh.
Nếu là led Anot chung thì 8 chân dương của led (chân Anot) sẽ được nối chung với nhau (chân COM ở hình 1.1), các chân Katot sẽ được đưa ra làm các chân dữ liệu A,B,C,D,E,F,G,DP. Để điều khiển led anot chung, chúng ta cấp nguồn dương vào chân anot chung (chân COM) và xuất dữ liệu tích cực mức 0 ra 8 chân dữ liệu để hiển thị theo ý muốn.
Hình 1.2: Cấu tạo bên trong led 7 thanh anot chung.
Nếu là led Katot chung thì 8 chân âm của led (chân Katot) sẽ được nối chung với nhau (chân COM ở hình 1.1), các chân Anot sẽ được đưa ra làm các chân dữ liệu A,B,C,D,E,F,G,DP. Để điều khiển led anot chung, chúng ta cấp nguồn âm vào chân katot chung (chân COM) và xuất dữ liệu tích cực mức 1 ra 8 chân dữ liệu để hiển thị theo ý muốn.
Hình 1.3: Cấu tạo bên trong led 7 thanh katot chung.
II. Bảng mã led 7 thanh.
Tùy vào sơ đồ mạch, tùy vào ký tự hay số muốn hiển thị mà dữ liệu xuất ra sẽ khác nhau. Sau đây mình xin đưa ra bảng mã led 7 thanh cho 2 loại led Anot chung và Katot chung với cách mắc mạch thông dụng nhất: Chân A,B,C,D,E,F,G,DP lần lượt nối vào các chân từ P2.0 - P2.7. (Mình nói đây là các thông dụng nhất bởi vì trong một số mạch ứng dụng, vì để dễ đi dây nên người thiết kế không mắc mạch theo thứ tự như trên nữa, mà họ mắc mạch sao cho khi thiết kế mạch in dễ đi dây nhất.)
1. Bảng mã led các số từ 0-9 cho led 7 thanh Anot chung.
2. Bảng mã led các số từ 0-9 cho led 7 thanh katot chung.
III. Lập trình hiển thị led 7 thanh với 8051.
Để hiển thị 1 số trên led 7 thanh, ta chỉ cần xuất ra vi điều khiển mã hexa tương ứng với số đó. Ví dụ để hiển thị số 1 trên led 7 thanh anot chung, chúng ta xuất mã hexa 0xF9 ra các chân dữ liệu của led 7, tương tự như vậy, để hiển thị các số từ 0-9 các bạn chỉ cần xuất các mã tương ứng đã cho ở phần 2.
Sau đây, mình xin giới thiệu đến các bạn chương trình thực hiện bài toán: mỗi lần nhấn nút BT1, số hiện thị trên led 7 sẽ tăng thêm 1 đơn vị, khi tăng vượt quá 9, thì sẽ nhảy về số 0, và khi nhấn BT2 thì số trên led 7 thanh sẽ giảm 1 đơn vị, khi giảm về dưới 0 thì sẽ nhảy lên 9.
Sơ đồ mạch mô phỏng như sau.
1. Khai báo mảng chứa các giá trị led 7 thanh ở đầu chương trình.
2. Nội dung chương trình chính.
Sau đây, mình xin giới thiệu đến các bạn chương trình thực hiện bài toán: mỗi lần nhấn nút BT1, số hiện thị trên led 7 sẽ tăng thêm 1 đơn vị, khi tăng vượt quá 9, thì sẽ nhảy về số 0, và khi nhấn BT2 thì số trên led 7 thanh sẽ giảm 1 đơn vị, khi giảm về dưới 0 thì sẽ nhảy lên 9.
Sơ đồ mạch mô phỏng như sau.
Hình 3.1: Sơ đồ nguyên lý.
Để thực hiện yêu cầu bài toán, mình sẽ dùng một biến để đếm số lần nhấn nút, khi nhấn nút BT1 mình sẽ tăng biến này lên một giá trị, khi nhấn nút BT2 mình sẽ giảm biến này đi một giá trị. Trong chương trình cũng phải kiểm tra giới hạn giá trị của biến khi lớn hơn 9 và nhỏ thua 0. Sau đó dùng biến này làm tham số để xuất giá trị hexa tương ứng ra led 7 thanh để hiển thị.
Nội dung chương trình như sau.
1. Khai báo mảng chứa các giá trị led 7 thanh ở đầu chương trình.
//khai bao mang cac so hien thi tren led 7 anot chung unsigned char code_7_seg[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 0 1 2 3 4 5 6 7 8 9
2. Nội dung chương trình chính.
signed char bt_num = 0; while(1) { /*Kiem tra nut nhan BT1*/ if(BT1==0) { delay_ms(10); if(BT1==0) { while(BT1==0); bt_num++; if(bt_num > 9) bt_num = 0; } } /*Kiem tra nut nhan BT2*/ if(BT2==0) { delay_ms(10); if(BT2==0) { while(BT2==0); bt_num--; if(bt_num <0) bt_num = 9; } } /*Xuat gia tri ra led 7 thanh*/ LED_PORT = code_7_seg[bt_num]; }
Các bạn có thể download source code và mô phỏng Tại Đây.
Website được thực hiện bởi: cửa hàng linh kiện điện tử Đức Long https://muabanlinhkien.net/
Không có nhận xét nào:
Write nhận xét