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

Điều khiển led đơ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 (195.7 KB, 14 trang )

Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-1
BÀI 3:
LẬP TRÌNH ðIỀU KHIỂN LED ðƠN – LED 7 ðOẠN




I. Mục ñích bài thí nghiệm.
Bài thực hành nhằm giúp học viên:
• Hiểu cấu tạo và hoạt ñộng của Led ñơn, Led 7 ñoạn.
• Hiểu ñược lưu ñồ chương trình, cấu trúc một chương trình hợp ngữ căn bản, cấu
trúc vòng lặp, các lệnh hợp ngữ ñể truy xuất dữ liệu qua một PORT bất kỳ của
vi ñiều khiển (vñk). Từ ñó viết chương trình ñể ñiều khiển các led ñơn hoặc
Led7ñoạn (led7doan) một cách có hiệu quả.
II. Cơ sở lý thuyết.
LED (Light Emitting Diode) có nghĩa là diode phát quang, là các
diode có khả năng phát ra ánh sáng hay tia hồng ngoại. Như vậy, LED là
một linh kiện ñiện tử dùng ñể giao tiếp ñơn giản với con người thông
qua 2 trạng thái: sáng hoặc tối.
LED có 2 cực: Anode và Kathode.
1. LED ñơn.
a. Phân cực thuận (Forward Bias) - LED sáng
Phân cực thuận là tác dụng một hiệu ñiện thế giữa 2 cực của
LED, sao cho ñiện thế cực Anode lớn hơn ñiện thế cực Kathode
một trị số là V. (Hình 4.2a)
Trị số V nầy khoảng từ 1V ñến 2.5V, thay ñổi theo từng loại LED.
Dòng ñiện I qua LED tốt nhất khoảng từ 10-20mA. Ngoài khoảng nầy,
hoặc là LED sẽ sáng mờ, hoặc là LED dễ bị hỏng.
ðể ñạt ñược các giá trị mong muốn về dòng ñiện, ñiện thế trên LED, ta tiến
hành tính toán như sau: (mạch ñiện hình 4.)


 Hiệu ñiện thế giữa A và K của LED khoảng 1-2.5V. Chọn U
LED
≈ 2V.
 I = 10mA

Ω=Ω==

=

= 3003,0
10
3
10
2512
K
mA
V
mA
VV
I
UV
R
LED

 Chọn R = 330Ω


Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-2



b. Phân cực nghịch (Reverse Bias) - LED tắt
Phân cực nghịch là tác dụng một hiệu ñiện thế giữa 2 cực của LED, sao cho
ñiện thế cực Kathode lớn hơn ñiện thế cực Anode.
c. LED trong các mạch Logic
 ðối với mạch ñiện như hình 4.3a
Nếu chân P1.0 có mức logic 1 (ñiện thế
khoảng 5V) thì ngõ vào cổng ñảo (NOR gate)
ở mức logic 1. Ngõ ra cổng ñảo ở mức logic
0 (ñiện thế khoảng 0V). LED ñược phân cực thuận ñủ lớn nên LED sáng.
Nếu chân P1.0 ở mức logic 0 thì LED tắt.
 ðối với mạch ñiện hình 4.3b
Nếu chân P1.0 có mức logic 0 (ñiện thế
khoảng 0V) thì ngõ vào cổng ñảo ở mức
logic 0. Ngõ ra cổng ñảo ở mức logic 1 (ñiện
thế khoảng 5V), LED ñược phân cực thuận
ñủ lớn nên LED sáng.
Nếu chân P1.0 có mức logic 1 thì LED tắt.
2. LED 7 ñoạn.
LED 7 ñoạn (led7doan) là một Led
ñặc biệt. Trong ñó 7 led ñược sắp xếp theo
một trật tự nhất ñịnh ñể hiển thị thông tin
về các chữ số 0-9, và một led ñể hiển thị
thông tin về dấu chấm (
.
)
Có 2 loại led 7 ñoạn: Loại Anode
chung và loại Kathode chung.





dp
b
a
e
g
c
f
d
LED
12V
BATTERY
R

+

-

I

BATTERY
330
LED
5V
BATTERY
+5V
P1.0
LED
7404

1 2
330
LED
330
P1.0

7404
1 2
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-3










Bảng mã cho Led Anode chung
Bảng mã cho Led Anode chung

(a là MSB, dp là
LSB)
(a là LSB, dp là MSB)


Số


a

b

c

d

e

f

g

dp

Mã hex

0

0

0

0

0

0


0

1

1

03h

1

1

0

0

1

1

1

1

1

9
Fh

2


0

0

1

0

0

1

0

1

25h

3

0

0

0

0

1


1

0

1

0Dh

4

1

0

0

1

1

0

0

1

99h

5


0

1

0

0

1

0

0

1

4
9h

6

0

1

0

0


0

0

0

1

41h

7

0

0

0

1

1

1

1

1

1Fh


8

0

0

0

0

0

0

0

1

01h

9

0

0

0

0


1

0

0

1

09h



B

ng mã cho Led Cathode chung
B

ng mã cho Led Cathode chung

(a là MSB, dp là LSB)
(a là LSB, dp là MSB)

S


a

b

c


d

e

f

g

d
p



h
e
x

0

1

1

1

1

1


1

0

0

0F
C
h

1

0

1

1

0

0

0

0

0

6
0h


2

1

1

0

1

1

0

1

0

0DAh

3

1

1

1

1


0

0

1

0

0F2h

4

0

1

1

0

0

1

1

0

6

6h

5

1

0

1

1

0

1

1

0

0
B6h

6

1

0

1


1

1

1

1

0

0
B
Eh

7

1

1

1

0

0

0

0


0

0E
0
h

8

1

1

1

1

1

1

1

0

0
F
Eh

9


1

1

1

1

0

1

1

0

0F6h


3. Các phương pháp hiển thị của LED 7 ñoạn
a. Dùng phương pháp quét
S


dp

g

f


e

d

c

b

a



hex

0

1

1

0

0

0

0

0


0

0C0h

1

1

1

1

1

1

0

0

1

0F9h

2

1

0


1

0

0

1

0

0

0A4h

3

1

0

1

1

0

0

0


0

0B0h

4

1

0

0

1

1

0

0

1

99h

5

1

0


0

1

0

0

1

0

92h

6

1

0

0

0

0

0

1


0

82h

7

1

1

1

1

1

0

0

0

0F8h

8

1

0


0

0

0

0

0

0

80h

9

1

0

0

1

0

0

0


0

90h

S


dp

g

f

e

d

c

b

a

Mã hex

0

0


0

1

1

1

1

1

1

3Fh

1

0

0

0

0

0

1


1

0

06h

2

0

1

0

1

1

0

1

1

5Bh

3

0


1

0

0

1

1

1

1

4Fh

4

0

1

1

0

0

1


1

0

66h

5

0

1

1

0

1

1

0

1

6Dh

6

0


1

1

1

1

1

0

1

7Dh

7

0

0

0

0

0

1


1

1

07h

8

0

1

1

1

1

1

1

1

7Fh

9

0


1

1

0

1

1

1

1

6Fh

c

f

b

a

g

GND

d


330 x 8

e

dot

c

330 x 8

e

f

b

Vcc

a

g

dot

d

Led lo

i Cathode chung Led lo


i Anode chung
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-4
Khi kết nối chung các ñường dữ liệu của Led 7 ñoạn (hình vẽ), ta không thể cho
các Led này sáng ñồng thời (do ảnh hưởng lẫn nhau giữa các Led) mà phải thực hiện
phương pháp quét, nghĩa là tại mỗi thời ñiểm chỉ sáng một Led và tắt các Led còn lại.
Do hiện tượng lưu ảnh của mắt, ta sẽ thấy các Led sáng ñồng thời.

b. Dùng phương pháp chốt
Khi thực hiện tách riêng các ñường dữ liệu của Led, ta có thể cho phép các Led sáng
ñồng thời mà sẽ không có hiện tượng ảnh hưởng giữa các Led. ICchốt cho phép lưu
trữ dữ liệu cho các Led có thể sử dụng là 74LS373, 74LS374.


Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-5
III. Nội dung thực hành.
1. Thiết bị thực hành.
Board thực hành ET-LAB3A PC, module SCAN-7SEGMENT&LED
2. Mô tả phần cứng.
a. Mạch nguyên lý của module SCAN-7SEGMENT&LED.
HI
7-SEGMENT
Cathod
PORT ROW
1
3
5
7
9

11
13
2
4
6
8
10
12
14
PORT COLM
1
3
5
7
9
11
13
2
4
6
8
10
12
14
74LS145
1
2
3
4
5

6
7
9
10
11
15
14
13
12
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
Q9
A
B
C
D
100 x 8
HI
7-SEGMENT
Cathod
+5V
HI
HI

HI
GND
HI
HI
HI
7-SEGMENT
Cathod
GND
7-SEGMENT
a
b
c
d
e
f
g
dp
Cathod
74HC245
2
3
4
5
6
7
8
9
19
1
18

17
16
15
14
13
12
11
A0
A1
A2
A3
A4
A5
A6
A7
OE
DIR
B0
B1
B2
B3
B4
B5
B6
B7

b. Giải thích.
 IC 74HC245: IC ñệm dữ liệu 2 hướng. Trong ñó,
o
OE

là chân cho phép.
o DIR là chân ñiều khiển
hướng dữ liệu. Nếu ñiện
thế ở chân DIR ở mức
cao, 8 bít dữ liệu sẽ theo
hướng từ A0-A7 -> B0-
B7. Nếu ñiện thế ở chân
DIR ở mức thấp, 8 bít dữ
liệu sẽ theo hướng từ A0-
A7 -> B0-B7.
 IC 74LS145: IC giải mã 4 sang 10. Trong ñó, A-D là 4 ngõ vào, nhận từ
ñiều khiển (control word) từ vi ñiều khiển.
90 QQ −
là 10 ngã ra, trong ñó
chỉ sử dụng 5 ngã, tương ứng với việc chọn 4 led7doan và một dãy 8led
ñơn. Bảng sự thật của IC 74LS145 (dạng rút gọn) ở
bảng trên.
D

C

B

A

0Q

1Q

2Q


3Q

4Q

0 0 0 0 0
1 1 1 1
0 0 0 1
1
0
1 1 1
0 0 1 0
1 1
0
1 1
0 0 1 1
1 1 1
0
1
0 1 0 0
1 1 1 1
0
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-6
3. Nội dung thực hành 1.
Viết chương trình hợp ngữ ñể ñiều khiển led7doan thứ 4 hiển thị chữ số 9.
a. Mục ñích, yêu cầu cần ñạt ñược.
 Hiểu ñược cách kết nối các bus từ vi ñiều khiển (vñk) sang module.
 Nắm vững cách viết một chương trình hợp ngữ căn bản.
 Nắm vững cách viết một lệnh hợp ngữ ñể xuất dữ liêu ra một PORT của

vñk.
 Hiểu ñược cách ñiều khiển ñể chọn 1 led7doan bất kỳ.
b. Lưu ñồ chương trình.











c. Chương trình mẫu gợi ý
ORG 000H ;
LJMP MAIN
MAIN: MOV SP, #256-32 ; khởi ñộng Stack 32 byte
CLR EA ; cấm tất cả ngắt
MOV P0, #67H ; ñưa dữ liệu số 4 ra port 0
MOV P1, #03H ; chọn led7doan thứ 4
JMP MAIN ; lặp lại quá trình trên
END
d. Yêu cầu


 Chạy chương trình ñể kiểm tra.
Bắt ñầu

Kết thúc


Khởi ñộng Stack
32 Byte

Dữ liệu chữ số 9
P0 ← 67H

Chọn led7doan 4
P1
← 03H

Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-7


 Sửa lại chương trình sao cho có thể hiển thị các số khác trong bảng mã HEX
như số 0 hoặc 1 hoặc 2….tại LED 7 ñoạn có vị trí thứ 1 hoặc thứ 2 hoặc 3
trong dãy 4 LED 7 ñoạn.
4. Nội dung thực hành 2
Viết chương trình hiển thị ra LED thứ 1 của dãy 4 LED 7 ñoạn các số từ 0 ñến 9.
Thời gian hiển thị các số là 1 giây.
a. Mục ñích, yêu cầu cần ñạt ñược.
 Nắm ñược các lệnh truy xuất PORT, truy xuất dữ liệu từ một vùng nhớ ñịnh
sẵn
 Nắm ñược kỹ thuật viết một vòng lặp, hiểu rõ hoạt ñộng của vòng lặp.
 Hiểu rõ hoạt ñộng của chương trình delay.
b. Giải pháp.
 PORT 1: PORT dữ liệu.
 PORT 3: PORT ñiều khiển ñể chọn led7doan mong muốn. Các vị trí này là
tuỳ chọn trong dãy 4 Led 7 ñoạn

 Các thông tin về các chữ số hiển thị trên led7doan phải ñược lưu sẵn trong
một vùng nhớ dành riêng (TABLE) ñể chứa các bảng mã HEX của LED 7
ñoạn loại Cathode chung với cạnh a là MSB. Sử dụng thanh ghi con trỏ dữ
liệu DPTR ñể quản lý vùng nhớ nầy.
 Sử dụng thanh ghi R1 ñể quản lý việc chọn led7doan.
c. Chương trình mẫu gợi ý
ORG 0000H ; XUAT GIA TRI NHI PHAN TU 0->9 RA PORT 0
JMP MAIN
MAIN: MOV SP, #256-32 ; khoi dong Stack 32 byte
MOV DPTR, #LED7S ; NAP DIA CHI CUA BANG MA HEX
MOV A, #0
MOV P3, #00H ; Chọn led7seg thứ 1 ñể hiển thị
LAP: PUSH ACC ; cất nội dung trong A vào stack -> số thứ tự hay ñộ dời
MOVC A, @A+DPTR ;Nội dung của A=[A+DPTR]=[ ñộ dời+ñịa chỉ nền]
MOV P1, A ; Xuất nội dung A ra P1
CALL DELAY_1S
POP ACC ; lấy nội dung là ñộ dời trong ngăn sếp ñưa vào A
INC A ; tăng vị trí hay ñộ dời trong bảng LED7S
CJNE A, #10, LAP ; Nếu A chưa =10 thì quay lại ñể thực hiện
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-8
DELAY_1S:
MOV R1, #20
L1: MOV R2, #200
L2: MOV R3, #255
L3: DJNZ R3, L3
DJNZ R2, L2
DJNZ R1, L1
RET
LED7S: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H

END
d. Yêu cầu


 Chạy chương trình ñể kiểm tra.


 Lệnh PUSH và POP có ý nghĩa như thế nào trong chương trình. Nếu không
có nó thì chương trình như thế nào ? Giải thích ?


 Sửa lại chương trình theo cách khác ñể thực hiện công việc trên (không dùng
lệnh PUSH và POP nữa)


 Sửa lại chương trình sao cho có thể hiển thị các số hex từ 0 ñến F
5. Nội dung thực hành 3.
Viết chương trình hợp ngữ ñể ñiều khiển 4 led7doan hiển thị một số gồm 4 chữ
số, ví dụ: hiển thị chữ số “0123”.
a. Mục ñích, yêu cầu cần ñạt ñược.
 Nắm ñược các lệnh truy xuất PORT, truy xuất dữ liệu từ một vùng nhớ ñịnh
sẵn
 Nắm ñược kỹ thuật viết một vòng lặp, hiểu rõ hoạt ñộng của vòng lặp.
 Hiểu rõ hoạt ñộng của chương trình delay.
 Hiểu rõ kỹ thuật ñiều khiển hiển thị các chữ số theo phương pháp quét hình.
b. Giải thuật.
 Cho hiển thị chữ số mong muốn trên từng led7doan.
 Chữ số hàng nghìn sẽ ñược hiển thị trên led7doan thứ nhất, chữ số hàng
trăm trên led7doan thứ hai, chữ số hàng chục trên Led7doan thứ ba, và chữ
số hàng ñơn vị sẽ ñược hiển thị trên led7doan thứ tư.

 Mỗi thời ñiểm chỉ có duy nhất một led7doan ñược hiển thị chữ số.
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-9
 Lặp lại quá trình này nhiều lần trong một giây (khoảng 18 – 30 lần) ñể kích
thích võng mạc mắt lưu hình ảnh về các chữ số.
c. Giải pháp.
 PORT 0: PORT dữ liệu.
 PORT 1: PORT ñiều khiển ñể chọn led7doan mong muốn.
 Các thông tin về các chữ số hiển thị trên led7doan phải ñược lưu sẵn trong
một vùng nhớ dành riêng (TABLE). Sử dụng thanh ghi con trỏ dữ liệu
DPTR ñể quản lý vùng nhớ nầy.
 Sử dụng thanh ghi R1 ñể quản lý việc chọn led7doan.
d. Lưu ñồ chương trình.
Bắt ñầu

Y

N

DPTR
ð/ch
ỉ chữ số
ñ
ầu tiên

Khởi ñộng Stack
32 Bytes

Thiết lập thanh ghi
R2 ← 5

R1

0

Xuất PORT
P0 ← 00H
P1

R1

DELAY

A

0

Lấy dữ liệu
A
Error! Not a valid link.

Xuất PORT
P0 ← A
P1

R1

DELAY

DPTR


DPTR+1
R1

R1 + 1


R2 = R2

1 = 0 ?

Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-10

e. Chương trình
Cách 1:

Chương trình gợi ý

ORG 0000H ; hiển thị ra các số “0123”
JMP MAIN
MAIN:
MOV SP, #256-32 ; khoi dong Stack 32 byte
MOV P1, #0FFH ; tắt tất cả các LED
BEGIN: ; hiển thị các số

MOV P0,#4FH ; xuất mã của số 3
MOV P1, #03H ; xuất ra led 7 ñoạn thứ 4
CALL DELAY_XS
MOV P0,#5BH ; xuất mã của số 2
MOV P1, #02H ; xuất ra led 7 ñoạn thứ 3

CALL DELAY_XS
MOV P0,#06H ; xuất mã của số 1
MOV P1, #01H ; xuất ra led 7 ñoạn thứ 2
CALL DELAY_XS
MOV P0,#3FH ; xuất ra mã của số 0
MOV P1, #00H ; xuất ra led 7 ñoạn thứ 1
CALL DELAY_XS
JMP BEGIN
DELAY_XS:
MOV R1, #10
MOV R3, #255
L3: DJNZ R3, $
DJNZ R1, L3
RET
END


 Thực thi chương trình và quan sát kết quả.


 Hãy thay ñổi thời gian quét ñể sao cho quan sát ñược kết quả tốt nhất. Từ ñó
có rút ra kết luận gì ? Thực thi chương trình ñể kiểm tra sự thay ñổi này.
Cách 2: Chương trình gợi ý
ORG 0000H ; ; hiển thị ra các số “0123”
LJMP MAIN
MAIN: MOV SP, #256-32 ; khởi ñộng Stack 32 byte
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-11
CLR EA ; cấm tất cả ngắt
LOOP1: MOV DPTR, #TABLE ; DPTR giữ ñịa chỉ chữ số hiển thị 1

MOV R2, #5 ; số lần lặp cho LOOP
MOV R1, #0 ;
LOOP: MOV P0, #00H ; xóa tất cả led7doan
MOV P1, R1 ;
CALL DELAY ; delay
CLR A ;
MOVC A, @A+DPTR ; lấy dữ liệu chữ số hiển thị từ TABLE
MOV P0, A ; hiển thị chữ số trên led7doan thứ (R1+1)
MOV P1, R1
CALL DELAY ; delay
INC DPTR ; lấy ñịa chỉ chữ số sẽ hiển thị tiếp theo
INC R1 ; chọn led7doan sẽ tiếp theo
DJNZ R2, LOOP ; R2 = R2 – 1 = 0 ???
LJMP LOOP1
DELAY: PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR, #0FFF0H
DEL: INC DPTR
MOV A, DPL
ORL A, DPH
JNZ DEL
POP ACC
POP DPL
POP DPH
RET
;*********************************************
TABLE: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H
END



 Thực thi chương trình và quan sát kết quả.


 Hãy thay ñổi thời gian quét sao cho nhìn thấy kết quả tốt nhất. Từ ñó có rút
ra kết luận gì ?.
Chương trình sao cho có thể hiển thị các số ñếm từ 00 ñến 99. Hãy cho chạy
ñoạn chương trình bên dưới. Sinh viên hãy thay ñổi chương trình Delay ñể quét led
sao cho dễ nhìn thấy nhất.
ORG 0000H ; hiển thị từ 00-99
LJMP MAIN
MAIN: MOV SP, #256-32 ; khởi ñộng Stack 32 byte
MOV P1, #0FFH ; tắt tất cả các LED
MOV 40H,#0 ; Ô nhớ 40h chứa giá trị xuất ra Led, bây giờ là 00H
LAP: MOV A,40H
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-12
MOV B,#10 ; A chứa số hàng chục, B, chứa số
DIV AB ; hàng ñơn vị
MOV DPTR,#LED7S
MOVC A,@A+DPTR ; Chuyển sang mã Led 7 ñoạn
MOV P0,A
MOV P1,#01H ; xuất ra hàng chục
CALL DELAY
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
MOV P1, #00H ; Xuất số hàng ñơn vị
CALL DELAY
INC 40H ; Tăng ô nhớ 40h

MOV A,40H
CJNE A,#100,LAP ; Nếu giá trị ô nhớ ñả tăng ñến 100
JMP MAIN ; thì giảm về 0
DELAY:
PUSH 07
PUSH 06
MOV R6,#255
Delay1:
MOV R7,#255
DJNZ R7,$
DJNZ R6,DELAY1
POP 06
POP 07
RET
LED7S: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H
END


 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 99 ñến 00


 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 00 ñến 59


 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 00 ñến 23


 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 0000 ñến 9999
6. Nội dung thực hành 4
Viết chương trình ñếm số lần tác ñộng của ngõ vào sau ñó hiển thị số ñếm ñược

LED 7 ñoạn có 3 chữ số.
a. Mục ñích, yêu cầu cần ñạt ñược.
 Dùng Px.2 (hoặc Px.3) làm Button ñể tạo ra xung tín hiệu ngã vào.
 Khi Px.2 (hoặc Px.3) dùng làm ngã vào thì phải SETB Px.2 và khi ñó xung
tác ñộng sẽ có cạnh xuống hay nói cách khác là khi ấn button thì tín hiệu
ñưa vào Px.2 sẽ có mức logic 0.
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-13
b. Giải pháp.
 PORT 1: PORT dữ liệu.
 PORT 0: PORT ñiều khiển ñể chọn led7doan mong muốn. Các vị trí này là
tuỳ chọn trong dãy 4 Led 7 ñoạn
 Các thông tin về các chữ số hiển thị trên led7doan phải ñược lưu sẵn trong
một vùng nhớ dành riêng (TABLE) ñể chứa các bảng mã HEX của LED 7
ñoạn loại Cathode chung với cạnh a là MSB. Sử dụng thanh ghi con trỏ dữ
liệu DPTR ñể quản lý vùng nhớ nầy.
c. Chương trình mẫu gợi ý.
; P3.2 -> BUTTON
; ô nhớ 40H chứa hàng ñơn vị
; ô nhớ 41H chứa hàng chục
; ô nhớ 42H chứa hàng ñơn trăm
SW1 BIT P3.2 ; SWITCH ẤN ðƠN
ORG 0000H ; hiển thị ra các số “0123”
JMP MAIN
MAIN:
MOV SP, #256-32 ; khoi dong Stack 32 byte
MOV P0, #0FFH ; xoá tất cả các LED
MOV A, #00H
LAP: JNB P3.2, BEGIN ; khi SW1 ñược ấn
JMP LAP

BEGIN: INC A
CALL BIN2BCD
; tra bảng, ñổi BCD -> Led 7 ñoạn
MOV A, 40H ; hàng ñơn vi
MOV A, @A+DPTR
MOV 40H, A ; cất nội dung của A vào 40h
MOV A, 41H ; hàng chục
MOV A, @A+DPTR
MOV 41H, A ; cất nội dung của A vào 41h
MOV A, 42H ; hàng trăm
MOV A, @A+DPTR
MOV 42H, A ; cất nội dung của A vào 42h
CALL DISPLAY
Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn
Trang III-14
JMP BEGIN
DISPLAY:
MOV P1, 40H; xuất hàng ñơn vị ra
MOV P0, #00H
CALL DELAY_XS
MOV P1, 41H; xuất hàng chục ra
MOV P0, #01H
CALL DELAY_XS
MOV P1, 41H; xuất hàng trăm ra
MOV P0, #02H
CALL DELAY_XS
RET
BIN2BCD:
MOV B, #10
DIV AB

MOV 40H, B
MOV B, #10
DIV AB
MOV 41H, B
MOV 42, A
RET
JMP BEGIN
DELAY_XS:
PUSH 07H
PUSH 06H
MOV R1, #10
MOV R3, #255
L1: DJNZ R3, $
DJNZ R1, L3
POP 06H
POP 07H
RET
TABLE: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H
END
d. Yêu cầu


 Chạy chương trình và quan sát kết quả.


 Giải thích giải thuật các chương trình con DISPLAY, BIN2BCD. Có nhận
xét gì về cách sử dụng này ?


 Hãy giải thích ñoạn lệnh bên dưới có trong chương trình

LAP: JNB P3.2, BEGIN ; khi SW1 ñược ấn
JMP LAP


 Sửa lại chương trình sao cho khi ấn SW1 thì ñếm tăng lên 1 ñơn vị còn khi
aand SW2 thì giảm xuống 1 ñơn vị. Sử dụng SW2 có ñịa chỉ bít là P3.3





Hết

×