Đồ Án Đo Điện Áp hiển thị trên lcd

17
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 ĐIỆN ÁP Ở 3 DẢI ĐO 0-2.5V, 0-25V, 0-250V HIỂN THỊ TRÊN LCD. “Sai số cho phép là 10%” Giáo viên hướng dẫn: Nhóm sinh viên thực hiện: 1.Nguyễn Duy Hân 2.Trịnh Đình Thắng 3.Nguyễn Hữu T

Upload: mr-giap

Post on 24-Jun-2015

1.116 views

Category:

Engineering


23 download

DESCRIPTION

Trường ĐH Công Nghiệp Hà Nội Khoa: Điện Tử Nhóm SVTH: 1. Nguyễn Duy Hân 2. Trịnh Đình Thắng 3. Nguyễn Hữu Từ

TRANSCRIPT

Page 1: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

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 ĐIỆN ÁP Ở 3 DẢI ĐO 0-2.5V, 0-25V, 0-250V

HIỂN THỊ TRÊN LCD.

“Sai số cho phép là 10%”

Giáo viên hướng dẫn:

Nhóm sinh viên thực hiện:

1.Nguyễn Duy Hân

2.Trịnh Đình Thắng

3.Nguyễn Hữu Từ

Page 2: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

Mục lục Trang

Mục lục……………………………………………………………………………2

Lời nói đầu………………………………………………………………………..2

Chƣơng I

Mô tả ý tƣởng: mô hình ý niệm, xây dựng sơ đồ khối…………………...4

I. Sơ đồ khối,sơ đồ mạch nguyên lý và mạch in …………….....................4

II. Các vi mạch chính sử dụng trong từng khối và nguyên lý hoạt động

của từng khối…………………………………………………………….….6

Chƣơng II

Quá trình thực hiện……………………………………………………………..17

I. Code lập trình C cho vi điều khiển…………….………………………..18

II. Hình dạng sản phẩm thƣc tế hoàn thành…………………...................19

III.Tóm tắt bản báo cáo, những vấn đề chƣa làm đƣợc……….……..20

Page 3: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

LỜI NÓI ĐẦU

Sự ra đời của các bộ vi xử lí nói chung,các bộ vi điều khiển nói riêng đã tạo ra một bƣớc

ngoặt lớn trong việc thiết kế các hệ thống xử lí thông tin,đo lƣờng điều khiển và truyền

thông.Kết quả là đã tạo ra đƣợc những sản phẩm nhƣ máy ảnh số,máy chơi nhạc

MP3,đầu dĩa DVD,các bộ biến tần,PLC…ngày càng rẻ hơn,nhỏ gọn hơn,thông minh hơn

và tiện dụng hơn.

Hơn nữa,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, chúng em chỉ

dùng vi điều hiển để đo điện áp ở ba dải đo 0-2.5V , 0-25 , 250V , đồ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 vi điều khiển 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.

Page 4: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

Chƣơng I

Mô tả ý tƣởng,mô hình ý niệm,xây dựng sơ đồ khối

I. Sơ đồ khối tổng quát,sơ đồ nguyên lý và mạch in

1.Sơ đồ khối tổng quát:

KHỐI ĐIỀU

CHẾ VÀ

KHUẾCH ĐẠI

KHỐI XỬ LÝ TRUNG

TÂM: 8051

KHỐI

CHUYỂN ĐỒI

TƢƠNG TỰ

SANG SỐ:

ADC0804

KHỐI NGUỒN

ỔN ÁP SỬ

DỤNG IC7805

KHỐI HIỂN THỊ:

SỬ DỤNG LCD

ĐẦU RA ỨNG

DỤNG

(đo điện áp ở ba

thang đo: 0-2.5 V,

0-25V va 0-250V)

Page 5: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

2. Sơ đồ nguyên lý mô phỏng dùng proteus:

3. sơ đồ mạch in :

Page 6: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

II . Các vi mạch chính sử dụng trong từng khối và nguyên lý hoạt động của

từng khối 1. Các vi mạch chính sử dụng trong từng khối

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

2. Trong khối điều chế và khuếch đại: LM358

3. Khối chuyển đổi: ADC 0804

4. Khối hiển thị: LCD

5. Trong Khối ổn áp: IC7805

2. Cấu tạo và nguyên lý hoạt động cơ bản của từng vi mạch 2.1 Vi điều khiển AT89C52:

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

Page 7: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

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 Tên Chức năng

P3.0 RXD Dữ liệu nhận cho Port nối tiếp

P3.1 TXD Dữ liệu truyền cho Port nối tiếp

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.

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

+điện trở băng U1: 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 P2.0=>P2.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 P2.3=>P2.5 : 3 chân này đƣợc nối với lần lƣợt 3 chân của ADC : chân RD (Read),

chân WR (Write) và chân Ngắt INTR (Interupt). Nhiệm vụ điều khiển hoạt động của bộ

chuyển đổi số - tƣơng tự.

+ chân P3.0=>P3.7. giao tiếp với ADC0804. Cổng P3 này có nhiệm vụ đọc điện áp thu đƣợc từ bộ chuyển

đổi.

+P0.0=>P0.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ị việc đo điện áp trên LCD .

+P1.0=>P1.2 : đƣợc nối với switch kép để điều khiển chọn thang đo phù hợp.

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

Page 8: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

Sơ đồ cấu tạo:

Tính toán và cân chỉnh:

+tại OA2:

Xét tại: N2:3

0

R

Un=

4R

UrUn

=>Ur=Un .3

43

R

RR .

Xét tại P2: 1R

UpUv=

2R

Up.

=> Up=Uv .21

2

RR

R

Mà coi nhƣ OA lý tƣởng.

Uv=Up;

Ur=Uv. 3

43

R

RR .

21

2

RR

R

;

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;

2.3 Bộ chuyển đổi tƣơng tự-số: ADC 0804: 2.3.1 Cấu tạo:

ADC 0804 là một bộ chuyển đổi tƣơng tự số. Gồm có 20 chân.

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

Page 9: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

2.3.2 sơ đồ:

Chip ADC0804 là bộ chuyển đổi tƣơng tự số thuộc họ ADC800 của h ãng National

Semiconductor. Chip này cũng đƣợc nhiều hãng khác sản xuất. Chip có điện áp nuôi +5V và

độ phân giải 8 bit. Ngoài độ phân giải thì thời gian chuyển đổi cũng là một tham số quan

trọng khi đánh giá bộ ADC. Thời gian chuyển đổi đ ƣợc định nghĩa là thời gian mà bộ ADC

cần để chuyển một đầu vào tƣơng tự thành một số nhị phân. Đối với ADC0804 thì thời gian

chuyển đổi phụ thuộc vào tần số đồng hồ đƣợc cấp tới chân CLK và CLK IN và không bé hơn

110s. Các chân khác của ADC0804 có chức năng nhƣ sau:

CS (Chip select)

Chân số 1, là chân chọn Chip, đầu vào tích cực mức thấp đƣợc sử dụng để kích hoạt

Chip ADC0804. Để truy cập ADC0804 thì chân này phải ở mức thấp.

RD (Read)

Chân số 2, là một tín hiệu vào, tích cực ở mức thấp. Các bộ chuyển đổi đầu v ào tƣơng

tự thành số nhị phân và giữ nó ở một thanh ghi trong. RD đ ƣợc sử dụng để có dữ liệu

đã đƣợc chyển đổi tới đầu ra của ADC0804.

Khi CS = 0 nếu có một xung cao xuống thấp áp đến chân RD thì dữ liệu ra dạng số 8

bit đƣợc đƣa tới các chân dữ liệu (DB0 – DB7).

WR (Write)

Chân số 3, đây là chân vào tích cực mức thấp đƣợc dùng để báo cho ADC biết bắt đầu

quá trình chuyển đổi. Nếu CS = 0 khi WR tạo ra xung cao xuống thấp th ì bộ

ADC0804 bắt đầu quá trình chuyển đổi giá trị đầu vào tƣơng tự Vin về số nhị phân 8

bit. Khi việc chuyển đổi hoàn tất thì chân INTR đƣợc ADC hạ xuống thấp.

CLK IN và CLK R

CLK IN (chân số 4), là chân vào nối tới đồng hồ ngoài đƣợc sử dụng để tạo thời gian.

Tuy nhiên ADC0804 cũng có một bộ tạo xung đồng hồ riêng. Để dùng đồng hồ riêng

thì các chân CLK IN và CLK R (chân s ố 19) đƣợc nối với một tụ điện và một điện trở

(nhƣ hình vẽ). Khi ấy tần số đƣợc xác định bằng biểu thức:

Với R=10 k, C=150pF và tần số f=606 kHz và thời gian chuyển đổi là 110 s.

Page 10: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

Ngắt INTR (Interupt)

Chân số 5, là chân ra tích cực mức thấp. Bình thƣờng chân này ở trạng thái cao và khi

việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho CPU biết l à dữ liệu chuyển đổi

sẵn sàng để lấy đi. Sau khi INTR xuống thấp, cần đặt CS = 0 v à gửi một xung cao

xuống thấp tới chân RD để đƣa dữ liệu ra.

Vin (+) và Vin (-)

Chân số 6 và chân số 7, đây là 2 đầu vào tƣơng tự vi sai, trong đó Vin = Vin (+) – Vin (-).

Thông thƣờng Vin (-) đƣợc nối tới đất và Vin (+) đƣợc dùng làm đầu vào tƣộng tự và sẽ đƣợc

chuyển đổi về dạng số.

Vcc

Chân số 20, là chân nguồn nuôi +5V. Chân này còn đƣợc dùng làm điện áp tham chiếu

khi đầu vào Vref/2 để hở.

Vref/2

Chân số 9, là chân điện áp đầu vào đƣợc dùng làm điện áp tham chiếu. Nếu chân này

hở thì điện áp đầu vào tƣơng tự cho ADC0804 nằm trong dải 0 - +5V. Tuy nhiên, có

nhiều ứng dụng mà đầu vòa tƣơng tự áp đến Vin khác với dải 0 - +5V. Chân Vref/2

đƣợc dùng để thực hiện các điện áp đầu ra khác 0 - +5V.

Bảng quan hệ điện áp Vref/2 với Vin

Vref/2 (V) Vin (V) Kích thƣớc bƣớc (mV)

Hở 0 – 5 5/256 = 19.53

2.0 0 – 4 4/256 = 15.62

1.5 0 – 3 3/256 = 11.71

1.28 0 – 2.56 2.56/256 = 10

1.0 0 – 2 2/256 = 7.81

0.5 0 – 1 1/256 = 3.90

Page 11: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

. D0 - D7

D0 - D7, chân số 18 – 11, là các chân ra dữ liệu số (D7 là bit cao nhất MSB và D0 là

bit thấp nhất LSB). Các chân này đƣợc đệm ba trạng thái và dữ liệu đã đƣợc chuyển

đổi chỉ đƣợc truy cập khi chân CS = 0 và chân RD đƣa xuống mức thấp.

.CÁC BƢỚC CỦA QUÁ TRÌNH CHUYỂN ĐỔI.

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

2.4 Hiển thị ( LCD 16x2) 2.4.1 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 Chức năng

1 Vss - - Nguồn cung cấp(GND)

2 Vdd - - Nguồn cung cấp(+5V)

3 Vee - I Điện áp để điều chỉnh độ tƣơng phản

4 RS 0/1 I Lựa chọn thanh ghi

0= thanh ghi lệnh

1=thanh ghi dữ liệu

5 R/W 0/1 I 0=ghi vào LCD module

1=đọc từ LCD module

6 E 1,1=>0 I Tín hiệu cho phép

7 DB1 0/1 I/O Data bus line 0(LSB)

8 DB2 0/1 I/O Data bus line1

9 DB3 0/1 I/O Data bus line2

10 DB4 0/1 I/O Data bus line3

11 DB5 0/1 I/O Data bus line4

12 DB6 0/1 I/O Data bus line5

13 DB7 0/1 I/O Data bus line6

14 DB8 0/1 I/O Data bus line7(MSB)

15 Vcc - - Nguồn cung cấp

16 GND - - mass

2.4.2 mạch trong đồ án:

Page 12: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

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

2.4.4 mã lệnh của LCD HD4480

Lệnh Mã lệnh Mô tả Thời

gian thi

hành RS R/

W

DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

Xóa màn hình 0 0 0 0 0 0 0 0 0 1 Xóa màn hình đƣa con

trỏ về vị trí đầu

1.64ms

Đƣa con trỏ về

vị trí đầu

0 0 0 0 0 0 0 0 1 x Đƣa con trỏ về vị trí

đầu

1.64ms

Thiết lập chế

độ

0 0 0 0 0 0 0 1 I/D S Thiết lập hƣớng dịch

chuyển con trỏ(I/D),

dịch hiển thị(S)

40us

Bật tắt hiển thị 0 0 0 0 0 0 1 D C B Bật tắt hiển thị, con trỏ;

bật tắt chế độ nhấp

nháy con trỏ

40us

Dịch con trỏ

hiển thị

0 0 0 0 0 1 S/C R/L * * Thiết lập chiều dịch

chuyển của con trỏ và

hiển thị

40us

Page 13: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

Thiết lập chức

năng

0 0 0 0 1 DL N F * * Thiết lập độ dài của dữ

liệu, số dòng và font

chữ

40us

Thiết lập địa

chỉ CGRAM

0 0 0 1 CGRAM address Thiết lập địa chỉ

CGRAM

40us

Thiết lập địa

chỉ DDRAM

0 0 1 DDRAM address Thiết lập địa chỉ

DDRAM

40us

Đọc cờ báo

bận và địa chỉ

CGRAM/

DDRAM

0 1 BF CGRAM/ DDRAM address Đọc cờ báo bận và địa

chỉ của CGRAM hoặc

DDRAM( tùy vào lệnh

trƣớc đó)

40us

Ghi CGRAM/

DDRAM

1 0 Write data Ghi dữ liệu vào

CGRAM hoặc

DDRAM.

40us

Đọc CGRAM/

DDRAM

1 1 Read data Đọc dữ liệu từ CGRAM

hoặc DDRAM

40us

2.4.5 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í con

trỏ

1=dịch chuyển vị trí con trỏ

S =0 không dịch chuyển hiển thị =1 dịch chuyển hiển 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

2.5 Khối ổn áp dùng IC 7805:

Page 14: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

Chƣơng II

Quá trình thực hiện

I. Lập trình cho vi điều khiển:

#include<REGX51.H>

#include<stdio.h>

sbit int_adc=P2^3;

sbit rw_adc=P2^4;

sbit rd_adc=P2^5;

sbit EN_lcd=P2^2;

sbit RW_lcd=P2^1;

sbit RS_lcd=P2^0;

sbit THANG1=P1^0;

sbit THANG2=P1^1;

sbit THANG3=P1^2;

unsigned char x;

float volt;

void delay(unsigned int time)

{

unsigned int i;

for(i=0;i<time;++i);

}

void busy_flag(void)

{

P0=0xff;

RW_lcd=1;

RS_lcd=0;

do

{

EN_lcd=1;

delay(50);

EN_lcd=0;

x=P0;

x=x&&0x80; //giu lai bit D7 de so sanh

}

while(x==0x80);// cho bit D7 bang 0 thi thoat

}

void write_command( unsigned char lcd_command)

{

busy_flag();

P0=lcd_command;

RW_lcd=0;

RS_lcd=0;

EN_lcd=1;

delay(50);

EN_lcd=0;

delay(50);

}

void write_data(unsigned char lcd_data)

{

busy_flag();

P0=lcd_data;

RW_lcd=0;

RS_lcd=1;

Page 15: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

EN_lcd=1;

delay(50);

EN_lcd=0;

delay(50);

}

void write_string(char *s)

{

while(*s)

{

write_data(*s);

s++;

}

}

void thiet_lap_ban_dau(void)

{

write_command(0x03);//dua con tro ve vi tri dau dong

write_command(0x038);//2dong,font 5*7

write_command(0x06);//dich con tro sang phai

write_command(0x0e);//bat hien thi,con tro nhap nhay

}

void hienthi()

{

int tram,chuc,donvi,phan,phan1,phan2;

int n;

n=(int)(volt*100);

tram=n/10000;

chuc=(n%10000)/1000;

donvi=((n%10000)%1000)/100;

phan=((n%10000)%1000)%100;

phan1=phan/10;

phan2=phan%10;

if(tram!=0)

write_data(48+tram);

if((tram!=0)&&(chuc==0)&&(donvi==0))

write_data(48);

if((tram!=0)&&(chuc==0)&&(donvi!=0))

write_data(48);

if(chuc!=0)

write_data(48+chuc);

if((donvi!=0)||(phan1!=0)||(phan2!=0))

{

write_data(48+donvi);

write_data('.');

write_data(48+phan1);

write_data(48+phan2);

}

if((donvi==0)&&(phan1==0)&&(phan2==0))

write_data(48);

}

void main(void)

{

thiet_lap_ban_dau();

P3=0xff;

Page 16: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

while(1)

{

write_command(0x01);//xoa man hinh

write_command(0x80);//tro ve dau dong thu nhat

write_string("DIEN AP:");

rd_adc=0;//cong dem 3 trang thai o dau ra Dout luon mo

rw_adc=0;//bat dau bien doi

delay(3);

rw_adc=1;

while(int_adc==0);

x=P3;

if(THANG1==0)

{

volt=(float)(x*5)/255;

if((volt<0)||(volt>2.5))

{

write_command(0xc0);//tro ve dau dong thu hai

write_string(" KHONG DO DUOC ");

delay(50000);

}

else

{

hienthi();

write_string("V");

write_command(0xc0);//tro ve dau dong thu hai

write_string("--HAN-THANG-TU--");

delay(50000);

}

}

if(THANG2==0)

{

volt=(float)(x*50)/255;

if((volt<0)||(volt>25))

{

write_command(0xc0);//tro ve dau dong thu hai

write_string(" KHONG DO DUOC ");

delay(50000);

}

else

{

hienthi();

write_string("V");

write_command(0xc0);//tro ve dau dong thu hai

write_string("--HAN-THANG-TU--");

delay(50000);

}

}

if(THANG3==0)

{

volt=(float)(x*500)/255;

if((volt<0)||(volt>250))

{

write_command(0xc0);//tro ve dau dong thu hai

Page 17: Đồ Án Đo Điện Áp Hiển Thị Trên LCD

write_string(" KHONG DO DUOC ");

delay(50000);

}

else

{

hienthi();

write_string("V");

write_command(0xc0);//tro ve dau dong thu hai

write_string("--HAN-THANG-TU--");

delay(50000);

}

}

}

}