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

pdf14 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 2341 | Lượt tải: 4download
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 3: Lập trình điều khiển LED đơn - LED 7 đoạn, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 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:

  • pdfTà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