Lập trình 8051 – BÀI 7 : Lập trình LED 7 thanh với 8051

Bài trước tất cả chúng ta học lập trình tiếp xúc để điều khiển Output ( LED ) theo Pin và theo Port. Ở bài này tất cả chúng ta sẽ vận dụng những kiến thức và kỹ năng đó để triển khai lập trình điều khiển hiển thị trên LED 7 thanh theo để hiển thị theo ý mình .
Sau đây là hình ảnh và cụ thể về 1 con LED 7 thanh và bảng tài liệu mã hóa với những số từ 0-9 theo kiểu LED sử dụng Anot chung .

 

bảng các giá trị từ 0 – 9 cho LED 7 thanh sử dụng ANOT chung.

Chữ số
dp
G
F
E
D
C
B
A

0
1
1
0
0
0
0
0
0
0XC0

1
1
1
1
1
1
0
0
1
0XF9

2
1
0
1
0
0
1
0
0
0XA4

3
1
0
1
1
0
0
0
0
0XB0

4
1
0
0
1
1
0
0
1
0X99

5
1
0
0
1
0
0
1
0
0X92

6
1
0
0
0
0
0
1
0
0X82

7
1
1
1
1
1
0
0
0
0XF8

8
1
0
0
0
0
0
0
0
0X80

9
1
0
0
1
0
0
0
0
0X90

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

Để thực thi 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:

12345678910111213141516171819202122232425262728

#include

unsignedcharLED7SEGCA[11]={0 xC0,0 xF9,0 xA4,0 xB0,0x99,0x92,0x82,0 xF8,0x80,0x90};

voidFn_Delay(unsignedintTime){

while(Time–);

}

voidtangdananot()

{        

unsignedchari;

for(i=0;i<10;i+ +){

P2=LED7SEGCA[i];

Fn_Delay(50000);

}

}

voidgiamdananot()

{      

unsignedchari;

for(i=9;i>0;i–){

P2=LED7SEGCA[i];

Fn_Delay(50000);

}

}

intmain(){

while(1){

tangdananot();

giamdananot();

}

return0;

}

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


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

Ở bài toán điều khiển LED 7 thanh tất cả chúng ta hoàn toàn có thể vận 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 tiêu tốn lãng phí số chân điều khiển LED và limit số LED hoàn toàn 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. Để xử lý 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 triển khai theo nguyên tắc một thời gian chỉ bật một LED 7 thanh với tài liệu nó cần hiển thị, những LED còn lại được tắt. Việc quét LED thực thi luôn phiên sáng những LED với nhu yếu trên. Quá trình quét LED chuẩn được triển khai theo những bước sau :

  1. Xuất ra số muốn hiển thị.
    Cấp nguồn cho L7S muốn hiển thị.
    3. Trễ 1 khoảng thời gian ngắn để duy trì sáng.
    4. 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ị những số từ 00-99 :

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051

#include

sbitL7S1=P3^0;

sbitL7S2=P3^1;

charLED7SEG[11]={0 xC0,0 xF9,0 xA4,0 xB0,0x99,0x92,0x82,0 xF8,0x80,0x90};

voidFn_Delay(unsignedint_vrui_Time){

while(_vrui_Time–);

}

voidthanhtangdananot()

{

chari;

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;

}

}

}

voidthanhgiamdananot()

{

chari;

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;

}

}

}

intmain()

{

L7S1=0;

L7S2=0;

while(1){

thanhtangdananot();

thanhgiamdananot();

}

return0;

}

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

Bài 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 .

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

#include

sbitLED1=P3^0;

sbitLED2=P3^1;

sbitLED3=P3^2;

sbitLED4=P3^3;

unsignedcharLED7SEG[10]={0 xC0,0 xF9,0 xA4,0 xB0,0x99,0x92,0x82,0 xF8,0x80,0x90};

voidDelay(unsignedintTime)

{

while(Time–);

}

voidmain(void)

{

unsignedinti;

unsignedintj;

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 những bạn đã theo dõi bài viết, những bạn hãy ĐK, like kênh youtube của mình để xem nhiều video hướng dẫn hơn nhớ .

Alternate Text Gọi ngay