1. Trang chủ
  2. » Công Nghệ Thông Tin

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

10 332 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 179,2 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 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

Trang 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 ý

Trang 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

Trang 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”

Trang 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:

Trang 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

Trang 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

Trang 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

Trang 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:

Trang 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 -

Ngày đăng: 23/10/2014, 12:37

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w