1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

105 91 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thực Hành Lập Trình C Cho Vi Điều Khiển MCS51 Và Arduino
Tác giả Đặng Thành Tựu
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Vĩnh Long
Chuyên ngành Khoa Điện - Điện Tử
Thể loại thực hành
Năm xuất bản 2019
Thành phố Vĩnh Long
Định dạng
Số trang 105
Dung lượng 4,06 MB

Cấu trúc

  • Phần 1: LẬP TRÌNH VI ĐIỀU KHIỂN MCS51 (5)
    • 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)
    • 2. CƠ SỞ LÝ THUYẾT (10)
    • 1. Muc đích – yêu cầu (19)
    • 4. BÀI TẬP (9)
  • Phần 2: Lập trình Arduino (60)
    • 1. Mục đích (61)
    • 2. Yêu cầu (61)
    • 3. Kết nối phần cứng (61)
    • 4. Lưu đồ giải thuật và chương trình (41)
    • 5. Bài tập (43)
  • Tài liệu tham khảo (105)

Nội dung

LẬP TRÌNH VI ĐIỀU KHIỂN MCS51

MỤC ĐÍCH – YÊU CẦU

- Lập trình điều khiển từng Port, từng chân (pin) của vi điều khiển

- Sử dụng lệnh: gán, dịch, và lập trình mảng

- Điều khiển được từng Port, từng pin vi điều khiển

- Sử dụng thành thạo các phép toán gán, dịch, tạo và truy xuất mảng.

CƠ SỞ LÝ THUYẾT

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

TRÌNH TỰ THỰC HIỆN

3.1 Yêu cầu đặt ra: Điều khiển 8 led sáng dần từ phải qua trái Với thời gian dịch chuyển là 0,5 giây

Kết nối trên KIT: Dùng Jump bẹ 8 nối PORT2 với 8 LED đơn

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

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

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

Cách 1: Dùng phương pháp gán giá trị trực tiếp

Cấu trúc: P2 = 0b00000011; hoặc P2 = 3; hoặc P2 = 0x03; void main() { while(1) { p2=0; delay_ms(500); p200000001; delay_ms(500); p200000011; delay_ms(500); p200000111; delay_ms(500); p200001111; delay_ms(500); p200011111; delay_ms(500); p200111111; delay_ms(500); p201111111; delay_ms(500); p211111111; delay_ms(500); }}

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

Cách 2: Dùng lệnh dịch trái

Khoa Điện – Điện tử 9 char i; void main() { while(1) { p2=0; for(i=0;i Lcd.mcp51

Lcd_Init(): Khởi tạo LCD chế độ 4 bit 2 dòng

Lcd_Out(a,b,“chuoi ki tu”): Hiển thị một chuỗi kí tự ở vị ở hàng a, cột b

Lcd_Out_CP(“chuoi ki tu”): Hiển thị chuỗi kí tự tại vị trí con trỏ

Lcd_Chr(a,b,‘ki tu’): Hiển thị kí tự ở hàng a, cột b

Lcd_Chr_CP(‘ki tu’): Hiển thị kí tự tại vị trí con trỏ

Lcd_Cmd(Lệnh): Ghi lệnh vào LCD

_LCD_CLEAR: Xóa màn hình

_LCD_RETURN_HOME: Đưa con trỏ về đầu dòng

_LCD_CURSOR_OFF: Tắt con trỏ

_LCD_UNDERLINE_ON: Hiển thị con trỏ gạch chân

_LCD_BLINK_CURSOR_ON: Hiển thị con trỏ chớp tắt

_LCD_MOVE_CURSOR_LEFT: Di chuyển con trỏ qua trái

_LCD_MOVE_CURSOR_RIGHT: Di chuyển con trỏ qua phải

_LCD_TURN_ON: Bật hiển thị LCD

_LCD_TURN_OFF: Tắt hiển thị LCD

_LCD_SHIFT_LEFT: Toàn bộ dữ liệu trên màn hình dịch trái

_LCD_SHIFT_RIGHT: Toàn bộ dữ liệu trên màn hình dịch phải

The Khoa Điện – Điện tử 38 project utilizes an LCD interface with specific pin configurations: LCD_RS is connected to P2_5, LCD_RW to P2_6, and LCD_EN to P2_7 Additionally, the data pins are set as follows: LCD_D4 at P3_4, LCD_D5 at P3_5, LCD_D6 at P3_6, and LCD_D7 at P3_7 The program's main function begins with the void main() declaration.

Lcd_Init(); // khoi tao LCD

Lcd_Cmd(_LCD_CLEAR); // xoa man hinh

Lcd_Cmd(_LCD_CURSOR_OFF); // bat hien thi, tat con tro

Lcd_Out(1,1,"DHSPKT VINH LONG");// xuat "DHSPKT VINH LONG" o hanng 1, cot

Lcd_Out(2,3,"Hello World");// xuat "HELLO WORLD" o hang 2, cot 3 while(1) { // vong lap vo han

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.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

Bài thực hành số 9: LẬP TRÌNH ĐẾM SẢN PHẨM

- Lập trình đếm sản phẩm dùng bộ đếm (Counter) với 8051

- Lập trình đếm sản phẩm dùng ngắt ngoài với 8051

- Lập trình Counter đếm sản phẩm từ 00 đến 59 dùng vi điều khiển 8051

- Lập trình ngắt ngoài đếm sản phẩm từ 00 đến 59 dùng vi điều khiển 8051

- Thiết kế được phần cứng giữa vi điều khiển với LED 7 đoạn 2 số và module thu - phát hồng ngoại

Sơ đồ nguyên lý của module hồng ngoại:

- 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-

- 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

+ Kết nối trên KIT thực hành

- Kết nối ngõ ra của module hồng ngoại với chân P3.2 (INT0) của vi điều khiển

- Kết nối ngõ ra của module hồng ngoại với chân P3.4 (T0) của vi điều khiển

- Dùng jump bẹ 8 nối PORT 0 của vi điều khiển với LED 7 đoạn 2 số

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

Cách 1: Dùng bộ đếm (Counter)

#define out P0 sbit led1 at P2_1_bit; sbit led2 at P2_0_bit; char mang[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //mang du lieu ma LED 7 doan tu 0 den 9 void hienThi(unsigned char n)

// 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;

Khoa Điện – Điện tử 42 delay_ms(1); led1 = 1;

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

The article defines specific bit variables for controlling LEDs and input on a microcontroller, with `led1` and `led2` assigned to particular bits on port P2, and an input defined on port P3 Additionally, it initializes an unsigned character variable `dem` and creates an array `mang` containing hexadecimal values that represent the data for a 7-segment display, corresponding to numbers 0 through 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

EX0_bit = 1; //cho phep ngat ngoai 0

EA_bit = 1; //cho phep ngat toan cuc

//chuong trinh ngat void ngatdem() iv IVT_ADDR_EX0{ dem++;// tang so dem

} void main(){ khoitao(); //ham khoi tao while(1){ //vong lap vo han if(dem>59)dem=0; // dem tang tu 0 den 59 hienThi(dem); //ham hien thi

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 delay_ms, quan sát, nhận xét

5.1 Thực hiện lại yêu cầu trên hệ thống sẽ trả số lượng sản phẩm về 0 nếu sản phẩm đủ 90 5.2 Lập trình lại hệ thống với số lượng sản phẩm cần đếm là 500 sản phẩm

5.3 Lập trình lại hệ thống với số lượng sản phẩm cần đếm là 1500 sản phẩm

5.4 Thực hiện lai 5.3 đếm đến 1234 rồi dừng lại

Bài thực hành số 10: LẬP TRÌNH ĐỒNG HỒ SỐ HIỂN THỊ LED 7 ĐOẠN

- Sử dụng phương pháp quét điều khiển 6 LED 7 đoạn

- 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

Xem lại lý thuyết bài lập trình điều khiển LED 7 đoạ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

+ 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

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

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

//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

The function `hienthi` is designed to display time in hours, minutes, and seconds It takes unsigned char parameters for hours, minutes, and seconds, along with an unsigned int for time The function calculates the time delay by dividing the input time by three It extracts the tens and units for hours, minutes, and seconds using division and modulus operations A loop is implemented to create a delay based on the calculated time.

//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

Khoa Điện – Điện tử 48 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.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

- 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

- 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.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à một cảm biến nhiệt tuyến tính, với ngõ ra được tính theo công thức V0 = 10 * t (mV), trong đó t là nhiệt độ đo được tính bằng độ C Sơ đồ chân của IC cũng rất quan trọng để kết nối và sử dụng hiệu quả.

2.3.IC chuyển đổi tương tự - số ADC0804:

IC ADC0804 là IC chuyển đổi tín hiệu tương tự sang số công nghệ CMOS 8 bit

Khoa Điện – Điện tử 51 Ý nghĩa các chân được chia thành các nhóm sau:

- Nhóm điều khiển dùng để kết nối với vi điều khiển:

Chân 1: CS (Chip Select) chân chọn chip Nếu CS=1 sẽ khóa IC, nếu CS=0 sẽ cho phép

Chân 2: RD (Read) Nếu RD=1 sẽ khóa ngõ ra của IC (ngõ ra tổng trở cao), nếu RD=0 sẽ cho phép mở cổng ngõ ra

Chân 3: WR (Write) có tác dụng chốt dữ liệu Khi có xung cạnh lên tác động lên chân

WR thì IC cho phép xuất 8 bit, bình thường thì chốt dữ liệu ngõ ra

Lập trình Arduino

Mục đích

- Kết nối được LED với chân digital của Arduino

- Lập trình điều khiển bật tắt LED dùng chân digital của Arduino

- Sử dụng lệnh nhập xuất digital

Yêu cầu

- Điều khiển nhập xuất được các chân digital của Arduino

- Biết sử dụng được lệnh digital để điều khiển LED

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

Cách 1: Dùng bộ đếm (Counter)

#define out P0 sbit led1 at P2_1_bit; sbit led2 at P2_0_bit; char mang[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //mang du lieu ma LED 7 doan tu 0 den 9 void hienThi(unsigned char n)

// 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;

Khoa Điện – Điện tử 42 delay_ms(1); led1 = 1;

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

The code defines specific bits for controlling two LEDs (led1 and led2) and an input signal, using the P2 and P3 ports An unsigned character variable named 'dem' is initialized to zero, while an array 'mang' containing hexadecimal values represents the data for a 7-segment display, corresponding to the digits 0 through 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

EX0_bit = 1; //cho phep ngat ngoai 0

EA_bit = 1; //cho phep ngat toan cuc

//chuong trinh ngat void ngatdem() iv IVT_ADDR_EX0{ dem++;// tang so dem

} void main(){ khoitao(); //ham khoi tao while(1){ //vong lap vo han if(dem>59)dem=0; // dem tang tu 0 den 59 hienThi(dem); //ham hien thi

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 delay_ms, quan sát, nhận xét.

Bài tập

5.1 Thực hiện lại yêu cầu trên hệ thống sẽ trả số lượng sản phẩm về 0 nếu sản phẩm đủ 90 5.2 Lập trình lại hệ thống với số lượng sản phẩm cần đếm là 500 sản phẩm

5.3 Lập trình lại hệ thống với số lượng sản phẩm cần đếm là 1500 sản phẩm

5.4 Thực hiện lai 5.3 đếm đến 1234 rồi dừng lại

Bài thực hành số 10: LẬP TRÌNH ĐỒNG HỒ SỐ HIỂN THỊ LED 7 ĐOẠN

- Sử dụng phương pháp quét điều khiển 6 LED 7 đoạn

- 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

Xem lại lý thuyết bài lập trình điều khiển LED 7 đoạ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

+ 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

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

P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32

//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

The function `hienthi` is designed to display time in hours, minutes, and seconds, taking into account a delay specified by the `time` parameter It calculates the tens and units for hours, minutes, and seconds by performing division and modulus operations The `time` variable is adjusted by dividing it by 3 to create a delay effect A loop iterates for the calculated delay, allowing for the implementation of a timed display of the given time values.

//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

Khoa Điện – Điện tử 48 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.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

- 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

- 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.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à một cảm biến nhiệt tuyến tính, với ngõ ra được tính theo công thức V0 = 10 * t (mV), trong đó t là nhiệt độ đo được tính bằng độ C.

2.3.IC chuyển đổi tương tự - số ADC0804:

IC ADC0804 là IC chuyển đổi tín hiệu tương tự sang số công nghệ CMOS 8 bit

Khoa Điện – Điện tử 51 Ý nghĩa các chân được chia thành các nhóm sau:

- Nhóm điều khiển dùng để kết nối với vi điều khiển:

Chân 1: CS (Chip Select) chân chọn chip Nếu CS=1 sẽ khóa IC, nếu CS=0 sẽ cho phép

Chân 2: RD (Read) Nếu RD=1 sẽ khóa ngõ ra của IC (ngõ ra tổng trở cao), nếu RD=0 sẽ cho phép mở cổng ngõ ra

Chân 3: WR (Write) có tác dụng chốt dữ liệu Khi có xung cạnh lên tác động lên chân

WR thì IC cho phép xuất 8 bit, bình thường thì chốt dữ liệu ngõ ra

Chân 5: INTR (Interrupt) có tác dụng báo cho vi điều khiển biết IC đã thực hiện chuyển đổi xong, chờ vi điều khiển đọc dữ liệu 8 bit ngõ ra của IC ADC0804

- Nhóm các ngõ ra: bao gồm các chân từ 18 đến 11 tương ứng các bit 0 đến bit 7

Chân 9: VREF/2 là chân cấp điện áp tham chiếu quyết định độ phân giải 8 bit nhị phân ngõ ra

Từ hình trên ta có:

Mã nhị phân ngõ ra = (áp vào * 256 / VREF) /2

Chân 8: AGND là chân đồng bộ GND với tín hiệu tương tự cần chuyển đổi

Nhóm chân dao động của IC ADC0804 bao gồm chân 4 và chân 19, cho phép kết nối tụ điện và điện trở để lấy xung clock nội Ngoài ra, người dùng cũng có thể cung cấp xung clock bên ngoài qua chân 19.

Chân 6: VIN(+) ngõ vào không đảo của mạch so sánh

Chân 7: VIN(-) ngõ vào đảo của mạch so sánh

Nguyên lý hoạt động của IC ADC0804 được chia thành 2 giai đoạn:

Giai đoạn IC 0804 đọc giá trị tương tự vào và thực hiện chuyển đổi:

Giai đoạn xuất dữ liệu ra ngõ ra của IC ADC0804:

Sơ đồ nguyên lý của module IC ADC0804 trên KIT thực hành:

3.1 Yêu cầu đặt ra: Lập trình đo lường và hiển thị nhiệt độ lên LCD

+ Sơ đồ kết nối trên KIT:

- Kết nối ADC0804: Tương tự như bài 28.1

- Kết nối LCD như sau:

+ Dùng Jump bẹ 4 nối 3 bit cao ngõ ra PORT2 với 3 chân E, RW, RS của LCD + Dùng Jump bẹ 8 nối ngõ vào PORT3 với DATA của LCD

Giải thuật chương trình chính

Chờ ADC0804 chuyển đổi Đọ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

Giải thuật hiển thị lên LCD

- Tạo dữ liệu cần hiển thị

- Đưa con trỏ về dòng 1

Hiển thị nhiệt độ Đủ 10 kí tự

#define out P3 sbit E at P2_7_bit;

Gửi mã lệnh ra LCD

Tạo xung cạnh xuống cho phép thực thi

Gửi dữ liệu ra LCD

Chọn thanh ghi dữ liệu

Tạo xung cạnh xuống cho phép thực thi

Giải thuật ghi lệnh vào LCD Giải thuật ghi dữ liệu vào LCD

Khoa Điện – Điện tử 57 sbit RW at P2_6_bit; sbit RS at P2_5_bit;

#define in P0 sbit CS at P1_0_bit; sbit RD at P1_1_bit; sbit WR at P1_2_bit; sbit INT at P1_3_bit; unsigned char adc;

//chuong trinh thuc hien lenh void LCD_Lenh(unsigned char cmd){

RS = 0; //chan RS muc thap de ghi lenh out = cmd; //xuat ma lenh

E = 0; //tao xung canh xuong o chan E

//tao tre de thuc hien lenh if(cmd

Ngày đăng: 12/12/2021, 17:36

HÌNH ẢNH LIÊN QUAN

Sơ đồ nguyên lý và hình bố trí linh kiện của 32 con LED đơn trên KIT MC-1000 - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Sơ đồ nguy ên lý và hình bố trí linh kiện của 32 con LED đơn trên KIT MC-1000 (Trang 6)
Sơ đồ nguyên lý của mô đun thúc động cơ DC trên KIT thực hành: - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Sơ đồ nguy ên lý của mô đun thúc động cơ DC trên KIT thực hành: (Trang 24)
Sơ đồ nguyên lý của module hồng ngoại: - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Sơ đồ nguy ên lý của module hồng ngoại: (Trang 39)
Sơ đồ chân: - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Sơ đồ ch ân: (Trang 50)
Sơ đồ nguyên lý của module IC ADC0804 trên KIT thực hành: - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Sơ đồ nguy ên lý của module IC ADC0804 trên KIT thực hành: (Trang 53)
Bảng chức năng biên dịch chương trình - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Bảng ch ức năng biên dịch chương trình (Trang 95)
Bảng chức năng mô phỏng chương trình - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Bảng ch ức năng mô phỏng chương trình (Trang 96)
Bảng chức năng nạp chương trình và chức năng khác - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Bảng ch ức năng nạp chương trình và chức năng khác (Trang 97)
Hình 3.3 Các chức năng trong File Menu - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Hình 3.3 Các chức năng trong File Menu (Trang 103)
Hình 3.4 Các chức năng trong Sketch Menu - THỰC HÀNH LẬP TRÌNH c CHO VI ĐIỀU KHIỂN MCS51 VÀ ARDUINO
Hình 3.4 Các chức năng trong Sketch Menu (Trang 103)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w