Tải bản đầy đủ (.pdf) (105 trang)

THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.06 MB, 105 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG
KHOA ĐIỆN - ĐIỆN TỬ

THỰC HÀNH LẬP TRÌNH C CHO
VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO

Biên soạn: Đặng Thành Tựu

Vĩnh Long, tháng 10 năm 2019


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

Mục lục
Phần 1: LẬP TRÌNH VI ĐIỀU KHIỂN MCS51 ...............................................................................................5
Bài thực hành số 1: LẬP TRÌNH ĐIỀU KHIỂN LED ĐƠN .......................................................................6
1.

MỤC ĐÍCH – YÊU CẦU: ...................................................................................................................6

2.

CƠ SỞ LÝ THUYẾT: .........................................................................................................................6

3.

TRÌNH TỰ THỰC HIỆN: ..................................................................................................................7

Bài thực hành số 2: GIAO TIẾP NÚT NHẤN VÀ RELAY .......................................................................10
1.


MỤC ĐÍCH – YÊU CẦU: .................................................................................................................10

2.

CƠ SỞ LÝ THUYẾT : .......................................................................................................................10

3.

TRÌNH TỰ THỰC HIỆN: ................................................................................................................10

Bài thực hành số 3: LẬP TRÌNH ĐIỀU KHIỂN LED 7 ĐOẠN ...............................................................14
1.

MỤC ĐÍCH – U CẦU...................................................................................................................14

2.

CƠ SỞ LÝ THUYẾT .........................................................................................................................14

3.

TRÌNH TỰ THỰC HIỆN: ................................................................................................................14

Bài thực hành số 4: LẬP TRÌNH ĐIỀU KHIỂN LED MA TRẬN ..........................................................19
1. Muc đích – yêu cầu: ...............................................................................................................................19
2. CƠ SỞ LÝ THUYẾT:............................................................................................................................19
3. TRÌNH TỰ THỰC HIỆN......................................................................................................................20
Bài thực hành số 5: LẬP TRÌNH ĐIỀU KHIỂN ĐĨNG/CẮT ĐỘNG CƠ DC .......................................24
1.


MỤC ĐÍCH – YÊU CẦU: .................................................................................................................24

2.

CƠ SỞ LÝ THUYẾT: .......................................................................................................................24

3.

TRÌNH TỰ THỰC HIỆN: ................................................................................................................24

Bài thực hành số 6: LẬP TRÌNH ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC .............................................27
1. MỤC ĐÍCH – YÊU CẦU: .....................................................................................................................27
2. CƠ SỞ LÝ THUYẾT:............................................................................................................................27
Độ rộng xung:𝐷𝑢𝑡𝑦 = 𝑇𝑜𝑛𝑇 ∗ 100% .........................................................................................................27
3. TRÌNH TỰ THỰC HIỆN: ....................................................................................................................27
Bài thực hành số 7: LẬP TRÌNH HIỂN THỊ LCD.....................................................................................32
1. MỤC ĐÍCH – YÊU CẦU: .....................................................................................................................32
2. CƠ SỞ LÝ THUYẾT:............................................................................................................................32
3. TRÌNH TỰ THỰC HIỆN: ....................................................................................................................33
4. BÀI TẬP: ................................................................................................................................................38
Bài thực hành số 9: LẬP TRÌNH ĐẾM SẢN PHẨM .................................................................................39
1. MỤC ĐÍCH – YÊU CẦU: .....................................................................................................................39
2. CƠ SỞ LÝ THUYẾT:............................................................................................................................39

Khoa Điện – Điện tử

2


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3. TRÌNH TỰ THỰC HIỆN: ....................................................................................................................39
Bài thực hành số 10: LẬP TRÌNH ĐỒNG HỒ SỐ HIỂN THỊ LED 7 ĐOẠN.........................................44
1. MỤC ĐÍCH – YÊU CẦU: .....................................................................................................................44
2. CƠ SỞ LÝ THUYẾT:............................................................................................................................44
3. TRÌNH TỰ THỰC HIỆN: ....................................................................................................................44
Bài thực hành số 11: LẬP TRÌNH ĐO LƯỜNG VÀ HIỂN THỊ NHIỆT ĐỘ LÊN LCD .......................49
1. MỤC ĐÍCH – YÊU CẦU: .....................................................................................................................49
2. CƠ SỞ LÝ THUYẾT:............................................................................................................................49
3. TRÌNH TỰ THỰC HIỆN......................................................................................................................53
Phần 2: Lập trình Arduino ...............................................................................................................................60
Bài thực hành số 1: LẬP TRÌNH ĐIỀU KHIỂN LED ĐƠN .....................................................................61
1.

Mục đích: ............................................................................................................................................61

2.

Yêu cầu: ..............................................................................................................................................61

3.

Kết nối phần cứng: .............................................................................................................................61

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................61

5.

Bài tập: ................................................................................................................................................62


Bài thực hành số 2: LẬP TRÌNH GIAO TIẾP LED ĐƠN VÀ NÚT NHẤN............................................63
1.

Mục đích: ............................................................................................................................................63

2.

Yêu cầu: ..............................................................................................................................................63

3.

Kết nối phần cứng:.............................................................................................................................63

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................64

5.

Bài tập: ................................................................................................................................................64

Bài thực hành số 3: LẬP TRÌNH ARDUINO ĐIỀU KHIỂN 8 LED ĐƠN ..............................................65
1.

Mục đích: ............................................................................................................................................65

2.

Yêu cầu: ..............................................................................................................................................65


3.

Kết nối phần cứng:.............................................................................................................................65

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................66

5.

Bài tập: ................................................................................................................................................67

Bài thực hành số 4: LẬP TRÌNH ARDUINO ĐIỀU KHIỂN LED 7 ĐOẠN ...........................................68
1.

Mục đích: ............................................................................................................................................68

2.

Yêu cầu: ..............................................................................................................................................68

3.

Kết nối phần cứng:.............................................................................................................................68

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................69


5.

Bài tập: ................................................................................................................................................72

Bài thực hành số 5: LẬP TRÌNH ARDUINO ĐỌC GIÁ TRỊ ANALOG ................................................73

Khoa Điện – Điện tử

3


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino
1.

Mục đích: ............................................................................................................................................73

2.

Yêu cầu: ..............................................................................................................................................73

3.

Kết nối phần cứng:.............................................................................................................................73

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................74

5.


Bài tập: ................................................................................................................................................75

Bài thực hành số 6: LẬP TRÌNH ĐIỀU KHIỂN LED MA TRẬN ...........................................................76
1.

Mục đích: ............................................................................................................................................76

2.

Yêu cầu: ..............................................................................................................................................76

3.

Kết nối phần cứng:.............................................................................................................................76

4.

BÀI TẬP .............................................................................................................................................78

Bài thực hành số 7: LẬP TRÌNH ĐIỀU KHIỂN ĐỘNG CƠ DC..............................................................79
1.

Mục đích: ............................................................................................................................................79

2.

Yêu cầu: ..............................................................................................................................................79

3.


Kết nối phần cứng:.............................................................................................................................79

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................80

5.

Bài tập: ................................................................................................................................................81

Bài thực hành số 8: LẬP TRÌNH GIAO TIẾP ARDUINO VỚI LCD......................................................82
1.

Mục đích: ............................................................................................................................................82

2.

u cầu: ..............................................................................................................................................82

3.

Kết nối phần cứng:.............................................................................................................................82

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................83

5.

Bài tập: ................................................................................................................................................84


Bài thực hành số 9: LẬP TRÌNH ĐO NHIỆT ĐỘ MÔI TRƯỜNG DÙNG LM35 HIỂN THỊ LÊN LCD
VÀ SERIAL MONITOR. ..............................................................................................................................85
1.

Mục đích: ............................................................................................................................................85

2.

Yêu cầu: ..............................................................................................................................................85

3.

Kết nối phần cứng:.............................................................................................................................85

4.

Lưu đồ giải thuật và chương trình: ..................................................................................................85

5.

Bài tập: ................................................................................................................................................87

Phụ lục 1 : HƯỚNG DẪN CÀI ĐẶT MIKROC FOR 8051 .......................................................................88
Phụ lục 2 : HƯỚNG DẪN SỬ DỤNG MIKROC FOR 8051 .....................................................................92
Phụ lục 3 : CÁC LINH KIỆN THƯỜNG DÙNG KHI MÔ PHỎNG PROTEUS ...................................99
Phụ lục 4: HƯỚNG DẪN SỬ DỤNG CƠ BẢN PHẦN MỀM Arduino IDE ..........................................102
Tài liệu tham khảo: ......................................................................................................................................105

Khoa Điện – Điện tử


4


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

PHẦN 1:
LẬP TRÌNH VI ĐIỀU KHIỂN MCS51

Khoa Điện – Điện tử

5


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

Bài thực hành số 1: LẬP TRÌNH ĐIỀU KHIỂN LED ĐƠN
1. MỤC ĐÍCH – U CẦU:
1.1 Mục đích:
- Lập trình điều khiển từng Port, từng chân (pin) của vi điều khiển.
- Sử dụng lệnh: gán, dịch, và lập trình mảng.
1.2 Yêu cầu:
- Điều khiển được từng Port, từng pin vi điều khiển.
- Sử dụng thành thạo các phép toán gán, dịch, tạo và truy xuất mảng.
2. CƠ SỞ LÝ THUYẾT:

Sơ đồ ngun lý và hình bố trí linh kiện của 32 con LED đơn trên KIT MC-1000
- 32 LED đơn chia làm 4 nhóm, mổi nhóm 8 led. Cực Katode của led nối xuống mass cực
Anod được nối ra các Pin Header thông qua điện trở 330Ω.
- Led sáng: Mức logic tích cực là 1 (5volt), led tắt: mức logic 0 (0volt).

Thực tế, tùy thuộc cách mắc LED mà mức logic tích cực có thể 0 hoặc 1.
LED D1 sáng mức 0.
P3.B7 = 0;
LED D2 sáng mức 1.
P2.B0 = 1;

Khoa Điện – Điện tử

6


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3. TRÌNH TỰ THỰC HIỆN:
3.1 Yêu cầu đặt ra: Điều khiển 8 led sáng dần từ phải qua trái. Với thời gian dịch chuyển
là 0,5 giây.
3.2 Kết nối phần cứng:
Kết nối trên KIT: Dùng Jump bẹ 8 nối PORT2 với 8 LED đơn.

Mạch thực
tế trên KIT

U19
19

18

9

29

30
31

1
2
3
4
5
6
7
8

XTAL1

XTAL2

RST

PSEN
ALE
EA

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7


P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

39
38
37
36

35
34
33
32

Mô phỏng
trên Proteus

21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17

R1

R2

R3


R4

R5

R6

R7

R8

330

330

330

330

330

330

330

330

D1

D2


D3

D4

D5

D6

D7

D8

AT89C52

Khoa Điện – Điện tử

7


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3.3. Giải thuật và viết chương trình.
Cách 1: Dùng phương pháp gán giá trị trực tiếp.
Cấu trúc: P2 = 0b00000011; hoặc P2 = 3; hoặc P2 = 0x03;
void main() {
while(1) {
p2=0;
delay_ms(500);
p2=0b00000001;

delay_ms(500);
p2=0b00000011;
delay_ms(500);
p2=0b00000111;
delay_ms(500);
p2=0b00001111;
delay_ms(500);
p2=0b00011111;
delay_ms(500);
p2=0b00111111;
delay_ms(500);
p2=0b01111111;
delay_ms(500);
p2=0b11111111;
delay_ms(500); }}

Tắc hết led
Sáng LED 1
Sáng LED 2
Sáng LED 3
Sáng LED 4
Sáng LED 5
Sáng LED 6
Sáng LED 7
Sáng LED 8

Cách 2: Dùng lệnh dịch trái
Cấu trúc: P2 = P2<<1; hoặc P2<<=1;

Khoa Điện – Điện tử


8


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

char i;
void main()
{

Bắt đầu

P2=0

while(1)

Lặp vô tận

p2=0;
for(i=0;i<8;i++)
{p2++;
delay_ms(500);
p2<<=1;
}
}
}

Led tắt hết
Chạy 8 lần
Cho sáng led cuối

Trễ 500ms
Dịch trái 1 bit

{
i=0
i=0

i<8

Tăng P2
Trễ
Dịch trái P2

T

F

Kết thúc

Cách 3: Sử dụng mảng 1 chiều
Cấu trúc:
- Khai báo mãng: Kiểu mảng tên_mảng[số phần tử]={giá trị thứ 0, GT thứ 1,…};
- Truy xuất: m = tên_mảng[chỉ số mảng];
char i;
char maled[8]={1,3,7,15,31, Khai báo mảng
63,127,255};
maled có 8
void main()
phần tử
{


Bắt đầu

i=0
i=0

i<8

T

F

Tăng P2
Trễ
Dịch trái P2

while(1) {
for(i=0;i<8;i++)
{delay_ms(500);
p2=maled[i];
}
}
}

Gán P2 = mã
led thứ i

Kết thúc

3.4. Mô phỏng mạch điện cho các đoạn code trên.

3.5. Dùng mạch nạp để nạp đoạn code trên máy tính vào vi điều khiển.
3.6. Gắn vi điều khiển vào KIT, cấp nguồn chạy thực tế.
4. BÀI TẬP
4.1. Thực hiện lại yêu cầu với 16 LED.
4.2 Thiết kế phần cứng và lập trình điều khiển 8 LED sáng tắt, sáng dần, tắt dần.
4.3 Thiết kế phần cứng và lập trình điều khiển 16 LED sáng hình xếp quạt.
4.4 Thiết kế phần cứng và lập trình cho 32 LED xếp hình trái tim với 3 kiểu sáng khác nhau.

Khoa Điện – Điện tử

9


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

Bài thực hành số 2: GIAO TIẾP NÚT NHẤN VÀ RELAY
1. MỤC ĐÍCH – U CẦU:
1.1 Mục dích:
- Lập trình nhập/xuất các PORT của vi điều khiển.
1.2 Yêu cầu:
- Kết nối được sơ đồ giao tiếp giữa vi điều khiển, phím ấn đơn, relay.
2. CƠ SỞ LÝ THUYẾT :
Cần xác định 2 vấn đề:
- Cách mắc phím ấn: đối với dịng MCS51, do có sẵn điện trở kéo lên tại các Port 1,2,3 cho
nên phím ấn sẽ được mắc nối mass (GND).
- Phân biệt 2 trạng thái phím ấn: hiện tại đang ấn và hiện tại không ấn.

Hiện tại không ấn, trạng thái pin P1.0 = 1

Hiện tại đang ấn, trạng thái pin P1.0 = 0

3. TRÌNH TỰ THỰC HIỆN:
3.1 Yêu cầu đặt ra:
Điều khiển 1 LED đơn bằng 2 phím nhấn thỏa yêu cầu:
+ Ấn SW1: LED sáng
+ Ấn SW2: LED tắt
3.2 Kết nối phần cứng:
+ Sơ đồ nối trên KIT:
- Dùng Jump bẹ nối PORT3 với LED đơn
- DùngJump bẹ 4 nối SW với P3.0 đến p3.3 trên PORT3 ( lưu ý nối vào trước PORT3
vị trí trước IC đệm)

Khoa Điện – Điện tử

10


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

+ Sơ đồ nguyên lý mô phỏng trên Proteus:
U20

U20
19

18

9

29
30

31

1
2
3
4
5
6
7
8

XTAL1

XTAL2

RST

PSEN
ALE
EA

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7


P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

19

39
38
37

36
35
34
33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17

18

9

XTAL1

P0.0/AD0
P0.1/AD1

P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7

XTAL2

RST

R9

P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15

330

D9

SW1

SW2


29
30
31

1
2
3
4
5
6
7
8

PSEN
ALE
EA

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1

P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17


R9
330

D9

SW1

SW2

AT89C52

AT89C52

Lúc ấn phím SW1 – LED sáng

Khoa Điện – Điện tử

Lúc ấn phím SW2 – LED tắt

11


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3.3 Giải thuật và viết chương trình
+ Giải thuật:

+ Chương trình:
#define sw1 P3.b0
#define sw2 P3.B3

#define led P2.b0
void main(){
led = 0;
while(1)
{ if(sw1==0) led=1;
if(sw2==0) led=0;}}
3.4 Mô phỏng đoạn code.
3.5 Dùng mạch nạp để nạp code vào vi điều khiển
3.6 Gắn vi điều khiển vào KIT, cấp nguồn chạy thực tế.
4. BÀI TẬP
4.1 Thực hiện lại chương trình với yêu cầu dùng 6 phím ấn điều khiển 2 LED đơn như sau:

LED1

ON1

OFF1

Sáng

Tắt

LED2

Khoa Điện – Điện tử

ON2

Sáng


OFF2

Tắt

ON

OFF

Sáng

Tắt

Sáng

Tắt

12


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

4.2 Viết chương trình dùng 1 phím ấn điều khiển 1 LED đơn như sau:
- Mỗi khi ấn phím sẽ làm thay đổi trạng thái của LED.
Gợi ý: dùng chống dọi phím và lệnh đảo trạng thái (hoặc đặt cờ báo trạng thái).
4.3 Thực hiện lại bài 4.2 với 2 phím ấn điều khiển 2 LED đơn.
4.4 Chương trình dùng 2 phím điều khiển 8 LED đơn như sau:
- Phím 1: mỗi lần nhấn có thêm 1 LED sáng
- Phím 2: mỗi lần nhấn sẽ tắt đi 1 LED.
4.5 Viết chương trình dùng 3 phím ấn điều khiển 8 LED đơn hoạt động như sau:
- Ấn phím 1: 8 LED chớp tắt xen kẻ.

- Ấn phím 2: 8 LED chạy sáng dần từ phải qua trái.
- Ấn phím 3: 8 LED sáng dạng sâu 3 đốt bò từ trái qua phải.
Lưu ý: khi 8 LED đang chạy mà ấn phím bất kỳ thì chương trình chuyển qua chạy chương
trình tương ứng ngay lập tức (không chờ chạy xong chương trình).

Khoa Điện – Điện tử

13


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

Bài thực hành số 3: LẬP TRÌNH ĐIỀU KHIỂN LED 7 ĐOẠN
1. MỤC ĐÍCH – U CẦU
1.1. Mục đích:
- Mục đích điều khiển LED 7 đoạn.
- Sử dụng phương pháp quét để điều khiển 8 LED 7 đoạn.
1.2. Yêu cầu:
- Kết nối được sơ đồ mạch giữa vi điều khiển với LED 7 đoạn.
- Hiện thị thông tin lên 8 LED 7 đoạn bằng phương pháp quét
2. CƠ SỞ LÝ THUYẾT

- Để điều khiển 8 led 7 đoạn phải dùng: 8 đường dữ liệu 7 đoạn, 8 đường điều khiển
chọn LED.
- Tại mỗi một thời điểm ta chỉ cho 1 transistor dẫn và 7 transistor còn lại tắt.
- Với tốc độ gửi dữ liệu nhanh và mắt lưu ảnh nên chỉ nhìn thấy 8 led sáng cùng 1 lúc.
- Mã quét: mức logic 0 thì transistor dẫn, mức logic 1 thì transistor ngắt.
- Mã led 7 đoạn có hỗ trợ trong chương trình giao tiếp với KIT.

3. TRÌNH TỰ THỰC HIỆN:

3.1. Yêu cầu đặt ra: + Điều khiển 8 LED 7 đoạn hiện thị số 01234567.
+ Điều khiển 8 LED 7 đoạn hiện thị số 00 -99

Khoa Điện – Điện tử

14


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3.2. Kết nối phần cứng:
+ Trên KIT thực hành
Dùng 2 Jump 8 nối PORT0 với DATA và PORT2 với SCAN của led 7 đoạn

+ Mô phỏng trên Proteus:
U1

9

29
30
31

1
2
3
4
5
6
7

8

XTAL2

RST

PSEN
ALE
EA

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10

P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

39
38
37
36
35
34
33
32

A
B
C
D
E
F
G

P

21
22
23
24
25
26
27
28

1i
2i
3i
4i
5i
6i
7i
8i

10
11
12
13
14
15
16
17

U2

1i

Khoa Điện – Điện tử

5i

2o

6i

U3
NOT
2i

3i

NOT

NOT

6o

U8
3o

7i

U5
4i


5o

U7
NOT

U4

NOT

AT89C52

U6
1o

1o
2o
3o
4o
5o
6o
7o
8o

18

XTAL1

A
B
C

D
E
F
G
P

19

NOT

7o

U9
4o

8i

NOT

8o

NOT

15


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3.3. Giải thuật và chương trình
a. Đếm từ 0 – 9

void main() {
P2.B0=0; // chọn LED thứ 0 sáng
while(1) {
P0=0xC0;

// Hiện số 0

delay_ms(1000);
P0=0xF9; // Hiện số 1
delay_ms(1000);
P0=0xA4;// Hiện số 2
delay_ms(1000);
P0=0xB0;// Hiện số 3
delay_ms(1000);
P0=0x99;// Hiện số 3
delay_ms(1000);
P0=0x92;// Hiện số 4
delay_ms(1000);
P0=0x82; // Hiện số 5
delay_ms(1000);
P0=0xF8;// Hiện số 6
delay_ms(1000);
P0=0X80;// Hiện số 7
delay_ms(1000);
P0=0X90;// Hiện số 8
delay_ms(1000);
}
}

Khoa Điện – Điện tử


16


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

b. Đếm 00 – 99
+ Giải thuật

+Chương trình:
#define ledchuc P2.b0 // Chân điều khiển LED hàng chục
#define leddonvi P2.b1 // Chân điều khiển LED đơn vị
#define leddata P0 // port 0 xuất dữ liệu ra LED
// mã led 7 đoạn
char so1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void hienthi(char so, unsigned int time){ //hàm hiển thị
char chuc, donvi, i;
time = time / 10;
chuc = so / 10;
donvi = so % 10;
for(i=0;i{ledchuc = 0;
leddata = so1[chuc];
delay_ms(10);
ledchuc = 1;

Khoa Điện – Điện tử

17



Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

leddonvi = 0;
leddata = so1[donvi];
delay_ms(10);
leddonvi = 1;
}}
void main() {
while(1){
int c;
for(c=0;c<99;c++){ // c t?ng t? 0 - 99
hienthi(c,1000); // hiển thị biến c thời gian trễ là 1000
}
}}
3.4. Mô phỏng mạch điện và đoạn code trên.
3.5. Dùng mạch nạp để nạp đoạn code trên máy tính bvào vi điều khiển.
3.6. Gắn vi điều khiển vàp KIT, cấp nguồn chạy thực tế.
3.7. Thay đổi thời gian trể ( DELAY) đưa ra nhận xét:
- Khi tăng thời gian trể thì hiện tượng gì xãy ra? Vậy thời gian trể lớn nhất là bao
nhiêu để khắc phục hiện tượng đó ?
- Khi giảm thời gian trể thì hiện tượng gì xãy ra? Vậy thời gian trể nhỏ nhất là
bao nhiêu để khắc phục hiện tượng đó ?
- Xác định thời gian trể hợp lý nhất để 8 led sáng đều và rõ nhất?
3.8. Tại sao phải tắt hết các led sau mỗi lần hiển thị? Thử bỏ lệnh này tăng thời gian
làm trể để thấy rõ vấn đề hơn. Tác dụng của lệnh này loại là gì?
3.9. Hãy thay thế các giá trị HEX thành giá trị nhị phân.
3.10. Thực hiện lại yêu cầu trên sao cho 8 LED hiện thị từ 3 đến 9
4. BÀI TẬP
4.1. Viết trương trình điều khiển 8 LED hiện thị chữ DHSPKTVL.

4.2. Viết chương trình điều khiển LED 7 đoạn đếm từ 000 đến 999
4.3. Viết chương trình điều khiển 2 LED 7 đoạn đếm chính xác giây (00 đến 59) bằng
cách sử dụng Timer.
4.4. Thực hiện lại bài 4.3 với 4 LED 7 đoạn đém phút và giây.
4.5. Thực hiện tiếp bài 4.4 với 6 LED 7 đoạn đếm giờ phút giây.
4.6. Viết chương trình cho số 1 chạy từ trái sang phải trên 8 LED 7 đoạn.
4.7. Viết chương trình dùng 2 phím ấn điều khiển đếm 2 LED 7 đoạn như sau:
- Mỗi lần ấn phím INC thì LED 7 đoạn tăng lên 1 đơn vị, tối đa là 24.
- Mỗi lần ấn phím DEC thì LED 7 đoạn giame 1 đơn vị, tối đa là 0.

Khoa Điện – Điện tử

18


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

Bài thực hành số 4: LẬP TRÌNH ĐIỀU KHIỂN LED MA TRẬN
1. Muc đích – yêu cầu:
1.1. Mục đích:
Lập trình hiển thị ký tự lên led ma trận bằng phương pháp quét
1.2. Yêu cầu:
- Kết nối được sơ đổ mạch giữa LED ma trận và vi điều khiển 8051.
- Lập trình hiển thị chữ “A” lên LED ma trận 8x8 sử dụng phương pháp quét hàng.
2. CƠ SỞ LÝ THUYẾT:
- Cấu tạo LED ma trận là tập hợp các LED đơn được xếp thành các cột và các hàng.

Theo module LED ma trận trên KIT thực hành:

Khoa Điện – Điện tử


19


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

- Các hàng của LED ma trận được điều khiển bằng transsitor PNP nên mức logic tích
cực để đèn sáng cho cả hàng là mức 0.
- Các cột của LED ma trận để xuất dữ liệu, các cột của LED được nối đến Katod của
LED nên mức logic tích cực là mức 0.
→ dùng phương pháp quét để hiển thị lên LED ma trận.
Để hiện thị chữ “A”:
- Cần xuất dữ liệu lên các cột.
- Điều khiển hiển thị từng hàng.

3. TRÌNH TỰ THỰC HIỆN
3.1. Yêu cầu đặt ra: Hiển thị chữ A trên LED ma trận

Khoa Điện – Điện tử

20


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3.2.Kết nối phần cứng:
+ Kết nối trên KIT thực hành:
- Dùng Jump bẹ 8 kết nối PORT1 với ROW-SCAN
- Dùng Jump bẹ 8 kết nối PORT2 với COL-DATA


+ Mô phỏng trên Proteus:

18

9

29
30
31

H8
H7
H6
H5
H4
H3
H2
H1

1
2
3
4
5
6
7
8

XTAL1


XTAL2

RST

PSEN
ALE
EA

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

H1
H2
H3
H4
H5
H6
H7
H8

U10
19

P0.0/AD0

P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

39
38
37
36
35
34

33
32
21
22
23
24
25
26
27
28

C1
C2
C3
C4
C5
C6
C7
C8

U11
C1

U12
C2

U13
C3

10

11
12
13
14
15
16
17

NOT

NOT

U14
C4

NOT

U15
C5

NOT

U16
C6

AT89C52

NOT

U17

C7

NOT

U18
C8

NOT

NOT

Khoa Điện – Điện tử

21


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

3.4. Lưu đồ giải thuật và chương trình:
Lưu đồ giải thuật:

Chương trình:
char i,j;
char arrayCol[8]={0xE7,0xC3,0x99,0x3C,0x00,0x00,0x3C,0x3C}; //ma du lieu cot
char arrayRow[8]={0b01111111,0b10111111,0b11011111,0b11101111,0b11110111,
0b11111011,0b11111101,0b11111110}; //ma quet hang
void main() {
while(1)
{
for(i=0;i<8;i++)

{
P2=arrayCol[i]; //gan du lieu thu i trong arrayColcho PORT 2
P1=arrayRow[i]; //gan du lieu thu I trogn arrayRow cho PORT1
delay_ms(1); //tao tre 1 mili giay
P1=0xff; //cho PORT1 o muc cao de tat het LED
}
}
}

Khoa Điện – Điện tử

22


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

4. Bài tập:
4.1 Thực hiện lại yêu cầu trên với các ký tự B,C,…Z, các số 0,1,…9.
4.2 Viết chương trình để chữ A chạy từ trái sang phải và ngược lại.
4.3 Viết chương trình hiện tên của sinh viên lên LED ma trận, mỗi lần hiện 1 chữ cái, thời gian
hiện 1 giây.
4.4 Dùng 4 phím ấn (0,1,2,3) điều khiển LED ma trận như sau: Ấn phím thứ mấy thì LED ma
trận hiện số tương ứng.

Khoa Điện – Điện tử

23


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino


Bài thực hành số 5: LẬP TRÌNH ĐIỀU KHIỂN ĐĨNG/CẮT ĐỘNG
CƠ DC
1. MỤC ĐÍCH – U CẦU:

1.1. Mục đích:
- Điều khiển động cơ DC bằng L293.
1.2. Yêu cầu:
- Kết nối được sơ đồ mạch giữa vi điều khiển với L293.
- Lập trình điều khiển động cơ DC với các yêu cầu: quay/dừng, quay có định thời,
quay đảo chiều.

2.

CƠ SỞ LÝ THUYẾT:

Sơ đồ nguyên lý của mô đun thúc động cơ DC trên KIT thực hành:

Đây là mô đun điều khiển 2 động cơ. Xét động cơ 1(MOTOR1):
PWM1: để điều khiển động cơ quay hoặc dừng. Ở đây do PWM1 qua cổng NOT mới
đến chân 1 của L293 cho nên:
PWM1=0 → động cơ quay, PWM1=1 → động cơ dừng.
- DIR1: để điều khiển chiều quay của động cơ, quy ước:
DIR1=0 → động cơ quay thuận, DIR1=1 → động cơ quay ngược.
TRÌNH TỰ THỰC HIỆN:
3.1.Yêu cầu đặt ra: Điều khiển động cơ DC quay chiều thuận.
3.2. Kết nối phần cứng:
+ Kết nối trên KIT thực hành:
- Dùng Jump bẹ 2 nối P0.0 – PWM1, P0.1 – DIR1 trên PORT0 với Jump DCMOTOR.
- Dùng Jump bẹ 4 nối ngõ ra trên module điều khiển động cơ DC (MO1) với động cơ

DC rời.
-

3.

Khoa Điện – Điện tử

24


Thực hành Lập trình C cho Vi điều khiển MCS51 và Arduino

Lưu ý: P0.0=PWM1, P0.1=DIR1.
+ Mô phỏng trên Proteus:
U21
19

18

9

29
30
31

1
2
3
4
5

6
7
8

XTAL1

XTAL2

RST

PSEN
ALE
EA

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6

P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

39
38
37
36
35
34
33
32

U23
16


NOT
DIR

U24

2
7
1

PWM
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17

NOT

9

10
15

IN1
IN2
EN1

EN2
IN3
IN4

VSS

GND

8
VS OUT1
OUT2

OUT3
GND OUT4

U22
3
6

11
14

RP1

1

L293D

PWM 2
DIR 3
4
5
6
7
8
9
RESPACK-8

AT89C52

Khoa Điện – Điện tử

25


×