2.3.5 Điều khiển nhiều led 7 thanh
2. Thực hành điều khiển các thiết bị vào ra
2.3 Điều khiển led 7 thanh
2.3.5 Cách điều khiển nhiều led 7 thanh
Trong phần này bài học sẽ hướng dẫn cách điều khiển nhiều led 7 thanh cùng lúc
Bước 1:
Xây dựng mạch điều khiển mô tả như hình 2.3.5. Trong ví dụ này, các chân P2.0 đến P2.7
điều khiển việc cấp nguồn cho các led 7 thanh. Các chân P0.0 đến P0.6 được nối với các chân
của led 7 thanh để điều khiển việc cấp đất cho các thanh led.
Hình 2.3.5 Sơ đồ nguyên lý điều khiển nhiều led 7 thanh
Bước 2:
Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình
Reads51)
Nội dung chương trình:
===============================================================
org 0h
start: mov P0,#11111001b;Số 1
clr P2.7 ;Led 1 hiển thị số 1
call delay ;Gọi trễ
setb P2.7 ;Tắt led 1
;
mov P0,#11011011b;Số 2
clr P2.6 ;Led 2 hiển thị số 2
call delay ;Gọi trễ
setb P2.6 ;Tắt led 2
;
mov P0,#10110000b;Số 3
clr P2.5 ;Led 3 hiển thị số 3
call delay ;Gọi trễ
setb P2.5 ;Tắt led 3
;
mov P0,#10011001b;Số 4
clr P2.4 ;Led 4 hiển thị số 4
call delay ;Gọi trễ
setb P2.4 ;Tắt led 4
;
mov P0,#10010010b;Số 5
clr P2.3 ;Led 5 hiển thị số 5
call delay ;Gọi trễ
setb P2.3 ;Tắt led 5
;
mov P0,#10000010b;Số 6
clr P2.2 ;Led 6 hiển thị sô 6
call delay ;Gọi trễ
setb P2.2 ;Tắt led 6
;
mov P0,#11111000b;Số 7
clr P2.1 ;Số 7 hiển thị số 7
call delay ;Gọi trễ
setb P2.1 ;Tắt led 7
;
mov P0,#10000000b;Số 8
clr P2.0 ;Led 8 hiển thị số 8
call delay ;Gọi trễ
setb P2.0 ;Tắt led 8
sjmp start ;Trở lại ban đầu
;=============================================
;subroutine delay created to rise delay time
;=============================================
delay: mov R1,#255
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
end
===============================================================
Bước 3:
Biên dịch chương trình trên bằng các chương trình biên dịch chuyên dụng cho vi điều khiển
như Reads51. Sau khi biên dịch, chươn trình sẽ tạo ra file mã máy mà vi điều khiển dựa vào đó
để hoạt động. Thông thường file đó sẽ có dạng tên_file.hex. Việc đặt tên file là do người dùng tự
đặt.
Bước 4
Nạp file mã máy mà chương trình biên dịch vừa tạo ra bằng các công cụ và mạch nạp như
trong trang web này hướng dẫn làm như: mạch nạp 89xxxx, mạch nạp 89Cxx, mạch nạp
89Sxxxx, mạch nạp 89Sxx và AVR
Sau khi nạp file mã máy vào vi điều khiển 89S51. Gắn vi điều khiển vào mạch ứng dụng, sẽ
thấy kết quả của bài học.
2. Thực hành điều khiển các thiết bị vào ra
2.3 Điều khiển led 7 thanh
2.3.2 Phối hợp nhiều thanh của led 7 thanh
Bước 1:
Xây dựng mạch điều khiển mô tả như hình 2.3.2. Trong ví dụ này, các chân P2.0 điều khiển
việc cấp nguồn cho led 7 thanh. Các chân P0.0 đến P0.6 được nối với các chân của led 7 thanh
để điều khiển việc cấp đất cho các thanh led. Trong phần này sẽ hướng dẫn cách phối hợp hiển
thị các thanh led của led 7 thanh
Hình 2.3.2 Sơ đồ nguyên lý điều khiển led 7 thanh
Bước 2:
Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình
Reads51)
Nội dung chương trình:
===============================================================
org 0h
start:
mov P0,#11111100b; Cấp 0V cho thanh led a và b
clr P2.0 ; Cấp 5V cho led 7 thanh
call delay ; Gọi hàm trễ
mov P0,#11011011b; Cấp 0V cho thanh led c,f
clr P2.0 ; Cấp 5V cho led
call delay ; Gọi hàm trễ
mov P0,#10110000b; Cấp 0V to a,b,c,d,g
clr P2.0 ; Cấp 5V cho led
call delay ; Gọi hàm trễ
sjmp start ; Trở về đầu chương trình
;=============================================
;subroutine delay created to rise delay time
;=============================================
delay: mov R1,#255
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
end
===============================================================
Bước 3:
Biên dịch chương trình trên bằng các chương trình biên dịch chuyên dụng cho vi điều khiển
như Reads51. Sau khi biên dịch, chươn trình sẽ tạo ra file mã máy mà vi điều khiển dựa vào đó
để hoạt động. Thông thường file đó sẽ có dạng tên_file.hex. Việc đặt tên file là do người dùng tự
đặt.
Bước 4
Nạp file mã máy mà chương trình biên dịch vừa tạo ra bằng các công cụ và mạch nạp như
trong trang web này hướng dẫn làm như: mạch nạp 89xxxx, mạch nạp 89Cxx, mạch nạp
89Sxxxx, mạch nạp 89Sxx và AVR
Sau khi nạp file mã máy vào vi điều khiển 89S51. Gắn vi điều khiển vào mạch ứng dụng, sẽ
thấy kết quả của bài học.
2.3.3 Điều khiển led 7 thanh hiển thị số
Thực hành mạch như phần 2.3.2, tuy nhiên hãy phối hợp các thanh led để led 7 thanh hiển thị
các chữ số 0,1,2,3,4,5,6,7,8,9. Việc này rất đơn giản. Chỉ việc thay đổi lại chương trình ở phần
2.3.2 (thay đổi lại lệnh mov P0,#xxxxxxxxb)
2.3.4 Điều khiển led 7 thanh hiển thị chữ
Thực hành mạch như phần 2.3.2, tuy nhiên hãy phối hợp các thanh led để led 7 thanh hiển thị
các chữ số a,b,c,d,e,f. Việc này rất đơn giản. Chỉ việc thay đổi lại chương trình ở phần 2.3.2
(thay đổi lại lệnh mov P0,#xxxxxxxxb)
Thực hành điều khiển các thiết bị vào ra
2.2 Giao tiếp công tắc
2.2.2 Điều khiển led chạy khi nhấn công tắc
Trong phần này, nội dung bài học là điều khiển led sáng dịch chuyển khi nhấn công tắc. Cụ
thể là led sáng sẽ chuyển động sang trái khi nhấn phím nối với chân P2.0 và chuyển động sang
phải khi nhấn phím nối với chân P2.1.
Bước 1:
Xây dựng mạch điều khiển mô tả như hình 2.2.2. Trong ví dụ này, các chân P2.0 đến chân
P2.7 của vi điều khiển được nối với phím bấm nháy và các chân P0.0 đến P0.7 được nối với Ka-
tốt của led. Nhiệm vụ là khi nhấn phím tại chân P2.0 thì led sáng chuyển động sang trái, nhấn
phím nối với chân P2.1 led sáng sẽ chuyển động sang phải.
Hình 2.2.2 Sơ đồ nguyên lý hoạt động giao tiếp với công tắc
Bước 2:
Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình
Reads51)
Nội dung chương trình:
===============================================================
org 0h
CekP20: JB P2.0,CekP21 ; kiểm tra P2.0
call RLeft ; gọi hàm điều khiển led -> trái
sjmp CekP20 ; trở về CekP20
CekP21: JB P2.1,CekP20 ; kiểm tra P2.1
call RRight ; gọi hàm điều khiển led -> trái
sjmp CekP20 ; trở về CekP2.0
;===============================================
;this subroutine is used to move LED to the left.
;================================================
RLeft: mov A,#11111110b;Khởi tạo cho led tại P0.0 sáng
RLeft1: mov P0,A ;P0.0 sáng
call delay ;gọi hàm trễ
JB P2.0,RLeft2 ;kiểm tra P2.0
sjmp EndRLeft ;không nhấn phím P2.0, kết thúc
RLeft2: RL A ; dịch thanh ghi A -> trái
sjmp RLeft1
EndRLeft:
ret
;
;=================================================
;this subroutine is used to move LED to the right.
;=================================================
RRight: mov A,#01111111b
RRight1:mov P0,A
call delay
JB P2.0,RRight2
sjmp EndRRight
RRight2:RL A
sjmp RRight1
EndRRight:
ret
;=============================================
;subroutine delay created to rise delay time
;=============================================
delay: mov R1,#255
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
end
===============================================================
Bước 3:
Biên dịch chương trình trên bằng các chương trình biên dịch chuyên dụng cho vi điều khiển
như Reads51. Sau khi biên dịch, chươn trình sẽ tạo ra file mã máy mà vi điều khiển dựa vào đó
để hoạt động. Thông thường file đó sẽ có dạng tên_file.hex. Việc đặt tên file là do người dùng tự
đặt.
Bước 4
Nạp file mã máy mà chương trình biên dịch vừa tạo ra bằng các công cụ và mạch nạp như
trong trang web này hướng dẫn làm như: mạch nạp 89xxxx, mạch nạp 89Cxx, mạch nạp
89Sxxxx, mạch nạp 89Sxx và AVR
Sau khi nạp file mã máy vào vi điều khiển 89S51. Gắn vi điều khiển vào mạch ứng dụng, sẽ
thấy kết quả của bài học.
Thực hành điều khiển các thiết bị vào ra
2.1 Điều khiển LED
2.1.3 Điều khiển bật tắt lần lượt các led
Phần trước đã giới thiệu cách điều khiển bật tắt nhiều led cùng lúc, phần này sẽ hướng dẫn
cách điều khiển bật tắt lần lượt các led (8 led).
Bước 1:
Thiết kế mạch ứng dụng cho vi điều khiển như hình 2.1.3. Trong đó các chân P0.0 đến P0.7
được nối với Ka-tốt của led.
Hình 2.1.3 Sơ đồ nguyên lý mạch điều khiển lần lượt các led
Bước 2:
Lập trình điều khiển Led theo ngôn ngữ lập trình Assembly (có thể dùng chương trình
Reads51)
Nội dung chương trình:
===============================================================
org 0h
start: mov P0,#11111110b; Bật led nối với P0.0
call delay ; Tạo trễ
mov P0,#11111101b; Bật led nối với P0.1
call delay ; Tạo trễ
mov P0,#11111011b; Bật led nối với P0.2
call delay ; Tạo trễ
mov P0,#11110111b; Bật led nối với P0.3
call delay ; Tạo trễ
mov P0,#11101111b; Bật led nối với P0.4
call delay ; Tạo trễ
mov P0,#11011111b; Bật led nối với P0.5
call delay ; Tạo trễ
mov P0,#10111111b; Bật led nối với P0.6
call delay ; Tạo trễ
mov P0,#01111111b; Bật led nối với P3.7
call delay ; Tạo trễ
sjmp start ; loooooop forever to start
;=============================================
;subroutine delay created to rise delay time
;=============================================
delay: mov R1,#255
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
end
===============================================================
Bước 3:
Biên dịch chương trình trên bằng các chương trình biên dịch chuyên dụng cho vi điều khiển
như Reads51. Sau khi biên dịch, chươn trình sẽ tạo ra file mã máy mà vi điều khiển dựa vào đó
để hoạt động. Thông thường file đó sẽ có dạng tên_file.hex. Việc đặt tên file là do người dùng tự
đặt.
Bước 4
Nạp file mã máy mà chương trình biên dịch vừa tạo ra bằng các công cụ và mạch nạp như
trong trang web này hướng dẫn làm như: mạch nạp 89xxxx, mạch nạp 89Cxx, mạch nạp
89Sxxxx, mạch nạp 89Sxx và AVR
Sau khi nạp file mã máy vào vi điều khiển 89S51. Gắn vi điều khiển vào mạch ứng dụng, sẽ
thấy kết quả của bài học.