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

(TIỂU LUẬN) báo cáo bài tập lớn môn VI xử lý đề tài thiết kế mạch đo nhiệt độ độ ẩmsử dụng cảm biến DHT11 và vi điều khiển AT89S52

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.34 MB, 26 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN ĐIỆNBỘ MÔN: KỸ THUẬT ĐO VÀ TIN
HỌC CÔNG NGHIỆP

BÁO CÁO BÀI TẬP LỚN
MÔN VI XỬ LÝ
Đề tài: Thiết kế mạch đo nhiệt độ - độ ẩmsử dụng cảm biến DHT11 và vi
điều khiển AT89S52

Giảng viên hướng dẫn: Th.S Lê Cơng Cường
Nhóm sinh viên thực hiện:
Hà Văn TùngMSSV: 20173456
Vũ Hữu TùngMSSV: 20173459
Trần Quang MinhMSSV: 20174070

Hà Nội, ngày 17/01/2020


LỜI NÓI ĐẦU
Ngày này, khoa học kĩ thuật đang phát triển hết sức mạnh mẽ, đặc biệt là lĩnh vực điều
khiển và tự động hóa. Để tăng tính năng điều khiển, các bộ vi điều khiển đã không ngừng được
cải tiến và nâng cấp. Và một trong số những họ vi điều khiển được ứng dụng nhiều hiện nay
chính là vi điều khiển 8051. Các bộ vi điều khiển thuộc họ 8051 đầu tiên ra đời vào năm 1981.
Các bộ vi điều khiển này mới chỉ có 128 byte RAM, 4KB ROM, 2 bộ định thời, 1 cổng nối tiếp
và 4 cổng vào ra. Tất cả được đặt trên cùng một chíp. Và sau này đã có nhiều bộ vi điều khiển
thuộc họ 8051 ra đời với những sự cải tiến đặc biệt của nhiều hãng sản xuất như vi AT89C51,
AT89C52, AT89S51, AT89S52, …
Họ vi điều khiển 8051 được ứng dụng nhiều trong thực tế như điều khiển động cơ, điều
khiển led, điều khiển đèn giao thông, thiết kế bộ đếm sản phẩm, … Và nhóm chúng em gồm 3
thành viên:
1. Trần Quang Minh
2. Hà Văn Tùng


3. Vũ Hữu Tùng
đã quyết định chọn đề tài “Thiết kế mạch đo nhiệt độ và độ ẩm hiển thị kết quả lên màn hình
LCD 16x02, sử dụng cảm biến DHT11 và vi điều khiển AT89S52” bởi tính thực tế cũng như
ứng dụng của nó trong đời sống của chúng ta.
Dưới sự hướng dẫn của thầy Lê Cơng Cường trong q trình giảng dạy cùng sự nghiên
cứu của bản thân, nhóm chúng em đã hồn thiện đề tài, chạy mơ phỏng trên phần mềm Proteus
cũng như trên Kit 8051. Tuy nhiên do quá trình tìm hiểu cịn nhiều thiếu xót nên sản phẩm chưa
thực sự tối ưu, chúng em mong sẽ nhận được thêm nhiều ý kiến góp ý của thầy và các bạn để đề
tài được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!


I. CƠ SỞ LÝ THUYẾT
I.1. Giới thiệu khái quát về họ MCS-51 và chip AT89S52
I.1.1. Khái quát về họ MCS-51
MCS-51 là họ vi điều khiển của hãng Intel. Vi mạch tổng quát của họ MCS-51 là chip 8051.
Chip 8051 có một số đặc trưng cơ bản:
 Bộ nhớ chương trình bên trong: 4KB (ROM)
 Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
 Bộ nhớ chương trình bên ngồi: 64KB (ROM)
 Bộ nhớ dữ liệu bên ngoài: 64KB (RAM)
 4 port xuất nhập vào ra 8 bit
 2 bộ định thời 16 bit
 Mạch giao tiếp nối tiếp
 Bộ xử lí bit
 210 vị trí nhớ được định địa chỉ bit
Ngồi ra, MCS-51 cịn có một số chip vi điều khiển khác có cấu trúc gần tương tự như chip
8031, 8032, 8051, 8052, 8751, 8752, 8951, 8952, …
Dung lượng RAM


Dung lượng ROM

Chế độ nạp

89C51

128 byte

4 Kbyte

Song song

89C52

128 byte

8 Kbyte

Song song

89C53

128 byte

12 Kbyte

Song song

89C55


128 byte

20 Kbyte

Song song

Bảng 1.
Dung lượng RAM

Dung lượng ROM

Chế độ nạp

89S51

128 byte

4 Kbyte

Nối tiếp

89S52

128 byte

8 Kbyte

Nối tiếp

89S53


128 byte

12 Kbyte

Nối tiếp

89S55

128 byte

20 Kbyte

Nối tiếp

Bảng 2.

I.1.2. Cấu trúc vi xử lý AT89S52


Hình 1. Sơ đồ chân của AT89S52
Đây là một vi điều khiển 8bit với 8k byte trong hệ thống lập trình flash. Các thơng số cơ bản:
-

Tương thích với sản phẩm MCS-51 ®

-

8k bite trong bộ nhớ của hệ thống lập trình flash ( ISP) – độ bền : 1000 chu kỳ Ghi /
Xóa.


-

Định mức hoạt động: 4V – 5,5V

-

Hoạt động khi hoàn toàn tĩnh điện: 0 Hz to 33 MHz

-

Khóa bộ nhớ chương trình có 3 mức.

-

Bộ nhớ RAM bên trong là 256x8bit

-

32 đường dẫn I/O

-

3 Bộ đếm / Bộ định thời 16 bit

-

8 nguồn ngắt.

-


Kênh nối tiếp UART song công

-

Chế độ giảm điện áp và nghỉ ngơi điện áp thấp.

-

Phục hồi ngắt ở chế độ giảm điện áp

-

Bộ đếm cảnh báo

-

Con trỏ dữ liệu kép

-

Cờ tắt điện áp.

Các AT89S52 là một vi điều khiển CMOS 8-bit năng lượng thấp, hiệu suất cao với 8K
byte trong bộ nhớ hệ thống lập trình Flash. Thiết bị này được sản xuất bằng công nghệ bộ nhớ


khơng biến đổi mật độ cao của Atmel, tương thích với sơ đồ chân và thiết lập lệnh 80C51 theo
tiêu chuẩn công nghiệp. Flash trên chip cho phép bộ nhớ chương trình được tái lập trình trong hệ
thống hoặc bởi một bộ lập trình bộ nhớ khơng biến đổi thơng thường.Bằng cách kết hợp một

CPU 8-bit đa năng với trong hệ thống lập trình Flash trên một chip nguyên khối, Atmel
AT89S52 là một vi điều khiển mạnh mẽ mà cung cấp một giải pháp rất linh hoạt và hiệu quả chi
phí cho nhiều ứng dụng điều khiển nhúng.
Ngồi ra, AT89S52 được thiết kế với logic tĩnh cho hoạt động tần số xuống không và hỗ
trợ hai phần mềm lựa chọn chế độ tiết kiệm năng lượng. Chế độ nhàn rỗi cho dừng CPU trong
khi cho phép bộ nhớ RAM, bộ đếm/ bộ định thời, cổng nối tiếp và hệ thống ngắt để tiếp tục hoạt
động. Chế độ giảm điện áp thì giữ lại nội dung bộ nhớ RAM nhưng đóng bang bộ tạo dao động,
vơ hiệu hóa tất cả các chức năng khác của chip cho đến lần ngắt tiếp theo hoặc là thiết lập lại hệ
thống.


Chức năng cơ bản của các chân.
VCC:Cung cấp điện áp.
GND: Nối đất.
Cổng 0: từ chân 32 đến chân 39 (P0.0 _P0.7) là cổng I/O 2 mở 2 chiều 8 bit. Cổng 0 có 2

chức năng: trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các
đường IO, đối với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và bus dữ
liệu.
Cổng 0 cũng được byte mã trong khi lập trình flash và kết quả đầu ra các byte mã trong khi
xác minh chương trình. Trở pullups bên ngồi được u cầu trong quá trình xác minh chương
trình
Cổng 1 :từ chân 1 đến chân 9 (P1.0 _ P1.7) là cổng I/O 8 bit 2 hướng với trở pullups ở bên
trong, Cổng 1 dùng cho giao tiếp với thiết bị bên ngoài nếu cần.
Cổng 1 cũng nhận các byte địa chỉ mức thấp trong khi xác minh chương trình.

Bảng 3: Chức năng các chân của 89S52
Chân cổng

Các chức năng thay thế



P1.0

T2 ( đầu vào đếm ngoài cho Bộ đếm/ bộ định thời 2) , dừng đồng

P1.1

hồ.
T2EX ( Bộ đếm/ bộ định thời 2 chụp/ tải lại kích hoạt và điều khiển

P1.5

hướng )
MOSI ( được dùng cho lập trình trong hệ thống )

P1.6

MISO ( được dùng cho lập trình trong hệ thống )

P1.7

SCK ( được dùng cho lập trình trong hệ thống )

Cổng 2:từ chân 21 đến chân 28 (P2.0 _P2.7) và là cổng I/O 8 bit 2 hướng với trở pullups
ở bên trong. Cổng 2 có tác dụng kép dùng như các đường xuất/nhập hoặc là byte cao của bus địa
chỉ đối với các thiết bị dùng bộ nhớ mở rộng.
Cổng 2 cũng nhận các bit địa chỉ mức cao và 1 số tín hiệu điều khiển trong khi xác minh
chương trình.
Cổng 3:từ chân 10 đến chân 17 (P3.0 _ P3.7) và là cổng I/O 8 bit 2 hướng với trở pullups

ở bên trong. Cổng 3 có tác dụng kép. Các chân của cổng này có nhiều chức năng, có cơng dụng
chuyển đổi có liên hệ đến các đặc tính đặc biệt của 89S52 như ở bảng sau:

Bảng 4: Chức năng các bit cổng P3
Bit
Tên
Chức năng chuyển đổi
P3.0
RXD
Cổng vào dữ liệu nối tiếp
P3.1
TXD
Cổng xuất dữ liệu nối tiếp
P3.2
INT0
Cổng vào ngắt cứng thứ 0
P3.3
INT1
Cổng vào ngắt cứng thứ 1
P3.4
T0
Cổng vào Timer/Counter thứ 0
P3.5
T1
Cổng vào Timer/Counter thứ 1
P3.6
WR
Tín hiệu ghi dữ liệu lên bộ nhớ ngồi
P3.7
RD

Tín hiệu đọc bộ nhớ dữ liệu ngồi
Cổng 3 cũng nhận 1 vài tín hiệu điều khiển cho lập trình Flash và xác minh.
PSEN (Program store enable):

PSEN là tín hiệu ngõ ra có tác dụng cho phép đọc bộ nhớ chương trình
mở rộng và thường được nối đến chân OE của Eprom cho phép đọc các byte


mã lệnh.
PSEN ở mức thấp trong thời gian 89S52 lấy lệnh. Các mã lệnh của chương trình được
đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong 89S52 để giải mã lệnh.
Khi 89S52 thi hành chương trình trong ROM nội, PSEN ở mức cao.
ALE (Address Latch Enable):
Khi 89S52 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ và dữ liệu do
đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều
khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.
Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trị là địa chỉ
thấp nên chốt địa chỉ hoàn toàn tự động.
EA (External Access): Tín hiệu vào EA (chân 31) thường được mắc lên mức 1 hoặc mức
0. Nếu ở mức 1, 89S52 thi hành chương trình từ ROM nội. Nếu ở mức 0, 89S52 thi hành chương
trình từ bộ nhớ mở rộng. Chân EA được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom
trong 89S52.
RST (Reset):Khi ngõ vào tín hiệu này đưa lên
mức cao ít nhất 2 chu kỳ máy, các thanh ghi bên trong
được nạp những giá trị thích hợp để khởi động hệ
thống. Khi cấp điện mạch phải tự động reset.

Các giá trị tụ và điện trở được chọn là: .
R1=10, R2=220, C=10 F


Hình 2: Khối reset

Các ngõ vào bộ dao động X1, X2:
Bộ tạo dao động được tích hợp bên trong 89S52. Khi sử dụng 89S52, người ta chỉ cần
nối thêm thạch anh và các tụ. Tần số thạch anh tùy thuộc vào mục đích của người sử
dụng, giá trị tụ thường được chọn là 33p.


Hình 3: Bộ tạo dao động bên trong 89S52
I.2. Tổng quan về màn hình LCD 16x02

Hình 4:Màn hình LCD
LCD viết tắt của từ Liquid Crytal Dislay – màn hình tinh thể lỏng. Có ưu điểm là hiển thị
được tất cả các kí tự trong bảng mã ASCCI, tuy nhiên giá thành cao và khoảng cách nhìn gần.
LCD16x2 là loại LCD phổ biến trên thị trường, 16x2 tương ứng là 16 cột 2 hàng.
Tính năng của LCD 16x2:
-

5 x 8 chấm với con trỏ

-

Tích hợp bộ điều khiển (KS 0066 hoặc tương đương)

-

Nguồn cấp +5V ( cũng có sẵn cho loại 3V)

-


1/16 chu kỳ

-

B/L được chạy bởi chân 1, 2, 15,16 hoặc A.K (LED)

-

Tùy chọn N.V cho nguồn cấp 3V.

Bảng 5: Mô tả chân của LCD 16x2
STT Chân

Ký hiệu

Chức năng

1

Vss

GND


2

Vdd

+3V tới 5V


3

Vo

Điều chỉnh tương phản

4

RS

Tín hiệu lựa chọn thanh ghi H/L

5

R/W

Tín hiệu Đọc/Ghi H/L

6

E

Kích hoạt tín hiệu H→ L

7

DB0

Đường bus dữ liệu H/L


8

DB1

Đường bus dữ liệu H/L

9

DB2

Đường bus dữ liệu H/L

10

DB3

Đường bus dữ liệu H/L

11

DB4

Đường bus dữ liệu H/L

12

DB5

Đường bus dữ liệu H/L


13

DB6

Đường bus dữ liệu H/L

14

DB7

Đường bus dữ liệu H/L

15

A/Vee

4.2V cho LED/đầu ra điện áp âm

16

K

Nguồn cấp cho B/L (OV)


I.3. Tổng quan về cảm biến DHT11

Hình 5: Thiêt bị cảm biến DTH 11.
DHT11 là cảm biến nhiệt độ và độ ẩm. Nó ra đời sau và được sử dụng thay thế cho dịng
SHT1x ở những nơi khơng cần độ chính xác cao về nhiệt độ và độ ẩm. Mỗi phần tử DHT11

được hiệu chỉnh đúng như trong phịng thí nghiệm nên cực kỳ chính xác về hiệu chuẩn độ ẩm.
Các hệ số hiệu chỉnh được lưu trữ như các chương trình trong bộ nhớ OTP, được sử dụng bởi
tín hiệu nội bộ của quá trình phát hiện cảm ứng. Giao diện nối tiếp 1 dây làm cho việc tích hợp
hệ thống nhanh chóng và dễ dàng. Kích thước nhỏ, tiêu thụ điện năng thấp và truyền tín hiệu lên
đến 20 mét làm cho DTH 11 là sự lựa chọn tốt nhất cho các ứng dụng khác nhau.
Thông số:
-

Phạm vi đo đạc: độ ẩm trong khoảng RH 20-90%, nhiệt độ trong khoảng 0-50 ℃

-

Sai số độ ẩm: ±5%RH

-

Sai số nhiệt độ: ±2℃

-

Độ phân giải : 1

Hình 6: Sơ đồ kết nối với vi xử lý


II. Sơ đồ khối và sơ đồ nguyên lý của hệ thống

Mạch nạp USB ISP
Nạp chương
trình cho vi

điều khiển

Cấp nguồn
cho hệ thống

Khối xử lý trung tâm
(MCU AT89S52)

Khối cảm biến
nhiệt độ - độ ẩm

Khối hiển thị

Hình 7. Sơ đồ khối hệ thống
 Tổng quan về phần cứng:
Hệ thống gồm 3 khối chính:
 Khối xử lý trung tâm: sử dụng IC AT89S52 thuộc họ vi xử lí 8051 để điều khiển
hoạt động của toàn hệ thống.
 Khối cảm biến nhiệt độ - độ ẩm: sử dụng modult cảm biến DHT11 để lấy dữ
liệu về nhiệt độ - độ ẩm của môi trường và gửi về cho vi xử lý.
 Khối hiển thị: thông tin về giá trị của độ ẩm và nhiệt độ sẽ được đưa lên hiển thị
trên màn hình LCD 16x02.
Hệ thống được nuôi bằng nguồn 5V lấy từ cổng USB của mạch nạp USB ISP. Mạch nạp
này đồng thời cũng được sử dụng để nạp chương trình code từ máy tính vào chip vi xử lý.
 Sơ đồ nguyên lý của hệ thống:


Hình 8. Sơ đồ ngun lý mơ phỏng trên phần mềm Proteus 8.8

III. Sơ đồ nguyên lý và chức năng từng khối

III.1. Khối xử lý trung tâm

Hình 9. Sơ đồ nguyên lý khối xử lý trung tâm


 Gồm:
- 1 chip vi xử lý AT89S52 thuộc họ 8051.
- Mạch tạo dao động thạch anh kết nối với 2 chân XTAL1 và XTAL2 của chip AT89S52.
- Mạch Reset cho vi điều khiển.
- Trở treo 10k nối với port 0 để xác định mức logic 1.
 Nhiệm vụ chính của vi xử lí bao gồm:

Gửi tín hiệu u cầu giao tiếp đến cảm biến DHT11.

Nhận tín hiệu về độ ẩm và nhiệt độ là các bit nhị phân do DHT11 gửi về.

Gửi lệnh và dữ liệu lên LCD để hiển thị kết quả đo nhiệt độ và độ ẩm.
III.2. Khối hiển thị

Hình 10. Sơ đồ nguyên lý khối hiển thị
- Là 1 màn hình LCD 16x02 có tích hợp trên đó chip HD44780.
- Sơ đồ chân: gồm 16 chân
+ Vss: chân nối mass cho LCD, ta nối với GND của mạch điều khiển.
+ Vdd: chân cấp nguồn cho LCD, ta nối với Vcc = +5V của mạch điều khiển.
+ Vee: dung điều chỉnh độ tương phản của LCD, nối với chân điều khiển của biến trở 10k.
+ D0 – D7: 8 bus dữ liệu trao đổi thông tin giữa LCD và VĐK.
+ RS: Chân chọn thanh ghi:
 RS = 0 → D0 – D7 sẽ nối với thanh ghi lệnh IR của LCD (chế độ ghi) hoặc nối với
bộ đếm địa chỉ của LCD (chế độ đọc)
 RS = 1 → D0 – D7 sẽ nối với thanh ghi dữ liệu DR trong LCD

+ RW: chân chọn chế độ đọc/ghi
• RW = 0: LCD hoạt động ở chế độ ghi
• RW = 1: LCD hoạt động ở chế độ đọc
+ EN: chân cho phép


Chế độ ghi: dữ liệu được LCD chuyển từ bus vào thanh ghi bên trong nó khi có 1
xung cao chuyển xuống thấp ở chân EN
• Chế độ đọc: dữ liệu được LCD xuất ra D0-D7 khi phát hiện 1 xung thấp lên cao ở
chân EN
* Chế độ đọc: MCU đọc thông tin từ LCD thông qua các chân D0-D7
* Chế độ ghi: MCU xuất thông tin điều khiển cho LCD thơng qua các chân D0-D7


Hình 11. Bảng mã kí tự hiển thị trên LCD


III.3. Khối cảm biến

Hình 12. Sơ đồ nguyên lý khối cảm biến

Hình 13. Một số thơng số của cảm biến DHT11 (nguồn: Datasheet DHT11)






Vài thông số kỹ thuật quan trọng về DHT11:
- Điện áp hoạt động: 3.3V-5V

- Dải độ ẩm đo được: 20-90%, sai số: ± 5%, độ phân giải: 1
- Dải nhiệt độ đo được: 0-50 °C, sai số: ± 2°C, độ phân giải: 1
Cách VĐK giao tiếp với DHT11: qua 2 bước
 VĐK gửi tín hiệu Start tới DHT11, sau đó chờ DHT11 xác nhận lại:

Hình 14. Sơ đồ quá trình VĐK gửi tín hiệu Start
và DHT11 gửi tín hiệu xác nhận giao tiếp
 Đọc dữ liệu do DHT11 gửi về:

Hình 15. Quá trình gửi bit “0” của DHT11

Hình 16. Quá trình gửi bit “1” của DHT11


III.5. Mạch nạp và cấp nguồn cho vi điều khiển





Sử dụng mạch nạp USB ISP ver 2.0:
Giao tiếp và cấp nguồn cho VĐK qua cổng USB 5VDC.
Cổng nạp chuẩn SPI 10pins.
Sơ đồ nối chân giữa mạch nạp và VĐK:
Mạch nạp USB ISP

IC AT89S52

VCC


VCC

GND

GND

MOSI

Chân số 6 của VĐK

RST

Chân số 9 của VĐK

SCK

Chân số 8 của VĐK

MISO

Chân số 7 của VĐK

Bảng 6. Sơ đồ nối chân giữa mạch nạp và VĐK

Hình 17. Hình ảnh mạch nạp USB ISP

Hình 18. Sơ đồ chân của mạch nạp


IV. Chương trình lập trình trên Assembly

;===================================================================
;------------- THIET KE MACH DO NHIET DO - DO AM BANG -------------;------------- DHT11 VA HIEN THI KET QUA LEN LCD 16X2 -------------;===================================================================
ORG 0000H
LCD_DATA_PORT EQU P0
RS BIT P2.2
RW BIT P2.3
EN BIT P2.4
DHT_DATA_PORT BIT P2.1
;===================================================================
;/////////////////////// CHUONG TRINH CHINH ///////////////////////
;-------------------------------------------------------------------CLR

RW

ACALL

LCD_INIT

;khoi tao LCD

MAIN:
;------ Chuong trinh giao tiep giua AT89C52 va cam bien DHT11 ------MOV A,#0
MOV B,#0AH
CLR DHT_DATA_PORT
LCALL DELAY_20MS

;giu chan DATA tai muc 0 trong 20ms

SETB DHT_DATA_PORT
LCALL DELAY_20US


;giu chan DATA tai muc 1 trong 20us

JB DHT_DATA_PORT,$
LCALL DELAY_60US

;cho trong luc chan DATA duoc keo xuong muc 0


JNB DHT_DATA_PORT,$
LCALL DELAY_60US

;cho trong luc chan DATA duoc keo len muc 1

JB DHT_DATA_PORT,$
LCALL DELAY_20US

;cho trong luc chan DATA duoc keo xuong muc 0

JNB DHT_DATA_PORT,$
MOV R0,#40
LCALL LOOP0
AGAIN:
JB

DHT_DATA_PORT,$

DEC R0
JNB


DHT_DATA_PORT,$

CJNE R0,#24,AGAIN
MOV A,#0
MOV B,#0AH
LCALL LOOP00
;------- Chuong trinh hien thi nhiet do va do am len LCD 16x2 ------;bat dau in do am len dong 1 cua LCD:
MOV

A,#80H

;dua con tro man hinh ve dau hang 1

ACALL

LCD_WRITE_CMD

;gui lenh den LCD

ACALL

DELAY1

MOV

R3,#0

MOV

DPTR,#DO_AM


MOV

A,R3

MOVC

A,@A+DPTR

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

INC

R3

CJNE

R3,#6,W1

W1:

;gui du lieu den LCD



MOV

A,R1

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

MOV

A,R2

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

MOV

A,#00100101B

;in ra ki hieu %


ACALL

LCD_WRITE_DATA

;gui du lieu den LCD

ACALL

DELAY1

;gui du lieu den LCD

;gui du lieu den LCD

;bat dau in nhiet do len dong 2 cua LCD:
MOV

A,#0C0H

;dua con tro man hinh ve dau hang 2

ACALL

LCD_WRITE_CMD

;gui lenh den LCD

ACALL

DELAY1


MOV

R4,#0

MOV

DPTR,#NHIET_DO

MOV

A,R4

MOVC

A,@A+DPTR

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

INC

R4

W2:


CJNE R4,#9,W2
MOV

A,R5

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

MOV

A,R6

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

MOV

A,#11011111B


ACALL

LCD_WRITE_DATA

;gui du lieu den LCD

;gui du lieu den LCD


ACALL

DELAY1

MOV

A,#01000011B

ACALL

LCD_WRITE_DATA

ACALL

DELAY1

;cu sau 3 giay chay lai chuong trinh do do am va nhiet do:

W3:

MOV


52H,#200

LCALL

DELAY_20MS

DJNZ 52H,W3
LJMP MAIN
;-------------------------------------------------------------------DO_AM:

DB

NHIET_DO: DB

'D','o',' ','A','m',':'
'N','h','i','e','t',' ','D','o',':'

;-------------------------------------------------------------------LOOP0:
LCALL DELAY_40US
JB DHT_DATA_PORT,LOOP1
CLR C
RLC A
DEC R0
LCALL LOOP2
RET
LOOP1:
SETB C
RLC A
DEC R0

LCALL DELAY_20US
LCALL DELAY_20US
ACALL LOOP2
RET

;vong lap lay du lieu ve do am


LOOP2:
JNB DHT_DATA_PORT,$
CJNE R0,#32,LOOP0
DIV AB
MOV DPTR,#MA_LCD

;tro con tro DPTR den mang MA_LCD

MOVC A,@A+DPTR
MOV R1,A
MOV A,B
MOVC A,@A+DPTR
MOV R2,A
RET
LOOP00:
LCALL DELAY_40US
JB DHT_DATA_PORT,LOOP11
CLR C
RLC A
DEC R0
LCALL LOOP22
RET

LOOP11:
SETB C
RLC A
DEC R0
LCALL DELAY_20US
LCALL DELAY_20US
ACALL LOOP22
RET
LOOP22:
JNB DHT_DATA_PORT,$
CJNE R0,#16,LOOP00

;vong lap lay du lieu ve nhiet do


DIV AB
MOV DPTR,#MA_LCD

;tro con tro DPTR den mang MA_LCD

MOVC A,@A+DPTR
MOV R5,A
MOV A,B
MOVC A,@A+DPTR
MOV R6,A
RET
;---------------------------------------------------------------------MA_LCD: DB 30H, 31H, 32H, 33H, 34H, 35H, 36H, 37H, 38H, 39H
;===================================================================
;////////////// CHUONG TRINH KHAI BAO TAP LENH CHO LCD //////////////
;----------------------------------------------------------------------------------------------------LCD_INIT:

MOV A,#38H

;khoi tao LCD o che do 2 hang ma tran 5x7

ACALL LCD_WRITE_CMD
ACALL DELAY1
MOV A,#0FH

;nhap nhay con tro

ACALL LCD_WRITE_CMD
ACALL DELAY1
ACALL LCD_CLR
ACALL DELAY1
MOV A,#06H
ACALL LCD_WRITE_CMD
ACALL DELAY1
RET
LCD_CLR:
MOV A,#0H
ACALL LCD_WRITE_DATA
RET

;dich con tro sang phai


LCD_WRITE_CMD:
;CHUONG TRINH CON GUI LENH DEN LCD
MOV LCD_DATA_PORT,A
CLR RS

SETB EN
NOP
CLR EN
RET
LCD_WRITE_DATA:
;CHUONG TRINH CON GUI DU LIEU DEN LCD
MOV LCD_DATA_PORT,A
SETB RS
SETB EN
NOP
CLR EN
RET
DELAY1:
MOV 50H,#255
DELAY2:
MOV 51H,#255
DJNZ 51H,$
DJNZ 50H,DELAY2
RET
;==================================================================
;////////////// KHAI BAO HAM DELAY TAO THOI GIAN TRE //////////////
;-------------------------------------------------------------------------------------------------DELAY_20MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-20000)
MOV TL0,#LOW(-20000)
SETB TR0


JNB


TF0,$

CLR TF0
CLR TR0
RET
DELAY_20US:
MOV TMOD,#01H
MOV TH0,#HIGH(-20)
MOV TL0,#LOW(-20)
SETB TR0
JNB

TF0,$

CLR TF0
CLR TR0
RET
DELAY_40US:
MOV TMOD,#01H
MOV TH0,#HIGH(-40)
MOV TL0,#LOW(-40)
SETB TR0
JNB

TF0,$

CLR TF0
CLR TR0
RET
DELAY_60US:

MOV TMOD,#01H
MOV TH0,#HIGH(-60)
MOV TL0,#LOW(-60)
SETB TR0
JNB

TF0,$

CLR TF0
CLR TR0
RET
END


×