Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 4: Lập trình điều khiển phím đơn - Ma trận phí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ả.

pdf10 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 2123 | Lượt tải: 3download
Tóm tắt nội dung Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 4: Lập trình điều khiển phím đơn - Ma trận phím, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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----------- 

File đính kèm:

  • pdfTài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 4 Lập trình điều khiển phím đơn - Ma trận phím.pdf