Tải bản đầy đủ (.doc) (23 trang)

ĐỒ ÁN Thiết kế bộ đo và khống chế nhiệt độ phòng

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 (321.52 KB, 23 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA : ĐIỆN TỬ

ĐỒ ÁN MÔN HỌC
ĐỀ TÀI: THIẾT KẾ BỘ ĐO VÀ KHỐNG CHẾ NHIỆT ĐỘ PHÒNG
“Nhiệt độ khống chế đặt bằng phím và hiển thị trên LCD, nhiệt độ được biểu
Thị bằng 3 led màu khác nhau”.

Giáo viên hướng dẫn:
Sinh viên thực hiện:
1.Nguyễn Duy Khang
2.Nguyễn Đình Phú
3.Nguyễn Văn Tùng

1


LỜI NÓI ĐẦU

Kỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất
nhiều lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều
lĩnh vực khác nữa. So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất
nhiều do nó được tích hợp lại và có khả năng lập trình được để điều khiển. Nên rất
tiện dụng và cơ động. Với tính ưu việt của vi điều khiển thì trong phạm vi đồ án
nhỏ này, em chỉ dùng vdk để đo và khống chế nhiệt độ, đồng thời cho hiển thị lên
LCD.
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm
những ứng dụng của vdk trong thực tiễn để rồi từ đó tìm tòi, phát triển nhiều ứng
dụng khác trong đời sống hằng ngày cần đến.
Việc thực hiện xong đồ án môn học bằng các kiến thức đã học, một số sách


tham khảo và một số nguồn tài liệu khác nên không tránh khỏi những thiếu sót. Vì
vậy nhóm rất mong được sự góp ý của thầy cô và các bạn.

2


Mục lục
trang
Lời nói đầu.
..................................................................................................................................
2
Mục lục.
..................................................................................................................................
3................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
..................................................................................................................................
Chương I>Tổng quan thiết kế phần cứng cho đồ án.
......................................4
I. sơ đồ khối tổng quát .
4
II. Các vi mạch chính sử dụng trong từng khối và nguyên lý hoạt
động từng khối..........................................
....................................................................5
....................................................................
....................................................................
....................................................................nguyên lý hoạt động từng

khối............................................................
Chương II >Lập trình cho vi điều khiển.
.................................................................................................................................
14
1. sơ đồ giải thuật.................................................................................
...............................................................................................................
14
2. code lập trình.......................................................................................

3


CHƯƠNG 1:TỔNG QUAN THIẾT KẾ PHẦN CỨNG CHO ĐỒ ÁN

I. SƠ ĐỒ KHỐI TỔNG QUÁT
1.sơ đồ
KHỐI
CHUYỂN
ĐỒI
TƯƠNG TỰ
=> SỐ

KHỐI HIỂN
THỊ: LCD

KHỐI XỬ LÝ TRUNG
TÂM: 8051
KHỐI CẢM
BIẾN


KHỐI ĐIỀU
KHIỂN
(khống chế)

ĐẦU RA ỨNG
DỤNG
(điều khiển lò
nhiệt, cảnh báo,
…)4


2> sơ đồ nguyên lý.

U1
LM016L

C12 RV1

1

D0
D1
D2
D3
D4
D5
D6
D7
15
16


RS
RW
E

vin
2

7
8
9
10
11
12
13
14
15
16

VSS
VDD
VEE

104

4
5
6

LM35


37%

3

LCD1

NHIET DO
2

3

VOUT

1
2
3

1

27.0

1k

C5

RP1
RESPACK-8

C11


C10
104
1

104

2
3
4
5
6
7
8
9

150p

C8
100u

C2

U4
19

33p

C3


X1
CRYSTAL

18

XTAL1
XTAL2

C4
10u

rst

33p

9

N1

RST

P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15


rst
29
30
31

R11

PSEN
ALE
EA

U3

10k

C1
150p

R5
10k

1
rd 2
wr 3
4
intr 5
8
10
9
19

vin

6
7

CS
RD
WR
CLK IN
INTR
A GND
D GND
VREF/2
CLK R

VCC
DB0(LSB)
DB1
DB2
DB3
DB4
DB5
DB6
DB7(MSB)

20
18
17
16
15

14
13
12
11

1
2
3
4
5
6
7
8

P1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR

P3.7/RD

39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17

R2
100R


R3
rd

100R

wr
intr
tang
giam
chedo
batdau
ketthuc

R4
100R

D1
LED-YELLOW

D2
LED-RED

D3
LED-GREEN

AT89C52

VIN+
VIN-


RP2

ADC0804

1

RESPACK-8

2
3
4
5
6
7
8
9

2

N2
U2

tang

1

giam

1


chedo

1

2

7805
VI

VO

R1

3

J1
2
1
TBLOCK-I2

C6

N3

100R

GND

1


2

1

P0.0/AD0
P0.1/AD1
P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7

C7
100u

2

D4
N4

LED-YELLOW

2

1000u

N5
batdau


1

2

N6
ketthuc

1

2

5


3> sơ đồ mạch in

II. CÁC VI MẠCH CHÍNH SỬ DỤNG TRONG ĐỒ ÁN

1.trong khối cảm biến: có LM35;
2.Trong khối điều chế và khuếch đại: LM358;
3.Trong khối chuyển đổi: ADC 0804;
4.Trong khối xử lý trung tâm: AT89C52;
5.khối hiển thị: LCD ;
6.Khối điều khiển (khống chế): hệ thống các phím nhấn.
7.đầu ra ứng dụng: (đơn giản) là các led hiển thị.

III. CẤU TẠO VÀ NGUYÊN LÝ HOẠT ĐỘNG CƠ BẢN CỦA TỪNG VI MẠCH.
1> Cảm biến nhiệt LM35.
1.1 Nguyên lý hoạt động chung của IC đo nhiệt độ.


IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt độ chuyển thành tín
hiệu điện dưới dạng dòng điện hay điện áp. Dựa vào đặc tính rất nhạy của các bán
dẫn với nhiệt độ, tạo ra điện áp hoặc dòng điện tỷ lệ thuận với nhiệt độ tuyệt đối.
Đo tín hiệu điện ta biết được giá trị của nhiệt độ cần đo. Sự tác động của nhiệt độ
6


tạo ra điện tích tự do và các lỗ trống trong chất bán dẫn. Bằng sự phá vỡ các phân
tử, bứt các electron thành dạng tự do di chuyển qua vùng cấu trúc mạng tinh thể
tạo sự xuất hiện các lỗ trống. Làm cho tỷ lệ điện tử tự do và lỗ trống tăng lên theo
quy luật hàm mũ với nhiệt độ.
+LM135, LM35
Ngõ ra là điện áp.
Độ nhạy 10mv/10C
Sai số cực đại 1,50C khi nhiệt độ lớn hơn 1000C.
Phạm vi sử dụng :00 C=>1000 C

2> Khuếch đại LM358;
a, cấu tạo
LM358 gồm có 2 con khuếch đại thuật toán:
Con thứ 1: chân 2 ,3 vào, chân 1ra;
Con thứ 2: chân 5,6 vào, chân 7 ra;
Công dụng: khuếch đại điện áp và dòng điện nhận được từ LM35 để sau đó chuyển tiếp
đến đầu vào IN của ADC 0804;
LM358
Sơ đồ mạch như sau:
b, tính toán và cân chỉnh
+tại OA2:
0 − Un Un − Ur
Xét tại: N2:

=
R3
R4
R3 + R 4
=>Ur=Un .
.
R3
Uv − Up Up
Xét tại P2:
=
.
R1
R2
R2
=> Up=Uv .
R1 + R 2
Mà coi như OA lý tưởng.
Uv=Up;
R3 + R 4
R2
 Ur=Uv.
.
;
R3
R1 + R 2
Do điện áp đầu ra của bộ khuếch đại chỉ giới hạn trong khoảng từ 0-5V khi dùng
nguồn đơn. Nên chọn giá trị R2= R4=3,9 K Ω
R1=R3= 1 K Ω ;

Khi đó Ur=Vin 4Uv;

3> bộ chuyển đổi tương tự-số: ADC 0804;
a, cấu tạo
ADC 0804 là một bộ chuyển đổi tương tự số. Gồm có 20 chân.

7


DB0-DB7: là 8 chân ra dữ liệu.
RD: lối vào đọc
WR :lối vào ghi.
INTR: lối ra ngắt.
CLKR/CLKIN: các lối vào điều khiển xung nhịp.
VIN: lối vào analog dương
b, sơ đồ

c, tính toán và cân chỉnh.
Chọn điện trở R11 và tụ C4 cho bộ dao động của ADC0804.
R11=10k Ω và C=15pf.
256
Có đầu ra số: N=
xVin.;
5
Vin.100
T0 cần đo=
với K là hệ số khuếch đại qua IC LM358.
K
d, nguyên lý hoạt động
 DB0- DB7: các lối ra số, dữ liệu chuyển đổi xuất hiện trên 8bit này. Bộ biến đổi
có độ phân giải là 5/256=19,53 mV.
 RD :là chân điều khiển đọc dữ liệu. RD=0: có dữ liệu lối ra.

RD=1: không có dữ liệu lối ra.
 WR: bình thường ở mức logic cao, và lối vào này sẽ được kéo xuống mức thấp,
sau đó lại trở về mức cao để bắt đầu quá trình chuyển đổi.
 INTR: là lối ra ngắt của bộ biến đổi A/D. 1 sườn xung âm được tạo lên chân này
khi quá trình chuyển đổi kết thúc. Lối ra này thường được sử dụng để tạo ra một
ngắt trong vi điều khiển sao cho dữ liệu đã chuyển đổi có thể được đọc.
 ADC 0804 chứa một bộ dao động bên trong và cần có 1 tụ điện và 1điện trở bên
ngoài nối chân CLKR và CLKIN để khởi động bộ dao động.
 VIN là chân lối vào của điện áp tương tự.
 Bít 0 và 1 của ADC phải có điện trở kéo lên, do lối ra bộ điều khiển tại những
chân này không có sẵn điện trở kéo lên.
CÁC BƯỚC CỦA QUÁ TRÌNH CHUYỂN ĐỔI.

8







Đặt WR =RD=1;
Bắt đầu biến đổi. Đặt WR=0, trễ( )ms.
Đặt lại WR=1;
Phát hiện điểm kết thúc của quá trình biến đổi khi INTR xuống mức thấp.
(được sử dụng bởi ngắt)
• Đặt RD=0 và đọc dữ liệu từ DB0=>DB7.
• Đặt RD=1. => kết thúc chu trình.
4> vi điều khiển AT89C52;
a, cấu tạo và chức năng các khối của AT89S52.

• CPU( CPU centralprocessing unit) bao gồm:
 Thanh ghi tích lũy A;
 Thanh ghi tích lũy phụ B;
 Đơn vị logic học (ALU);
 Thanh ghi từ trạng thái chương trình;
 Bốn băng thanh ghi;
 Con trỏ ngăn xếp
• Bộ nhớ chương trình( ROM) gồm 8Kbyte Flash.
• Bộ nhớ dữ liệu( RAM) gồm 256 byte.
• Bộ UART, có chức năng truyền nhận nối tiếp.
• 3 bộ Timer/Counter 16 bit thực hiện chức năng định thời và đếm sự kiện.
• Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong.
• Bộ lập trình( ghi chương trình lên Flash ROM) cho phép người sử dụng có thể
nạp các chương trình cho chíp mà không cần các bộ nạp chuyên dụng.
• Bộ chia tần số với hệ số chia là 12.
• 4 cổng xuất nhập với 32 chân.
b, chức năng các chân của AT89C52
 Port 0( P0.0=>P0.7)
Port 0 gồm 8 chân, ngoài chức năng xuất nhập, port 0 còn là bus đa hợp dữ liệu và địa
chỉ( AD0-AD7), chức năng này sẽ được sử dụng khi 89c52 giao tiếp với các thiết bị
ngoài có kiến trúc Bus như các vi mạch nhớ, mạch PIO…
 Port 1( P1.0=>P1.7)
Chức năng duy nhất của Port 1 là chức năng xuất nhập cũng như các Port khác. Port1
có thể xuất nhập theo bit và theo byte.
 Port 2( P2.0=>P2.7)
Port 2 ngoài chức năng là cổng vào/ra như Port 0 và 1 còn là byte cao của bus địa chỉ
khi sử dụng bộ nhớ ngoài.
 Port 3
Mỗi chân trên Port 3 ngoài chức năng xuất nhập còn có một chức năng riêng, cụ thể
như sau:


Bit
P3.0
P3.1

Tên
RXD
TXD

Chức năng
Dữ liệu nhận cho Port nối tiếp
Dữ liệu truyền cho Port nối tiếp

9


P3.2
INT0
Ngắt bên ngoài 0
P3.3
INT1
Ngắt ngoài 1
P3.4
TO
Ngõ vào của Timer/counter0
P3.5
T1
Ngõ vào của Timer/counter1
P3.6
/WR

Xung ghi bộ nhớ dữ liệu ngoài.
P3.7
/RD
Xung đọc bộ nhớ dữ liệu ngoài.
 Chân /PSEN : là chân điều khiển đọc chương trình ở bộ nhớ ngoài.
 Chân ALE.
ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằng 1/6 tần số dao động của vi điều
khiển. Tín hiệu ALE được dùng để cho phép vi mạch chốt bên ngoài như 7473.
 Chân /EA.
Tín hiệu /EA cho phép chọn bộ nhớ chương trình là bộ nhớ trong hay ngoài. EA=1 thì
thực hiện chương trình trong RAM nội. EA=0 thực hiện ở RAM ngoài.
 RST( reset)
Ngõ vào reset trên chân số 9. khi RST=1 thì bộ vi điều khiển sẽ được khởi động lại
thiết lập ban đầu.
 XTAL1, XTAL2
2 chân này được nối song song với thạch anh tần số max=33 Mhz. Để tạo dao động
cho bộ vi điều khiển.
 Vcc, GND : cung cấp nguồn nuôi cho bộ vi điều khiển. cấp qua chân 20 và 40.
c, sơ đồ AT89C52 trong mạch

d, nguyên lý hoạt động
+Chân 9 được nối với mạch reset. Khi nhấn SW1 thì bộ vi điều khiển sẽ được khởi động
lại từ đầu.

10


+điện trở băng U5: có tác dụng làm điện trở kéo lên nguồn.
+ chân 18-19 được nối // với thạch anh 12Mhz. mạch có nhiệm vụ tạo dao động cho vi
điều khiển.

+từ chân P0.0=>P0.2 lần lượt được nối với Vee, RS, RW của LCD. Có nhiệm vụ điều
khiển hoạt động của LCD.
+chân P0.3=>P0.5 điều khiển led. Khi nhiệt độ đo được vượt qua khoảng nhiệt độ khống
chế thì 1 trong 3 đèn led này sẽ sáng.
+ chân P1.0=>P1.7. giao tiếp với ADC0804. Cổng P1 này có nhiệm vụ đọc nhiệt độ thu
được từ bộ chuyển đổi.
+P2.0=>P2.7. Lần lượt được nối với đầu vào dữ liệu từ DB0=> DB7 của LCD. Có chức
năng điều khiển hiển thị LCD theo thao tác khống chế và nhiệt độ đo được.
+P3.0, P3.1 lần lượt nối với /RD và /WR của ADC0804. Nhiệm vụ điều khiển hoạt động
của bộ chuyển đổi số - tương tự.
+P3.2=> P3.4 dùng để nối với các phím nhấn. Có tác dụng để thực hiện các thao tác
khống chế nhiệt độ cần đo.

5> hiển thị( LCD 16x2)
a, cấu tạo
Chức năng các chân của Module LCD 16x2;
Chân số Ký hiệu Mức logic I/O
1
Vss
2
Vdd
3
Vee
I
4
RS
0/1
I
5


R/W

0/1

I

6
7
8
9
10
11
12
13
14
15

E
DB1
DB2
DB3
DB4
DB5
DB6
DB7
DB8
Vcc

1,1=>0
0/1

0/1
0/1
0/1
0/1
0/1
0/1
0/1
-

I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
-

Chức năng
Nguồn cung cấp(GND)
Nguồn cung cấp(+5V)
Điện áp để điều chỉnh độ tương phản
Lựa chọn thanh ghi
0= thanh ghi lệnh
1=thanh ghi dữ liệu
0=ghi vào LCD module
1=đọc từ LCD module
Tín hiệu cho phép

Data bus line 0(LSB)
Data bus line1
Data bus line2
Data bus line3
Data bus line4
Data bus line5
Data bus line6
Data bus line7(MSB)
Nguồn cung cấp

11


16

GND

-

-

mass

b, mạch trong đồ án

Lệnh

c, nguyên tắc hiển thị ký tự trên LCD
một chương trình hiển thị ký tự trên LCD sẽ đi theo bốn bước sau:
1) Xóa toàn bộ màn hình.

2) Đặt chế độ hiển thị.
3) Đặt vị trí con trỏ (nơi bắt đầu của ký tự hiển thị).
4) Hiển thị ký tự.
Chú ý:
+Các bước 3, 4 có thể lặp lại nhiều lần nếu cần hiển thị nhiều ký tự.
+ Mỗi khi thực hiện ghi lệnh hoặc ghi dữ liệu hiển thị lên LCD cần phải kiểm tra cờ bận
trước. Vì vậy, cần phải chủ động phân phối thời gian khi ra lệnh cho LCD( ví dụ sau khi
xóa màn hình sau khoảng 2ms mới ra lệnh khác vì thời gian để LCD xóa màn hình là
1,64ms).+chế độ hiển thị mặc định sẽ là hiển thị dịch, vị trí con trỏ mặc định sẽ là đầu
dòng thứ nhất.
d. mã lệnh của LCD HD4480
Mã lệnh
Mô tả
RS R/ DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
W

Xóa màn
hình
Đưa con trỏ
về vị trí đầu

0

0

0

0

0


0

0

0

0

1

0

0

0

0

0

0

0

0

1

x


Thiết lập
chế độ

0

0

0

0

0

0

0

1

I/D

S

Bật tắt hiển
thị

0

0


0

0

0

0

1

D

C

B

Xóa màn hình đưa
con trỏ về vị trí đầu
Đưa con trỏ về vị
trí đầu
Thiết lập hướng
dịch chuyển con
trỏ(I/D), dịch hiển
thị(S)
Bật tắt hiển thị, con
trỏ; bật tắt chế độ
12

Thời

gian
thi
hành
1.64m
s
1.64m
s
40us

40us


Dịch con trỏ
hiển thị

0

0

0

0

0

1

S/C

R/L


*

*

Thiết lập
chức năng

0

0

0

0

1

DL

N

F

*

*

nhấp nháy con trỏ
Thiết lập chiều dịch

chuyển của con trỏ
và hiển thị
Thiết lập độ dài của
dữ liệu, số dòng và
font chữ
Thiết lập địa chỉ
CGRAM

Thiết lập địa 0
0
0
1
CGRAM address
chỉ
CGRAM
Thiết lập địa 0
0
1
DDRAM address
Thiết lập địa chỉ
chỉ
DDRAM
DDRAM
Đọc cờ báo 0
1
BF
CGRAM/ DDRAM address
Đọc cờ báo bận và
bận và địa
địa chỉ của

chỉ
CGRAM hoặc
CGRAM/
DDRAM( tùy vào
DDRAM
lệnh trước đó)
Ghi
1
0
Write data
Ghi dữ liệu vào
CGRAM/
CGRAM hoặc
DDRAM
DDRAM.
Đọc
1
1
Read data
Đọc dữ liệu từ
CGRAM/
CGRAM hoặc
DDRAM
DDRAM
e> các bit viết tắt trong mã lệnh.
Tên bit
Mô tả
I/D
0=không dịch chuyển vị trí 1=dịch chuyển vị trí con trỏ
con trỏ

S
=0 không dịch chuyển hiển =1 dịch chuyển hiển thị
thị
D
0=tắt hiển thị
=1 bật hiển thị
C
0=tắt con trỏ
=1 bật con trỏ
B
0=con trỏ không nhấp nháy =1 con trỏ nhấp nháy
S/C
0=di chuyển con trỏ
=1 dịch chuyển hiển thị
R/L
0= dịch trái
=1 dịch phải
DL
0=chế độ 4bit dữ liệu
=1 chế độ 8bit dữ liệu
N
0=1 dòng
1= 2 dòng
F
0= font 5x7
1= font 5x10
BF
0= không bận
1= đang bận


6> bộ phím nhấn điều khiển (khống chế)
a, sơ đồ mạch

13

40us
40us
40us
40us
40us

40us
40us


RP2

2
3
4
5
6
7
8
9

1

RESPACK-8


N2
tang

1

giam

1

chedo

1

2

N3
2

N4
2

N5
batdau

1

2

N6
ketthuc


1

2

b, chức năng: dùng để thiết lập nhiệt độ khống chế.
N2 là phím dùng để tăng nhiệt độ khống chế.
N3 là phím dùng để giảm nhiệt độ khống chế.
N4 là phím dùng để làm phím mode( chế độ).

7> ứng dụng điều khiển
a, sơ đồ mạch
R2
100R

R3
100R

R4
100R

D1
LED-YELLOW

D2
LED-RED

D3
LED-GREEN


14


b, chức năng: hiển thị khi nhiệt độ đo được so sánh với nhiệt độ khống chế.
Nếu t0 đo > t0khống chế max thì led 2 sáng.
Nếu t0 đoNếu t0 kcmin< t0 đo< t0 kc max. thì led 4 sáng.
Đây chỉ là mạch điều khiển đơn giản sử dụng led. Còn trong thực tế có thể ứng dụng
nhiều: như việc khống chế nhiệt độ của lò lung, máy lạnh,…

CHƯƠNG II>LẬP TRÌNH CHO VI ĐIỀU KHIỂN
I>sơ đồ giải thuật
Chương trình chính.
START

NẠP GIÁ TRỊ ĐẦU

Tăng t0 đặt
0

HiểnADC
Đọc
Khối
thị
xử tlýđo được

15


T0 đo > t0 max


MODE

Hiển thị
cảnh báo
Giảm t0
đặt

T0 đo
Hiển thị t0 đặt

GIẢI THUẬT CHƯƠNG TRÌNH KHỐNG CHẾ

START

Phím mode có
nhấn không?

No

16


Tăng thông số lên
một đơn vị

Yes

Phím

tăng

nhấn?
No

Giảm thông số đi
một đi vị

Yes

Phím
giảm

nhấn?
No

Gọi chương trình
hiển thị

II> code chương trình.
#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit RS_LCD = P2^4;
sbit RW_LCD= P2^5;
sbit E_LCD= P2^6;
sbit tang=P3^3;
sbit giam=P3^4;
sbit chedo=P3^5;
sbit RD_ADC=P3^0;


17


sbit WR_ADC=P3^1;
sbit INTR_ADC=P3^2;
sbit d1= P2^0;
sbit v2= P2^1;
sbit x3= P2^2;
unsigned int dc=27;
int y;
unsigned long nhietdo,ks;
void delay_short(){
unsigned int i;
for(i=0;i<3;i++);
}
void delay_ms(unsigned int i)
{
int j;
for (j=0;j}
//-------------void delay(unsigned int time){
TMOD = 0x01;
//Timer 0 che do 1
while (time--){
TH0 = -1000/256;
TL0 = -1000%256;
TR0 = 1;
while (!TF0);
TR0 = 0;

TF0 = 0;
}
}

// Thoi gian time ms

//-------------void kt_ban(){
unsigned char x;
P0 = 0xff;
RS_LCD = 0;
RW_LCD = 1;
do
{
E_LCD = 1;
delay_short();
E_LCD = 0;
x=P2;
x=x&0x80;
}
while(x!=0x80);
}

18


//---------------void ghi_lenh(unsigned char commant){
kt_ban();
delay(50);
P0 = commant;
RS_LCD = 0;

// chon thanh ghi lenh
RW_LCD = 0;
// write to LCD
E_LCD = 1;
delay_short();
E_LCD = 0;
}
//----------------void ghi_kytu(unsigned char kytu){
kt_ban();
delay(50);
P0 = kytu;
RS_LCD = 1;
RW_LCD = 0;
E_LCD =1;
delay_short();
E_LCD = 0;
}
//-----------------void ghi_nhanh ( unsigned char kytu){
delay_short();
P0 = kytu;
RS_LCD = 1;
RW_LCD = 0;
E_LCD = 1;
delay_short();
E_LCD = 0;
}
//------------------void ghi_chuoi(char *str){
while(*str){
ghi_kytu(*str);
str++;

}
}
//------------------void ghi_nhanh_chuoi(char *str){
while(*str){
ghi_nhanh(*str);
str++;
}
}

19


void lcd_goto(char y,char x){
unsigned char dong[] = {0x80,0xC0};
ghi_lenh(dong[y-1]+x);
}
//------------------void setting(){
ghi_lenh(0x38);
ghi_lenh(0x01);
//Xoa man hinh
ghi_lenh(0x0f);
//Co dich hien thi
}
void ghi_so_thuc2(unsigned long number){
int j,m;
unsigned char d[20];
for(j=0 ; j<20 ; j++){
d[j] = number%10;
number /= 10;
if(number==0){

m = j;
break;
}
}
if(m <= 1 ){
while(m++<3)
d[m] = 0;
}
for(j=m; j>=0; j--){
if(j == 1)
ghi_nhanh(',');
ghi_nhanh(d[j]+0x30);
}
}
void ghi_songuyen(int d)
{
int i,j;
i=d%10;
j=d/10;
ghi_kytu(48+j);
ghi_kytu(48+i);
}
void read()
{
WR_ADC=0;
delay_short() ;
WR_ADC=1;
RD_ADC=0;

20



y=P1;
RD_ADC=1;
}
void baoled()
{
if
(nhietdo{
d1=0;
v2=1;
x3=1;
}
else if (nhietdo>dc)
{
v2=1;
d1=1;
x3=0;
}
else if (nhietdo==dc)
{x3=1;
v2=0;
d1=1;
}
}
void set_dc()
{
while (chedo==0){}//cho phim duoc nha
do

{
if (tang==0) //neu phim tang duoc an
{
while (tang==0) {}// cho phim duoc nha
dc++;
if (dc==100) dc=27;
}
if (giam==0) // neu phim giam duoc an
{
while (giam==0){}//cho phim nha
dc--;
if (dc==0) dc=27;
}
ghi_lenh(0x0c); //Bat hien thi ,tat con tro
ghi_lenh(0x80);
ghi_nhanh_chuoi("T/mt=");
ghi_so_thuc2(ks);
ghi_chuoi("oC");
ghi_lenh(0xc0);

21


ghi_nhanh_chuoi("T/kc=");
ghi_songuyen(dc);
}
while (chedo==1);
}
void set()
{

set_dc();
while(chedo==0){}
}
void main()
{
int i;
setting();
ghi_lenh(0x01);
for (i=0;i<16;i++)
{
ghi_lenh(0x80);
ghi_chuoi("KHANG-PHU-TUNG");
ghi_lenh(0x18);
delay(1);
}
ghi_lenh(0x01);
ghi_lenh(0x80);
ghi_chuoi(" CDDT4K10");
ghi_lenh(0xc0);
ghi_chuoi("CAM BIEN NHIET");
delay(100);
ghi_lenh(0x01);
while(1)
{
read();
ghi_lenh(0X80);
nhietdo = y*1.953125;
ks=y*1.953125*100;
ghi_lenh(0x0c); //Bat hien thi ,tat con tro
ghi_lenh(0x80);

ghi_nhanh_chuoi("T/mt=");
ghi_so_thuc2(ks);
ghi_chuoi("oC");
ghi_lenh(0xc0);
ghi_nhanh_chuoi("T/kc=");
ghi_songuyen(dc);
if (chedo==0) {set();}

22


baoled();
}
}

23



×