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ả.
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:
- 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.pdf