Bài 5: Lập trình 8051 ghép nối với các bộ chỉ thị
2. Lập trình ghép nối Led 7 đoạn
2.1. Giới thiệu về phương pháp hiển thị dữ liệu trên Led 7 đoạn theo phương pháp quét
Có nhiều linh kiện làm nhiệm vụ hiển thị như LCD, led đơn, led 7 đoạn v.v. Led 7 đoạn đang được sử dụng phổ biến do hiển thị hiệu quả số đếm, một số ký tự, chữ cái và có tuổi thọ cao, giá thành thấp.
Để cho VĐK hiển thị dữ liệu trên led 7 đoạn ta có nhiều phương pháp và sơ đồ khác nhau (tuỳ vào số lượng led, kích thước led, loại led Anode chung hay Cathode chung...).
Phương pháp quét led sử dụng hiện tượng lưu ảnh và độ nhạy kém của mắt. ở phương pháp này tại một thời điểm chỉ có một led sáng. Thời gian mỗi led sáng khoảng từ 50 đến 100uS. Phương pháp này hiệu quả với số lượng led không quá
lớn. Sơ đồ giao tiếp VĐK 8051 với 2 led 7 đoạn theo phương pháp quét.
Các đoạn tương ứng của các led lần lượt nối với nhau. Hai transistor PNP làm nhiệm vụ cấp nguồn cho LED. Như vậy dữ liệu đưa ra các đoạn và tín hiệu quét led đều tích cực mức thấp.
Ta lập được bảng trạng thái sau:
thËp Sè ph©n
Mã 7 đoạn ( dạng nhị phân ) Mã 7 đoạn (dạng hexa) h g f e d c b a
0 1 1 0 0 0 0 0 0 0C0H
1 1 1 1 1 1 0 0 1 0F9H
2 1 0 1 0 0 1 0 0 0A4H
3 1 0 1 1 0 0 0 0 0B0H
4 1 0 0 1 1 0 0 1 99H
5 1 0 0 1 0 0 1 0 92H
6 1 0 0 0 0 0 1 0 82H
7 1 1 1 1 1 0 0 0 0F8h
8 1 0 0 0 0 0 0 0 80H
9 1 0 0 1 0 0 0 0 90H
p0.0 = a a
p0.6 = g g
8051
p2.1 p2.0
+Vcc
Port0
Port2
L1 L2
Để định nghĩa mã 7 đoạn trong ROM trong của VĐK, ta sử dụng chỉ dẫn DB để
định nghĩa các byte mã 7 đoạn lưu trong bộ nhớ ROM của VĐK và thường để cuối của chương trình.
Ví dụ: khai báo đoạn mã led 7 đoạn
Ma_7doan: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H Giải mã led 7 đoạn là quá trình chuyển số thập phân cần hiển thị sang mã led 7
đoạn trước khi đưa ra led 7 đoạn. Ta thường sử dụng lệnh MOVC A,@A+DPTR hoặc MOVC A, @A+PC để giải mã. Với DPTR chứa địa chỉ đầu tiên của bảng mã ( mov dptr,#ma_7doan), A chứa số thập phân cần chuyển mã.
Ví dụ 1: Viết chương trình cho VĐK họ 8051 hiển thị giá trị số từ 00-90 trên 2 led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quét led.
Phân tích yêu cầu:
Để chỉ thị được số đếm 0-90 ta sẽ phải sử dụng 2 led 7 đoạn. Có thể sử dụng led anode chung hoặc cathode chung, trong ví dụ này ta sử dụng led 7 đoạn có anode chung. Sử dụng transistor thuận để điều khiển chọn led 7 đoạn. Trước khi đưa ra hiển thị, số đếm đó cần được tách ra thành hàng chục và hàng đơn vị bằng phép chia ( DIV) sau đó phải được chuyển sang mã 7 đoạn.
Bước 1: Vẽ sơ đồ nguyên lý.
p0.0 = a
p0.6 = g
8051
p2.1 p2.0 + 5V
VĐK chọn: AT89C51
Led 7 đoạn: loại Anode chung
Các transistor chon: PNP (ở đây ta nên thay bằng cổng NOT để chương trình mô
phỏng không bị chậm).
Bước 2: Vẽ lưu đồ giải thuật.
- Lưu đồ giả thuật :
Bước 3: Soạn thảo chương trình trên trình hợp dịch:
;chuong trinh viet cho VDK 8051 hien thi so tu 0 den 90 tren led hai 7 doan
;--- org 0
main:
mov R0,#0 ;bien dem bat dau =0 lap:
call tach_giai_ma
Bắt đầu
Biến đếm bắt đầu =0
So sánh số
đếm với 91
≥ 91
<91 Tách giải mã hàng chục,
hàng đơn vị Hiển thị Tăng biến đếm
call hien_thi inc r0
cjne R0,#91,lap ;so sanh so dem dem duoc voi 91 jmp main
;---
;chuong trinh con tach va giai ma tach_giai_ma:
mov dptr,#bang_ma ;nap dia chi ma 7 doan vao dptr mov a,r0 ;nap so dem can tach vao A
mov b,#10 ;nap B=10 ( de chia A cho 10) vi co hai so dem div ab ;chia A cho B
movc a,@a+dptr ;lay ma 7 doan cua hang chuc
mov 30h,a ;cat ma 7 doan hang chuc vao ram nhap tai dia chi 30H mov a,b ;chuyen so du( la hang don vi) sang A
movc a,@a+dptr ;lay ma 7 doan hang don vi
mov 31h,a ;cat ma 7 doan hang don vi vao ram nhap ret
;---
;chuong trinh con hien thi hien_thi:
mov r6,#200 ; bien dem tao so vong lap lap2:
mov p0,31h ;hien thi hang don vi mov p2,#11111110b ;chon led don vi sang
call delay ;goi tre de mat quan sat duoc mov p2,#0ffh ;chong lem
mov p0,30h ;hien thi hang chuc
mov p2,#11111101b ;chon led hang chuc sang call delay ;goi tre de mat quan sat duoc mov p2,#0ffh ;chong lem
djnz r6,lap2 ret
;---
;chuong trinh con tao tre de mat quan sat duoc
delay: ;tao tre khoang 100ms mov r7,#50
djnz r7,$
ret ;---
;dinh nghia ma 7 doan bang_ma:
db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h end
Bước 4: Hợp dịch, sửa lỗi
Sau khi soạn thảo song ta lưu lại bài viết rồi tiến hành hợp dịch để chuyển file nguồn vừa soạn thảo sang mã máy bằng cách nhấn tổ hợp phím CTRL + F2.
Bước 5: Mô phỏng hoạt động của chương trình Bài tập:
Bài tập 1: Viết chương trình cho VĐK họ 8051 đếm xuống từ 60-10 hiển thị giá
trị số đếm trên led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quÐt led.
Bài tập 2: Viết chương trình cho VĐK họ 8051 đếm lên 0-245 hiển thị giá trị số
đếm trên led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quÐt led.
Bài tập 2: Viết chương trình cho VĐK họ 8051 đếm lên 0-345 hiển thị giá trị số
đếm trên led 7 đoạn. Biết Port0 nối với các đoạn a,b,c..h của led 7 đoạn, Port 2 quÐt led.