Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 22

BÀI 2: LẬP TRÌNH ĐIỀU KHIỂN LED ĐƠN

A. MỤC ĐÍCH, YÊU CẦU

I. Mục đích.
Trang bị cho sinh viên kiến thức lập trình led đơn với vi điều khiển PIC 18F4520

II. Yêu cầu.

Sau khi học xong bài thực hành sinh viên có thể:
- Nắm vững các phương pháp lập trình điều khiển led đơn khác nhau.
- Biết cách ứng dụng các phương pháp lập trình để thực hiện các bài lập trình led đơn cụ
thể.
B. NỘI DUNG THỰC HÀNH.
I. Ôn lại kiến thức về led đơn
1. Giới thiệu về led đơn
Ký hiệu và hình dáng của led đơn
D1

LED

D2

LED
B. NỘI DUNG THỰC HÀNH.
I. Ôn lại kiến thức về led đơn
1. Giới thiệu về led đơn
Phân cực và xác định cực tính của led đơn
D1 D1

Anode Cathode
- +
+ LED - LED LED
LED
Tắt
sáng
D2 D2
Cathode
Anode - +
+ LED
- LED
LED LED
sáng Tắt
B. NỘI DUNG THỰC HÀNH.
3. Lập trình điều khiển led đơn.
Lập trình điều khiển vào/ra theo byte hoặc theo bit.
 Lệnh điều khiển đọc dữ liệu theo byte
x = PORTD; // x là một biến kiểu byte
 Lệnh điều khiển ghi dữ theo byte
PORTD = x; // x là một biến kiểu byte
 Lệnh điều khiển đọc dữ liệu theo bit
x = PORTDbits.RD0; // x là một biến kiểu bit
Hoặc:
#define SW PORTBbits.RB2 // định nghĩa RB2 = SW x = SW; // lệnh đọc
 Lệnh điều khiển ghi dữ theo bit
PORTDbits.RD0 = x; // x là một biến kiểu bit
Hoặc:
#define LED PORTCbits.RC2 // định nghĩa RC2 = LED LED = x; // lệnh xuất
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành.
1. Chuẩn bị.(chuẩn bị cho 1 nhóm 3 sinh viên)
a. Dụng cụ, thiết bị.
STT Tên dụng cụ, thiết bị Đơn vị Số lượng Ghi chú

1 Máy tính Bộ 1  

2 Phần mềm lập trình, mô phỏng Bộ 1  


B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành.
1. Chuẩn bị.(chuẩn bị cho 1 nhóm 3 sinh viên)
b. Vật tư, linh kiện.
STT Tên vật tư, linh kiện Đơn vị Số lượng Ghi chú

1 Vi điều khiển PIC 18F4520 Con 1  

2 Led đơn Con 8

3 Điện trở 470Ω Con 8


B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
2. Lập trình điều khiển 8 led đơn bằng phương pháp thủ công
a. Mạch nguyên lý D1
0
U1
2 15
D2 3
RA0/AN0/C1IN- RC0/T1OSO/T13CKI
16
RA1/AN1/C2IN- RC1/T1OSI/CCP2B
1 4 17
RA2/AN2/C2IN+/VREF-/CVREF RC2/CCP1/P1A
5 18
RA3/AN3/C1IN+/VREF+ RC3/SCK/SCL
6 23
D3 7
RA4/T0CKI/C1OUT RC4/SDI/SDA
24
RA5/AN4/SS/HLVDIN/C2OUT RC5/SDO
2 14 25
RA6/OSC2/CLKO RC6/TX/CK
13 26
RA7/OSC1/CLKI RC7/RX/DT
D4 0 33 19
RB0/AN12/FLT0/INT0 RD0/PSP0

Đây là mạch led 3 1


2
3
34
35
36
RB1/AN10/INT1
RB2/AN8/INT2
RD1/PSP1
RD2/PSP2
20
21
22
D5 RB3/AN9/CCP2A RD3/PSP3
đơn tích cực gì 4
4
5
6
37
38
39
RB4/KBI0/AN11
RB5/KBI1/PGM
RD4/PSP4
RD5/PSP5/P1B
27
28
29
RB6/KBI2/PGC RD6/PSP6/P1C
7 40 30
D6 RB7/KBI3/PGD RD7/PSP7/P1D
5 8
RE0/RD/AN5
9
RE1/W R/AN6
10
D7 RE2/CS/AN7
1
RE3/MCLR/VPP
6
PIC18F4520
D8
7
B. NỘI DUNG THỰC HÀNH. Chương trình chính

II. Các bước thực hành Chọn PORTB làm đầu ra


PORTB = 0b00000000
2. Lập trình điều khiển 8 led đơn bằng Gọi hàm Delay 0,1s
phương pháp thủ công PORTB = 0b00000001
b. Chương trình điều khiển 8 led đơn Gọi hàm Delay 0,1s
sáng dần từ trên xuống PORTB = 0b00000011
Gọi hàm Delay 0,1s
PORTB = 0b00000111
Gọi hàm Delay 0,1s
Lưu đồ giải thuật PORTB = 0b00001111
Gọi hàm Delay 0,1s
PORTB = 0b00011111
Gọi hàm Delay 0,1s
PORTB = 0b00111111
Gọi hàm Delay 0,1s
PORTB = 0b01111111
Gọi hàm Delay 0,1s
PORTB = 0b11111111
Gọi hàm Delay 0,1s
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
2. Lập trình điều khiển 8 led đơn bằng phương pháp thủ công
b. Chương trình điều khiển 8 led đơn sáng
dần từ trên xuống
Chương trình
#include <p18f4520.h>
#include <delays.h>
#pragma config OSC = HS // chon dao dong ngoài tan so cao
#pragma config LVP = OFF //cho phep su dung nguon tu mach nap
#pragma config MCLRE = OFF // cho phep reset
#pragma config PBADEN = OFF // tat chuc nang analog cua PortB
Chương trình chính
void main (void)
{
Chọn PORTB làm đầu ra TRISB = 0x00
PORTB = 0b00000000 while(1)
Gọi hàm Delay 0,1s {
PORTB = 0b00000001
PORTB= 0b00000000;
Delay10KTCYx(20);
Gọi hàm Delay 0,1s PORTB= 0b00000001;
PORTB = 0b00000011 Delay10KTCYx(20);
Gọi hàm Delay 0,1s PORTB= 0b00000011;
PORTB = 0b00000111 Delay10KTCYx(20);
Gọi hàm Delay 0,1s
PORTB= 0b00000111;
Delay10KTCYx(20);
PORTB = 0b00001111 PORTB= 0b00001111;
Gọi hàm Delay 0,1s Delay10KTCYx(20);
PORTB = 0b00011111 PORTB= 0b00011111;
Gọi hàm Delay 0,1s Delay10KTCYx(20);
PORTB = 0b00111111 PORTB= 0b00111111;
Delay10KTCYx(20);
Gọi hàm Delay 0,1s PORTB= 0b01111111;
PORTB = 0b01111111 Delay10KTCYx(20);
Gọi hàm Delay 0,1s PORTB= 0b11111111;
PORTB = 0b11111111 Delay10KTCYx(20);
Gọi hàm Delay 0,1s }
}
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
3. Lập trình điều khiển 8 led đơn bằng phương pháp truy xuất mảng 1 chiều
a. Mạch nguyên lý D1
0
U1
2 15
D2 3
RA0/AN0/C1IN- RC0/T1OSO/T13CKI
16
RA1/AN1/C2IN- RC1/T1OSI/CCP2B
1 4 17
RA2/AN2/C2IN+/VREF-/CVREF RC2/CCP1/P1A
5 18
RA3/AN3/C1IN+/VREF+ RC3/SCK/SCL
6 23
D3 7
RA4/T0CKI/C1OUT RC4/SDI/SDA
24
RA5/AN4/SS/HLVDIN/C2OUT RC5/SDO
2 14 25
RA6/OSC2/CLKO RC6/TX/CK
13 26
RA7/OSC1/CLKI RC7/RX/DT
D4 0 33 19
RB0/AN12/FLT0/INT0 RD0/PSP0
3 1 34 20
RB1/AN10/INT1 RD1/PSP1
2 35 21
RB2/AN8/INT2 RD2/PSP2
3 36 22
D5 4 37
RB3/AN9/CCP2A RD3/PSP3
27
RB4/KBI0/AN11 RD4/PSP4
4 5 38 28
RB5/KBI1/PGM RD5/PSP5/P1B
6 39 29
RB6/KBI2/PGC RD6/PSP6/P1C
7 40 30
D6 RB7/KBI3/PGD RD7/PSP7/P1D
5 8
RE0/RD/AN5
9
RE1/WR/AN6
10
D7 RE2/CS/AN7
1
RE3/MCLR/VPP
6
PIC18F4520
D8
7
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
3. Lập trình điều khiển 8 led đơn bằng phương pháp truy xuất mảng 1 chiều
b. Chương trình điều khiển 8 led Chương trình chính
đơn sáng dần từ trên xuống
Khai báo 1 mảng gồm 9 giá trị sau:
0b00000000 , 0b00000001 , 0b00000011 ,
0b00000111 , 0b00001111 , 0b00011111 ,
0b00111111 , 0b01111111 , 0b11111111
Lưu đồ giải thuật
Chọn PORTB làm đầu ra

Khai báo biến i (i=0)

PORTB=giá trị thứ i của mảng

Gọi hàm Delay 0,1s

Gái trị i tăng lên 1

Đ
i<9

S
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
3. Lập trình điều khiển 8 led đơn bằng phương pháp truy xuất mảng 1 chiều
b. Chương trình điều khiển 8 led
đơn sáng dần từ trên xuống
Chương trình
#include <p18f4520.h>
#include <delays.h>
#pragma config OSC = HS // chon dao dong ngoài tan so cao
#pragma config LVP = OFF //cho phep su dung nguon tu mach nap
#pragma config MCLRE = OFF // cho phep reset
#pragma config PBADEN = OFF // tat chuc nang analog cua PortB
char hieu_ung1[9]={0b00000000,0b00000001,0b00000011,
0b00000111,0b00001111,0b00011111,
Chương trình chính 0b00111111,0b01111111,0b11111111};
 
Khai báo 1 mảng gồm 9 giá trị sau:
0b00000000 , 0b00000001 , 0b00000011 ,
0b00000111 , 0b00001111 , 0b00011111 ,
0b00111111 , 0b01111111 , 0b11111111
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
3. Lập trình điều khiển 8 led đơn bằng phương pháp truy xuất mảng 1 chiều
b. Chương trình điều khiển 8 led đơn sáng dần từ trên xuống

void main (void)


Chọn PORTB làm đầu ra {
TRISB = 0x00;
Khai báo biến i (i=0) while(1)
{
PORTB=giá trị thứ i của mảng
int i;
Gọi hàm Delay 0,1s for(i=0;i<9;i++)
{
Gái trị i tăng lên 1 PORTB=hieu_ung1[i];
Delay10KTCYx(20);
Đ }
i<9
}
S
}
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
4. Chương trình điều khiển 8 led đơn thực hiện nhiều hiệu ứng khác nhau
a. Mạch nguyên lý D1
0
U1
2 15
D2 3
RA0/AN0/C1IN- RC0/T1OSO/T13CKI
16
RA1/AN1/C2IN- RC1/T1OSI/CCP2B
1 4 17
RA2/AN2/C2IN+/VREF-/CVREF RC2/CCP1/P1A
5 18
RA3/AN3/C1IN+/VREF+ RC3/SCK/SCL
6 23
D3 7
RA4/T0CKI/C1OUT RC4/SDI/SDA
24
RA5/AN4/SS/HLVDIN/C2OUT RC5/SDO
2 14 25
RA6/OSC2/CLKO RC6/TX/CK
13 26
RA7/OSC1/CLKI RC7/RX/DT
D4 0 33 19
RB0/AN12/FLT0/INT0 RD0/PSP0
3 1 34 20
RB1/AN10/INT1 RD1/PSP1
2 35 21
RB2/AN8/INT2 RD2/PSP2
3 36 22
D5 4 37
RB3/AN9/CCP2A RD3/PSP3
27
RB4/KBI0/AN11 RD4/PSP4
4 5 38 28
RB5/KBI1/PGM RD5/PSP5/P1B
6 39 29
RB6/KBI2/PGC RD6/PSP6/P1C
7 40 30
D6 RB7/KBI3/PGD RD7/PSP7/P1D
5 8
RE0/RD/AN5
9
RE1/WR/AN6
10
D7 RE2/CS/AN7
1
RE3/MCLR/VPP
6
PIC18F4520
D8
7
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
4. Chương trình điều khiển 8 led đơn thực hiện nhiều hiệu ứng khác nhau
b. Chương trình điều khiển 8 led Chương trình chính
đơn sáng dần từ trên xuống và Chọn PORTB làm đầu ra
sáng chạy từ trên xuống, mỗi
hiệu ứng thực hiện 4 lần Khai báo biến x (x=0)

Gọi hàm Sáng dần trên xuống


 Sử dụng phương pháp thủ công, Giá trị x tăng lên 1
kết hợp chương trình con Đ x<4
S
Khai báo biến x (x=0)
Lưu đồ giải thuật Gọi hàm Sáng chạy trên xuống
Giá trị x tăng lên 1
Đ x<4
S
B. NỘI DUNG THỰC HÀNH.
II. Các bước thực hành
4. Chương trình điều khiển 8 led đơn thực hiện nhiều hiệu ứng khác nhau
b. Chương trình điều khiển 8 led đơn sáng dần từ trên xuống và sáng chạy từ trên
xuống, mỗi hiệu ứng thực hiện 4 lần
 Sử dụng phương pháp thủ công, kết hợp chương trình con
Chương trình

#include <p18f4520.h>
#include <delays.h>
#pragma config OSC = HS // chon dao dong ngoài tan so cao
#pragma config LVP = OFF //cho phep su dung nguon tu mach nap
#pragma config MCLRE = OFF // cho phep reset
#pragma config PBADEN = OFF // tat chuc nang analog cua
PortB
B. NỘI DUNG THỰC HÀNH. Chương trình
II. Các bước thực hành void sangdantx (void)
{
4. Chương trình điều khiển 8 led đơn thực PORTB= 0b00000000;
hiện nhiều hiệu ứng khác nhau Delay10KTCYx(20);
PORTB= 0b00000001;
Delay10KTCYx(20);
PORTB= 0b00000011;
b. Chương trình điều khiển 8 led đơn sáng
Delay10KTCYx(20);
dần từ trên xuống và sáng chạy từ trên PORTB= 0b00000111;
xuống, mỗi hiệu ứng thực hiện 4 lần Delay10KTCYx(20);
PORTB= 0b00001111;
Delay10KTCYx(20);
 Sử dụng phương pháp thủ công, kết hợp PORTB= 0b00011111;
Delay10KTCYx(20);
chương trình con
PORTB= 0b00111111;
Delay10KTCYx(20);
PORTB= 0b01111111;
Delay10KTCYx(20);
PORTB= 0b11111111;
Delay10KTCYx(20);
}
B. NỘI DUNG THỰC HÀNH. Chương trình
void sangchaytx (void)
II. Các bước thực hành
{
4. Chương trình điều khiển 8 led đơn thực PORTB= 0b00000000;
hiện nhiều hiệu ứng khác nhau Delay10KTCYx(20);
PORTB= 0b00000001;
Delay10KTCYx(20);
PORTB= 0b00000010;
b. Chương trình điều khiển 8 led đơn sáng Delay10KTCYx(20);
dần từ trên xuống và sáng chạy từ trên PORTB= 0b00000100;
xuống, mỗi hiệu ứng thực hiện 4 lần Delay10KTCYx(20);
PORTB= 0b00001000;
Delay10KTCYx(20);
 Sử dụng phương pháp thủ công, kết hợp PORTB= 0b00010000;
Delay10KTCYx(20);
chương trình con
PORTB= 0b00100000;
Delay10KTCYx(20);
PORTB= 0b01000000;
Delay10KTCYx(20);
PORTB= 0b10000000;
Delay10KTCYx(20);
}
B. NỘI DUNG THỰC HÀNH.
Chương trình

void main (void) Chương trình chính`


{
TRISB = 0x00; Chọn PORTB làm đầu ra
while(1) Khai báo biến x (x=0)
{
int x; Gọi hàm Sáng dần trên xuống
for(x=0;x<4;x++) Giá trị x tăng lên 1
{
sangdantx(); Đ x<4
} S
for(x=0;x<4;x++) Khai báo biến x (x=0)
{
sangchaytx(); Gọi hàm Sáng chạy trên xuống
} Giá trị x tăng lên 1
}
} Đ x<4
S
B. NỘI DUNG THỰC HÀNH.
III. Bài tập thực hành

1. Viết chương trình điều khiển 8 led đơn tích cực dương thực hiện các
hiệu ứng sáng led bằng phương pháp thủ công.

2. Viết chương trình điều khiển 8 led đơn tích cực âm thực hiện hiệu
ứng sáng led bằng phương pháp truy xuất mảng 1 chiều.

3. Lập trình mở rộng với 10 led đơn.

4. Lập trình mở rộng với 16 led đơn.

You might also like