Phòng thí nghiệm Vi xử lý Bài thí nghiệm Vi xử lý
Trang 29 BÀI 03:
ĐIỀU KHIỂN MA TRẬN LED VÀ BÀN PHÍM HEX
(LED MATRIX AND KEYPAD CONTROL)
MỤC ĐÍCH THÍ NGHIỆM
Giúp sinh viên bằng thực nghiệm khảo sát các vấn đề chính sau đây :
- Cách ghép nối máy tính với thiết bị ngoại vi như ma trận Led và bàn phím.
- Các giải thuật dùng để quét ma trận Led và kiểm tra phím nhấn.
THIẾT BỊ SỬ DỤNG
1. Bộ thí nghiệm μPTS-31.
2. Board thí nghiệm μPM-303.
3. Máy vi tính.
PHẦN I : CƠ SỞ LÝ THUYẾT
I. KẾT NỐI PHẦN CỨNG
Trong bài thí nghiệm này sử dụng khối thí nghiệm μPM-303 trên đó có ma trận
LED 5x7 và 1 bàn phím 4x4 như sau :
1. MA TRẬN LED
Ma trận LED gồm các LED phát quang bố trí thành hàng và cột trong một võ.
Các tín hiệu điều khiển hàng PA0 - PA6 ( Port A ) nối vào Anode của tất cả các LED
trên cùng một hàng. Các tín hiệu điều khiển cột PB0 -PB4 (Port B) nối vào Cathode
Sơ đồ kết nối ma trận Led 5 x 7
5
6
7
8
1
2 3
1
2 3
1
2 3
1
2 3
1 2
1 2
1
2 3
1 2
Phòng thí nghiệm Vi xử lý Bài thí nghiệm Vi xử lý
Trang 31
cho các hàng và cột cần hiển thị. Tần số quét nhỏ nhất cho một chu kỳ cần khoảng
20Hz (50ms) nhằm bảo đảm cho mắt thấy các LED sáng đều không nháy. Như vậy để
hiển thị được chữ L có thể điều khiển tuần tự như trong bảng sau:
Nhịp 1 : PA0 - PA6 = 1, PB0 = 1 ; Sáng cột LED thứ nhất CL1
Nhịp 2 : PA0 - PA5 = 0, PA6 = 1, PB1 = 1 ; Sáng LED hàng RW7 và cột
CL2
Nhịp 3 : PA0 - PA5 = 0, PA6 = 1, PB2 = 1 ; Sáng LED hàng RW7 và cột
CL3
Nhịp 4 : PA0 - PA5 = 0, PA6 = 1, PB3 = 1 ; Sáng LED hàng RW7 và cột
CL4
Trong máy tính đã nạp sẵn 2 bộ chương trình viết bằng ngôn ngữ ASSEMBLY
chứa trong thư mục C:\TNVXL\TASM
- UPM302.ASM: Là chương trình gốc.
- UPM302.EXE: Là chương trình mã máy.
Chương trình sẽ quét lần lượt ma trận phím 4x4 và hiển thị giá trị ra ma trận
LED 7x5 tương ứng với giá trị phím ấn.
Phòng thí nghiệm Vi xử lý Bài thí nghiệm Vi xử lý
Trang 32
*Lưu đồ chương trình cho bài thí nghiệm μPM303:
U9: PA xuất, PB xuất, PCH nhập, PCL
xuất
Có phím nhấn?
Phím 'T'?
End
Có phím nhấn trên
bàn phím Hex?
Định lại dữ liệu cho mảng pa chứa
ký tự tương ứng với phím nhấn
trên bàn phím Hex
Hiển thị dữ liệu trong mảng pa lên
ma trận Led
Y
Y
N
Y
N
Phòng thí nghiệm Vi xử lý Bài thí nghiệm Vi xử lý
Trang 33
trên khối thí nghiệm μPM-303.
- Nối cáp liên lạc giữa trạm PORT A của μPTS-31 (PART B ) với trạm PORT
A của khối thí nghiệm μPM-303.
- Nối cáp liên lạc giữa trạm PORT B của μPTS-31 (PART B ) với trạm PORT
B của khối thí nghiệm μPM-303.
1
8
2
PC1
7
3
+5V
E
PORT C
1
2
3
4
5
6
7
8
PC3
B9
6
A
PC2 PC0
mov al,88h
out dx,al ; Dinh cau hinh cho U9
start: mov ah,0Bh ; Kiem tra phim nhan
int 21h
cmp al,0FFh ; Neu co nhan phim thi ket thuc
; chuong trinh
je exit
call ledmatrix
jmp start
exit: mov ah,4Ch
int 21h
main endp
;
ledmatrix proc
mov bx,0 ; Lap 5 lan cho 5 cot
cont: mov dx,308h
mov al,pa[bx] ; Xuat du lieu ra Port A (hien
; thi cot cho ma tran Led)
out dx,al
mov dx,309h
mov al,pb[bx] ; Chon cot cho ma tran Led
out dx,al
call delay
inc bx
Giả sử cần hiển thị chuỗi “AB”:
Chữ ‘A’: 7Eh, 09h, 09h, 09h, 7Eh
Chữ ‘B’: 7Fh, 49h,49h,49h, 36h
Giữa chữ A và B có một cột trống để phân biệt.
Æ Chuỗi “AB”: 7Eh, 09h, 09h, 09h, 7Eh, 00h, 7Fh, 49h,49h,49h, 36h
Có thể thêm khoảng trắng trước và sau chuỗi để chuỗi hiện ra từ từ
Æ Chuỗi “ AB ”: 00h, 00h, 00h, 00h, 00h, 7Eh, 09h, 09h, 09h, 7Eh, 00h,
7Fh, 49h,49h,49h, 36h,00h, 00h, 00h, 00h
Khai báo biến:
pa DB 00h, 00h, 00h, 00h, 00h
DB 7Eh, 09h, 09h, 09h, 7Eh, 00h
DB 7Fh, 49h, 49h, 49h, 36h, 00h
DB 00h, 00h, 00h
pb db 01h,02h,04h,08h,10h
Như vậy, một ký tự cần hiển thị
trên ma trận Led cần 6 byte và 5 byte 00h đầu
chuỗi, 3 byte 00h cuối chuỗi Æ một chuỗi dài 50 ký tự sẽ cần số byte lưu trữ cho
mã Led là: 50*6 + 5 + 3 = 308 byte.
Phòng thí nghiệm Vi xử lý Bài thí nghiệm Vi xử lý
Trang 36
- Hiển thị ký tự:
Lần 1: hiển thị từ pa[0] ÷ pa[4]
Lần 2: hiển thị từ pa[1] ÷ pa[5] Æ lần j: hiển thị từ pa[j] ÷ pa[j+5]
Lần 16: hiển thị từ pa[15] ÷ pa[19]
Pa
[
0
]
Pa
[
4
]
Lần 0
Pa
[
1
]
Pa
.model small
.stack 100h
.data
pa DB 00h, 00h, 00h, 00h, 00h
DB 7Eh, 09h, 09h, 09h, 7Eh, 00h
DB 7Fh, 49h, 49h, 49h, 36h, 00h
DB 00h, 00h, 00h
pb DB 01h,02h,04h,08h,10h
.code
main proc
mov ax,@data
mov ds,ax
mov dx,30Bh
mov al,88h
out dx,al ; Dinh cau hinh cho U9
start: mov ah,0Bh ; Kiem tra phim nhan
int 21h
cmp al,0FFh ; Neu co nhan phim thi ket thuc
je exit ; chuong trinh
mov si,0 ; Lan quet 0
quetled:
mov cx,15 ; Hien thi 1 lan can 15 lan quet
led:
call ledmatrix
loop led
cmp bx,5
jne cont
ret
ledmatrix endp
;
delay proc
push cx
mov cx,0FFFFh
loop $
pop cx
ret
delay endp
end main
- Viết chương trình để chuỗi chạy từ phải sang trái.
- Viết chương trình nhập một chuỗi từ bàn phím và cho chuỗi chạy tữ trái
sang phải. Gợi ý: tính toán tất cả các bảng mã cho các ký tự từ A Æ Z và
dùng hàm 0Ah nhập một chuỗi từ bàn phím.
3. Kiểm tra phím nhấn trên bàn phím
Nhập đoạn chương trình kiểm tra phím nhấn A trên bàn phím hex.
.model small
.stack 100h
.data
pa db 5 dup(0)
pb db 01h,02h,04h,08h,10h
mov pa[2],09h
mov pa[3],09h
mov pa[4],7Eh
call ledmatrix
jmp start - Viết chương trình kiểm tra 2 phím bất kỳ trên bàn phím hex (nằm trên 2 cột
khác nhau), nhấn một phím sẽ hiển thị một ký tự trên ma trận Led.
- Sửa đổi chương trình để ma trận Led luôn hiển thị ký tự mặc dù chỉ nhấn
phím 1 lần.
Sinh viên có thể tham khảo chương trình: C:\TNVXL\TASM\uPM303.ASM
Trong máy có sẵn 1 ch
ương trình ví dụ về ứng dụng LED ma trận làm quang
báo.
Chạy chương trình như sau :
C:\TNVXL\TASM\QUANGBAO.EXE ↵
Gõ vào 1 câu bất kỳ trên màn hình nó sẽ chạy ra trên ma trận Led.