Professional Documents
Culture Documents
Giáo Trình Thực Hành Vi Điều Khiển Và Ứng Dụng C - 2019
Giáo Trình Thực Hành Vi Điều Khiển Và Ứng Dụng C - 2019
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 – YÊ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
PHẦN 1:
LẬP TRÌNH VI ĐIỀU KHIỂN MCS51
Sơ đồ nguyên 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.
Mạch thực
tế trên KIT
U19
19 39
XTAL1 P0.0/AD0
38
P0.1/AD1
37
P0.2/AD2
18 36
XTAL2 P0.3/AD3
35
P0.4/AD4
34
P0.5/AD5
33
P0.6/AD6
9 32
RST P0.7/AD7
P2.0/A8
P2.1/A9
21
22
Mô phỏng
23
29
PSEN
P2.2/A10
P2.3/A11
24 trên Proteus
30 25
ALE P2.4/A12
31 26
EA P2.5/A13
27
P2.6/A14
28
P2.7/A15
1 10
P1.0/T2 P3.0/RXD
2
P1.1/T2EX P3.1/TXD
11 R1 R2 R3 R4 R5 R6 R7 R8
3 12 330 330 330 330 330 330 330 330
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7
P1.6 P3.6/WR
16 D1 D2 D3 D4 D5 D6 D7 D8
8 17
P1.7 P3.7/RD
AT89C52
{
i=0
p2=0; Led tắt hết
i=0 for(i=0;i<8;i++) Chạy 8 lần
{p2++; Cho sáng led cuối
Tăng P2 delay_ms(500); Trễ 500ms
i<8 T Trễ p2<<=1; Dịch trái 1 bit
Dịch trái P2
}
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;
Bắt đầu
char maled[8]={1,3,7,15,31, Khai báo mảng
63,127,255}; maled có 8
i=0
void main() phần tử
{
i=0 while(1) {
for(i=0;i<8;i++)
Tăng P2 {delay_ms(500);
i<8 T Trễ p2=maled[i]; Gán P2 = mã
Dịch trái P2 } led thứ i
}
F
}
Kết thúc
Lúc ấn phím SW1 – LED sáng Lúc ấn phím SW2 – LED tắ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:
ON1 OFF1 ON2 OFF2 ON OFF
LED1 Sáng Tắt Sáng Tắt
LED2 Sáng Tắt Sáng Tắt
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).
- Để đ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.
P
F
ALE P2.4/A12
31 26 6i 1i 1o 5i 5o
EA P2.5/A13
27 7i
P2.6/A14
28 8i U3 U7
P2.7/A15 NOT NOT
1 10 2i 2o 6i 6o
P1.0/T2 P3.0/RXD
2 11 U4 U8
P1.1/T2EX P3.1/TXD
3 12
P1.2 P3.2/INT0 NOT NOT
4 13 3i 3o 7i 7o
P1.3 P3.3/INT1
5 14 U5 U9
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1 NOT NOT
7 16 4i 4o 8i 8o
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
NOT NOT
AT89C52
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<time;i++)
{ledchuc = 0;
leddata = so1[chuc];
delay_ms(10);
ledchuc = 1;
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.
- 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.
U10
H1
H2
H3
H4
H5
H6
H7
H8
19 39
XTAL1 P0.0/AD0
38
P0.1/AD1
37
P0.2/AD2
18 36
XTAL2 P0.3/AD3
35
P0.4/AD4
34
P0.5/AD5
33
P0.6/AD6
9 32
RST P0.7/AD7
21 C1 U11
P2.0/A8
22 C2
P2.1/A9
23 C3 C1
P2.2/A10
29 24 C4 U12
PSEN P2.3/A11
30 25 C5
ALE P2.4/A12 NOT
31 26 C6 C2
EA P2.5/A13
27 C7 U13
P2.6/A14
28 C8
P2.7/A15 NOT
C3
H8 1 10 U14
P1.0/T2 P3.0/RXD
H7 2 11
P1.1/T2EX P3.1/TXD NOT
H6 3 12 C4
P1.2 P3.2/INT0
H5 4 13 U15
P1.3 P3.3/INT1
H4 5 14
P1.4 P3.4/T0 NOT
H3 6 15 C5
P1.5 P3.5/T1
H2 7 16 U16
P1.6 P3.6/WR
H1 8 17
P1.7 P3.7/RD NOT
C6
AT89C52 U17
NOT
C7
U18
NOT
C8
NOT
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
}
}
}
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.
U21 U23
19 39
XTAL1 P0.0/AD0
38
P0.1/AD1
37
P0.2/AD2 U22
18 36 16 8
XTAL2 P0.3/AD3 NOT
35
P0.4/AD4
34 2 3
P0.5/AD5 IN1 VSS VS OUT1
33 DIR U24 7 6
P0.6/AD6 IN2 OUT2
9 32 1
RST P0.7/AD7 EN1
PWM
21
P2.0/A8
22 9
P2.1/A9 NOT EN2
23 10 11
P2.2/A10 IN3 OUT3
29 24 15 14
PSEN P2.3/A11 IN4 GND GND OUT4
30 25
ALE P2.4/A12 RP1
31 26
EA P2.5/A13
27 1 L293D
P2.6/A14
28
P2.7/A15
PWM 2
1 10 DIR 3
P1.0/T2 P3.0/RXD
2 11 4
P1.1/T2EX P3.1/TXD
3 12 5
P1.2 P3.2/INT0
4 13 6
P1.3 P3.3/INT1
5 14 7
P1.4 P3.4/T0
6 15 8
P1.5 P3.5/T1
7 16 9
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
RESPACK-8
AT89C52
Để điều khiển tốc độ của động cơ DC người ta sử dụng nhiều phương pháp, trong đó phương
pháp điều chế độ rộng xung (PWM – Pulse Width Modulation) là hữu hiệu nhất. Xét giản đồ
sau:
Ta thấy thời gian động cơ quay và dừng cũng giống nhau, chỉ khác chỗ lúc động cơ quay, người
ta cung cấp cho nó chuỗi xung vuông tần số cao, lúc đó động cơ sẽ quay mà không thấy trạng
thái dừng. Tuy nhiên ta sẽ thấy động cơ quay chậm hơn so với hình trên.
Xét trong 1 chu kỳ của xung vuông, ta thấy thời gian tồn tại mức cao và mức thấp là bằng nhau,
ta nói độ rộng xung của xung vuông này là 50%.
𝑇𝑜𝑛
Độ rộng xung:𝐷𝑢𝑡𝑦 = ∗ 100%
𝑇
3. TRÌNH TỰ THỰC HIỆN:
3.1. Yêu cầu đặt ra: Lập trình điều khiển động cơ quay tốc độ 60%.
3.2. Kết nối phần cứng:
- Dùng Jump bẹ 2 nối P0.0, P0.1 trên PORT0 với Jump DC-MOTOR.
- 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.
PWM = 1;
ET0_bit = 0;
}
else if(duty >= 100){ //xac dinh gia tri lon nhat cua Duty
PWM = 0;
ET0_bit = 0;
}
else{
Ton = ((unsigned long)T) * duty / 100; //tinh theo cong thuc
Toff = T - Ton;
3.6. Tính tần số của xung vuông đã tác động đến IC L293?
3.7. Thay đổi chu kì T đưa ra nhận xét:
- Khi tăng T thì hiện tượng gì xảy ra?
- Khi giảm T thì hiện tượng gì xảy ra?
3.8. Thay đổi Duty đưa ra nhận xét:
- Khi tăng Duty thì hiện tượng gì xảy ra?
- Khi giảm Duty thì hiện tượng gì xảy ra?
4. BÀI TẬP:
4.1. Thực hiện lại yêu cầu trên với tốc độ 25%.
4.2. Viết chương trình điều khiển để động cơ quay từ nhanh nhất đến chậm nhất.
4.3. Viết chương trình điều khiển động cơ quay 75% trong 5 giây sau đó chuyển qua tốc độ
25% trong 5 giây rồi dừng.
4.4. Kết nối phím ấn đơn. Viết chương trình dùng 4 phím ấn điều khiển tốc độ động cơ như sau:
- ấn phím 1: động cơ dừng.
- ấn phím 2: động cơ quay tốc độ 25%.
- ấn phím 3: động cơ quay tốc độ 75%.
- ấn phím 4: động cơ đảo chiều (giữ nguyên tốc độ hiện tại).
Lưu ý: trước khi đảo chiều phải dừng động cơ ít nhất 3 giây.
Trên KIT thực hành có 2 LCD1602: LCD1602 8 bit mode và LCD1602 4 bit mode.
Trong giáo trình chỉ đề cập đến LCD 8 bit mode, còn chế độ 4 bit thì sinh viên tham khảo thêm
datasheet HD44780.
VEE
33
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
P0.6/AD6
E
9 32
RST P0.7/AD7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
21
P2.0/A8
22
P2.1/A9
23
P2.2/A10
29 24
PSEN P2.3/A11
30 25
ALE P2.4/A12
31 26
EA P2.5/A13
27
P2.6/A14
28
P2.7/A15
1 10
P1.0/T2 P3.0/RXD
2 11
P1.1/T2EX P3.1/TXD
3 12
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
AT89C52
}
//chuong trinh hien thi mot ki tu
void LCD_Ki_Tu(char c){
RS = 1; //RS muc cao de ghi du lieu
out = c; //xuat du lieu
E = 0; //tao xung canh xuong
E = 1;
delay_ms(1);//tao tre
}
//chuong trinh hien thi mot chuoi ki tu
void LCD_Chuoi_Ki_Tu(char *str){
unsigned char i = 0; //khai bao bien i muc thap
while(str[i] != 0){ //dat dieu kien i khac 0
LCD_Ki_Tu(str[i]); //hien thi ki tu o vi tri i
i++; //i tang 1
}
}
//chuong trinh khoi tao
void LCD_Khoi_Tao(){
RW = 0; //RW muc thap de ghi lenh hoac du lieu
LCD_Lenh(set_2_8);//chon che do hien thi 2 dong 8bit
delay_ms(5);//tao tre 5 mili giay
LCD_Lenh(xoa);//xoa man hinh
LCD_Lenh(gach_chan);//chon kieu gach chan con tro
}
//chuong trinh hien thi chuoi ki tu o vi tri bat ki
Lưu ý: khi mô phỏng đối với code này thì cần chỉ kết nối 4 chân dữ liệu từ D4 đến D7
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 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ế.
3.7. Thay đổi thời gian trễ (delay_ms) đư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 để LCD sáng rõ nhất?
4. BÀI TẬP:
4.1. Hiển thị một chuỗi kí tự bất kì đầu dòng 2.
4.2. Hiển thị và dịch phải “Dai hoc SPKT Vinh Long” đầu dòng 1 cách nhau 500ms. Sau
đó dịch lên dòng 2, rồi dịch trái về dòng 1.
4.3. Kết hợp với nút ấn hiển thị số lần ấn nút lên LCD.
- Sản phẩm sẽ đi qua giữa LED phát D1 và LED thu D2. - Lúc không có sản phẩm, LED
D2 nhận được tín hiệu từ LED phát D1 => D2 dẫn => V- = +5V, V+ < +5V ngõ ra của Opamp
U1 là V0=0V => Q1 ngưng dẫn => OUT =1.
- Lúc có sản phẩm, LED D2 không nhận được tín hiệu từ D1 => D2 ngưng dẫn => V-
= 0V => V0 = +5V => Q1 dẫn =>OUT =0.
3. TRÌNH TỰ THỰC HIỆN:
3.1. Yêu cầu đặt ra:
- Lập trình Counter đếm sản phẩm từ 00 => 59 hiện thị lên LED 7 đoạn
- Lập trình ngắt ngoài đếm sản phẩm từ 00 => 59 hiện thị lên LED 7 đoạn
delay_ms(1);
led1 = 1;
}
void main() {
TMOD &= 0xF0;//xoa cac bit dieu khien thanh ghi TMOD cua counter T0
TMOD |= 0x06;//khoi tao counter 0 mode 2 tu dong nap lai
TR0_bit = 1; //cho phep dem xung
while(1)
{
if(TL0>59)TL0=0;//TL0 tang tu 0 den 59
hienThi(TL0); //hien thi so san pham
}
}
Cách 2: Dùng ngắt ngoài
//khai bao chan
#define out P0
sbit led1 at P2_1_bit;
sbit led2 at P2_0_bit;
sbit in at P3_2_bit;
unsigned char dem=0;
char mang[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //mang du lieu ma
LED 7 doan tu 0 den 9
//chuong trinh hien thi
void hienThi(unsigned char n){
unsigned char i, chuc, dvi;
// tach so hang chuc va hang don vi
chuc = n/10;
dvi= n%10;
//hien thi so hang chuc roi tat
out = mang[chuc];
led2 = 0;
delay_ms(1);
led2 = 1;
//hien thi so hang don vi roi tat
out = mang[dvi];
led1 = 0;
delay_ms(1);
led1 = 1;
}
//chuong trinh khoi tao
void khoitao(){
out = 1; //khoi tao ma quet
in = 1; //khoi tao chan ngat
IT0_bit = 1; //bat che do ngat xung canh xuong
Bài thực hành số 10: LẬP TRÌNH ĐỒNG HỒ SỐ HIỂN THỊ LED 7
ĐOẠN
1. MỤC ĐÍCH – YÊU CẦU:
1.1. Mục đích:
- Điều khiển LED 7 đoạn.
- Sử dụng phương pháp quét điều khiển 6 LED 7 đoạn.
1.2. Yêu cầu:
- Kết nối sơ đồ mạch giữa vi điều khiển với LED 7 đoạn
- Lập trình hiển thị được giờ, phút, giây lên LED 7 đoạn bằng phương pháp quét.
2. CƠ SỞ LÝ THUYẾT:
Xem lại lý thuyết bài lập trình điều khiển LED 7 đoạn.
3. TRÌNH TỰ THỰC HIỆN:
3.1. Yêu cầu đặt ra: Điều khiển 6 LED 7 đoạn hiển thị giờ, phút, giây.
3.2. Kết nối phần cứng:
+ Kết nối trên KIT thực hành:
Dùng 2 Jump bẹ 8 nối PORT0 với DATA và PORT2 với SCAN của LED 7 đoạn.
U1
19 39 A
XTAL1 P0.0/AD0
38 B
P0.1/AD1
37 C
P0.2/AD2
18 36 D
XTAL2 P0.3/AD3
35 E
P0.4/AD4
34 F
P0.5/AD5
33 G
P0.6/AD6
9 32 P
RST P0.7/AD7
21 1i
P2.0/A8
22 2i
P2.1/A9
23 3i
P2.2/A10
29 24 4i U2 U6
PSEN P2.3/A11
1o
2o
3o
4o
5o
6o
7o
8o
30 25 5i
G
C
D
A
B
P
F
ALE P2.4/A12
31 26 6i 1i 1o 5i 5o
EA P2.5/A13
27 7i
P2.6/A14
28 8i U3 U7
P2.7/A15 NOT NOT
1 10 2i 2o 6i 6o
P1.0/T2 P3.0/RXD
2 11 U4 U8
P1.1/T2EX P3.1/TXD
3 12
P1.2 P3.2/INT0 NOT NOT
4 13 3i 3o 7i 7o
P1.3 P3.3/INT1
5 14 U5 U9
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1 NOT NOT
7 16 4i 4o 8i 8o
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
NOT NOT
AT89C52
+Chương trình
//khai bao chan
sbit ledgiochuc at P2_0_bit;
sbit ledgiodonvi at P2_1_bit;
sbit ledphutchuc at P2_3_bit;
sbit ledphutdonvi at P2_4_bit;
sbit ledgiaychuc at P2_6_bit;
sbit ledgiaydonvi at P2_7_bit;
#define data P0 //dat port 0 = data
char so1[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//ma 7 doan
// 0 1 2 3 4 5 6 7 8 9
void hienthi(unsigned char gio, unsigned char phut, unsigned char giay, unsigned int time){
// nhap so gio so phut so giay thoi gian
unsigned char giochuc, giodonvi, phutchuc, phutdonvi, giaychuc, giaydonvi;
unsigned int i;
time = time/3;//tinh thoi gian tre
giochuc = gio / 10;//tinh so chuc
giodonvi = gio % 10;//tinh so don vi
phutchuc = phut / 10;//tinh so chuc
phutdonvi = phut % 10;//tinh so don vi
giaychuc = giay / 10;//tinh so chuc
giaydonvi = giay % 10;//tinh so don vi
for(i=0;i<time;i++){//tao tre
//quet so chuc
ledgiochuc = 0;
data = so1[giochuc];
delay_us(500);
ledgiochuc = 1;
//quet don vi
ledgiodonvi = 0;
data = so1[giodonvi];
delay_us(500);
ledgiodonvi = 1;
//quet so chuc
ledphutchuc = 0;
data = so1[phutchuc];
delay_us(500);
ledphutchuc = 1;
//quet don vi
ledphutdonvi = 0;
data = so1[phutdonvi];
delay_us(500);
ledphutdonvi = 1;
//quet so chuc
ledgiaychuc = 0;
data = so1[giaychuc];
delay_us(500);
ledgiaychuc = 1;
//quet don vi
ledgiaydonvi = 0;
data = so1[giaydonvi];
delay_us(500);
ledgiaydonvi = 1;
}
}
void main() {
unsigned char giay=0, phut=0,gio=0;//khoi tao gia tri ban dau
while(1){//vong lap vo han
if(giay>59){//giay tu 0 den 59
phut++;//tang phut
giay=0;
}
if(phut>59){//phut tu 0 den 59
gio++;//tang gio
phut=0;
}
if(gio>23)gio=0;//gio tu 0 den 23
hienthi(gio, phut, giay, 1000);//ham hien thi
giay++;//tang giay
}}
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 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ế.
3.7. Thay đoạn chương trình sau vào vòng lặp while và nhận xét
giay++;//tang giay
if(giay>59){//giay tu 0 den 59
phut++;//tang phut
giay=0;
}
if(phut>59){//phut tu 0 den 59
gio++;//tang gio
phut=0;
}
if(gio>23)gio=0;//gio tu 0 den 23
hienthi(gio, phut, giay, 1000);//ham hien thi
3.8. Thay đổi thời gian trễ (delay_ms) đư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 để LED 7 đoạn sáng rõ nhất?
4. BÀI TẬP:
4.1. Thực hiện lại bài tập trên với chương trình đếm lùi.
4.2. Kết nối với nút ấn để điều chỉnh thời gian, đếm xuôi hoặc ngược.
4.3. Thực hiện lại bài tập 4.2 viêt chương trình hẹn giờ (chuông báo động).
Bài thực hành số 11: LẬP TRÌNH ĐO LƯỜNG VÀ HIỂN THỊ NHIỆT
ĐỘ LÊN LCD
1. MỤC ĐÍCH – YÊU CẦU:
1.1. Mục đích:
- Tìm hiểu IC cảm biến nhiệt độ LM35
- Tìm hiểu IC chuyển đổi tương tự - số ADC0804
- Tìm hiểu LCD1602 (8bit, 2 dòng ký tự)
- Lập trình hiển thị chuỗi ký tự lên LCD.
1.2. Yêu cầu:
- Thiết kế được phần cứng giao tiếp IC cảm biến nhiệt LM35 với IC chuyển đổi tương
tự- số ADC0804
- Thiết kế được phần cứng giao tiếp với LCD1602 (8bit, 2 dòng ký tự)
- Lập trình đo lường hiển thị được nhiệt độ lên LCD.
2. CƠ SỞ LÝ THUYẾT:
2.1. LCD1602:(xem lại bài Lập trình hiển thị LCD)
2.2. Cảm biến nhiệt độ LM35:
IC LM35 là IC cảm biến nhiệt tuyến tính, ngõ ra của IC được xác định dựa vào công
thức: V0=0mV +10mV* t0 = 10*t (mV). Trong đó t được đo là độ C. Sơ đồ chân:
- Nhóm chân dao động: bao gồm chân 4 và chân 19. Ta có thể mắc tụ và điện trở vào cặp chân
này để lấy xung clock nội bên trong IC ADC0804, cũng có thể lấy xung clock bên ngoài đưa
vào chân 19. Như sơ đồ sau:
Giải thuật chương trình chính Giải thuật hiển thị lên LCD
Đủ 10 kí tự S
Đọc giá trị số từ ADC0804
vào vi điều khiển
Đ
Tính toán và lưu vào vi
điều khiển
Hiển thị nhiệt độ
Kết thúc
Kết thúc
Giải thuật ghi lệnh vào LCD Giải thuật ghi dữ liệu vào LCD
Chương trình:
//khai bao cac lenh
#define gach_chan 0x0E
#define xoa 0x01
#define dong_1 0x80
#define dong_2 0xc0
#define set_2_8 0x38
#define set_2_4 0x28
#define dau_dong 0x02
#define set_1_8 0x30
#define set_1_4 0x20
#define dich_phai 0x1e
#define dich_trai 0x18
#define nhap_nhay 0x0f
#define tat_con_tro 0x0c
sbit RW at P2_6_bit;
sbit RS at P2_5_bit;
}
//chuong trinh hien thi mot ki tu
void LCD_Ki_Tu(char c){
RS = 1; //RS muc cao de ghi du lieu
out = c; //xuat du lieu
E = 0; //tao xung canh xuong
E = 1;
delay_ms(1);//tao tre
}
//chuong trinh hien thi mot chuoi ki tu
void LCD_Chuoi_Ki_Tu(char *str){
unsigned char i = 0; //khai bao bien i muc thap
while(str[i] != 0){ //dat dieu kien i khac 0
LCD_Ki_Tu(str[i]); //hien thi ki tu o vi tri i
i++; //i tang 1
}
}
//chuong trinh khoi tao
void LCD_Khoi_Tao(){
RW = 0; //RW muc thap de ghi lenh hoac du lieu
LCD_Lenh(set_2_8);//chon che do hien thi 2 dong 8bit
delay_ms(5);//tao tre 5 mili giay
LCD_Lenh(xoa);//xoa man hinh
LCD_Lenh(gach_chan);//chon kieu gach chan con tro
}
//chuong trinh hien thi chuoi ki tu o vi tri bat ki
void LCD_Chuoi_Ki_Tu_BK(unsigned char row, unsigned char col, char *str){
unsigned char cmd;//khai bao bien cmd
cmd = (row == 1 ? 0x80 : 0xc0) + col - 1;//tinh toan vi tri dat con tro
LCD_Lenh(cmd);//xuat vi tri dat con tro
LCD_Chuoi_Ki_Tu(str);//xuat chuoi ki tu
}
void ADC_0804(){
CS = 0;//chon chip
WR = 0;//tao xung
WR = 1;
while(INT);//doi den khi chuyen doi xong
//doc gia tri sau khi chuyen doi
RD = 0;
adc = in;
RD = 1;
}
void hienthi(unsigned int a){
LCD_Chuoi_Ki_Tu_BK(1,1,"NHIET DO: ");//hien thi "NHIET DO: " hang 1, cot 1
if(a<10){
LCD_Ki_Tu(' ');//hien thi so hang tram cua nhiet do
LCD_Ki_Tu(' ');//hien thi so hang chuc
LCD_Ki_Tu(a%10+0x30);//hien thi so hang don vi
LCD_Ki_Tu(0xdf); //hien thi ki tu 'do'
LCD_Ki_Tu('C'); //hien thi chu 'C'
}
else if(a<100){
LCD_Ki_Tu(' ');//hien thi so hang tram cua nhiet do
LCD_Ki_Tu(a%100/10+0x30);//hien thi so hang chuc
LCD_Ki_Tu(a%10+0x30);//hien thi so hang don vi
LCD_Ki_Tu(0xdf); //hien thi ki tu 'do'
LCD_Ki_Tu('C'); //hien thi chu 'C'
}
else{
LCD_Ki_Tu(a/100+0x30);//hien thi so hang tram cua nhiet do
LCD_Ki_Tu(a%100/10+0x30);//hien thi so hang chuc
Phần 2:
Lập trình Arduino
Bài thực hành số 2: LẬP TRÌNH GIAO TIẾP LED ĐƠN VÀ NÚT
NHẤN
1. Mục đích:
- Kết nối phần cứng giữa LED, nút nhấn với Arduino
- Lập trình điều khiển sáng tắt LED bằng nút nhấn
2. Yêu cầu:
- Sử dụng lệnh nhập xuất digital và câu lệnh if trong Arduino
3. Kết nối phần cứng:.
+ Sơ đồ nguyên lý:
void loop() {
if(digitalRead(nutNhan1) == LOW) //kiểm tra nếu nút 1 có được nhấn hay không
digitalWrite(led,HIGH); //xuất tín hiệu mức cao ở chân led(chân 13)
if(digitalRead(nutNhan2) == LOW) //kiểm tra nếu nút 2 có được nhấn hay không
digitalWrite(led,LOW);//xuất tín hiệu mức thấp ở chân led(chân 13)
}
5. Bài tập:
5.1. Lập trình lại chương trình trên với điều kiện khi chạy chương trình LED sáng. nhấn
nút thì LED tắt, nhấn lần nữa thì LED sáng.
5.2. Lập trình lại chương trình trên với 8 LED sáng đồng thời khi nhấn nút.
5.3. Lập trình chương trính với điều kiện khi nhấn nút thì 3 giây sau LED mới sáng và
ngược lại 3 giây sau LED tắt.
Bắt đầu
- Xuất dữ liệu
- Làm trễ
Hết dữ S
liệu
Kết thúc
4.6. Nếu thay DDRD=0XFF; bằng DDRD=0X0F; thì LED sẽ hiển thị thế nào? Giải thích.
5. Bài tập:
5.1. Thiết kế phần cứng và lập trình điều khiển 8 LED sáng dồn.
5.2. Thiết kế phần cứng và lập trình điều khiển 8 LED tắt dần.
5.3. Lập trình với IC 74HC595 để tiết kiệm số chân Arduino.
5.4. Thực hiện lại yêu cầu với 16 led.
Bắt đầu
i < 100 Đ
Kết thúc
// 0 1 2 3 4 5 6 7 8 9
void setup(){
DDRD=0XFF;//khai báo 8 chân ở PORTD
DDRB=0X0C;//khai báo chân 11 và 10 ở PORTB
}
//hàm hiển thị led 7 đoạn
void hienthi(unsigned char i,unsigned int t){
unsigned char chuc, donvi;
t=t/2;
chuc = i/10;//chia lấy số chục
donvi= i%10;//chia lấy số đơn vị
if(i<10){
for(int a=0;a<t;a++){
PORTB=led2;//xuất mã quét ra portB led 2 sáng
PORTD=so[donvi];//xuất mã 7 đoạn ra portD
delay(1);//tạo trễ 1 mili giây
PORTB=led3;//tắt led 1 và led 2
delay(1);//tạo trễ 1 mili giây
}
}
else{
for(int a=0;a<t;a++){
//quét số chục
PORTB=led1;//led 1 sáng
PORTD=so[chuc] ;
delay(1);//tạo trễ 1 mili giây
PORTB=led3;//tắt led
//quét số đơn vị
PORTB=led2;//led 2 sáng
PORTD=so[donvi];
delay(1);//tạo trễ 1 mili giây
PORTB=led3;//
}
}
}
void loop(){//vòng lặp
for(int i=0;i<100;i++){//i sẽ tăng từ 0 đến 99
hienthi(i,1000);//hiển thị số i, trễ 1 giây
}
}
4.3. Mô phỏng mạch điện và đoạn code trên.
4.4. Nạp đoạn code trên vào vi điều khiển, cấp nguồn chạy thực tế.
4.5. Hãy thay thế các giá trị HEX trong chương trình bằng nhị phân.
5. Bài tập:
5.1. Lập trình lại hiển thị đếm số từ 41 đến 86.
5.2. Tạo thêm mã 7 đoạn chữ cái từ A đến F và hiển thị lên led 7 đoạn.
5.3. Lập trình hiển thị 4 đến 8 LED 7 đoạn.
Bắt đầu
Kết thúc
+ Chân 11, chân 14, và chân 12 của 74HC595 lần lượt nối với chân 13, 12, 11(7,6.5) của
Arduino.
+ Chân 8 và chân 13 nối xuống GND, chân 16 và chân 10 nối nguồn 5v.
+ Các chân của LED ma trận được nối lần lượt với các chân của 2 IC 74HC595 như sau:
LED ma trận 8x8 74HC595
Cột 1 15
Cột 2 1
Cột 3 2
Cột 4 3
Cột 5 4
Cột 6 5
Cột 7 6
Cột 8 7
Hàng 1 15
Hàng 2 1
Hàng 3 2
Hàng 4 3
Hàng 5 4
Hàng 6 5
Hàng 7 6
Hàng 8 7
Giải thuật và viết chương trình
+ Lưu đồ:
+ Chương trình
int clock1=13;
int data1=12;
int enable1=11;
int clock2=7;
int data2=6;
int enable2=5;
unsigned int arrayCol[8]={0x66,0x66,0x66,0x7E,0x66,0x66,0x3C,0x18}; //mã dữ liệu cột cho
ký tự "A"
unsigned int
arrayRow[8]={0b11111110,0b11111101,0b11111011,0b11110111,0b11101111,0b11011111
,0b10111111,0b01111111}; //mã quét hàng
void setup() {
for(int d=3;d<=13;d++)
{
pinMode(d,OUTPUT); //thiet lập OUTPUT cho các chân cần sử dụng
}
}
void loop() {
for(int i=0;i<=7;i++)
{
//xuat du lieu ra cac cot
digitalWrite(enable1,LOW);
shiftOut(data1,clock1,MSBFIRST,arrayCol[i]);
digitalWrite(enable1,HIGH);
//quet lần lượt các hàng
digitalWrite(enable2,LOW);
shiftOut(data2,clock2,MSBFIRST,arrayRow[i]);
digitalWrite(enable2,HIGH);
delay(1); //tạo trễ phù hợp để mắt lưu ảnh nên nhìn thấy ký tự "D" trên ma trận
//tat led
digitalWrite(enable2,LOW);
shiftOut(data2,clock2,MSBFIRST,255);
digitalWrite(enable2,HIGH);
}
}
4. BÀI TẬP
4.1. Thực hiện yêu cầu trên với các ký tự B,C, ….Z và các số 0, 1, 2, …9.
4.2. Thực hiện lạy yêu cầu trên với các ký hiệu: !, >,<,?,$…
4.3. Dựa vào bài thực hành về led 7 đoạn, hãy viết chương trình để chữ A chạy từ trái qua phải.
void loop() {
analogWrite(speedPin,255); //đăt tốc đô quay cho đong cơ
//kiểm tra nut nhan nào đuoc nhấn để đảo chiều đong cơ
if((digitalRead(switch1) == LOW))
{
digitalWrite(pin,HIGH);
}
if((digitalRead(switch2) == LOW))
{
digitalWrite(pin,LOW);
}
}
5. Bài tập:
5.1. Lập trình điều khiển cho động cơ quay với tốc độ lớn nhất và nhỏ nhất không dùng
biến trở
5.2. Lập trình điều khiển cho động cơ quay tốc độ 75% sau 10 giây quay với tốc độ 25%
trong 5 giây rồi dừng.
5.3. Kết nối với nút nhấn đơn. Viết chương trình dùng 4 nút nhấn điều khiển tốc độ động
cơ theo yêu cầu:
- Ấn phím 1 động cơ dừng.
- Ấn phím 2 động cơ quay tốc độ 25%
- Ấn phím 3 động cơ quay tốc độ 75%
- Ấn phím 4 động cơ đảo chiều (giữ nguyên tốc độ hiện tại)
Lưu ý: trước khi đảo chiều phải dừng động cơ ít nhất 3 giây.
5. Bài tập:
5.1 Thực hiện lại chương trình nhưng kết nối thêm Relay với Arduino với điều khiện nếu
nhiệt độ trên 500C thì bật Relay và ngược lại.
5.2 Thực hiện lại chương trình dùng Relay điều khiển bật tắt bóng đèn với điều kiện:
- Nếu nhiệt độ từ dưới 500C thì bật Relay điều khiển đèn sáng và hiển thị lên màn hình
LCD nhiệt độ và trạng thái bóng đèn sáng hay tắt
- Nếu nhiệt độ trên 500C thì tắt Relay điều khiển đèn tắt cho đến khi nhiệt độ dưới 500C,
hiển thị lên LCD nhiệt độ và trạng thái bóng đèn.
PHỤ LỤC
Phụ lục 1 : HƯỚNG DẪN CÀI ĐẶT MIKROC FOR 8051
Bước 1: Double click vào file “ Mikroc-8051-setup-v360.exe” bắt đầu cài đặt. Hộp thoại bên
dưới xuất hiện, tiếp tục chọn Next.
Bước 2: Nhấn stick ngay “ I accept the terms of the License Agreement” sao đó chọn Next.
Bước 10: Cài đặt điều khiển lập trình 8051 FLASH.
Bước 11: Cài đặt hoàn tất, chọn No do không cần cài đặt công cụ nạp vi điều khiển bằng phần
mềm này.
Bước 2: Sau khi bấm vào tạo dự án mới, cửa sổ hiện lên, chọn Next để tiếp tục.
Project Name: Đặt tên cho dự án, cũng là file hex nạp code ho vi điều khiển.
Project folder: Chọn nơi lưu dự án.
Device Name: Chọn dòng vi điều khiển để lập trình.
Device Clock: Chọn tần số hoạt động (thạch anh gắn vào vi điều khiển).
Sau khi cài đặt, chọn Next để tiếp tục.
Bước 4: Chọn kiểu bộ nhớ, mặc định là kiểu bộ nhớ nhỏ. Chọn Next để tiếp tục.
Bước 5: Đưa thêm file vào dự án mới, nếu không cần thêm thì chọn Next để tiếp tục.
Bước 6: Lựa chọn thêm thư viện hoặc không, mặc định là thêm đầy đủ các thư viện.
Một số chức năng trên thanh công cụ của phần mềm Mikro C được
trình bày như các bảng sau:
Build Sự miêu tả
Run Sự miêu tả
Bước vào.
Bước qua.
Bước ra khỏi.
Toggle Breakpoint.
Tools Sự miêu tả
- Cách quản lý dự án nhanh (Project manager ): Project manager giúp dễ dàng quản lý các
thành phần trong project như: source code C, các hình ảnh đã add file vào eeprom, file xml,
file hex và các file khác….
- Cách quản lý thư viện nhanh ( Library manager): Library manager nơi quản lý các thư viện
hàm trong mikroc, nếu trong chương trình bạn có sử dụng thư viện hàm nào thì phải đánh
dấu check vào thư viện đó nếu không Build sẽ bị lỗi.
- Giả sử trong chương trình có viết lệnh Lcd_out(1,1, “dientucongnghiep”) thì phải đánh dấu
check vào LCD trong Library manager.
- Thanh trạng thái massage: Khi bạn Build (Ctrl+F9) một chương trình thì tất cả các lỗi (nếu
như có) sẽ được hiển thị ở đây. Nếu biên dịch thành công thì sẽ hiển thị các thông tin như:
Used RAM, Used ROM và báo Finished successfully như hình
R1
Điện trở res
10k
RP1
1
2
3
4
5
Điện trở thanh 6 respack
7
8
9
RESPACK-8
LED đơn
D1 Led-
LED-YELLOW
LED 7 đoạn
(lưu ý có rất nhiều loại 7seg
led 7 đoạn)
Nút ấn button
Q2
Transistor thuận PN3644 PN3644
Q3
Transistor nghịch NPN NPN
RL2
12V
Rờ le RELAY
LCD1 LM016L
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 U1
27.0
Cảm biến nhiệt LM35 LM35
2
VOUT
3 LM35
U1
1 20
CS VCC
2 18
RD DB0(LSB)
3 17
WR DB1
4 16
CLK IN DB2
IC chuyển đổi tương tự- 5
8
INTR DB3
15
14
A GND DB4
số 10
9
D GND DB5
13
12
Adc0804
VREF/2 DB6
ADC0804 19
CLK R DB7(MSB)
11
6
VIN+
7
VIN-
ADC0804
SIM1
AREF
13
13
12
ARDUINO
RESET 12
11
5V
~11
~10
10
9
SIMULNO UNO
(hoặc đánh Arduino sau
~9
Board Arduino UNO 8
SIMULINO
POWER
GND 8
DIGITAL (PWM~)
7
~6
6
AT MEL
A0 5
ANALOG IN
A0 ~5
A1 A1
4
4
A2 A2 ~3
3
A3 A3 2
2
A4 A4 TX > 1
1
A5 A5 RX < 0
0
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
❖ Tool menu:
Chức năng của các nút theo thứ tự từ trái qua phải như sau:
+ Verify: biên dịch kiểm tra xem code có lỗi hay không.
+ Upload: nạp code đang soạn thảo vào board Arduino.
+ New, Open, Save : có chức năng tạo mới, mở, lưu file Sketch.
+ Serial Monitor: chọn vào đây để mở màn hình hiển thị dữ liệu gửi từ Arduino lên máy tính.
3. Vùng soạn thảo code chương trình( vùng số 3):
Đây là nơi để người lập trình soạn thảo code cho chương trình Arduino của mình
4. Vùng thông báo (vùng số 4):
Đây là nơi hiện thị thông báo các thông tin về lỗi của chương trình và vi trị, dung lượng file
code khi biên dịch xong.