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

Arduino cho nguoi moi bat dau

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 (26.32 MB, 117 trang )

ARDUINO CHO NGƯỜI MỚI BẮT ĐẦU
Quyển cơ bản

minht57 lab


Lời nói đầu
Vi điều khiển là một thiết bị có thể lập trình được nhằm thực hiện các tác vụ định
sẵn. Thường việc lập trình này dành cho các kỹ sư có trình độ kỹ thuật nhất định và
thường rất khó khăn đối với các bạn học sinh tiếp cận. Nhờ sự ra đời của nền tảng
Arduino để đơn giản hóa việc tiếp cận với vi điều dành cho một cá nhân chưa biết gì
về lập trình vi điều khiển mà vẫn có thể tạo ra hàng nghìn ứng dụng khác nhau.
Quyển sách “Arduino cho người mới bắt đầu” (quyển cơ bản) được thiết kế cho các
bạn chưa biết hoặc biết một ít về lập trình Arduino. Nội dung sách chủ yếu viết về
định hướng suy nghĩ liên quan đến lập trình vi điều khiển nhằm mục tiêu phát triển
lâu dài, tạo một nền tảng căn bản nhất cho các bạn làm quen với lập trình vi điều
khiển. Bên cạnh đó, cung cấp cho bạn một số mẹo, thơng tin liên quan đến lập trình vi
điều khiển nói chung và Arduino nói riêng.
Quyển sách bao gồm 4 phần đi từ linh kiện điện tử cơ bản đến lập trình những module
quan trọng của Arduino.
Phần 1 (Linh kiện điện tử cơ bản) sẽ cho chúng ta một số kiến thức cơ bản về các loại
linh kiện điện tử thường dùng.
Phần 2 (Lập trình C cơ bản) sẽ cung cấp một số kiến thức cơ bản nhất về lập trình C hỗ
trợ cho lập trình cho vi điều khiển.
Phần 3 (Một số module ngoại vi quan trọng) sẽ cung cấp những kiến thức cốt lõi trong
lập trình vi điều khiển nói chung và Arduino nói riêng.
Phụ lục nhằm cung cấp thêm những thông tin, mạch điện bổ trợ.
minht57 lab


Hướng dẫn đọc sách


Bộ sách Arduino dành cho người mới bắt đầu gồm 3 quyển đi từ mức độ cơ bản đến
chuyên sâu bao gồm quyển cơ bản, quyển rất cơ bản và quyển khơng cịn là cơ bản.
Bộ sách này sẽ cung cấp cho bạn một tư duy làm việc với một vi điều khiển hơn là chỉ
thực hành Arduino đơn thuần.
Bộ 3 quyển sách sẽ cung cấp cho bạn rất nhiều thông tin ở mức căn bản dưới dạng từ
khóa và tóm tắt vấn đề (vì nếu giải thích vấn đề rõ ràng, chun sâu thì sẽ rất lan man
và dài dòng). Nếu bạn quan tâm một vấn đề nào cụ thể thì cứ dựa vào những từ khóa
đã được nêu ra và tìm hiểu thêm trên internet hoặc sách vở.
Vì mục tiêu của quyển sách là hướng đến những bạn học lập trình Arduino định
hướng chuyên sâu nên sách sẽ không tập trung vào từng module cảm biến, thiết bị
chấp hành hay một dự án nào cụ thể. Mà cấu trúc sách đi theo hướng học một vi điều
khiển tổng quát mà Arduino chỉ là một ví dụ cụ thể.
Nếu bạn chưa có kiến thức về lập trình Arduino thì quyển cơ bản được khuyên là bạn
đọc theo thứ tự các chương từ đầu đến cuối. Nếu một vấn đề mà bạn đã biết, bạn cũng
được khuyên là đọc lướt qua để tránh bỏ sót những thơng tin mà có thể bạn chưa biết
(vì khơng phải tất cả các thông tin quan trọng đều được in đậm hoặc nhấn mạnh).
Nếu bạn đã có kiến thức cơ bản về lập trình Arduino thì bạn có thể đọc một chương
bất kỳ mà bạn quan tâm. Nếu có thời gian thì bạn nên xem những chương mà bạn đã
biết để kiểm chứng cũng như xem liệu có kiến thức nào chưa biết hay không.
Nếu bạn cảm thấy văn phong hoặc cách tiếp cận của quyển sách không phù hợp với
bạn thì bạn có thể bỏ qua.
Trong q trình viết và biên soạn sách khơng thể tránh khỏi những sai sót về mặt nội
dung cũng như hình thức. Nhóm tác giả rất mong nhận được sự góp ý của các bạn
đọc để quyển sách ngày càng hồn thiện hơn và có thể truyền tải nội dung đến với
nhiều bạn đọc hơn.
Xin cảm ơn bạn đọc.
minht57 lab


Mục lục

Lời nói đầu

ii

Hướng dẫn đọc sách

iii

Mục lục

iv

LINH KIỆN ĐIỆN TỬ CƠ BẢN

1

1 ĐIỆN TỬ CƠ BẢN
1.1 Giới thiệu . . . .
1.2 Điện trở . . . . .
1.3 Tụ điện . . . . .
1.4 Cuộn cảm . . .
1.5 Diode . . . . . .
1.6 Transistor BJT .
1.7 MOSFET . . . .
1.8 IC logic cần biết
1.9 Op-amp . . . . .

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

LẬP TRÌNH C CƠ BẢN
2 LẬP TRÌNH C CƠ BẢN
2.1 Giới thiệu . . . . . . . . . . . . . . . . . . .
2.2 Các thành phần cơ bản trong ngôn ngữ C
2.3 Các hệ đếm . . . . . . . . . . . . . . . . . .
2.4 Biểu thức và phép toán . . . . . . . . . . .
2.5 Một số hàm C thường dùng . . . . . . . .
Hàm if . . . . . . . . . . . . . . . . . . . .
Hàm switch ... case . . . . . . . . . . . . .
Vòng lặp for . . . . . . . . . . . . . . . . .
Vòng lặp while . . . . . . . . . . . . . . . .
2.6 Hàm/Chương trình con . . . . . . . . . .
2.7 Mảng một chiều . . . . . . . . . . . . . . .

2.8 Con trỏ . . . . . . . . . . . . . . . . . . . .

2
2
2
5
7
8
8
9
10
11

12
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

MỘT SỐ MODULE NGOẠI VI QUAN TRỌNG
3 GENERAL PURPOSE INPUT/OUTPUT – GPIO
3.1 Giới thiệu . . . . . . . . . . . . . . . . . . . . .
3.2 Một số hàm thường dùng . . . . . . . . . . .
pinMode() . . . . . . . . . . . . . . . . . . . .

digitalWrite() . . . . . . . . . . . . . . . . . .
digitalRead() . . . . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

13
13
13
14
14
16
16
17
20

22
23
24
25

27
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.


.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.


.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

28
28
29
29
29
30


3.3

Một số module mẫu .
Đèn LED . . . . . . .

Module Relay . . . .
Nút nhấn (button) . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.

.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.

.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.

.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.

.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

30
30

32
33

4 TIME
4.1 Giới thiệu . . . . . . . . . .
4.2 Một số hàm thường dùng
delay() . . . . . . . . . . .
delayMicroseconds() . . .
millis() . . . . . . . . . . .
micros() . . . . . . . . . . .
4.3 Ghi chú . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.

.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.

.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.

.
.
.
.
.
.
.

37
37
37
37
38
38
39
39

5 UART
5.1 Giới thiệu . . . . . . . . . . . .
5.2 Một số hàm thường dùng . .
Serial.begin() . . . . . . . . . .
Serial.end() . . . . . . . . . . .
Serial.print()/Serial.println() .
Serial.write() . . . . . . . . . .
Serial.availableForWrite() . .
Serial.available() . . . . . . . .
Serial.read() . . . . . . . . . .
Một số hàm khác . . . . . . .

Lưu ý . . . . . . . . . . . . . .
5.3 Một số module mẫu . . . . . .
Module bluetooth HC-05 . . .
Giao tiếp giữa 2 Arduino . . .
5.4 Lời kết . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


40
40
40
40
41
41
42
43
43
44
44
45
45
45
47
49

6 ANALOG
6.1 Giới thiệu . . . . . . . . . . . . . . .
6.2 Một số hàm thường dùng . . . . .
analogRead() . . . . . . . . . . . . .
analogReference() . . . . . . . . . .
analogWrite() . . . . . . . . . . . .
6.3 Một số module mẫu . . . . . . . . .
Biến trở . . . . . . . . . . . . . . . .
Module điều khiển động cơ L298N
6.4 Lời kết . . . . . . . . . . . . . . . .

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

51
51

52
52
53
54
55
55
56
62

7 I2C
7.1 Giới thiệu . . . . . . . . . .
7.2 Một số hàm thường dùng
Wire.begin() . . . . . . . .
Wire.requestFrom() . . . .
Wire.beginTransmission()
Wire.endTransmission() .
Wire.write() . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.

.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.

.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.

.
.
.
.
.

63
63
63
63
64
64
64
65

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


7.3

7.4


Wire.available() . . . . . . .
Wire.read() . . . . . . . . . .
Wire.setClock() . . . . . . .
Wire.onReceive() . . . . . .
Wire.onRequest() . . . . . .
Một số module . . . . . . . .
Module IMU MPU6050 . . .
Module thời gian thực RTC
Lời kết . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

65
66
66
67
67
68
68
69
72


8 SPI
8.1 Giới thiệu . . . . . . . . . . . .
8.2 Một số hàm thông dụng . . .
SPISettings . . . . . . . . . . .
SPI.begin() . . . . . . . . . . .
SPI.end() . . . . . . . . . . . .
SPI.beginTransaction() . . . .
SPI.endTransaction() . . . . .
SPI.transfer(), SPI.transfer16()
SPI.usingInterrupt() . . . . . .
8.3 Một số module thường dùng
Thẻ nhớ SD . . . . . . . . . . .
8.4 Lời kết . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

73
73
74
74

75
75
75
75
76
76
76
76
80

9 NGẮT - INTERRUPT
9.1 Giới thiệu . . . . . . . . . .
9.2 Một số hàm thường dùng
interrupts() . . . . . . . . .
noInterrupts() . . . . . . .
attachInterrupt() . . . . . .
detachInterrupt() . . . . .
9.3 Lời kết . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.

.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


81
81
81
81
81
82
83
83

.
.
.
.
.
.
.

.
.
.
.
.
.
.

PHỤ LỤC

84


A MỘT SỐ MODULE THÔNG DỤNG KHÁC
A.1 Module đo khoảng cách SRF-05 . . . . . . . . . . . . . . . . . . . . . . .
A.2 Cảm biến độ ẩm đất . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

85
85
87

B MỘT SỐ HÀM KHÁC
B.1 Hàm I/O nâng cao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.2 Hàm liên quan đến toán . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.3 Hàm làm việc với chuỗi . . . . . . . . . . . . . . . . . . . . . . . . . . .

89
89
89
89

C MỘT SỐ KHÁI NIỆM CĂN BẢN
C.1 Một số khái niệm . . . . . . .
C.2 Một số từ ngữ chuyên ngành
C.3 Một số kiến thức cần biết . . .
Dòng sink/source . . . . . . .
Push-pull và Open drain IO .

91
91
92
92
92

93

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.

.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.

.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.

.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.

.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.


D TỔNG QUAN VỀ NỀN TẢNG ARDUINO
D.1 Phần cứng . . . . . . . . . . . . . . . .
D.2 Phần mềm . . . . . . . . . . . . . . . .

Cài đặt . . . . . . . . . . . . . . . . . .
Giới thiệu về Arduino IDE . . . . . . .
E PHỤ LỤC MẠCH ĐIỆN
E.1 Mạch số 1: Diode . . . . . . . . . . . .
E.2 Mạch số 2: Zener . . . . . . . . . . . .
E.3 Mạch số 3: NPN Amplifier . . . . . . .
E.4 Mạch số 4: Dùng BJT để đóng tắt relay
E.5 Mạch số 5: IC số . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.

.
.
.
.

94
94
94
94
99

.
.
.
.
.

102
102
103
104

105
107

Lời kết

109

Thông tin bản quyền

110


LINH KIỆN ĐIỆN TỬ CƠ BẢN


ĐIỆN TỬ CƠ BẢN

1.1 Giới thiệu
Chương này sẽ cung cấp một số kiến thức cơ bản về một số linh kiện
điện tử. Các linh kiện này sẽ là những linh kiện thường gặp trong suốt
quá trình học điện tử.

1.2 Điện trở
Linh kiện điện trở1 là linh kiện dùng để cản trở dòng điện (lưu ý, điện
trở là đại lượng vật lý đặc trưng cho tính cản trở dịng điện của vật
liệu).
Cơng thức tính giá trị của điện trở:
𝑅=

𝑈

𝐼

◮ U: hiệu điện thế giữa hai đầu vật dẫn điện (đơn vị: Volt (V))
◮ I: cường độ dòng điện đi qua vẫn dẫn (đơn vị: Ampere (A))
◮ R: điện trở của vật dẫn (đơn vị: Ohm (Ω))

Công dụng
◮ Như tên điện trở, đây là linh kiện dùng để cản trở dòng điện

nhưng thật ra điện trở có nhiều cơng dụng như giảm điện áp
giữa tải với nguồn (ví dụ muốn cắm LED 3V vào nguồn 5V thì
cần mắc thêm điện trở để giảm áp), làm điện áp tham chiếu
bằng mạch chia áp, tạo các mạch khuếch đại/vi phân/tích phân
(khi kết hợp với tụ điện, cuộn cảm, op-amp), mạch lọc thông
thấp/thông cao (kết hợp với tụ điện, cuộn cảm), điện trở trong
mạch đo dòng,. . .
◮ Điện trở là linh kiện chuyển năng lượng từ điện sang nhiệt (tức
là trong lúc hoạt động sẽ sinh ra nhiệt) và thường lượng nhiệt
này khơng có ích. Mỗi điện trở sẽ có một cơng suất tối đa nên
khi dùng cần phải kiểm tra xem công suất mà điện trở phải chịu
có vượt qua cơng suất mặc định của điện trở không.
Các loại điện trở thường gặp:
◮ Điện trở cắm (through hole resistor)

• Chúng ta đọc giá trị điện trở dựa vào bảng màu (resistor
color code)
• Mỗi điện trở cắm thơng thường đều có vạch màu để xác
định giá trị điện trở, đồng thời sai số của điện trở đó. Nếu
là điện trở có 4 vạch màu thì 2 vạch đầu tiên là giá trị, vạch
thứ 3 (vạch kế cuối) là hệ số nhân, vạch thứ 4 (vạch cuối


1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9

Giới thiệu . . . .
Điện trở . . . . .
Tụ điện . . . . . .
Cuộn cảm . . . .
Diode . . . . . . .
Transistor BJT .
MOSFET . . . . .
IC logic cần biết
Op-amp . . . . .

.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.

. 2
. 2
. 5
. 7
. 8
. 8
. 9
10
11

1: Điện trở và linh kiện điện trở là khác
nhau về mặt khái niệm. Trong thực tế,
linh kiện điện trở luôn được gọi tắt là
điện trở.


1 ĐIỆN TỬ CƠ BẢN

3

Hình 1.1: Hình ảnh điện trở chân cắm.
Nguồn từ Wikimedia và Wikimedia.

cùng) là sai số. Nếu là điện trở có 5 vạch màu thì 3 vạch
điều tiên là giá trị, vạch thứ 4 (vạch kế cuối) là hệ số nhân,
vạch thứ 5 (vạch cuối cùng) là sai số.
• Ví dụ điện trở có 4 vịng màu lần lượt là nâu-đen-cam-vàng
kim (gold): nâu có giá trị là 1, đen có giá trị là 0 thì giá trị

2 vạch đầu tiên là 10; cam là vạch thứ 3, cam có giá trị là 3
nên hệ số nhân là 103 ; vạch sai số là vàng kim, vàng kim có
sai số là ±5%. Giá trị điện trở là 10𝑥103 ± 5% = 10𝑘Ω ± 5%.
◮ Một số mẹo

• Một số khó khăn khi đọc giá trị điện trở là không xác định
được màu của điện trở và vạch nào là vạch đầu tiên hay
cuối cùng. Cách đơn giản là bạn đọc nhiều thì sẽ có kinh
nghiệm đọc giá trị điện trở hoặc bạn xác định dựa vòng
màu cuối cùng (vì thường vịng màu cuối cùng thường có
màu đặc biệt như vàng kim (gold)/bạch kim (siliver)).
• Ngồi bảng màu trên thì vẫn cịn bảng màu đầy đủ hơn 2 .
Có 4 loại điện trở là 3/4/5/6 vòng màu, nhưng thường gặp
nhất là điện trở 4 và 5 vịng màu. Ngồi ra, điện trở trên
thực tế cũng có nhiều sai số khác nhau (0.05, 0.1, 0.25, 0.5,
1, 2, 5, 10, 20) nhưng trên thị trường thường gặp loại điện
trở 1% và 5%.
• Thơng thường, điện trở 4 vịng màu và thân hình màu vàng
nhạt là điện trở 5%; điện trở 5 vịng màu và thân mình màu
xanh dương nhạt thì là điện trở 1%.
• Vậy việc đọc điện trở có cần thiết khi xung quanh chúng ta
có quá nhiều thiết bị có thể đo được điện trở (như VOM/Multimeter)? Câu trả lời là tùy thuộc vào bạn. Khi bạn tự đọc
được giá trị điện trở thì có những lợi ích như sau:

2: Vì hình ảnh đó có bản quyền nên
mình khơng sao chép vào tài liệu của
mình được

* Bạn có thể đọc được giá trị điện trở ngay lập tức mà
không cần dụng cụ đo.

* Đôi lúc chúng ta không thể đo giá trị của điện trở khi
điện trở đã hàn trong mạch (vì điện trở sẽ mắc song
song với mạch điện thì giá trị bạn đo giữa 2 đầu điện
trở là giá trị của điện trở cần đo và giá trị điện trở của
hệ thống tại 2 điểm đó) mà chúng ta cần ra bảng màu
hoặc cách ly điện trở ra khỏi mạch điện.
• Điện trở cắm thơng thường sẽ có cơng suất 1/8W, 1/4W,
1/2W, 1W, 2W và 3W.
• Điện trở sẽ có một số giá trị tiêu chuẩn phù hợp cho từng
sai số khác nhau. Chúng sẽ có tiêu chuẩn giá trị điện trở
(standard resistor value) được chia thành E3 (>20%, có 3
giá trị điện trở), E6 (20%, có 6 giá trị điện trở), E12 (10%, có
12 giá trị điện trở), E24 (5%, có 24 giá trị điện trở), E48 (2%,

Ví dụ điện trở 5% sẽ có giá trị sau 1.0,
1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7,
3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8,
7.5, 8.2, 9.1. Giá trị điện trở 5% sẽ từ 10Ω
đến 22MΩ. Ví dụ với hệ số là 1.0 thì sẽ có
các giá trị 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ,
1MΩ, 10MΩ và tương tự cho những giá
trị khác.


1 ĐIỆN TỬ CƠ BẢN

4

Hình 1.2: Bảng màu giá trị điện trở.
Nguồn từ Wikimedia.


có 48 giá trị điện trở), E96 (1%, có 96 giá trị điện trở), E192
(0.5%, 0.25%, <, có 192 giá trị điện trở).
◮ Điện trở dán SMD (SMD resistor)

• Giá trị của điện trở dán sẽ được in lên trên bề mặt (nếu có
thể). Các cách in trên điện trở có thể sẽ như sau:
3
* 103 = 10𝑥10 = 10𝑘Ω
0
* 100 = 10𝑥10 = 10Ω
1
* 1001 = 100𝑥10 = 1𝑘Ω
* 0 ≈ 0Ω
* 5𝑅6 = 5.6Ω
* 𝑅382 = 0.382Ω
* 068 = 0.068Ω
* 38𝐶 = 24.3𝑘Ω (tra theo chuẩn EIA-96)
• Kích thước điện trở:

*
*
*
*
*
*
*
*
*


0201: 0.024 x 0.012 inch, 1/20W
0402: 0.04 x 0.02 inch, 1/16W
0603: 0.06 x 0.03 inch, 1/10W
0805: 0.08 x 0.05 inch, 1/8W
1206: 0.12 x 0.06 inch, 1/4W
1210: 0.12 x 0.10 inch, 1/2W
1812: 0.18 x 0.12 inch, 1W
2010: 0.20 x 0.10 inch, 3/4W
2512: 0.25 x 0.12 inch, 1W


1 ĐIỆN TỬ CƠ BẢN

5

Hình 1.3: Điện trở dán SMD. Nguồn từ
Wikimedia.

• Một số mẹo:
* Nếu thấy điện trở in 3 chữ số thì có thể là điện trở 5%,
nếu in 4 chữ số thì có thể là điện trở 1% (lưu ý không
phải lúc nào cũng đúng).
◮ Biến trở (potentiometer)

Hình 1.4: Biến trở các loại. Nguồn từ
Wikimedia và Wikimedia.

• Biến trở là linh kiện có thể thay đổi được giá trị. Giá trị tối
đa của điện trở thông thường được ghi trực tiếp lên điện
trở.


1.3 Tụ điện
Chúng ta có thể hiểu đơn giản tụ điện là một linh kiện có thể chứa
được điện tích. Mỗi tụ điện sẽ có bản tụ ở 2 cực (được ngăn cách nhau
bởi 1 lớp điện môi, mỗi loại lớp điện môi khác nhau sẽ có một loại tụ
khác nhau) và các bản tụ này dùng để chứa điện tích. Tụ điện ngăn
cản khơng cho dòng điện một chiều đi qua nhưng cho phép dòng điện
xoay chiều đi qua (khái niệm đầy đủ hơn tại Wikipedia).

Hình 1.5: Một số loại tụ điện. Nguồn từ
Wikimedia.

Một số thông số cần lưu ý khi làm việc với tụ:
◮ Điện dung C (đơn vị Farad - F) thể hiện khả năng tích điện của

tụ. Điện dung càng lớn thì tích điện càng nhiều.


1 ĐIỆN TỬ CƠ BẢN

6

◮ Điện áp làm việc tối đa U (đơn vị Volt - V) là điện áp rơi tối đa

lên tụ có thể chịu được. Nếu điện áp hoạt động lớn hơn điện áp
làm việc thì gây chập tụ và nổ. Khi chọn điện áp làm việc cho tụ
hãy chọn tối thiểu có giá trị bằng 1.3 điện áp làm việc (ví dụ điện
áp làm việc 12V thì nên chọn tụ có điện áp 12𝑉 ∗ 1.3 = 15.6 ≈ 16𝑉).
◮ Cơng thức tính điện lượng Q:
𝑄 = 𝐶𝑈

• Thể hiện lượng điện tích được tích tụ ở bề mặt của tụ điện.
• Đơn vị là (Coulomd - C).
◮ Nhiệt độ làm việc (đơn vị C/F) là ngưỡng tối đa/tối thiểu của

nhiệt độ mà tụ có thể làm việc được. Thông thường chúng ta
không quan tâm đến thơng số này, nhưng nếu thiết bị có chứa tụ
làm việc trong các mơi trường khắc nghiệt (lị hơi, phịng lạnh,
ngồi trời,. . . ) thì hãy chú ý đến nhiệt độ hoạt động của mơi
trường.
◮ Ngồi ra cịn nhiều thông số khác nhưng tùy vào ứng dụng cụ
thể mà bạn nên tìm hiểu thêm như hệ số biến đổi điện dung theo
nhiệt độ/thời gian, dòng rò (leakage current), tần số làm việc,
sai số (tolerance), ESR (Equivalent Series Resistance). . .
Một số loại tụ phổ biến:
◮ Tụ hóa (Electrolytic Capacitors): là tụ điện phân cực. Điều lưu ý

khi sử dụng tụ là không được gắn ngược chiều âm dương của tụ
với nguồn (nếu ngược thì sẽ gây nổ).

Hình 1.6: Các loại tụ hóa (từ trái sang
phải): tụ hóa chân cắm (Radial lead Electrolytic Capacitors), tụ tantan (SMD Tantalium Capacitor), tụ nhơm (Aluminum
Electrolytic Capacitor) . Nguồn từ Wikimedia.

• Tụ hóa thường có giá trị lớn (có thể từ vài chục nF đến vài
F). Tụ có giá trị lớn được gọi là siêu tụ (supercapacitor).
• Cực của tụ hóa thường được đánh dấu trên tụ (tụ hóa chân cắm/tụ nhơm
sẽ đánh dấu cực âm, tụ tantalium sẽ đánh dấu cực dương).

Hình 1.7: Hình ảnh ký hiệu cực trên tụ
điện. Nguồn từ Wikimedia và Wikimedia.


◮ Tụ gốm (ceramic capacitor) là tụ điện không phân cực, thường

có giá trị nhỏ.
• Nếu là tụ gốm loại cắm thì thường giá trị sẽ in lên tụ (đơn
vị là pF). Nếu là tụ dán SMD thì giá trị tụ sẽ được ghi trên
reel (cách đóng gói tụ khi bán).


1 ĐIỆN TỬ CƠ BẢN

7

Hình 1.8: Tụ hóa. Nguồn từ Wikimedia
và Wikimedia.

• Các thơng tin cụ thể về điện áp hoạt động, giá trị tụ, sai
số,. . . sẽ được ghi trên bao bì đóng gói của nhà sản xuất.
Nếu bạn có được một con tụ khơng có thơng tin thì rất khó
để tìm được thơng số của nó.
• Kích thước của tụ cũng khá đa dạng. Bạn tham khảo thêm
với từ khóa “EIA & Metric Standard Sizes” để biết thêm chi
tiết.
◮ Những loại tụ khác bạn có thể tìm hiểu tại đây.
◮ Chi tiết về đặc tính tụ, bạn đọc tham khảo chuỗi bài tại electronics-

tutorials

1.4 Cuộn cảm
Cuộn cảm là linh kiện có khả năng sinh ra từ trường khi có dịng điện

chạy qua. Cuộn cảm đặc trưng bằng độ tự cảm (từ dung) có đơn vị đo
là Henry (H). Cuộn cảm sẽ cho dòng điện một chiều đi qua nhưng sẽ
cản trở dịng điện xoay chiều.

Hình 1.9: Một số loại cuộn cảm. Nguồn
từ Wikimedia.

Ghi chú: thơng thường thì tác giả ít khi thấy dùng cuộn cảm với các
ứng dụng cơ bản nên chúng ta sẽ không đi quá sâu ngoài khái niệm.
Nếu bạn đọc đang làm liên quan đến lọc nhiễu, làm mạch nguồn
buck/boost/. . . , mạch lọc tần số,. . . thì bạn nên đọc tài liệu chuyên
ngành cụ thể để hiểu thêm về đặc tính của cuộn cảm vì lý thuyết về
cuộn cảm nhìn chung là hơi khó so với mức căn bản.


1 ĐIỆN TỬ CƠ BẢN

8

1.5 Diode
Diode là linh kiện bán dẫn chỉ cho phép dòng điện đi theo một chiều
nhất định. Diode có 2 khối bán dẫn ghép với nhau là bán dẫn loại
P và bán dẫn loại N. Dòng điện dương sẽ chạy từ P (anode) sang N
(cathode).

Hình 1.10: Một số loại diode (từ trái
sang phải): diode thường, LED (Light
Emitting Diode), diode zener . Nguồn từ
Wikimedia.


Các loại bán dẫn thường thấy: diode chỉnh lưu, zener, LED (Light
Emitting Diode), Schottky Diode,. . . Ngồi ra vẫn cịn nhiều loại diode
khác như Gunn Diode, PIN diode, step recovery diode, laser diode,
photo diode,. . .
Một số thông số cần quan tâm:
◮ Điện áp phân cực thuận là điện áp tối thiểu để dịng điện có

thể chạy qua diode (thường giá trị điện áp phân cực thuận từ
0.15V đến vài volt tùy vào từng loại diode, giá trị mà chúng ta
hay nghe là 0.7V. Giá trị này thông thường phụ thuộc vào loại
vật liệu được trộn vào để làm bán dẫn).
◮ Điện áp ngược cực đại là điện áp tối đa nếu mắc ngược cực của
diode vào nguồn mà khơng ảnh hưởng gì. Nếu lớn hơn điện
áp này thì diode sẽ bị đánh thủng (thường giá trị điện áp đánh
thủng từ vài trăm đến vài nghìn volt).
◮ Dịng điện tối đa mà diode có thể tải được.
◮ Tần số đóng ngắt tối đa mà diode có thể đáp ứng được. 3

1.6 Transistor BJT
Transistor BJT là linh kiện bán dẫn chủ động thường được sử dụng
như một phần tử khuếch đại (amplify) hoặc khóa điện tử (switch electronic signals). Transistor là từ được kết hợp từ “transfer” và “resistor”
vì nó sẽ chuyển đổi một tín hiệu yếu từ mạch điện có trở kháng thấp
sang mạch điện có trở kháng cao (“The transistor is a semiconductor
device which transfers a weak signal from low resistance circuit to
high resistance circuit. The words trans mean transfer property and
istor mean resistance property offered to the junctions.”)
Transistor được ghép từ 3 lớp bán dẫn: N-P-N thì được gọi là NPN
transistor, P-N-P thì được gọi là PNP transistor. Transistor có 3 cực là
B (base), C (collector), E (emitter). Chiều mũi tên là chiều của dịng
điện.

Transistor sẽ có 3 vùng hoạt động lần lượt là vùng tắt, vùng khuếch
đại và vùng bão hịa. Tùy vào ứng dụng mà bạn cần cấu hình mạch
transistor phù hợp để transistor rơi vào đúng vùng hoạt động. Ví dụ
khi bạn cho transistor hoạt động ở chế độ khuếch đại thì phải phân

3: Bạn sẽ quan tâm thơng số này khi làm
việc với các mạch đóng ngắt có tần số (ví
dụ như mạch nguồn xung).


1 ĐIỆN TỬ CƠ BẢN

9

Hình 1.11: Transistor BJT. Nguồn từ
Wikimedia và Wikimedia.

cực làm sao để điểm hoạt động của transistor rơi vào vùng đấy. Nếu
bạn muốn transistor hoạt động như cơng tắc thì để transistor chuyển
đổi giữa vùng tắt và vùng bão hịa (bạn đọc thấy hứng thú thì tìm hiểu
thêm về lý thuyết transistor, mặc dù hay nhưng khó).
Ký hiệu như hình 1.12.

Hình 1.12: Ký hiệu BJT. Nguồn từ Wikimedia.

Một số thông số cần lưu ý: điện áp phân cực thuận 𝑉𝐵𝐸 , điện áp tối
đa hoạt động, dòng diện tối đa, tần số hoạt động. Tùy vào ứng dụng
cụ thể mà bạn cần quan tâm đến những thông số nào (khi bạn tìm hiểu
một ứng dụng cụ thể thì thơng thường các tài liệu sẽ đề cập những
thơng số về transistor). Thơng tin của transistor thì bạn nên tìm trên

datasheet của sản phẩm.

1.7 MOSFET
MOSFET là viết tắt của "Metal-Oxide Semiconductor Field-Effect Transistor", là transistor hiệu ứng trường.

Hình 1.13: Cấu tạo của MOSFET kênh
N. Nguồn từ Wikimedia.

MOSFET cũng có 2 loại là N-MOSFET và P-MOSFET. MOSFET có 3
cực được đặt tên là G (gate), S (source), D (drain).
Ký hiệu như hình 1.14.


1 ĐIỆN TỬ CƠ BẢN

10

Hình 1.14: Ký hiệu của MOSFET kênh N
(bên trái) và kênh P (bên phải). Nguồn
từ Wikimedia.

Ghi chú về sự khác nhau lớn nhất giữa transistor BJT và MOSFET:
BJT điều khiển bằng dòng (current-driven device) tại cực B, trong khi
đó MOSFET được điều khiển bằng áp (voltage-controlled device) được
đặt vào cực G.

1.8 IC logic cần biết
IC (viết tắt của Integrated Circuit) là một mạch điện thực hiện một
chức năng nào đó được đóng gói sẵn trong một con chip. IC có nhiều
loại khác nhau nhưng có thể chia thành 4 nhóm chính:

◮ Microcomputers là IC có chứa bộ vi xử lý.
◮ Memory là IC dùng để chứa dữ liệu.
◮ Standard logics ICs là IC để được thực hiện một chức năng cụ

thể (chúng ta đề cập loại IC này trong đề mục này).
◮ Custom Logic ICs là IC được thực hiện theo nhu cầu của người

dùng.
Thông tin thú vị: mạch điện là sự kết hợp của transistor, tụ điện, điện
trở, cuộn cảm,. . . Tất cả các thành phần này trong chip được làm bằng
semiconductor trên một tấm bán dẫn gọi là wafer.
IC logic thường có hai loại: TTL và CMOS. Cơ bản chức năng của các
ICs này là giống nhau nhưng sẽ khác nhau nhau về một số đặc tính
nhất định.
◮ TTL ICs (Transistor-transistor logic ICs) được chế tạo bằng BJT.
◮ CMOS ICs (Complementary metal oxide semiconductor ICs)

được chế tạo từ một cặp p/n – MOSFET với nhau.
◮ Nếu điện áp hoạt động của chip là 5V:

• TTL ICs:
* Mức tín hiệu đầu vào: thấp (low) là 0 – 0.8V, cao (high)
là 2 – 5V.
* Mức tín hiệu đầu ra: thấp (low) là 0 – 0.5V, cao (high)
là 2.7 – 5V.
• CMOS ICs:
* Mức tín hiệu đầu vào: thấp (low) là 0 – 1.5V, cao (high)
là 3.5 – 5V.
* Mức tín hiệu đầu ra: thấp (low) là 0 – 0.05V, cao (high)
là 4.95 – 5V.

Một dòng chip Standard logics ICs khá phổ biến là dòng 7400. Trên
thị trường, chúng ta thường thấy có 74HCxx và 74LSxx. Sự khác nhau
cơ bản: chip 74HCxx (CMOS – High speed) được chế tạo bằng công


1 ĐIỆN TỬ CƠ BẢN

11

nghệ CMOS, chip 74LSxx (Low power Shottky) được chế tạo bằng
cơng nghệ TTL. (Ngồi ra cịn có nhiều loại khác, tìm hiểu tại đây).
Một số chip nên biết:












74x00: NAND 2 ngõ vào
74x01: NAND 2 ngõ vào có cực thu hở (open-collector).
74x02: NOR 2 ngõ vào
74x08: AND 2 ngõ vào
74x09: AND 2 ngõ vào có cực thu hở (open-collector)
74x14: cổng đảo (có Schmitt-trigger)

74x32: OR 2 ngõ vào
74x86: XOR 2 ngõ vào
74x595: thanh ghi dịch 8-bit, ngõ vào nối tiếp, ngõ ra song song
74x4511: BCD sang 7-segment (dùng với LED 7 đoạn)
Ngồi ra cịn rất nhiều loại khác, vui lòng đọc tại đây.

1.9 Op-amp
Op-amp (operational amplifier – mạch khuếch đại thuật toán) là một
mạch khuếch đại “DC-coupled” với hệ số khuếch đại cao, có đầu vào
vi sai và thơng thường có đầu ra đơn.

Hình 1.15: Op-amp. Nguồn từ Wikimedia.

Ký hiệu:

Hình 1.16: Ký hiệu của op-amp. Nguồn
từ Wikimedia.







V+: Đầu vào không đảo
V-: Đầu vào đảo
𝑉𝑜𝑢𝑡 : Đầu ra
𝑉𝑆+ : Nguồn cung cấp điện dương
𝑉𝑆− : Nguồn cung cấp điện âm


Một số ứng dụng: op-amp có rất nhiều ứng dụng trong thực tế vì
opamp có thể thực hiện nhiều phép tốn đảo, cộng, trừ, nhân, chia,
tích phân, đạo hàm tín hiệu. Mình sẽ liệt kê một số ứng dụng cơ bản
mà bạn có thể gặp ở mức độ cơ bản:
◮ Mạch đệm đảo/không đảo.
◮ Mạch khuếch đại đảo/không đảo.
◮ Mạch khuếch đại vi sai (sẽ gặp trong ứng dụng cân sử dụng cảm

biến loadcell).
◮ Mạch so sánh điện áp.


LẬP TRÌNH C CƠ BẢN


LẬP TRÌNH C CƠ BẢN

2.1 Giới thiệu
C là ngơn ngữ lập trình cấu trúc được sử dụng rộng rãi trong lập trình
nhúng. Chương này sẽ giúp bạn đọc nắm được những kiến thức cơ
bản cần thiết phục vụ cho lập trình vi điều khiển.

2.2 Các thành phần cơ bản trong ngơn ngữ C
Từ khóa là từ có ý nghĩa xác định dùng để khai báo dữ liệu, viết
hàm,...

2
2.1 Giới thiệu . . . . . . . . . . . 13
2.2 Các thành phần cơ bản trong
ngôn ngữ C . . . . . . . . . . . . 13

2.3 Các hệ đếm . . . . . . . . . . 14
2.4 Biểu thức và phép toán . . . 14
2.5 Một số hàm C thường dùng 16
Hàm if . . . . . . . . . . . . . 16
Hàm switch ... case . . . . . . 17
Vòng lặp for . . . . . . . . . . 20
Vòng lặp while . . . . . . . . 22
2.6 Hàm/Chương trình con . . . 23
2.7 Mảng một chiều . . . . . . . 24
2.8 Con trỏ . . . . . . . . . . . . . 25

◮ Ví dụ: if, else, for, switch,...

Tên nhằm thể hiện rõ ý nghĩa của hằng, biến, mảng, con trỏ,... trong
chương trình.
Kiểu dữ liệu:

STT
1
2
3
4
5
6
7
8
9
10

Kiểu dữ liệu

unsigned char
char
unsigned int
int
unsigned short
short
unsigned long
long
float
double

Chiều dài
1 byte
1 byte
2 bytes (hoặc 4 bytes)
2 bytes (hoặc 4 bytes)
2 bytes
2 bytes
8 bytes
8 bytes
4 bytes
8 bytes

Ngưỡng giá trị
0 → 255
-128 → 127
0 → 65535 (hoặc 0 → (232 − 1))
-32768 → 32768 (hoặc −231 → (231 − 1))
0 → 65535
-32768 → 32768

0 → 264
63
−2 → (263 − 1)
3.4 ∗ 10−38 → 3.4 ∗ 10−38
1.7 ∗ 10−308 → 1.7 ∗ 10308

Khai báo và khởi tạo:
◮ Khai báo (declaration)
int this_is_parameter;

Biến this_is_parameter được khai báo với kiểu dữ liệu int.
◮ Khởi tạo (initialization)
int this_is_parameter = 100;

Biến this_is_parameter được khai báo với kiểu dữ liệu int và
khởi tạo giá trị ban đầu là 100.


2 LẬP TRÌNH C CƠ BẢN

2.3 Các hệ đếm
Các hệ đếm cơ bản trong lập trình C: hệ nhị phân (hệ 2 – binary), hệ
bát phân (hệ 8 – octal), hệ thập phân (hệ 10 – decimal) và hệ thập lục
phân (hệ 16 – hexadecimal)
Decimal
0
1
2
3
4

5
6
7
8
9
10
11
12
13
14
15
16
32
64
128
256
512
1024

Hex
0
1
2
3
4
5
6
7
8
9

A
B
C
D
E
F
10
20
40
80
100
200
400

Octal
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16

17
20
40
100
200
400
1000
2000

Binary
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
1 0000
10 0000
100 0000
1000 0000

1 0000 0000
10 0000 0000
100 0000 0000

Hệ đếm là cách biểu diễn con số dưới các dạng khác nhau. Ví dụ số
mười được biểu diễn dưới dạng nhị phân là 10102 , dưới dạng bát phân
là 128 , dưới dạng thập phân là 1010 và dưới dạng thập lục phân là
𝐴16 .
Trong cuộc sống thường ngày, chúng ta dùng hệ thập phân, cịn vi
điều khiển thi dùng hệ nhị phân. Từ đó trong lập trình, chúng ta dùng
hệ thập phân khi chúng ta muốn người đọc hiểu nhanh chóng (humanreadable), dùng hệ nhị phân khi muốn hiểu vi điều khiển đang hiểu
như thế nào, thập lục phân khi muốn viết gọn một chuỗi số nhị phân.

2.4 Biểu thức và phép toán
Biểu thức là sự phối hợp của những toán tử và toán hạng.
a=b+1

14


2 LẬP TRÌNH C CƠ BẢN

Giá trị b được cộng cho 1, sau đó kết quả được gán lại cho a. 5

15

5: Trong phép toán, b và 1 là toán hạng,
+ là toán tử.

index += 2;


Giá trị index được cộng cho 2, sau đó kết quả được gán lại cho
index (đây là cách viết gọn).
Các loại phép toán:
◮ Phép toán số học: cộng (+), trừ (-), nhân (*), chia (/), chia lấy dư

(%).
10 + 8 / 2 = 14
12 % 5 = 2
◮ Phép quan hệ: lớn hơn (>), lớn hơn hoặc bằng (>=), bé hơn (<),

bé hơn hoặc bằng (<=), bằng (==) và khác (!=).
10 > 2
→ có giá trị 1 (đúng)
20 == 30
→ có giá trị 0 (sai)
◮ Phép toán luận lý: phủ định (!), và (&&) và hoặc (||).

5 && (8 < 9)
→ có giá trị 1 (đúng)
1 || 0
→ có giá trị 1 (đúng)
1 && 0
→ có giá trị 0 (sai)
◮ Phép tốn trên bit (bitwise): và (&), hoặc (|), xor (ˆ), dịch trái («),

dịch phải (»), đảo (∼).
bit x
0
0

1
1

bit y
0
1
0
1

x&y
0
0
0
1

x|y
0
1
1
1

xˆy
0
1
1
0

x
1
1

0
0

210 >> 1 = 00102 >> 1 = 00012
210 << 1 = 00102 << 1 = 01002
◮ Các phép toán khác: phép gán (=), phép gán kết hợp (+=, -=, *=,
/=, %=, »=, «=, &=, |=, ˆ=), phép tăng giảm (++, - -).
◮ Độ ưu tiên của các phép toán6 :

6: Bạn đọc tham khảo tại daynhauhoc.com.


2 LẬP TRÌNH C CƠ BẢN

Độ ưu tiên
1
2
3
4
5
6
7
8
9
10
11
12
13
14


Các phép tốn
()
[]
->
!

& *
*
/
%
+
<<
>>
<
<= >
>=
==
!=
&
^
|
&&
||
?
:
=
+= -= *=

++




/=

%=

<<=

>>=

&=

^=

2.5 Một số hàm C thường dùng
Hàm rẽ nhánh có điều kiện (if ... else if ... else ....)

1

if (biểu thức luận lý 1) {

2

<khối lệnh 1>
}
else if (biểu thức luận lý 2) {

3
4
5

6
7
8
9
10
11
12
13

<khối lệnh 2>
}
...
else if (biểu thức luận lý n) {
<khối lệnh n>
}
else {
<khối lệnh n + 1>
}

◮ Hàng 1..3: nếu (if ) biểu thức luận lý 1 đúng thì thực hiện khối lệnh

1 và thoát khỏi cấu trúc if
◮ Hàng 4..6: ngược lại nếu (else if ) biểu thức luận lý 2 đúng thì thực
hiện khối lệnh 2 và thoát khỏi cấu trúc if
◮ Hàng 8..10: ngược lại (else if ) nếu biểu thức luận lý n đúng thì thực
hiện khối lệnh n và thoát khỏi cấu trúc if
◮ Hàng 11..13: ngược lại (else) thực hiện khối lệnh n + 1.
Lưu ý:
◮ Từ khóa if, else if, else phải viết thường.
◮ Biểu thức luận lý đúng khi kết quả khác 0 (≠ 0) và sai khi kết quả


bằng 0 (== 0).
Một số dạng rút gọn của cấu trúc if

|=

Trình tự
Trái → Phải
Phải → Trái
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Trái → Phải
Phải → Trái
Phải → Trái

16


2 LẬP TRÌNH C CƠ BẢN

1

if (biểu thức luận lý 1) {

<khối lệnh 1>

2
3

17

}

hoặc
1

if (biểu thức luận lý 1) {

2

<khối lệnh 1>
}
else {
<khối lệnh 2>
}

3
4
5
6

Ví dụ:
1


Link:
/>yoAEWP

#include <stdio.h>

2
3
4
5
6
7

int main()
{
int a;
printf("Please add a: ");
scanf("%d", &a);

8

if(a>0) {
printf("%d is greater than 0", a);
}
else if (a == 0) {
printf("%d is equal to 0", a);
}
else {
printf("%d is less than 0", a);
}


9
10
11
12
13
14
15
16
17
18

return 0;

19
20

}

Kết quả:
Please add a: 6
6 is greater than 0

Hàm rẽ nhánh có điều kiện (switch ... case ...)

1
2
3

switch (biểu thức) {
case giá trị 1:

<khối lệnh 1>


2 LẬP TRÌNH C CƠ BẢN

break;
case giá trị 2:

4
5

<khối lệnh 2>
break;

6
7

...
case giá trị n:

8
9

<khối lệnh n>
break;
default:
<khối lệnh n+1>

10
11

12
13
14

18

}

◮ Hàng 1: trong trường hợp biểu thức có giá trị là
◮ Hàng 2..4: giá trị 1 (case) thì thực hiện khối lệnh 1 và thoát ra khỏi

cấu trúc switch (break),
◮ Hàng 5..7: hoặc giá trị 2 (case) thì thực hiện khối lệnh 2 và thoát ra

khỏi cấu trúc switch (break),
◮ Hàng 9..11: hoặc giá trị n (case) thì thực hiện khối lệnh n và thoát
ra khỏi cấu trúc switch (break),
◮ Hàng 12..13: ngược lại (default) thì thực hiện khối lệnh n+1.
Lưu ý:
◮ Từ khóa switch, case, break, default phải viết thường.
◮ Biểu thức phải có kết quả là giá trị ngun.

Ví dụ:
1

#include <stdio.h>

2
3
4

5
6
7

int main()
{
int month = 0;
printf("Please input month: ");
scanf("%d", &month);

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

28
29

switch(month)
{
case 1:
printf("January\n");
break;
case 2:
printf("February\n");
break;
case 3:
printf("March\n");
break;
case 4:
printf("April\n");
break;
case 5:
printf("May\n");
break;
case 6:
printf("June\n");
break;
case 7:

Link:
ryB1TC4bw

/>


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×