Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 3: Lập trình điều khiển LED đơn - LED 7 đoạn
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ả.
7 ñoạn Trang III-7 Sửa lại chương trình sao cho có thể hiển thị các số khác trong bảng mã HEX như số 0 hoặc 1 hoặc 2….tại LED 7 ñoạn có vị trí thứ 1 hoặc thứ 2 hoặc 3 trong dãy 4 LED 7 ñoạn. 4. Nội dung thực hành 2 Viết chương trình hiển thị ra LED thứ 1 của dãy 4 LED 7 ñoạn các số từ 0 ñến 9. Thời gian hiển thị các số là 1 giây. a. Mục ñích, yêu cầu cần ñạt ñược. Nắm ñược các lệnh truy xuất PORT, truy xuất dữ liệu từ một vùng nhớ ñịnh sẵn Nắm ñược kỹ thuật viết một vòng lặp, hiểu rõ hoạt ñộng của vòng lặp. Hiểu rõ hoạt ñộng của chương trình delay. b. Giải pháp. PORT 1: PORT dữ liệu. PORT 3: PORT ñiều khiển ñể chọn led7doan mong muốn. Các vị trí này là tuỳ chọn trong dãy 4 Led 7 ñoạn Các thông tin về các chữ số hiển thị trên led7doan phải ñược lưu sẵn trong một vùng nhớ dành riêng (TABLE) ñể chứa các bảng mã HEX của LED 7 ñoạn loại Cathode chung với cạnh a là MSB. Sử dụng thanh ghi con trỏ dữ liệu DPTR ñể quản lý vùng nhớ nầy. Sử dụng thanh ghi R1 ñể quản lý việc chọn led7doan. c. Chương trình mẫu gợi ý ORG 0000H ; XUAT GIA TRI NHI PHAN TU 0->9 RA PORT 0 JMP MAIN MAIN: MOV SP, #256-32 ; khoi dong Stack 32 byte MOV DPTR, #LED7S ; NAP DIA CHI CUA BANG MA HEX MOV A, #0 MOV P3, #00H ; Chọn led7seg thứ 1 ñể hiển thị LAP: PUSH ACC ; cất nội dung trong A vào stack -> số thứ tự hay ñộ dời MOVC A, @A+DPTR ;Nội dung của A=[A+DPTR]=[ ñộ dời+ñịa chỉ nền] MOV P1, A ; Xuất nội dung A ra P1 CALL DELAY_1S POP ACC ; lấy nội dung là ñộ dời trong ngăn sếp ñưa vào A INC A ; tăng vị trí hay ñộ dời trong bảng LED7S CJNE A, #10, LAP ; Nếu A chưa =10 thì quay lại ñể thực hiện Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-8 DELAY_1S: MOV R1, #20 L1: MOV R2, #200 L2: MOV R3, #255 L3: DJNZ R3, L3 DJNZ R2, L2 DJNZ R1, L1 RET LED7S: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H END d. Yêu cầu Chạy chương trình ñể kiểm tra. Lệnh PUSH và POP có ý nghĩa như thế nào trong chương trình. Nếu không có nó thì chương trình như thế nào ? Giải thích ? Sửa lại chương trình theo cách khác ñể thực hiện công việc trên (không dùng lệnh PUSH và POP nữa) Sửa lại chương trình sao cho có thể hiển thị các số hex từ 0 ñến F 5. Nội dung thực hành 3. Viết chương trình hợp ngữ ñể ñiều khiển 4 led7doan hiển thị một số gồm 4 chữ số, ví dụ: hiển thị chữ số “0123”. a. Mục ñích, yêu cầu cần ñạt ñược. Nắm ñược các lệnh truy xuất PORT, truy xuất dữ liệu từ một vùng nhớ ñịnh sẵn Nắm ñược kỹ thuật viết một vòng lặp, hiểu rõ hoạt ñộng của vòng lặp. Hiểu rõ hoạt ñộng của chương trình delay. Hiểu rõ kỹ thuật ñiều khiển hiển thị các chữ số theo phương pháp quét hình. b. Giải thuật. Cho hiển thị chữ số mong muốn trên từng led7doan. Chữ số hàng nghìn sẽ ñược hiển thị trên led7doan thứ nhất, chữ số hàng trăm trên led7doan thứ hai, chữ số hàng chục trên Led7doan thứ ba, và chữ số hàng ñơn vị sẽ ñược hiển thị trên led7doan thứ tư. Mỗi thời ñiểm chỉ có duy nhất một led7doan ñược hiển thị chữ số. Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-9 Lặp lại quá trình này nhiều lần trong một giây (khoảng 18 – 30 lần) ñể kích thích võng mạc mắt lưu hình ảnh về các chữ số. c. Giải pháp. PORT 0: PORT dữ liệu. PORT 1: PORT ñiều khiển ñể chọn led7doan mong muốn. Các thông tin về các chữ số hiển thị trên led7doan phải ñược lưu sẵn trong một vùng nhớ dành riêng (TABLE). Sử dụng thanh ghi con trỏ dữ liệu DPTR ñể quản lý vùng nhớ nầy. Sử dụng thanh ghi R1 ñể quản lý việc chọn led7doan. d. Lưu ñồ chương trình. Bắt ñầu Y N DPTR ð/chỉ chữ số ñầu tiên Khởi ñộng Stack 32 Bytes Thiết lập thanh ghi R2 ← 5 R1 ← 0 Xuất PORT P0 ← 00H P1 ← R1 DELAY A ← 0 Lấy dữ liệu A Error! Not a valid link. Xuất PORT P0 ← A P1 ← R1 DELAY DPTR ← DPTR+1 R1 ← R1 + 1 R2 = R2 – 1 = 0 ? Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-10 e. Chương trình Cách 1: Chương trình gợi ý ORG 0000H ; hiển thị ra các số “0123” JMP MAIN MAIN: MOV SP, #256-32 ; khoi dong Stack 32 byte MOV P1, #0FFH ; tắt tất cả các LED BEGIN: ; hiển thị các số MOV P0,#4FH ; xuất mã của số 3 MOV P1, #03H ; xuất ra led 7 ñoạn thứ 4 CALL DELAY_XS MOV P0,#5BH ; xuất mã của số 2 MOV P1, #02H ; xuất ra led 7 ñoạn thứ 3 CALL DELAY_XS MOV P0,#06H ; xuất mã của số 1 MOV P1, #01H ; xuất ra led 7 ñoạn thứ 2 CALL DELAY_XS MOV P0,#3FH ; xuất ra mã của số 0 MOV P1, #00H ; xuất ra led 7 ñoạn thứ 1 CALL DELAY_XS JMP BEGIN DELAY_XS: MOV R1, #10 MOV R3, #255 L3: DJNZ R3, $ DJNZ R1, L3 RET END Thực thi chương trình và quan sát kết quả. Hãy thay ñổi thời gian quét ñể sao cho quan sát ñược kết quả tốt nhất. Từ ñó có rút ra kết luận gì ? Thực thi chương trình ñể kiểm tra sự thay ñổi này. Cách 2: Chương trình gợi ý ORG 0000H ; ; hiển thị ra các số “0123” LJMP MAIN MAIN: MOV SP, #256-32 ; khởi ñộng Stack 32 byte Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-11 CLR EA ; cấm tất cả ngắt LOOP1: MOV DPTR, #TABLE ; DPTR giữ ñịa chỉ chữ số hiển thị 1 MOV R2, #5 ; số lần lặp cho LOOP MOV R1, #0 ; LOOP: MOV P0, #00H ; xóa tất cả led7doan MOV P1, R1 ; CALL DELAY ; delay CLR A ; MOVC A, @A+DPTR ; lấy dữ liệu chữ số hiển thị từ TABLE MOV P0, A ; hiển thị chữ số trên led7doan thứ (R1+1) MOV P1, R1 CALL DELAY ; delay INC DPTR ; lấy ñịa chỉ chữ số sẽ hiển thị tiếp theo INC R1 ; chọn led7doan sẽ tiếp theo DJNZ R2, LOOP ; R2 = R2 – 1 = 0 ??? LJMP LOOP1 DELAY: PUSH DPH PUSH DPL PUSH ACC MOV DPTR, #0FFF0H DEL: INC DPTR MOV A, DPL ORL A, DPH JNZ DEL POP ACC POP DPL POP DPH RET ;********************************************* TABLE: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H END Thực thi chương trình và quan sát kết quả. Hãy thay ñổi thời gian quét sao cho nhìn thấy kết quả tốt nhất. Từ ñó có rút ra kết luận gì ?. Chương trình sao cho có thể hiển thị các số ñếm từ 00 ñến 99. Hãy cho chạy ñoạn chương trình bên dưới. Sinh viên hãy thay ñổi chương trình Delay ñể quét led sao cho dễ nhìn thấy nhất. ORG 0000H ; hiển thị từ 00-99 LJMP MAIN MAIN: MOV SP, #256-32 ; khởi ñộng Stack 32 byte MOV P1, #0FFH ; tắt tất cả các LED MOV 40H,#0 ; Ô nhớ 40h chứa giá trị xuất ra Led, bây giờ là 00H LAP: MOV A,40H Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-12 MOV B,#10 ; A chứa số hàng chục, B, chứa số DIV AB ; hàng ñơn vị MOV DPTR,#LED7S MOVC A,@A+DPTR ; Chuyển sang mã Led 7 ñoạn MOV P0,A MOV P1,#01H ; xuất ra hàng chục CALL DELAY MOV A,B MOVC A,@A+DPTR MOV P0,A MOV P1, #00H ; Xuất số hàng ñơn vị CALL DELAY INC 40H ; Tăng ô nhớ 40h MOV A,40H CJNE A,#100,LAP ; Nếu giá trị ô nhớ ñả tăng ñến 100 JMP MAIN ; thì giảm về 0 DELAY: PUSH 07 PUSH 06 MOV R6,#255 Delay1: MOV R7,#255 DJNZ R7,$ DJNZ R6,DELAY1 POP 06 POP 07 RET LED7S: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H END Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 99 ñến 00 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 00 ñến 59 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 00 ñến 23 Sửa ñổi chương trình sao cho có thể hiển thị các số ñếm từ 0000 ñến 9999 6. Nội dung thực hành 4 Viết chương trình ñếm số lần tác ñộng của ngõ vào sau ñó hiển thị số ñếm ñược LED 7 ñoạn có 3 chữ số. a. Mục ñích, yêu cầu cần ñạt ñược. Dùng Px.2 (hoặc Px.3) làm Button ñể tạo ra xung tín hiệu ngã vào. Khi Px.2 (hoặc Px.3) dùng làm ngã vào thì phải SETB Px.2 và khi ñó xung tác ñộng sẽ có cạnh xuống hay nói cách khác là khi ấn button thì tín hiệu ñưa vào Px.2 sẽ có mức logic 0. Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-13 b. Giải pháp. PORT 1: PORT dữ liệu. PORT 0: PORT ñiều khiển ñể chọn led7doan mong muốn. Các vị trí này là tuỳ chọn trong dãy 4 Led 7 ñoạn Các thông tin về các chữ số hiển thị trên led7doan phải ñược lưu sẵn trong một vùng nhớ dành riêng (TABLE) ñể chứa các bảng mã HEX của LED 7 ñoạn loại Cathode chung với cạnh a là MSB. Sử dụng thanh ghi con trỏ dữ liệu DPTR ñể quản lý vùng nhớ nầy. c. Chương trình mẫu gợi ý. ; P3.2 -> BUTTON ; ô nhớ 40H chứa hàng ñơn vị ; ô nhớ 41H chứa hàng chục ; ô nhớ 42H chứa hàng ñơn trăm SW1 BIT P3.2 ; SWITCH ẤN ðƠN ORG 0000H ; hiển thị ra các số “0123” JMP MAIN MAIN: MOV SP, #256-32 ; khoi dong Stack 32 byte MOV P0, #0FFH ; xoá tất cả các LED MOV A, #00H LAP: JNB P3.2, BEGIN ; khi SW1 ñược ấn JMP LAP BEGIN: INC A CALL BIN2BCD ; tra bảng, ñổi BCD -> Led 7 ñoạn MOV A, 40H ; hàng ñơn vi MOV A, @A+DPTR MOV 40H, A ; cất nội dung của A vào 40h MOV A, 41H ; hàng chục MOV A, @A+DPTR MOV 41H, A ; cất nội dung của A vào 41h MOV A, 42H ; hàng trăm MOV A, @A+DPTR MOV 42H, A ; cất nội dung của A vào 42h CALL DISPLAY Bài 3: ðiều khiển LED ñơn – LED 7 ñoạn Trang III-14 JMP BEGIN DISPLAY: MOV P1, 40H; xuất hàng ñơn vị ra MOV P0, #00H CALL DELAY_XS MOV P1, 41H; xuất hàng chục ra MOV P0, #01H CALL DELAY_XS MOV P1, 41H; xuất hàng trăm ra MOV P0, #02H CALL DELAY_XS RET BIN2BCD: MOV B, #10 DIV AB MOV 40H, B MOV B, #10 DIV AB MOV 41H, B MOV 42, A RET JMP BEGIN DELAY_XS: PUSH 07H PUSH 06H MOV R1, #10 MOV R3, #255 L1: DJNZ R3, $ DJNZ R1, L3 POP 06H POP 07H RET TABLE: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 67H END d. Yêu cầu Chạy chương trình và quan sát kết quả. Giải thích giải thuật các chương trình con DISPLAY, BIN2BCD. Có nhận xét gì về cách sử dụng này ? Hãy giải thích ñoạn lệnh bên dưới có trong chương trình LAP: JNB P3.2, BEGIN ; khi SW1 ñược ấn JMP LAP Sửa lại chương trình sao cho khi ấn SW1 thì ñếm tăng lên 1 ñơn vị còn khi aand SW2 thì giảm xuống 1 ñơn vị. Sử dụng SW2 có ñịa chỉ bít là P3.3 -----------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 3 Lập trình điều khiển LED đơn - LED 7 đoạn.pdf