Lập Trình LED 7 Thanh Với 8051

I.Nguyên lý điều khiển LED 7 thanh

 Bài trước chúng ta học lập trình giao tiếp để điều khiển Output (LED) theo Pin và theo Port. Ở bài này chúng ta sẽ áp dụng những kiến thức đó để thực hiện lập trình điều khiển hiển thị trên LED 7 thanh theo để hiển thị theo ý mình.

1.Sau đây là hình ảnh và chi tiết về 1 con LED 7 thanh.

2.Bảng dữ liệu mã hóa với các số từ 0-9 theo kiểu LED sử dụng Anot chung.

Bảng mã led 7 thanh

II.Các Bài code điều khiển LED 7 thanh

1.Điều khiển 1 LED 7 thanh.

Để thực hiện bài tập này, hãy vẽ mạch mô phỏng như hình. Linh kiện cần thêm cho bài này là Led 7 cạnh, Anode chung. Hãy search từ “7SEG-COM_ANODE”.như hình sau:

Hãy tạo 1 folder riêng  trong đó chứa file mô phỏng của Proteus, chứa file Project mới của KeilC và chứa file main.c của project mới. Sau đây là chương trình điều khiển hiển thị lần lượt các số từ 0 đến 9 trên LED 7 thanh.

Code đoạn code sau vào trong file main.c

#include <REGX52.H> unsigned char LED7SEGCA[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void Fn_Delay (unsigned int Time){ while(Time--); } void tangdananot() { unsigned char i; for(i = 0; i <10; i++){ P2 = LED7SEGCA[i]; Fn_Delay(50000); } } void giamdananot() { unsigned char i; for(i = 9; i >0; i--){ P2 = LED7SEGCA[i]; Fn_Delay(50000); } } int main (){ while(1){ tangdananot(); giamdananot(); } return 0; }

Ở đây chúng ta thực hiện lưu mảng dữ liệu LED 7 thanh ở bảng trên vào một mảng. Khi đó phần tử LED7SEG[i] chứa dữ liệu hiển thị của số i trên LED thanh ở trên mạch với điều kiện i nằm từ 0-9. Ở vòng lặp for, chúng ta thực hiện đẩy dữ liệu ra chân Port P2 lần lượt theo các mã của các số từ 0 đến 9 ra. Chạy mô phỏng chúng ta sẽ thấy  các số này lần lượt hiển thị trên LED 7 thanh.

2.Điều khiển nhiều LED 7 thanh.

Ở bài toán điều khiển LED 7 thanh chúng ta có thể áp dụng theo bài toán bước 1 nối mỗi con LED 7 thanh vào 8 chân data độc lập. Tuy nhiên việc này sẽ gây lãng phí số chân điều khiển LED và limit số LED có thể điều khiển. Với số LED tăng lên đủ lớn số chân cần cũng tăng lên rất nhiều. Để giải quyết bài này có một kỹ thuật nêu ra là kỹ thuật “Quét LED”.

Kỹ thuật Quét LED thực hiện theo nguyên tắc một thời điểm chỉ bật một LED 7 thanh với dữ liệu nó cần hiển thị, các LED còn lại được tắt. Việc quét LED thực hiện luôn phiên sáng các LED với yêu cầu trên. Quá trình quét LED chuẩn được thực hiện theo các bước sau:

  • Xuất ra số muốn hiển thị.
  • Cấp nguồn cho L7S muốn hiển thị.
  • Trễ 1 khoảng thời gian ngắn để duy trì sáng
  • Cắt nguồn LED vừa hiển thị. Lặp lại quy trình 4 bước với đèn L7S tiếp theo

Sau đây là một đoạn chương trình hiển thị các số từ 00-99:

#include<REGX52.H> sbit L7S1 = P3^0; sbit L7S2 = P3^1; char LED7SEG[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void Fn_Delay (unsigned int _vrui_Time){ while(_vrui_Time--); } void thanhtangdananot() { char i; int j; for(i = 0; i < 100; i++){ for (j = 0; j < 30; j++) { P2 = LED7SEG[i/10]; L7S1 = 0; Fn_Delay(600); L7S1 = 1; P2 = LED7SEG[i%10]; L7S2 = 0; Fn_Delay(600); L7S2 = 1; } } } void thanhgiamdananot() { char i; int j; for(i = 99; i >0; i--){ for (j = 0; j < 30; j++) { P2 = LED7SEG[i/10]; L7S1 = 0; Fn_Delay(600); L7S1 = 1; P2 = LED7SEG[i%10]; L7S2 = 0; Fn_Delay(600); L7S2 = 1; } } } int main () { L7S1 = 0; L7S2 = 0; while(1){ thanhtangdananot(); thanhgiamdananot(); } return 0; }

Các bạn vẽ mô phỏng trong proteus như hình : chúng ta dung tranzitor npn

3.Thực hiện hiển thị 4 LED 7 thanh hiển thị lần lượt các số từ 0000-9999.

Chọn LED 7 thanh, loại 4 số. Sử dụng đoạn code sau để mô phỏng.

#include<REGX52.H> sbit LED1 = P3^0; sbit LED2 = P3^1; sbit LED3 = P3^2; sbit LED4 = P3^3; unsigned char LED7SEG[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void Delay (unsigned int Time) { while(Time--); } void main (void) { unsigned int i; unsigned int j; LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; while(1) { for(i = 0; i < 10000; i++) { for (j = 0; j < 100; j++) { P2 = LED7SEG[i/1000]; LED1 = 0; Delay(100); LED1 = 1; P2 = LED7SEG[(i%1000)/100]; LED2 = 0; Delay(100); LED2 = 1; P2 = LED7SEG[(i%100)/10]; LED3 = 0; Delay(100); LED3 = 1; P2 = LED7SEG[i%10]; LED4 = 0; Delay(100); LED4 = 1; } } } }

Cảm ơn các bạn đã theo dõi bài viết, các bạn hãy đăng ký, like kênh youtube của mình để xem nhiều video hướng dẫn hơn nhớ.

Tags: 8051điều khiển led 7 thanhlập trinh 8051led 7 thanh

Từ khóa » Cách Tạo Led 7 Thanh Trong Proteus