Trong bài này chúng ta sẽ học cách hiển thị Led 7 đoạn bằng vi điều khiển PIC 16F877A các bạn có thể dùng PIC 16F887 cũng được, sẽ có 2 ví dụ, ví dụ thứ nhất sẽ hiển thị 1 LED 7 đoạn, ví dụ thứ 2 sẽ hiển thực hành quét LED hiển thi 8 LED 7 đoạn.

led7doan

Cấu tạo :    
Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình dạng số 8 và có thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led 7 đoạn. Led 7 đoạn có 2 loại :

- Anode chung : các đầu cực + được nối chung với nhau và nối lên nguồn, các đầu  Cathode a,b,c,d,e,f,g,h được đưa ra ngoài  qua điện trở hạn dòng nhận tín hiệu điều khiển khi xuống 0V thì led sáng và khi lên+5V thì LED tắt. 

- Cathode chung : các đầu cực - được nối chung với nhau và nối với đất (GND), các đầu  Anode a,b,c,d,e,f,g,h được đưa ra ngoài  qua điện trở hạn dòng nhận tín hiệu điều khiển khi xuống 0V thì led tắt và khi lên+5V thì LED sáng.  

 Bảng mã LED 7 đoạn :

Khi lập trình cho vi điều khiển hiển thị led 7 đoạn chúng ta cần phải có bảng mã led, bảng mã led này chủ yếu dành cho các số từ 0--9, các kí tự khác như oC cho hiển thị nhiệt độ... dưới đây là bảng mã cho các số từ 0--9 cho led 7 đoạn Anode chung :

0

1 1 0 0 0 0 0 0

C0

1

1 1 1 1 1 0 0 1

F9

2

1 0 1 0 0 1 0 0

A4

3

1 0 1 1 0 0 0 0

B0

4

1 0 0 1 1 0 0 1

99

5

1 0 0 1 0 0 1 0

92

6

1 1 0 0 0 0 1 0

82

7

1 1 1 1 1 0 0 0

F8

8

1 0 0 0 0 0 0 0

80

9

1 0 0 1 0 0 0 0

9

Led 7 đoạn Anode chung  bảng mã led theo số hex : 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90

Led 7 đoạn Cathode chung bảng mã led theo số hex: 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F

Ví dụ hiển thị led 7 đoạn cho 1 LED :

 Các bạn vào Proteus tạo một project như hình :

Sau đó vào CCS tạo 1 project mình lấy tên là  Ex2_7seg_led1 trong project này LED 7 là loại Anothe chung và có 4 chế độ làm việc :

1. Khi sw1=0 và sw2=0 hiển thị số 2.

2. Khi sw1=0 và sw2=1 hiển thị số 2 và nhấp nháy

3. Khi sw1=1 và sw2=0 hiển thị đếm số từ 0-->9.

4. Hiển thị số nhập từ công COM (RS232).

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

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

int1 sw1,sw2;
int8 state=0,count=0;
char c;
// Display Seg led from Ascii.
void display_segs(char c) {
if((c>'9')||(C<'0'))
output_b(0xff);
else
output_b(LED_MAP[c-'0']); // change Ascii to number
}
void main() {
Output_B(0xff);
while(TRUE) {
// Read the state of switch and check
sw1 = Input(PIN_D6);
sw2 = Input(PIN_D7);

// Led seg on with number 2.///////////

if ((sw1==0)&(sw2==0)) {
state=0;
Output_B(LED_MAP[2]);

}
// Led seg on, Delay 1s off and repeat.
if ((sw1==0)&(sw2==1)) {
state=1;
Output_B(LED_MAP[2]);
delay_ms(1000);
Output_B(0xff);
delay_ms(1000);
}
// Led on 0..9 and repeat ///
if ((sw1==1)&(sw2==0)) {
state=2;
if (count>9) count=0;
Output_B(LED_MAP[count]);
count++;
delay_ms(1000);
}

// Get number from computer via rs232///
if ((sw1==1)&(sw2==1)) {
state =3;
if(kbhit()) {
c=getc();
}
display_segs(c);
}
}
}

Các bạn có thể download project tại đây : Hiển thị Led 7 đoạn với vi điều khiển PIC - Bài 2

Xem tiếp bài 3 hiển thị quét led 7 đoạn tại đây : Hiển thị quét LED 7 đoạn vi điều khiển PIC - Bài 3

Xem video mô phỏng led 7 đoạn :