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

Công tắc nhấn và ma trận phím

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 (179.2 KB, 10 trang )

Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-1
BÀI 4:
LẬP TRÌNH ðIỀU KHIỂN PHÍM ðƠN – MA TRẬN PHÍM




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.
1. Công tắc
ñơn

Các phím ñơn dùng ñể ñiều khiển khi hệ thống không ñòi hỏi nhiều giá
trị nhập (chẳng
hạn như chỉ cần các ñiều khiển ñóng mở thiết bị). Khi thực hiện kiểm tra phím nhấn,
vấn ñề cần thiết là phải thực hiện chống dội. Quá trình chống dội có thể thực hiện
bằng phần mềm: Do thời gian dội của phím vào khoảng
20ms
nên quá trình chống
dội bằng phần mềm ñơn giản là tạo một thời gian trễ ñủ lớn ñể chương trình bỏ qua
ảnh hưởng khi dội.
Khi thực hiện giao tiếp giữa công tắc ñơn và vi ñiều khiển MCS-51 thì cần lưu ý phải
set bit tương ứng của vi ñiều khiển lên mức logic 1 mới có thể ñọc dữ liệu vào. Phần
cứng giao tiếp có thể mô tả như hình vẽ, tuy nhiên ñối với họ MCS-51, các port


ñã có ñiện trở kéo lên nguồn (trừ port 0) nên ñối với sơ ñồ hình a và c có thể không
cần ñiện trở R.

2.

Bàn phím Hex

Khi không nhấn phím thì hàng của bàn phím Hex nối với Vcc thông qua ñiện trở
R nên có mức logic 1. ðể phân biệt ñược trạng thái của phím nhấn thì mức logic
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-2
khi nhấn phím phải là mức logic 0. Mà khi nhấn một phím nào ñó
thì t
ươ
ng

ng hàng
và c

t c

a bàn phím Hex s

k
ế
t n

i v

i nhau. Do

ñ
ó,
ñể
thực hiện kiểm tra một
phím thì ta phải cho trước cột chứa phím tương ứng ở mức logic 0, sau ñó kiểm
tra hàng của phím, nếu hàng = 0 thì có nhấn phím còn hàng = 1 thì không nhấn
phím.
Ví dụ như muốn kiểm tra phím 4 thì ta cho cột chứa phím 4 ở mức logic 0 (chân 5
của J1, các cột khác = 1, nghĩa là dữ liệu tại J1 là 1000xxxxb), sau ñó thực hiện
kiểm tra chân 2 của J1 (hàng của phím 4), nếu chân này = 0 thì phím 4 ñược nhấn.

III. Nội dung thực hành
Thiết bị thực hành
:
-

Bộ thí nghiệm ET-LAB3A MCS51 (board thí nghiệm, bộ nguồn và 3 dây bus
ñể kết nối các port của vi ñiều khiển với module Ma trận phím, Module Led-
Led 7 ñoạn.
-

Một máy tính ñể soạn chương trình, biên dịch và nạp chương trình xuống board
thí nghiệm;
1. Nội dung thực hành 1:
Viết chương trình nhận 2 phím SW1 và SW2. Nếu SW ñược ấn thì tăng nôi dung của
ô nhớ có ñịa chỉ là 40H lên 1, ngược lại nếu ấn SW2 thì giảm nôi dung của ô nhớ 40H
xuống 1. Giả sử nội dung của ô nhơ có giá tri ban ñầu là 0
a. Chương trình mẫu gợi ý
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-3

ORG 0000H
LJMP MAIN
MAIN:
SETB P3.2 ; set p3.2 là ngõ vào của SW1
SETB P3.3 ; set p3.3 là ngõ vào của SW2
MOV 40H,#0 ; cho nội dung ô nhớ tại 40H có giá tri ban ñầu bằng 0
JMP HIENTHI
BEGIN:
JNB P3.2,SW1 ; Nếu P3.2 = 0 thì nhấn SW1
JNB P3.3,SW2 ; Nếu P3.3 = 0 thì nhấn SW2
JMP BEGIN
SW1:
INC 40H ; Tăng ô nhớ 40h
MOV A,40H
CJNE A,#100,HIENTHI ; Nếu giá trị ô nhớ 40h = 100
MOV 40H,#0 ; thì gán 40h = 0
JMP HIENTHI ; Hiển thị ra Led 7 ñoạn
;
SW2:
DEC 40H ; Giảm ô nhớ 30h
MOV A,40H
CJNE A,#255, HIENTHI ; Nếu giá trị giảm = -1 (255)
MOV 40H,#99 ; thì gán 40h = 99
JMP HIENTHI
;
HIENTHI:
MOV A,40H
MOV B,#10
DIV AB
MOV DPTR,#Maled7

MOVC A,@A+DPTR
MOV P1,A ; xuất hàng chục
MOV P0, #01H ; chọn led 7s thứ 2
CALL DELAY
MOV A,B
MOV DPTR,#Maled7
MOVC A,@A+DPTR
MOV P1,A ; xuất hàng ñơn vị
MOV P0, #00H ; chọn led 7s thứ 1
CALL DELAY

JMP BEGIN
Maled7: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-4
;
DELAY:
PUSH 07
PUSH 06
MOV R6,#100
DELAY1:
MOV R7,#255
DJNZ R7,$
DJNZ R6,Delay1
POP 06
POP 07
RET

END
b. Yêu cầu

- Thực thi chương trình trên và quan sát kết quả.
- Thay ñổi tần số quét hợp lý trên chương trình con Delay ñể quan sát kết quả.
- Ấn vào các SWx, xem kết quả hiển thị trên Led 7 ñoạn và cho nhận xét.
- Khi giá trị hiển thi trên Led 7 ñoạn là số 00. Ấn SW2 rồi quan sát trên Led 7
ñoạn kết quả hiển thị là bao nhiêu ?. Tại sao không hiển thị ñược số âm ? Cho
biết ñoạn lệnh nào giải quyết vấn ñề này ?
- Vẽ lưu ñồ chương trình trên. Mô tả các công việc thực hiện khi thực thi chương
trình.
- Hãy giải thích lệnh ñoạn lệnh:
DEC 40H ; Giảm ô nhớ 30h
MOV A,40H
CJNE A,#255,HIENTHI
- Khi SW1 và SW2 tác ñộng ngõ ra của các SWx này có mức logic là bao nhiêu ?
- Thử bỏ hai lệnh SETB P3.2 và SETB P3.3 trong chương trình. Thi hành lại
chương trình ñể kiểm chứng kết quả. Chúng có ảnh hưởng ñến kết quả của
chương trình không ?. Hãy giải thích tại sao ?. Có thể thay hai lệnh này thành
một lệnh nào khác ñược không ? Nếu có hãy viết lệnh ñó ra.
- Hãy tìm và thay thế một lệnh hay một số lênh nào ñó trong chương trình sao
cho khi chạy chương trình, giá trị hiển thị lên led 7 ñoạn (khi chưa có phím nào
ñược ấn) là số 33.
- Hãy viết chương trình theo một hướng khác mà vẫn giải quyết ñược ” Viết
chương trình nhận 2 phím SW1 và SW2. Nếu SW ñược ấn thì tăng nôi dung
của ô nhớ có ñịa chỉ là 40H lên 1, ngược lại nếu ấn SW2 thì giảm nôi dung của
ô nhớ 40H xuống 1. Giả sử nội dung của ô nhớ có giá tri ban ñầu là 0”.

Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-5
2. Nội dung thực hành 2
Viết chương trình ñơn giản ñể hiển thị mã của bàn phím lên LED 7 ñoạn khi có một
SW từ bàn phím ma trận ñược ấn. Giả sử bàn phím ma trận kết nối có dạng như hình

bên dưới

a. Chương trình mẫu gợi ý
ORG 0000H
LJMP MAIN
MAIN:
MOV P3,#0FEH ; Chọn cột chứa
JNB P3.4,SW7 ;các phím 7,8,9,÷
JNB P3.5,SW8
JNB P3.6,SW9
JNB P3.7,SWCHIA
MOV P3,#0FDH ; Chọn cột chứa
JNB P3.4,SW4 ;các phím 4,5,6,X
JNB P3.5,SW5
JNB P3.6,SW6
JNB P3.7,SWNHAN
MOV P3,#0FBH ; Chọn cột chứa
JNB P3.4,SW1 ; các phím 1,2,3,-
JNB P3.5,SW2
JNB P3.6,SW3
JNB P3.7,SWTRU
MOV P3,#0F7H ; Chọn cột chứa
JNB P3.4,SWON; các phím ON/C,0,=,+
JNB P3.5,SW0
JNB P3.6,SWBANG
JNB P3.7,SWCONG
JMP Main
;
SW0:
MOV 30H,#0

Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-6
JMP HIENTHI
;
SW1:
MOV 30H,#1
JMP HIENTHI
;
SW2:
MOV 30H,#2
JMP HIENTHI
;
SW3:
MOV 30H,#3
JMP Hienthi
;
SW4:
MOV 30H,#4
JMP Hienthi
;
SW5:
MOV 30H,#5
JMP Hienthi
;
SW6:
MOV 30H,#6
JMP Hienthi
;
SW7:
MOV 30H,#7

JMP Hienthi
;
SW8:
MOV 30H,#8
JMP Hienthi
;
SW9:
MOV 30H,#9
JMP Hienthi
;
SWON:
MOV 30H,#10
JMP Hienthi
;
SWBANG:
MOV 30H,#11
JMP HIENTHI
;
SWCONG:
MOV 30H,#12
JMP HIENTHI
;
SWTRU:
MOV 30H,#13
JMP HIENTHI
;
SWNHAN:
MOV 30H,#14
JMP HIENTHI
;

SWCHIA:
MOV 30H,#15
JMP Hienthi
;
HIENTHI:
MOV A,30H
MOV B,#10
DIV AB
MOV DPTR,#MALED7
MOVC A,@A+DPTR
MOV P1,A
MOV P0, #01H ; xuat hang chuc
MOV A,B
MOV DPTR,#MALED7
MOVC A,@A+DPTR
MOV P1,A
MOV P0, #00H; xuat hang don vi
CALL DELAY
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-7
LJMP MAIN
Maled7: DB 3FH, 06H, 5BH, 4FH, 66H,
6DH, 7DH, 07H, 7FH, 67H
;
DELAY:
PUSH 07
PUSH 06
MOV R6,#100
DELAY1:
MOV R7,#255

DJNZ R7,$
DJNZ R6, DELAY1
POP 06
POP 07
RET
END

b. Yêu cầu
- Thực thi chương trình và quan sát kết quả, có nhận xét gì về kết quả ?
- Hãy sửa lại chương trình mẫu trên sau cho phù hợp với bàn phím ma trận ñã
thiết kế cho board ET-LAB3A.

Chú ý khi kết nối bàn phím ma trận 3 cột x 4 hàng với PORT của Vi ñiều khiển
thì Px.0, Px.1 và P.2 sẽ tương ứng cho cột; Px.4, Px.5, Px.6 và Px.7 sẽ tương ứng
cho các hàng.
- Chúng ta có thể ñịnh nghĩa lại mã của bàn phím ñược hay không ? Nếu có
thể hãy sửa lại chương trình ñể kiểm chứng sự thay ñổi này. Cho thực thi
chương trình kiểm tra kết quả.
- Hãy viết lại chương trình theo hướng khác nhưng vẫn giải quyết ñược bài
toán nêu trên nội dung thực tập 2.
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-8
- Nhấn phím +: thực hiện cộng nội dung ô nhớ 30h với 20 và xuất ra 2 Led 7
ñoạn.
- Nhấn phím -: thực hiện trừ nội dung ô nhớ 30h với 1 và xuất ra 2 Led 7
ñoạn.
- Nhấn phím x: thực hiện nhân nội dung ô nhớ 30h với 3 và xuất ra 2 Led 7
ñoạn.
- Nhấn phím ÷: thực hiện chia nội dung ô nhớ 30h với 2 và xuất kết quả ra 2
Led 7 ñoạn.

- Nhấn phím ON/C: thực hiện xoá nội dung ô nhớ 30h (gán bằng 0) và xuất ra
2 Led 7 ñoạn
3. Nội dung thực hành 3
Viết chương trình giao tiếp với bàn phím HEX có dạng như hình trên. Khi phím ñược
ấn thì sẽ hiển thị mã của bàn phím hex ra Led 7 ñoạn.
Chú ý khi kết nối bàn phím ma trận 3 cột x 4 hàng với PORT của Vi ñiều khiển
thì Px.0, Px.1 và P.2 sẽ tương ứng cho cột; Px.4, Px.5, Px.6 và Px.7 sẽ tương ứng
cho các hàng

a. Chương trình mẫu gợi ý.
; Chương trình hiển thị phím nhấn ra LED 7 ñoạn
; Bàn phím Hex ñược kết nối với Port3
; Dữ liệu xuất ra LED 7 ñoạn là Port0
; Chọn Led hiển thị Port1
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-9
ORG 0000H
LJMP MAIN
MAIN:
LCALL READKB
MOV DPTR, #T7SEG
MOV A, @A+DPTR
MOV P0, A ; xuất mã của phím ñược ấn ra Led
MOV P1, #00H ; xuất ra Led 7 ñoạn thứ 1
JMP MAIN
READKB:
PUSH 07H
SCAN: MOV A, #11111110B ; hay giá trị 0Feh -> Colum_0 nối GND
CONTI: MOV R7, #0 ; R7=i
MOV P3, A ; nối colum_i với GND

MOV A, P3 ; ñọc row
JNB ACC.4, ROW_0 ; xét xem row nào ñược ấn ?
JNB ACC.5, ROW_1
JNB ACC.6, ROW_2
JNB ACC.7, ROW_3
RL A ; chuẩn bị nối GND
INC R7 ; cột tiếp theo ñược chọn
CJNE R7, #4, CONTI ; lần lượt nối GNd 4 cột
JMP SCAN ; quay lại quét từ cột 0
ROW_0:
MOV A, R7 ; row=0, colum=R7
ADD A, #0 ; A=0+R7
JMP EXIT
ROW_1:
MOV A, R7 ; row=1, colum=R7
ADD A, #4 ; A=4+R7
JMP EXIT
ROW_2:
Bài 4: Công tắc nhấn và Ma trận phím
Trang IV-10
MOV A, R7 ; row=2, colum=R7
ADD A, #8 ; A=8+R7
JMP EXIT
ROW_3:
MOV A, R7 ; row=2, colum=R7
ADD A, #12 ; A=12+R7
EXIT: POP R7
RET
T7SEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H, 77H, 39H, 79H,
DB: 71H, 70H, 76H

END
b. Yêu cầu
- Cho chạy chương trình ñể kiểm tra và cho nhận xét.
- Nếu kết quả chưa ñúng hết tất cả các trường hợp theo yêu cầu, hãy thay ñổi
chương trình sao cho có kết quả chính xác với bàn phím hex ñược thiết kế trên
ET-LAB3A
- Có so sánh gì giữa cách viết chương trình yêu cầu trong nội dung thực hành 2
và nội dung thực hành 3. Hãy cho biết ưu ñiểm và nhược ñiểm của hai cách
viết này.
- Sửa lại chương trình theo một hướng khác nhưng vẫn giải quyết ñược bài toán
nêu trên nội dung thực tập 3.
IV. Bài tập yêu cầu
1. Viết chương trình cho nhập 4 số trên bàn phím và hiển thị các số ñã nhập ra Led
7 ñoạn. Chú ý khi chưa có phím nào ñược nhập thì trên Led 7 ñoạn hiển thi số
0000.
2. Viết chương trình cho phép ñặt trước giá trị của số ñếm gồm có 4 chữ số. Sau
khi ñã nhập ñử 4 số thì chương trình sẽ ñếm từ giá trị ñặt ñến 9999 và xoá về
0000.
3. Viết chương trình cho phép ñặt trước giá trị của số ñếm gồm có 4 chữ số. Sau
khi ñã nhập ñử 4 số thì chương trình sẽ ñếm từ giá trị ñặt ñến 0000.



Hết

×