Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Trang 1BÀ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:
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.)
10
3 10
2 5 12
K mA
V mA
V V I
U V
Trang 2b 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
b a
e
g
c f
d
LED 12V
B ATTER Y
R
+
-
I
BATTERY
330
L ED 5V
B ATTER Y
+5V
P1.0
LED
7404
330
LED
330
P1.0
7404
Trang 3Bảng mã cho Led Anode chung Bảng mã cho Led Anode chung
Số a b c d e f g dp Mã hex
Số a b c d e f g dp Mã hex
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 Mã hex
Số dp g f e d c b a Mã hex
c f
b a
g
GND d
330 x 8
e dot
c
330 x 8
e f
b
Vcc
a
g dot
d
Trang 4Khi 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
Trang 5III 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
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
+5V
HI
HI
HI
GND
HI
HI
HI
7-SEGMENT
GND
7-SEGMENT
a b c d e f g dp
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 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 Q0 −Q9 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
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
Trang 63 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 lệnh hợp ngữ ñể xuất dữ liêu ra một PORT của vñk
b Lưu ñồ chương trình
c Chương trình mẫu gợi ý
END
d Yêu cầu
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
Trang 7Sử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
sẵn
b Giải pháp
tuỳ chọn trong dãy 4 Led 7 ñoạn
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 ý
ORG 0000H ; XUAT GIA TRI NHI PHAN TU 0->9 RA PORT 0
JMP MAIN
MOV DPTR, #LED7S ; NAP DIA CHI CUA BANG MA HEX MOV A, #0
LAP: PUSH ACC ; cất nội dung trong A vào stack -> số thứ tự hay ñộ dời
CALL DELAY_1S
CJNE A, #10, LAP ; Nếu A chưa =10 thì quay lại ñể thực hiện
Trang 8DELAY_1S:
MOV R1, #20
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
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
sẵn
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
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ư
Trang 9Lặ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
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
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 ?
Trang 10e Chương trình
Cách 1: Chương trình gợi ý
JMP MAIN
MAIN:
MOV SP, #256-32 ; khoi dong Stack 32 byte
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
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 ý
Trang 11CLR EA ; cấm tất cả ngắt
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 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
MOV 40H,#0 ; Ô nhớ 40h chứa giá trị xuất ra Led, bây giờ là 00H LAP: MOV A,40H
Trang 12MOV B,#10 ; A chứa số hàng chục, B, chứa số
DIV AB ; hàng ñơn vị
MOV DPTR,#LED7S
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
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
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
Trang 13b Giải pháp
tuỳ chọn trong dãy 4 Led 7 ñoạn
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
JMP MAIN
MAIN:
MOV A, #00H
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
Trang 14JMP BEGIN
DISPLAY:
MOV P1, 40H; xuất hàng ñơn vị ra
MOV P0, #00H
MOV P1, 41H; xuất hàng chục ra
MOV P0, #01H
MOV P1, 41H; xuất hàng trăm ra MOV P0, #02H
RET BIN2BCD:
MOV B, #10
MOV 40H, B
MOV B, #10
MOV 42, A RET
JMP BEGIN
DELAY_XS:
PUSH 07H
PUSH 06H
MOV R1, #10
MOV R3, #255
DJNZ R1, L3 POP 06H POP 07H RET
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
JMP LAP
aand SW2 thì giảm xuống 1 ñơn vị Sử dụng SW2 có ñịa chỉ bít là P3.3