You are on page 1of 8

Bài tập ĐIỀU KHIỂN PORTX với LED đơn, LED 7 đoạn,

Switch có lời giải (cho các ví dụ)

Ví dụ 1: Dựa vào sơ đồ nguyên lý cho dưới đây, viết chương trình điều khiển 8 LED sáng tắt liên
tục (tDELAY = 0,3s)
Sơ đồ nguyên lý

Nguyên lý hoạt động:


Các thanh ghi: tự xác định
Lưu đồ giải thuật
Chương trình (XC8):
void main (void)
{
ANSEL = 0x00;
ANSELH = 0x00;
TRISD = 0x00;
while (1)
{
PORTD = 0x00;
__delay_ms(300);
PORTD = 0xFF;
__delay_ms(300);
}
}

Ví dụ 2: Dựa vào sơ đồ nguyên lý dưới đây, viết chương trình điều khiển 8 LED sáng đuổi
từ D1 – D8 (tDELAY = 0,3s)
Sơ đồ nguyên lý:

Nguyên lý hoạt động: tự ghi

1
Các thanh ghi: tự xác định dữ liệu cần hiển thị sáng đuổi theo bảng mã sau:

Lưu đồ giải thuật Chương trình (XC8):


void main (void)
{
unsigned char i;
const unsigned char code_disp[8]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
ANSEL = 0x00; ANSELH = 0x00;
TRISB = 0x00;
while (1)
{
for (i=0;i<=7;i++)
{
PORTB = code_disp[i];
__delay_ms(300);
}
}
}

Ví dụ 3: Dựa vào sơ đồ dưới đây, viết chương trình điều khiển LED hiển thị số 5
Sơ đồ nguyên lý:

Hướng dẫn
Nguyên lý hoạt động: sơ đồ mạch điều khiển theo phương pháp không đa hợp dữ liệu 7 đoạn…
Các thanh ghi: tự xác định bảng mã dữ liệu 7 đoạn Anode cung cho các số thập phân từ 0-9:
Các thanh ghi: tự xác định bảng mã các số thập phân từ 0-9

Lưu đồ giải thuật Chương trình (XC8):


void main (void)
{
unsigned char i,num_disp,num_decode;
const unsigned char code_7seg[10] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

ANSEL = 0x00; ANSELH = 0x00;


TRISD = 0x00;

num_disp = 5;
num_decode = code_7seg[num_disp];
PORTD = num_decode;
while (1);
}
2
Ví dụ 4: Dựa vào sơ đồ sau, viết chương trìnhđiều khiển LED hiển thị số 12 (tDELAY = 0,3s)
Sơ đồ nguyên lý:

Hướng dẫn
Nguyên lý hoạt động: sơ đồ mạch điều khiển theo phương pháp không đa hợp dữ liệu 7 đoạn
…..
Các thanh ghi: tự xác định. Bộ mã dữ liệu LED 7 đoạn Anode chung cho các số thập phân từ 0-9:

Lưu đồ giải thuật Chương trình (XC8):


void main (void)
{
unsigned char i,num_disp, num_disp_h, num_disp_l;
unsigned char num_decode_h, num_decode_l;
const unsigned char code_7seg[10] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

ANSEL = 0x00; ANSELH = 0x00;


TRISC = TRISD = 0x00;

num_disp = 12;
num_disp_h = num_disp/10;
num_disp_l = num_disp%10;
num_decode_h = code_7seg[num_disp_h];
num_decode_l = code_7seg[num_disp_l];

PORTC = num_decode_h;
PORTD = num_decode_l;
while (1);
}

3
Ví dụ 5: Dựa vào sơ đồ, viết chương trình điều khiển LED hiển thị số 12 (tDELAY = 0,3s)
Sơ đồ nguyên lý

Hướng dẫn
Nguyên lý hoạt động: sơ đồ mạch điều khiển theo phương pháp đa hợp dữ liệu 7 đoạn
…..
Các thanh ghi: tự xác định; Bộ mã dữ liệu LED 7 đoạn Anode chung cho các số thập phân từ 0-9:

Lưu đồ giải thuật Chương trình (XC8):


void main (void)
{
unsigned char i,num_disp, num_disp_h, num_disp_l;
unsigned char num_decode_h, num_decode_l;
const unsigned char code_7seg[10] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

ANSEL = 0x00; ANSELH = 0x00;


TRISC0=TRISC1 = 0; TRISD = 0x00;

num_disp = 12;
num_disp_h = num_disp/10;
num_disp_l = num_disp%10;
num_decode_h = code_7seg[num_disp_h];
num_decode_l = code_7seg[num_disp_l];
while (1);
{
RC1 = 0; RC0 = 1;
PORTD = num_decode_h;
__delay_ms(20);
RC1 = 1; RC0 = 1;

RC1 = 1; RC0 = 0;
PORTD = num_decode_l;
__delay_ms(20);
RC1 = 1; RC0 = 1;
}
}

4
Ví dụ 6: Dựa vào sơ đồ dưới, viết chương trình điều khiển 8 LED sau mỗi lần nhấn – nhả
của nút nhấn như sau:
- Ban đầu: 8 LED tắt hết
- SW ON nhấn – nhả: 8 LED sáng hết
-SW OFF nhấn – nhả: 8 LED tắt hết
Sơ đồ nguyên lý

Hướng dẫn
Nguyên lý hoạt động:
Các thanh ghi: tự xác định Chương trình (XC8):
Lưu đồ giải thuật void main (void)
{
ANSEL = 0x00;
ANSELH = 0x00;
TRISD = 0x00;
TRISB1 = TRISB0 = 1;
nRBPU = 0;
WPUB1 = WPUB0 = 1;
PORTD = 0x00;
while (1)

{
if (RB0==0)
{
while (RB0==0);
PORTD = 0xFF;
}
else if (RB1==0)
{
while (RB1==0);
PORTD = 0x00;
}
}
}

5
Ví dụ 7: Dựa vào sơ đồ, viết chương trình điều khiển LED sau mỗi lần nhấn – nhả của nút nhấn
như sau :
- Ban đầu: LED hiển thị số 0
- SW UP nhấn – nhả: Tăng (+1) giá trị trên LED
- SW DOWN nhấn – nhả: Giãm (-1) giá trị trên LED
Sơ đồ nguyên lý

Hướng dẫn
Nguyên lý hoạt động: sơ đồ mạch điều khiển theo phương pháp không đa hợp dữ liệu 7 đoạn
…..
Các thanh ghi: tự xác định Bộ mã dữ liệu LED 7 đoạn Anode cung cho các số thập phân từ 0-9:
Lưu đồ giải thuật Chương trình (XC8):
void main (void)
{
unsigned char i,num_decode;
signed char num_disp;
const unsigned char code_7seg[10] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
ANSEL = 0x00; ANSELH = 0x00;
TRISD = 0x00; TRISB1 = TRISB0 = 1;
nRBPU = 0; WPUB1 = WPUB0 = 1;
num_disp = 0;
while (1)
{
if (RB0==0)
{
while (RB0==0);
num_disp++;
if (num_disp>9)
c
num_disp = 0;
}
else if (RB1==0)
{
while (RB1==0);
num_disp--;
if (num_disp<0)
num_disp = 9;
}
num_decode =
code_7seg[num_disp];
PORTD = num_decode;
}
}

6
Ví dụ 8: Dựa vào sơ đồ, viết chương trình điều khiển LED sau mỗi lần nhấn – nhả của
nút nhấn như sau :
- Ban đầu: LED hiển thị số 0
- SW UP nhấn – nhả: Tăng (+1) giá trị trên LED
- SW DOWN nhấn – nhả: Giãm (-1) giá trị trên LED
Sơ đồ nguyên lý

Hướng dẫn
Chương trình (XC8):
sơ đồ mạch điều khiển theo phương pháp
void main (void)
đa hợp dữ liệu 7 đoạn {
….. unsigned char i,num_decode;
Các thanh ghi: tự xác định. signed char num_disp;
Bộ mã dữ liệu LED 7 đoạn Anode chung const unsigned char code_7seg[10] =
cho các số thập phân từ 0-9: {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
Lưu đồ giải thuật
ANSEL = 0x00; ANSELH = 0x00;
TRISC0=TRISC1=0; TRISD = 0x00; TRISB1=TRISB0=1;
nRBPU = 0; WPUB1 = WPUB0 = 1;
num_disp = 0;
while (1)
{
if (RB0==0)
{
while (RB0==0);
num_disp++;
if (num_disp>99)
num_disp = 0;
}
else if (RB1==0)
{
while (RB1==0);
num_disp--;
if (num_disp<0)
num_disp = 99;
}
num_disp_h = num_disp/10;
num_disp_l = num_disp%10;
num_decode_h = code_7seg[num_disp_h];
num_decode_l = code_7seg[num_disp_l];
RC1 = 0; RC0 = 1;
PORTD = num_decode_h;
__delay_ms(20);
RC1 = 1; RC0 = 1;
RC1 = 1; RC0 = 0;
PORTD = num_decode_l;
__delay_ms(20);
RC1 = 1; RC0 = 1;
}
}
7
BÀI TẬP ỨNG DỤNG (theo các ví dụ trên)

Bài tập 1: Dựa vào sơ đồ trong ví dụ 1, viết chương trình điều khiển 8 LED sáng dần từ D1 – D8.
Lưu ý chu trình điều khiển được thực hiện liên tục với tDELAY = 0,3s

Bài tập 2: Dựa vào sơ đồ trong ví dụ 2, viết chương trình điều khiển 16 LED sáng đuổi từ D16 –
D1. Lưu ý chu trình điều khiển chỉ thực hiện 2 lần với t DELAY = 0,3s rồi các LED
tắt hết

Bài tập 3: Dựa vào sơ đồ trong ví dụ 3, viết chương trình điều khiển LED hiển thị số đếm giãm
dần (-1) từ 5 → 0 → 8. Lưu ý chu trình điều khiển được thực hiện liên tục với t DELAY = 0,3s

Bài tập 4: Dựa vào sơ đồ trong ví dụ 4, viết chương trình điều khiển LED hiển thị số đếm giãm
dần (-2) từ 24 → 0 → 80. Lưu ý chu trình điều khiển được thực hiện liên tục với t DELAY = 0,3s

Bài tập 5: Dựa vào sơ đồ trong ví dụ 5, viết chương trình điều khiển LED hiển thị số đếm tăng
dần (+1) từ 00 → 23. Lưu ý chu trình điều khiển được thực hiện liên tục với t DELAY = 0,3s

Bài tập 6: Dựa vào sơ đồ trong ví dụ 6, viết chương trình điều khiển 8 LED sau mỗi lần
nhấn – nhả của nút nhấn như sau:
- Ban đầu: LED tắt hết
- SW ON: LED sáng đuổi từ D1 – D8 liên tục với t DELAY = 0,3s
- SW OFF: LED sáng tắt liên tục với tDELAY = 0,3s

Bài tập 7: Dựa vào sơ đồ trong ví dụ 7, viết chương trình điều khiển LED sau mỗi lần nhấn – nhả
của nút nhấn như sau:
- Ban đầu: LED hiển thị số 0
- SW UP: LED tăng dần (+1) liên tục số đếm (giới hạn số đếm: 0 – 9)
- SW DOWN: LED dừng tăng số đếm

Bài tập 8: Dựa vào sơ đồ trong ví dụ 8, viết chương trình điều khiển LED sau mỗi lần
nhấn – nhả của nút nhấn như sau:
- Ban đầu: LED hiển thị số 00
- SW UP: LED tăng dần (+1) liên tục số đếm hiện tại (giới hạn số đếm: 0 – 23)
- SW DOWN: LED giãm dần (-1) liên tục số đếm hiện tại (giới hạn số đếm: 0 – 23)

You might also like