SlideShare a Scribd company logo
Giới thiệu khóa học C23
- Lập trình C cơ bản
- Hàn linh kiện
- GPIO
- Interrupt
- UART & I2C
- Timer & Pwm
Lập trình C cơ bản
C23
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
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
1.1. Giới thiệu Vi điều khiển
Nạp code cho vi điều khiển:
1.2. Cấu tạo Vi điều khiển
1.2. Cấu tạo Vi điều khiển
Bộ xử lí trung tâm (Vi xử lí)
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
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
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.
2. Giới thiệu về C (Introduction)
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
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
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.
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
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
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
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;
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
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
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
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
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
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
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
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.
4.4. Toán tử trên bit (Bitwise Operators)
https://www.geeksforgeeks.org/bitwise-operators-in-c-cpp/
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 
5. Lệnh điều khiển (Control statements)
Bao gồm:
•Selection statements – Lệnh chọn
•Iteration statements – Lệnh lặp
•Jump statements – Lệnh nhảy
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
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
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
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)
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)
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.
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
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.
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
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.
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
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 đó.
8. Con trỏ (Pointer)
Cú pháp:
<dataType> *<pointerName>;
Ex: int a, *p;
p = &a; // *p chứa địa chỉ của a
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ị.
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
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ì
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
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
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
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
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
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í :”<)
9. Giới thiệu hàn linh kiện
•Như thế nào là hàn đẹp?
Source ảnh: unbrokenstring
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
9. Giới thiệu hàn linh kiện
•Mối hàn đẹp
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
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
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.
C23_Buoi1_BasicC_aewfdvccccccccccccc.pdf

More Related Content

PDF
cpp chương 1 cấu trúc dữ liệu và giải thuật
PDF
OOP_02_Java can ban.pdf
PDF
Lec3. Ham.pdf
PPT
PPTX
Slide pointer sepro
PDF
Ngon ngu c theo chuan ansi
PDF
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
DOC
Huong danontapc
cpp chương 1 cấu trúc dữ liệu và giải thuật
OOP_02_Java can ban.pdf
Lec3. Ham.pdf
Slide pointer sepro
Ngon ngu c theo chuan ansi
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
Huong danontapc

Similar to C23_Buoi1_BasicC_aewfdvccccccccccccc.pdf (20)

PPTX
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
PDF
1-Tong quan ve Java.pdfdqwdqwdqwdqwdqwdqwd
DOC
Bai giangtrenlop
PPT
Thdc3 Lap Trinh C
PDF
temp.pdf
PDF
Lập trình C cho VĐK 8051
PDF
Lap trinh matlab_co_ban_1731
PDF
matlab co ban
PDF
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
PDF
Lect04 functions
PDF
Lập trình C cơ bản cho vi điều khiển
PDF
[Cntt] all java
PPT
Java Tieng Viet
PPT
bài giảng lập trình java - huỳnh công pháp
PPTX
Linq net
PDF
Tom_Tat_Verilog cho thiết kế vi mạch logic
PDF
Quyen 1. LY THUYET VA BAI TAP NNLT PYTHON.pdf
PDF
Hàm can bản
PPT
Session 13
PPT
Session 13
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
1-Tong quan ve Java.pdfdqwdqwdqwdqwdqwdqwd
Bai giangtrenlop
Thdc3 Lap Trinh C
temp.pdf
Lập trình C cho VĐK 8051
Lap trinh matlab_co_ban_1731
matlab co ban
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
Lect04 functions
Lập trình C cơ bản cho vi điều khiển
[Cntt] all java
Java Tieng Viet
bài giảng lập trình java - huỳnh công pháp
Linq net
Tom_Tat_Verilog cho thiết kế vi mạch logic
Quyen 1. LY THUYET VA BAI TAP NNLT PYTHON.pdf
Hàm can bản
Session 13
Session 13
Ad

Recently uploaded (7)

PDF
TẦM SOÁT BIẾN CỐ BẤT LỢI THÔNG QUA KẾT QUẢ XÉT NGHIỆM
PPTX
tiếp cận điều trị và chẩn đoán đau đầu.pptx
PPTX
Slide thuyết trình Quản trị kinh doanh dược.pptx
PPTX
thực hành - học bài mô phôi địt con mẹ mắc đéo j 40 kí tự ác z
PDF
TIẾP CẬN BỆNH NHÂN XÉT NGHIỆM SINH HOÁ GAN MẬT
PPTX
Chuong 3 Giới thiệu về Công nghệ mô.pptx
PPTX
Giáo dục 1234567891235778888888888.pptx
TẦM SOÁT BIẾN CỐ BẤT LỢI THÔNG QUA KẾT QUẢ XÉT NGHIỆM
tiếp cận điều trị và chẩn đoán đau đầu.pptx
Slide thuyết trình Quản trị kinh doanh dược.pptx
thực hành - học bài mô phôi địt con mẹ mắc đéo j 40 kí tự ác z
TIẾP CẬN BỆNH NHÂN XÉT NGHIỆM SINH HOÁ GAN MẬT
Chuong 3 Giới thiệu về Công nghệ mô.pptx
Giáo dục 1234567891235778888888888.pptx
Ad

C23_Buoi1_BasicC_aewfdvccccccccccccc.pdf

  • 1. Giới thiệu khóa học C23 - Lập trình C cơ bản - Hàn linh kiện - GPIO - Interrupt - UART & I2C - Timer & Pwm
  • 2. Lập trình C cơ bản C23
  • 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
  • 5. 1.1. Giới thiệu Vi điều khiển Nạp code cho vi điều khiển:
  • 6. 1.2. Cấu tạo Vi điều khiển
  • 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.
  • 11. 2. Giới thiệu về C (Introduction)
  • 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 
  • 29. 5. Lệnh điều khiển (Control statements) Bao gồm: •Selection statements – Lệnh chọn •Iteration statements – Lệnh lặp •Jump statements – Lệnh nhảy
  • 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
  • 54. 9. Giới thiệu hàn linh kiện •Mối hàn đẹp
  • 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.