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

Thiết kế hệ thống mạch đo điện áp 1 chiều trong dải (+5VDC đến +24 VDC) hiển thị trên LED 7 đoạn

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 (805.23 KB, 20 trang )

Lời Nói Đầu
Ngày nay,các vi điều khiển đã thâm nhập vào mọi lĩnh vực vủa đời sống từ dân
sự ,quân sự đến an ninh quốc phòng,có mặt trong hầu hết các ứng dụng hàng ngày từ
những thiết bị nhỏ nh- điện thoại di động,máy nhắn tin,trò chơi điện tử,các thiết bị gia
dụng(máy giặt,điều hòa,tủ lạnh.) đến những thiết bị lớn nh- ôtô,tàu thủy,xe lửa,máy
bay,hệ thống mạng điện thoại,các bộ điều khiển tự động trong nhà máy,các bộ điều
chỉnh trong nhà máy điện hạt nhân,trong các hệ thống điều khiển ánh sáng
Với một loạt các ứng dụng thú vị trên,ở đây chúng em xin giới thiệu một ứng dụng
nhỏ dùng vi điều khiển 8051(cụ thể là vi điều khiển AT89S52) để thiết kế vôn mét điện
tử đo điện áp một chiều.Đây là một ứng dụng nhỏ của vi điều khiển nh-ng thực tế sử
dụng rất nhiều trong các hệ thống đo l-ờng điện,điện tử nh- vôn mét, ampe mét điện
tửvv
Đề tài gồm 2 phần:
Phần 1:Cấu trúc vi điều khiển 8051
Phần 2: Thiết kế vôn mét điện tử dùng AT89S52

-1-


phần 1
cấu trúc vi điều khiển 8051

I-Giới thiệu tổng quan về họ 8051( AT 89S52)
Họ vi điều khiển 8051(còn gọi là C51) là một trong những họ vi điều khiển thông
dụng nhất .Đây là các bộ vi điều khiển 8 bít đ-ợc sản xuất theo công nghệ CMOS .Một
số loại vi điều khiển thuộc họ 8051 thông dụng nhất:
AT89C2051,AT89C4051,AT89C51,AT89S52 Trong đó AT89S52 là một bộ vi điều
khiển thông dụng giá rẻ có nhiều chức năng và đặc biệt có tích hợp sẵn bộ nạp trên
chíp.
Bộ vi điều khiển AT89S52 gồm các khối chức năng chính sau đây:
CPU( Central Processing Unit) bao gồm:


- Thanh ghi tích luỹ A
- Thanh ghi tích luỹ phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học( ALU: Arithmetic Logical Unit)
- Từ trạng thái ch-ơng trình( PSW: Progam Status Word)
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
Bộ nhớ ch-ơng trình( Bộ nhớ ROM) gồm 8Kb Flash.
Bộ nhớ dữ liệu( Bôn nhớ RAM) gồm 256 bytes.
Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức năng
truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với máy tính qua cổng
COM.
3 bộ Timer /Counter 16 bít thực hiện các chức năng định thời và đếm sự kiện.
WDM( Watch Dog Timer) đ-ợc dùng để phục hồi lại hoạt động của CPU khi nó bị
treo bởi một nguyên nhân nào đó. WDM ở AT89S52 gồm một bộ Timer 14 bít, một
bộ Timer 7 bít, thanh ghi WDTPRG( WDT programable) điều khiển Timer 7 bit và
một thanh ghi chớc năng WDTRST( WDM register). Bình th-ờng WDT không hoạt
động( bị cấm), để cho phép WDT, các giá trị 1EH và E1H cần phải đ-ợc ghi liên tiếp
vào thanh ghi WDTRST. Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kỳ đồng
hồ cho đến giá trị 16383 thì xảy ra tràn. Khi xảy ra tràn, chân RTS sẽ đ-ợc đặt ở mức
cao trong thời gian 96.Tosc (Tossc=1/Fosc) và AT89S52 sẽ đ-ợc reset. Khi WDT hoạt
động, ngoại trừ reset phần cứng và reset do WDT tràn thì không có cách nào cấm đ-ợc
WDT, vì vậy khi sử dụng WDT thì các đoạn mã ch-ơng trình phải đ-ợc đặt trong các
khe thời gian từ khi giữa các lần WDT đ-ợc khởi tạo lại.

-2-


II- Sơ đồ các chân và chức năng

1.Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm 8 chân, ngoài chức

năng xuất nhập ra, 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 AT89S52 giao tiếp với thiết bị ngoài có kiến trúc Bus

2.Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) : Có chức năng xuất nhập theo bit
và byte. Ngoài ra, 3 chân P1.5, P1.6, P1.7 đ-ợc dùng để nạp ROM theo chuẩn ISP, 2
chân P1.0 và P1.1 đ-ợc dùng cho bộ Timer 2

-3-


3.Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): Là một port có công dụng
kép: là đ-ờng xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ
nhớ mở rộng.

4.Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân trên port 3 ngoài
chức năng xuất nhập ra còn có một chức năng riêng:
Bit
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Tên
RXD
TXD
INT0

INT1
T0
T1
WR
RD

Chức năng
Dữ liệu nhận cho port nối tiếp
Dữ liệu phát cho port nối tiếp
Ngắt 0 bên ngoài
Ngắt 1 bên ngoài
Ngõ vào của Timer/Counter 0
Ngõ vào của Timer/Counter 1
Xung ghi bộ nhớ dữ liệu bên ngoài
Xung đọc bộ nhớ dữ liệu bên ngoài

-4-


5. RST( Reset- chân 9):
Mức tích cực của chân này là mức 1, để reset ta phải đ-a mức 1(5V) đến
chân này với thời gian tối thiểu 2 chu kỳ máy( t-ơng đ-ơng 2uS đối với thạch anh
12MHz.
6.XTAL1, XTAL2:
AT89S52 có một bộ dao động trên chip, nó th-ờng đ-ợc nồi với một bộ
dao động thạch anh có tần số lớn nhất là 33MHz, thông th-ờng là 12MHz.
7. EA( External Access):
EA th-ờng đ-ợc mắc lên mức cao(+5V) hoặc mức thấp( GND). Nếu ở
mức cao, bộ vi điều khiển thi hành ch-ơng trình từ ROM nội. Nếu ở mức thấp, ch-ơng
trinh chỉ đ-ợc thi hành từ bộ nhớ mở rộng.

8.ALE( Address Latch Enable):
ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa
đầu của chu kỳ bộ nhớ. Sau đó các đ-ờng port 0 dùng để xuất hoặc nhập dữ liệu trong
nửa chu kỳ sau của bộ nhớ.
9.PSEN( Program Store Enable):
PSEN là điều khiển để cho phép bộ nhớ ch-ơng trình mở rộng và tr-ờng
đ-ợc nối đến chân /OE ( Output Enable) của một EPROM để cho phép đọc các bytes
mã lệnh.
PSEN sẽ ở mức thấp trong thừi gian đọc lệnh. Các mã nhị phân của
ch-ơng trình đ-ợc đọc từ EPROM qua Bus và đ-ợc chốt vào thanh ghi lệnh của bộ vi
điều khiển để giải mã lệnh. Khi thi hành ch-ơng trình trong ROM nội, PSEN sẽ ở mức
thụ động( mức cao)
10.Vcc, GND:
AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V đ-ợc cấp qua
chân 40(+) và chân 20(-)
-5-


Phần 2
THIT K MCH O P
I. Giới thiệu về ADC0804:
1- Các thiết bị ADC.:
Các bộ chuyển đổi ADC thuộc trong những thiết bị đ-ợc sử dụng rộng rãi nhất
để thu dữ liệu. Các máy tính số sử dụng các giá trị nhị phân, nh-ng trong thế giới vật
lý thì mọi đại l-ợng ở dạng t-ơng tự (liên tục). Nhiệt độ, áp suất (khí hoặc chất lỏng),
độ ẩm và vận tốc và một số ít trọng những đại l-ợng vật lý của thế giới thực mà ta gặp
hàng ngày. Một đại l-ợng vật lý đ-ợc chuyển về dòng điện hoặc điện áp qua một thiết
bị đ-ợc gọi là các bộ biến đổi. Các bộ biến đổi cũng có thể đ-ợc coi nh- các bộ cảm
biến. Mặc dù chỉ có các bộ cảm biến nhiệt, tốc độ, áp suất, ánh sáng và nhiều đại
l-ợng tự nhiên khác nh-ng chúng đều cho ra các tín hiệu dạng dòng điện hoặc điện áp

ở dạng liên tục. Do vậy, ta cần một bộ chuyển đổi t-ơng tự số sao cho bộ vi điều khiển
có thể đọc đ-ợc chúng. Một chíp ADC đ-ợc sử dụng rộng rãi là ADC0804.
2- Chíp ADC0804.
Chíp ADC0804 là bộ chuyển đổi t-ơng tự số trong họ các loạt ADC800 từ hãng
National Semiconductor. Nó cũng đ-ợc nhiều hãng khác sản xuất, nó làm việc với +5v
và có độ phân giải là 8 bít. Ngoài độ phân giải thì thời gian chuyển đổi cũng là một
yếu tố quan trọng khác khi đánh giá một bộ ADC. Thời gian chuyển đổi đ-ợc định
nghĩa nh- 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. Trong ADC0804 thời gian chuyển đổi thay đổi phụ thuộc vào tần số đồng hồ
đ-ợc cấp tới chân CLK R và CLK IN nh-ng không thể nhanh hơn 110s. Các chân
của ADC0804 đ-ợc mô tả nh- sau:
1. Chân CS - chọn chíp: Là một đầu vào tích cực mức thấp đ-ợc sử dụng để kích hoạt
chíp ADC0804. Để truy cập ADC0804 thì chân này phải ở mức thấp.
2. Chân RD (cho phép vi điều khiển đọc): Đây là một tín hiệu đầu vào đ-ợc tích cực
mức thấp. Các bộ ADC chuyển đổi đầu vào t-ơng tự thành số nhị phân t-ơng
đ-ơng với nó và giữ nó trong một thanh ghi trong. RD đ-ợc sử dụng để nhận dữ
liệu đ-ợc chuyển đổi ở đầu ra của ADC0804. Khi CS = 0 nếu một xung cao xuống - thấp đ-ợc áp đến chân RD thì đầu ra số 8 bít đ-ợc hiển diện ở các chân dữ
liệu D0 - D7. Chân RD cũng đ-ợc coi nh- cho phép đầu ra.
3. Chân ghi WR (thực ra tên chính xác là Bắt đầu chuyển đổi). Đây là chân đầu vào
tích cực mức thấp đ-ợc dùng để báo cho ADC0804 bắt đầu quá trình chuyển đổi.
Nếu CS = 0 khi WR tạo ra xung thấp - lên - cao thì bộ ADC0804 bắt đầu chuyển
đổi giá trị đầu vào t-ơng tự Vin về số nhị phân 8 bít. L-ợng thời gian cần thiết để
chuyển đổi thay đổi phụ thuộc vào tần số đ-a đến chân CLK IN và CLK R. Khi
việc chuyển đổi dữ liệu đ-ợc hoàn tất thì chân INTR đ-ợc ép xuống thấp bởi ADC
0804.
4. Chân CLK IN và CLK R.
-6-


Chân CLK IN là một chân đầu vào đ-ợc nối tới một nguồn đồng hồ ngoài khi

đồng hồ ngoài đ-ợc sử dụng để tạo ra thời gian. Tuy nhiên ADC0804 cũng có một
máy tạo xung đồng hồ. Để sử dụng máy tạo xung đồng hồ trong (cũng còn đ-ợc gọi là
máy tạo đồng hồ riêng) của ADC0804 thì các chân CLK IN và CLK R đ-ợc nối tới
một tụ điện và một điện trở nh- chỉ ra trên hình 3. Trong tr-ờng hợp này tần số đồng
hồ đ-ợc xác định bằng biểu thức:
f

1
1,1RC

giá trị tiêu biểu của các đại l-ợng trên là R = 10k và C= 150pF và tần số nhận
đ-ợc là f = 606kHz và thời gian chuyển đổi sẽ mất là 110s.

ADC080
+5V

10k
PO

1
1
1
9
19

10k
150p

4
1

2
10

20
Vin(+
Vin(-)
A
Vref/
CLK R
CLK
CS
RD
D

Vcc

D0
D1
D2
D3
D4
D5
D6
D7
WR
INTR

18
17
16

15
14
13
12
11
3
5

to
LED

Nomal
ly
Open

Hình 3: Kiểm tra ADC0804 ở chế độ chạy tự do.
5. Chân ngắt INTR (ngắt hay gọi chính xác hơn là kết thúc chuyển đổi).
Đây là chân đầu ra tích cực mức thấp. Bình th-ờng nó ở 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 đ-ợc
chuyển đổi sẵn sàng để lấy đi. Sau khi INTR xuống thấp, ta đặt CS = 0 và gửi một
xung cao - xuống - thấp tới chân RD lấy dữ liệu ra của ADC0804.
6. Chân Vin (+) và Vin (-).
-7-


Đây là các đầu vào t-ơng tự vi sai mà Vin = Vin (+) - Vin (-). Thông th-ờng Vin () đ-ợc nối xuống đất và Vin (+) đ-ợc dùng nh- đầu vào t-ơng tự đ-ợc chuyển đổi về
dạng số.
7. Chân VCC.
Đây là chân nguồn nuối +5v, nó cũng đ-ợc dùng nh- điện áp tham chiếu khi
đầu vào Vref/2 (chân 9) để hở.

8. Chân Vref/2.
Chân 9 là một điện áp đầu vào đ-ợc dùng cho điện áp tham chiếu. Nếu chân
này hở (không đ-ợc nối) thì điện áp đầu vào t-ơng tự cho ADC0804 nằm trong dải 0
đến +5v (giống nh- chân VCC). Tuy nhiên, có nhiều ứng dụng mà đầu vào t-ơng tự áp
đến Vin cần phải khác ngoài dải 0 đến 5v. Chân Vref/2 đ-ợcdùng để thực thi các điện áp
đầu vào khác ngoài dải 0 - 5v. Ví dụ, nếu dải đầu vào t-ơng tự cần phải là 0 đến 4v thì
Vref/2 đ-ợc nối với +2v.
Bảng 12.5 biểu diễn dải điện áp Vin đối với các đầu vào Vref/2 khác nhau.
Bảng 12.5: Điện áp Vref/2 liên hệ với dải Vin.
Vref/ 2(V)
Hở *
2.0
1.5
1.28
1.0
0.5

Vin(V)
0 đến 5
0 đến 4
0 đến 3
0 đến 2.56
0 đến 2
0 đến 1

Step Size (mV)
5/256 = 19.53
4/255 = 15.62
3/256 = 11.71
2.56/256 = 10

2/256 = 7.81
1/256 = 3.90

Ghi chú: - VCC = 5V
- * Khi Vref/2 hở thì đo đ-ợc ở đó khoảng 2,5V
- Kích th-ớc b-ớc (độ phân dải) là sự thay đổi nhỏ nhất mà ADC có thể phân
biệt đ-ợc.
9. Các chân dữ liệu D0 - D7.
Các chân dữ liệu D0 - D7 (D7 là bít cao nhất MSB và D0 là bít thấp nhất LSB)
là các chân đầu ra dữ liệu số. Đây là những chân đ-ợ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 bị đ-a xuống thấp. Để
tính điện áp đầu ra ta có thể sử dụng công thức sau:
D out

V in
kich thuoc buoc

Với Dout là đầu ra dữ liệu số (dạng thập phân). Vin là điện áp đầu vào t-ơng tự và
độ phân dải là sự thay đổi nhỏ nhất đ-ợc tính nh- là (2 Vref/2) chia cho 255 đối với
ADC 8 bít.
10.Chân đất t-ơng tự và chân đất số.
Đây là những chân đầu vào cấp đất chung cho cả tín hiệu số và t-ơng tự. Đất
t-ơng tự đ-ợc nối tới đất của chân Vin t-ơng tự, còn đất số đ-ợc nối tới đất của chân
-8-


Vcc. Lý do mà ta phải có hai đất là để cách ly tín hiệu t-ơng tự Vin từ các điện áp ký
sinh tạo ra việc chuyển mạch số đ-ợc chính xác. Trong phần trình bày của chúng ta thì
các chân này đ-ợc nối chung với một đất. Tuy nhiên, trong thực tế thu đo dữ liệu các
chân đất này đ-ợc nối tách biệt.

Từ những điều trên ta kết luận rằng các b-ớc cần phải thực hiện khi chuyển đổi
dữ liệu bởi ADC0804 là:
a) Bật CS = 0 và gửi một xung thấp lên cao tới chân WR để bắt đầu chuyển đổi.
b) Duy trì hiển thị chân INTR . Nếu INTR xuống thấp thì việc chuyển đổi đ-ợc hoàn
tất và ta có thể sang b-ớc kế tiếp. Nếu INTR cao tiếp tục thăm dò cho đến khi nó
xuống thấp.
c) Sau khi chân INTR xuống thấp, ta bật CS = 0 và gửi một xung cao - xuống - thấp
đến chân RD để lấy dữ liệu ra khỏi chíp ADC0804. Phân chia thời gian cho quá
trình này đ-ợc trình bày trên hình 4.
CS

D0
D7

Data
out

Start

End

Read
it

Hình 4: Phân chia thời gian đọc và ghi của ADC0804.

-9-


II. Thiết kế phần cứng:

1.L-u đồ thuật toán :

Bắt đầu

Kiểm tra thang đo

Không có thang đo nào
đ-ơc chọn

Tát led

Thang đo x đ-ợc chọn
(x ứng với thang đo 1,2,3)

Chuyển đổi A-D

Tính giá trị đo đ-ợc

Hiển thị led 7 thanh

- 10 -


2.Khối nguồn và khối chọn thang đo:

Nguồn vào đ-ợc ổn áp qua IC LM7805 ,điện áp ra ổn định ở mức 5V.Que đo
d-ơng (+) đ-ợc nối vào chuyển mạch để qua các điện trở (220k,16k,3.3k,4,7k) và
biến trở (R9,R10) nhằm phân áp cho đầu vào của IC 0804 chuyển đổi giá trị điện
áp ở dạng t-ơng tự sang dạng số.Chọn IC 0804 đo giá trị cao nhất là 5V vậy nên
các điện trở phân áp đ-ợc tính để cho điện áp vào lớn nhất với thang đo t-ơng

ứng đ-ợc cấp vào IC 0804 là 5V.Chuyển mạch có 2 tiếp điểm đối x-ng nhau
nhằm chọn mức phân áp và báo cho vi điều khiển biết phần cứng đang chọn
thang đo nào (thang đo 250v,25v,5v), nhờ đó vi điều khiển có thể tính đ-ợc giá trị
đo đ-ợc thực tế ứng với giá trị từ ADC 0804 gửi lên.Ví dụ:chọn thang đo 25 volt
mà giá trị ADC 0804 gửi lên là 100volt thì giá trị thực tế cần đo là
(100/255)*25=9.803volt.

- 11 -


3.Khối hiển thị :

Khối hiển thị gồm led 7 thanh để hiển thị kết quả và 3 led đơn để hiển thị thang
đo đ-ợc chọn. Các loại led đ-ợc chọn là led A chung vì nếu chọn led K chung khi
led sáng dòng điện sẽ đi từ vi điều khiển đi ra gây sụt áp trên vi điều khiển dẫn
đến vi điều khiển hoạt động không chính xác. Mạch điện phần cứng cũng đ-ợc
thêm công tắc reset nhằm khởi động lại hệ thống khi hoạt động bị lỗi, công tắc
cấp nguồn 5V để hiểu chỉnh cầu phân áp đầu vào. Các transistor đ-ợc dùng để
kích dòng cho led 7 thanh, tín hiệu từ vi điều khiển tác động vào cực B của tran
để điều khiển các led 7 thanh hiển thị.

- 12 -


4.M¹ch nguyªn lý :

III. Ch-¬ng tr×nh ®iÒu khiÓn :

/*khai bao cac thu vien can dung*/
#include<reg52.h>

#include<math.h>
#include<stdio.h>
//khai bao cac chan dieu khien ADC 0804
sbit adc_intr=P1^2; //chan INTR cua adc0804 noi voi P1.2
sbit adc_rd=P1^0;
//chan RD cua adc0804 noi voi P1.0
sbit adc_rw=P1^1;
//chan RW cua adc0804 noi voi P1.1
//khai bao cac chan dieu khien led 7 thanh
sbit led1=P2^4;
//hien thi dien ap do duoc bang 4 led 7 thanh,
sbit led2=P2^5;
//led1 noi voi P2.4;led2 noi voi P2.5
sbit led3=P2^6;
//led3 noi voi P2.6
sbit led4=P2^7;
//led4 noi voi P2.7
//khai bao cac chan xac dinh thang do
sbit thang_do1=P2^0;//thang do 250v
sbit thang_do2=P2^1;//thang do 25v
- 13 -


sbit thang_do3=P2^2;//thang do 5v
sbit den1 = P1^4;
sbit den2 = P1^5;
sbit den3 = P1^6;
//khai bao cac bien
unsigned int x;
unsigned char

tram,chuc,donvi,phan1,phan2,phan3,phan_nguyen,phan_phan,i;
float volt,giatri;
//khai bao mang cac so hien thi tren led 7 thanh
unsigned char
font[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//mang chu so khong chua dau cham dp
unsigned char
font1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//mang chu so chua dau cham dp
/*cac ham con*/
//ham tao tre voi thoi gian j us
void delay_us(unsigned int j)
{
unsigned int n;
for(n=0;n//lap j lan de tao tre
}
//ham dieu khien ADC0804
/* adc_rw=P1^1, de bat dau chuyen doi can 1 xung thap len cao
adc_rd=P1^2, tao xung cao xuong thap se doc du lieu tu ADC */
void dieu_khien_adc(void)
{
adc_rd=0;
adc_rw=0; // dat P1.1=0
delay_us(2);
adc_rw=1; //dat P1.1=1 de bat dau chuyen doi
while(!adc_intr);//cho bien doi xong
//ket thuc chuyen doi cho phep doc ADC
x=P3;//doc gia tri tu ADC vao bien x
}

- 14 -


/*ham hien thi len led 7 thanh*/
void hien_thi(void)
{
volt=giatri*1000; //gia tri - dien ap do duoc duoi dang so thap
phan,can chuyen doi thanh so nguyen de hien thi
volt=(long int)(volt);
phan_nguyen=volt/1000; //tach lay phan nguyen
phan_phan=(long int)(volt)%1000;
//tach lay phan phan
//quet led hien thi
//hien thi mot so phan nguyen,ba so phan thap phan
if(phan_nguyen<10)
{
donvi=phan_nguyen;
phan1=phan_phan/100;
phan2=(phan_phan%100)/10;
phan3=(phan_phan%100)%10;
//hien thi tren led7
for(i=0;i<50;i++)
{
led1=1;
led2=led3=led4=0;
P0=font1[donvi];//font co dau cham dp
delay_us(100);
led2=1;
led1=led3=led4=0;
P0=font[phan1];//font khong co dau dp

delay_us(100);
led3=1;
led1=led2=led4=0;
P0=font[phan2];//font khong co dau dp
delay_us(100);
led4=1;
led1=led2=led3=0;
P0=font[phan3];
- 15 -


delay_us(100);
}
}
//hien thi hai so phan nguyen , hai so phan thap phan
if((phan_nguyen>=10)&&(phan_nguyen<100))
{
chuc=phan_nguyen/10;
donvi=phan_nguyen%10;
phan1=phan_phan/100;
phan2=(phan_phan%100)/10;
for(i=0;i<50;i++)
{
led1=1;
led2=led3=led4=0;
P0=font[chuc];//font khong co dau dp
delay_us(100);
led2=1;
led1=led3=led4=0;
P0=font1[donvi];//font co dau dp

delay_us(100);
led3=1;
led1=led2=led4=0;
P0=font[phan1];//font khong co dau dp
delay_us(100);
led4=1;
led1=led2=led3=0;
P0=font[phan2];
delay_us(100);
}
}
//hien thi ba so phan nguyen, mot so phan phan
if((phan_nguyen>=100)&&(phan_nguyen<=250))
{
- 16 -


tram=phan_nguyen/100;
chuc=(phan_nguyen%100)/10;
donvi=(phan_nguyen%100)%10;
phan1=phan_phan/100;
for(i=0;i<50;i++)
{
led1=1;
led2=led3=led4=0;
P0=font[tram];//font khong co dau dp
delay_us(100);
led2=1;
led1=led3=led4=0;
P0=font[chuc];//font khong co dau dp

delay_us(100);
led3=1;
led1=led2=led4=0;
P0=font1[donvi];//font khong co dau dp
delay_us(100);
led4=1;
led1=led2=led3=0;
P0=font[phan1];
delay_us(100);
}
}
}
//ham tat led
void tat_led(void)
{
led1=led2=led3=led4=0;
P0=0xff;
}
/*ham chinh
*/
void main(void)
{
- 17 -


while(1)
{
//thang 250V
while(thang_do1==0)
{

den1=0;
den2=den3=1;
dieu_khien_adc();
giatri = (float)(250*x)/255;
if(giatri<=250)
hien_thi();
}
//thang 25V
while(thang_do2==0)
{
den2=0;
den1=den3=1;
dieu_khien_adc();
giatri=(float)(25*x)/255;
if(giatri<=25)
hien_thi();
}
//thanh 5V
while(thang_do3==0)
{
den3=0;
den1=den2=1;
dieu_khien_adc();
giatri=(float)(5*x)/255;
if(giatri<=5)
hien_thi();
}
while((thang_do1==1)&&(thang_do2==1)&&(thang_do3==1))
{
den1=den2=den3=1;

tat_led(); //khi cong tac thang off thi tat led
}
- 18 -


}
}

- 19 -


IV.kết luận :
1.Ưu điểm:
-Mạch có khả năng đo dải điện áp rộng
-Mạch có 3 thang đo nhằm tăng độ chính xác giá trị đo
-Mạch có tốc độ đo nhanh , chính xác v ổn định
-Mạch hiển thị thang đo và kết quả rõ ràng
-Mạch đ-ợc thiết kế nhỏ gọn dễ sử dụng

- 20 -



×