3. Nội dung
1. Vi điều khiển là gì?
2. Giới thiệu về C
3. Kiểu dữ liệu và biến
4. Toán tử
5. Lệnh điều khiển
6. Hàm
7. Mảng
8. Con trỏ
9. Giới thiệu hàn linh kiện
4. 1.1. Giới thiệu Vi điều khiển
• Thiết kế điện tử hiện nay = VXL/VĐK + lập trình
• Trong khóa C23 sẽ tìm hiểu vi điều khiển STM32
7. 1.2. Cấu tạo Vi điều khiển
Bộ xử lí trung tâm (Vi xử lí)
8. 1.2. Cấu tạo Vi điều khiển
Bộ nhớ ROM và RAM
ROM (Read Only Memory) RAM (Random Acess Memory)
Chỉ đọc Có thể đọc/ghi
Không mất dữ liệu khi mất nguồn Mất dữ liệu khi mất nguồn
Chứa chương trình cố định như
khởi động, quản lí hệ thống
Chứa dữ liệu hoặc chương trình
ứng dụng
Thời gian truy xuất RAM nhanh hơn ROM gấp nhiều lần
9. 1.2. Cấu tạo Vi điều khiển
Thiết bị ngoại vi có cấu tạo để thực hiện một chức năng đặc biệt:
•Được cài đặt và điều khiển bởi các thanh ghi.
•Giá trị các thanh ghi đó được điều khiển bởi CPU.
•Các ngoại vi phổ biến là:
GPIO
Timer
USART
ADC
I2C
SPI
CAN
USB
DAC
DMA
RTC
…
ROM/Flash
RAM
Clock
10. 2. Giới thiệu về C (Introduction)
•Được phát triển vào đầu thập niên 1970 bởi Dennis Ritchie.
•50 years old remain popular in embedded systems world.
•Là ngôn ngữ bậc trung:
Đủ nhỏ gọn để vận hành với vi điều khiển.
Có optimized code -> less memory, less power consumption as low as
128 bytes
Gần với ngôn ngữ tiếng anh -> dễ tiếp cận, dễ học.
12. 3.1. Biến (Variable)
Biến là gì?
Trong lập trình, một biến là một container (vùng lưu trữ) để chứa
dữ liệu (data)
Để chỉ ra vùng lưu trữ, mỗi biến phải được đặt một tên duy nhất
(identifier). Tên biến chỉ là biểu diễn tượng trưng của vị trí bộ nhớ.
int age = 18;
age là một biến(variable) của kiểu int, biến này được nhận giá trị 18.
age
18
13. 3.1. Biến (Variable)
Nguyên tắc đặt tên biến.
•Không trùng với từ khóa (vd: int, double, char, if, for, while, sizeof,
typedef,...).
•Phải bắt đầu bằng chữ cái a->z, A->Z hoặc ‘_’ (không phải số).
•Là chuỗi ký tự liên tiếp không có khoảng cách,gồm chữ cái, ký số,
và ‘_’
•Phải dễ hiểu và mô tả được ý nghĩa sử dụng.
Ex:
int student_id; // snake_case_style
bool isCharReceived = false; // camelCaseStyle
14. 3.2. Kiểu dữ liệu (Data types)
Kiểu dữ liệu xác định kiểu và kích thước của dữ liệu được liên kết
với các biến.
Ex:
int age = 18;
age là biến của kiểu int(integer – số nguyên). Kích thước là 4 bytes.
1 bytes = 8 bits.
15. 3.2. Kiểu dữ liệu (Data types)
Kiểu char và int
Là kiểu dữ liệu số nguyên.
1 byte = 8 bit
char có phạm vi giá trị -2^7 đến 2^7 – 1 (chia đôi miền âm dương, biểu
diễn cho số 0);
Type Kích thước Phạm vi giá trị Format
char 1 byte
-128 - 127 hoặc
0 - 255
%c
int 4 bytes
-2,147,483,648 -
2,147,483,647
%d, %i
16. 3.2. Kiểu dữ liệu (Data types)
Kiểu số thực (float)
Là kiểu dữ liệu số thực dấu chấm động.
Type Kích thước Phạm vi giá trị Độ chính xác Format
float 4 bytes
1.2E-38
- 3.4E+38
7 chữ số thập
phân
%f
double 8 bytes
2.3E-308
- 1.7E+308
15 chữ số
thập phân
%lf
17. 3.2. Kiểu dữ liệu (Data types)
signed unsigned short long
char
signed char
= char
unsigned
char
int
signed int =
int
unsigned int
= unsigned
short int =
short
long int =
long
float
long float =
double
double long double
18. 3.2. Kiểu dữ liệu (Data types)
Kiểu bool
Là kiểu dữ liệu có chỉ có thể nhận một trong hai giá trị như
đúng/sai (true/false, yes/no, 1/0).
#include <stdbool.h>
bool isSensorReceived = true;
19. 3.2. Kiểu dữ liệu (Data types)
Thư viện stdint
#include <stdint.h>
•int8_t, uint8_t : 8 – số lượng bit
•int16_t, uint16_t :16 bit
•int32_t, uint32_t : 32 bit
•int64_t, uint64_t : 64 bit
20. 4. Toán tử (Operator)
Bao gồm:
•Arithmetic Operators – Toán tử số học
•Relational Operators – Toán tử quan hệ
•Logical Operators – Toán tử logic
•Bitwise Operators – Toán tử trên bit
•Assignment Operators – Toán tử gán
•Misc Operators – Toán tử hỗn hợp
21. 4.1. Toán tử số học (Arithmetic Operators)
Operators Ý nghĩa
+ Phép cộng
- Phép trừ
* Phép nhân
/ Phép chia
% Phép chia modulo (Phép chia lấy phần dư)
++ Phép cộng 1 bậc (unary plus)
-- Phép trừ 1 bậc (unary subtraction)
Chú ý: Toán tử % chỉ được sử dụng với kiểu integers
22. 4.2. Toán tử quan hệ (Relational Operators)
Toán tử quan hệ kiểm tra mối quan hệ giữa hai toán hạng. Nếu quan hệ
là true, nó trả về 1; nếu quan hệ là sai, nó trả về giá trị 0.
Operators Ý nghĩa Ví dụ
== Equal to 9 == 4 → 0
> Greater than 9 > 4 → 1
< Less than 9 < 4 → 0
!= Not equal to 9 != 4 → 1
>= Greater than or equal to 9 >= 4 → 1
<= Less than or equal to 9 <= 4 → 0
23. 4.3. Toán tử logic
Một biểu thức (expression) chứa toán tử logic trả về 1 hoặc 0
tùy thuộc vào kết quả expression là đúng hay sai.
Operators Ý nghĩa Ví dụ
&& Toán tử AND -> True chỉ khi tất cả các
toán hạng đúng
( a ==9 ) && ( b > 5 )
→ 0
|| Toán tử OR -> True nếu 1 trong các
toán hạng đúng
( a == 9 ) || ( b > 5 )
→ 1
! Toán tử Logic NOT -> True nếu toán
hạng = 0
!( a == 9 )
→ !1 → 0
With a = 9, b = 4
24. 4.3. Toán tử logic
A B AAND B A OR B NOT A
False False False False True
False True False True True
True False False True False
True True True True False
25. 4.4. Toán tử trên bit (Bitwise Operators)
Operators Ý nghĩa
& Phép AND
| Phép OR
^ Phép XOR
~ Phép phủ định NOT
<< Phép dịch trái
>> Phép dịch phải
26. 4.4. Toán tử trên bit (Bitwise Operators)
Hệ nhị phân (hay hệ đếm cơ số hai hoặc mã nhị phân) là một hệ
đếm dùng hai ký tự để biểu đạt một giá trị số. bằng tổng số các lũy
thừa của 2. Hai ký tự đó thường là 0 và 1.
27. 4.4. Toán tử trên bit (Bitwise Operators)
https://www.geeksforgeeks.org/bitwise-operators-in-c-cpp/
28. 4.5. Toán tử gán (Assignment Operators)
Operators Ví dụ Tương đương
= a = b a = b
+= a += b a = a + b
-= a -= b a = a – b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %=b a = a % b
Một toán tử gán được sử dụng để gán một giá trị cho một biến.
Toán tử gán phổ biến nhất là =
Find more detail by yourself!! No demo
30. 5.1. Lệnh chọn (Selection statements)
Lệnh if
Cú pháp lệnh:
if (<điều_kiện>)
{
<code>;
}
<code>;
if (<điều_kiện>)
{
<code>;
}
else
{
<code>;
}
False
True
True
False
31. 5.1. Lệnh chọn (Selection statements)
C if...else Ladder
if (<điều_kiện>)
{
<code>;
}
else if (<điều_kiện_2>)
{“
<code>;
}
else (<điều_kiện_3>)
{
<code>;
}
Bài tập:
Nhập từ bàn phím số n bất kì và
in ra màn hình
“The value is positive” nếu n>0
“The value is zero” nếu n = 0
“The value is negative” nếu n<0
32. 5.1. Lệnh chọn (Selection statements)
Lệnh switch-case
Cú pháp lệnh:
switch (<biến>)
{
case <constant_1>:
<statements>;
break;
case <constant_2>:
<statements>;
break;
default:
<default_statement>
break;
…
} Note: break; statement is needed.
Bài tập: Viết bằng Switch case
Nhập một số bất kì n và in ra màn hình
“tieu hoc” nếu n = 1,2,3,4,5
“trung hoc co so” nếu n = 6,7,8,9
“trung hoc pho thong” nếu n = 10,11,12
“khong phai hoc sinh” trong trường hợp còn lại
33. 5.2. Lệnh lặp (Iteration statements)
Vòng lặp for:
Cú pháp lệnh:
for (<init>; <test_expression>; <update>)
{
<các câu lệnh>;
}
Bài tập:
Tính tổng từ 0 đến N (N nhập từ bàn phím)
34. 5.2. Lệnh lặp (Iteration statements)
Vòng lặp while:
while (<test_expression>)
{
<statements>;
}
Ngoài ra còn có do...while Loop
Bài tập:
Tính tổng từ 0 đến N (N nhập từ bàn phím)
35. 5.3. Lệnh nhảy (Jump statements)
Lệnh break
•Nhảy ra khỏi vòng lặp, hoặc các case trong switch-case.
Lệnh continue
•Bỏ qua bước lặp hiện tại và thực hiện bước lặp khác trong vòng
lặp.
36. 6.1 Hàm (Function)
Một hàm là một nhóm các lệnh đi cùng nhau để thực hiện một nhiệm
vụ. Mỗi Chương trình C/C++ đều có ít nhất một hàm main()
Cú pháp định nghĩa hàm:
<kiểu trả về> <tên hàm>([<danh sách tham số>])
{
<các câu lệnh>;
[return <giá trị>;]
}
Đối số (Argument) là giá trị truyền vào khi gọi hàm.
Void sẽ không cần câu lệnh return
37. 6.1 Hàm (Function)
• Standard library functions
-Các Standard library functions là các hàm tích hợp sẵn trong lập trình C.
Ex: printf(); sqrt() ->math.h
https://www.ibm.com/docs/en/i/7.3?topic=extensions-standard-c-
library-functions-table-by-name
• User-defined functions
- Functions that you create on your own.
38. 6.1 Hàm (Function)
Ex:
Định nghĩa hàm:
int addNumbers(int a, int b)
{
return a + b;
}
Gọi hàm:
addNumbers(3, 9); // return 12
addNumbers(2, 5); // return 7
Arguments
39. 6.2. Biến toàn cục & cục bộ (global & local)
Biến toàn cục:
•Được khai báo ở bên ngoài tất cả các hàm.
•Có thể truy xuất và sử dụng ở mọi hàm trong chương trình, tồn tại
cho tới khi chương trình kết thúc.
Biến cục bộ:
•Được khai báo trong 1 khối code, có thể là: hàm main() hoặc hàm
con, thân của vòng lặp, cấu trúc if else {}, …)
•Chỉ tồn tại và chỉ có thể sử dụng bên trong khối code và khi khối
code đó đang thực thi.
40. 7. Mảng (Array)
Biểu diễn một dãy các biến có cùng kiểu.
Cú pháp khai báo mảng một chiều:
<dataType> <arrayName[arraySize]> = {……}
<dataType> <arrayName[]> = {……}
Cú pháp khai báo mảng nhiều chiều:
<dataType> < arrayName[size_1][size_2] […]>;
Ex: int data[100] -> store 100 integers.
float score[5] ={9, 8, 7.5, 4.5, 6.5}
9 8 7.5 4.5 6.5
score[0] score[1] score[2] score[3] score[4]
Access Array Elements
41. 8. Con trỏ (Pointer)
•Con trỏ là biến dùng để chứa địa chỉ của biến khác hoặc có thể là
một hàm.
•Muốn sử dụng được pointer, trước tiên phải có được địa chỉ của
biến mà ta cần quan tâm bằng phép toán lấy địa chỉ “&” . Kết quả
của phép lấy địa chỉ & sẽ là 1 phần tử hằng.
•Giá trị của một con trỏ là địa chỉ của một biến nào đó.
42. 8. Con trỏ (Pointer)
Cú pháp:
<dataType> *<pointerName>;
Ex: int a, *p;
p = &a; // *p chứa địa chỉ của a
43. 8. Con trỏ (Pointer)
Bài tập: Viết hàm hoán đổi giá trị 2 số
Gợi ý:
•Bản thân tham số truyền cho hàm không bao giờ bị thay đổi bởi
các lệnh bên trong hàm được gọi.
•Nếu tham số là con trỏ thì giá trị của nó không thay đổi nhưng nội
dung được chứa ở địa chỉ do con trỏ trỏ tới lại có thể thay đổi.
•Truyền cho hàm tham số hình thức được khai báo là con trỏ, khi
gọi hàm thì truyền cho nó là địa chỉ của biến muốn thay đổi giá
trị.
44. 9. Giới thiệu hàn linh kiện
Vật liệu cần chuẩn bị:
Mỡ hàn Nhíp Mỏ hàn + mũi hàn phù hợp
45. 9. Giới thiệu hàn linh kiện
Vật liệu cần chuẩn bị:
Cuộn chì Nhựa thông Dây hút chì
46. 9. Giới thiệu hàn linh kiện
Dụng cụ nên có:
Đồng hồ đo điện Bùi nhùi vệ sinh mỏ hàn
47. 9. Giới thiệu hàn linh kiện
•Mỏ hàn: Nên chọn loại mỏ hàn tốt một chút, nếu rich
thì mua luôn trạm hàn:
•https://banlinhkien.com/tram-han-hakko-907-
p6647883.html
Nếu Poor thì mua cây hàn chỉnh nhiệt độ như này:
https://caka.vn/mo-han-dieu-chinh-nhiet-do-no907
Nếu bạn quá poor đến độ không mua nổi mỏ hàn
=> Xài tạm của các bạn khác nhé :v
48. 9. Giới thiệu hàn linh kiện
•Mũi hàn để hàn SMD: Thường mũi hàn sẽ đi kèm
với mỏ hàn, tuy nhiên cũng có thể mua mũi hàn, chú
ý là mũi hàn phải đúng công suất của mỏ hàn
•Mũi hàn dao, móng ngựa và đầu nhọn nhỏ phù hợp
cho việc hàn
49. 9. Giới thiệu hàn linh kiện
•Kĩ thuật hàn:
•https://www.youtube.com/watch?v=YUryJOAiPa4
&ab_channel=Androkavo
•Cách Fix bug:
•https://www.youtube.com/watch?v=OaBRak0Hn
Qs&ab_channel=Androkavo
50. 9. Giới thiệu hàn linh kiện
•Lưu ý khi hàn: Luôn giữ vệ sinh mũi hàn, Quy trình thường là: Hàn ->
Vệ sinh với nhựa thông -> chà qua miếng bùi nhùi, nếu không làm thì
mũi hàn sẽ đen, không dính chì nữa:
•Tham khảo cách thực hiện
https://www.youtube.com/watch?v=JADI1N-
K9Yc&ab_channel=Androkavo
51. 9. Giới thiệu hàn linh kiện
• Để hàn được:
• Chọn chì hàn tốt:
• Lượng chì hàn cho 1 board thực chất không nhiều
=> Có thể xin của bọn mình, bọn mình sẽ phát mỗi bạn khoảng 30
cm chì, vừa đủ hàn :v (Hoặc mua rồi cho bọn mình hít tí :”<)
52. 9. Giới thiệu hàn linh kiện
•Như thế nào là hàn đẹp?
Source ảnh: unbrokenstring
53. 9. Giới thiệu hàn linh kiện
•Mối hàn với linh kiện dán:
•Lượng chì vừa đủ
•Chân linh kiện tiếp xúc tốt với mối nối, mối hàn sáng bóng
55. 9. Giới thiệu hàn linh kiện
•Một số lỗi có thể xảy ra:
+ Hàn ngược chân linh kiện phân cực (LED, tụ)
+ Hàn lệch chân con chip.
+ Hàn không dính chân
+ Chân linh kiện bị dính.
Nếu xảy ra lỗi, liên lạc ngay với cơ quan chức năng
để được tư vấn hướng xử lý :3
56. 9. Giới thiệu hàn linh kiện
•Luôn kiểm tra mạch bằng mắt + đồng hồ
điện trước khi cắm điện
•Nếu VCC và GND chập tuyệt đối không
cấp nguồn
Cách sử dụng đồng hồ điện:
https://www.youtube.com/watch?v=-TEMzeyF9CE
57. 9. Giới thiệu hàn linh kiện
•Quy tắc hàn từ linh kiện thấp đến cao nhất (dây jump,
linh kiện dán,..).
•Lắp đúng chiều linh kiện có phân cực.
•Mối hàn tròn, đẹp, bóng, chì ít bị chảy loang.
•Hàn ít hao chì (tức là mối hàn cần vừa đủ chì, không bị
dư).
•Với con chip STM32, các bạn hàn nhanh gọn, không
nên hàn quá lâu, có thể dẫn đến cháy chip, thời gian hàn
thông thường từ 4 -5 phút.
•Khuyến khích các bạn hàn theo team, góp tiền mua đồ
hàn vì cũng khá đắt.