ỨNG DỤNG HỆ THỐN GI ĐIỀU KHIỂN LED 7 ĐOẠN
TỰA BÀ I: CHƯƠNGTRÌNH ĐẾM GIÂY HIỂN THỊ Ở2 LED – SỬ DỤNG NGẮT
CỦA TIMER ĐỂ ĐẾM CHÍNH XÁC VỀ THỜI GIAN.
Giải mã BCD của giây sang 7 đoạn
hiển thị
Đ
S Khởi tạo ngắt timer 0
Sử dụng delay dùng timer 50 ms và tăng biến đếm ngắt
Biến đếm ngắt = 20
Tăng giây lên 1 đơn vị
end Begin Đ S Giây = 60 Giây = 00
2. Kết nối mạch theo trình tự :
- Dùng bus dây kết nối port 0 đến pinhd điều khiển các đoạn a,b,c,d,e,f,g,dp và kết nối port 2 đến pinhd điều khiển các transistor quét hàng.
3. Khởi động phần mềm, mở File mới và đặt tên file. 4. Viết chương trình với tên file vừa đặt:
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh dem len tu 00 den 60 hien thi tren 2 led cua 8 led quet
;su dung ngat timer t0 de dem chinh xac ve thoi gian
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx giay equ r2 ;gan bien dem giay la R2
bdn equ r1 ;gan bien dem ngat quet equ p2
led7 equ p0
org 0000h ;bat dau chuong trinh ljmp main ;nhay den chtr chinh org 000bh
ljmp int_t0 ;nhay den chtr con ngat timer0 main: mov tmod,#01h ;timer0: mod 1 - dem 16 bit
mov dptr,#ma7doan ;dptr quan ly vung ma 7 doan clr tf0 ;XOA CO TRAN TIMER0
mov IE,#10000010B ;CHO NGAT TIMER0
mov TH0,#3CH ;khoi tao timer delay 50ms mov TL0,#0B0H
setb tr0 ;CHO TIMER0 BAT DAU DEM main0: mov giay,#00h ;giay=00
main1: mov bdn,#00 ;nap bien den so lan ngat lcall gma
main2: lcall hthi ;goi chtr con hien thi cjne bdn,#20,main2 ;chua dung 20 lan [tuc 1 giay] mov a,giay ;chuyen giay sang A
add a,#1 ;tang giay len 1
da a ;hieu chinh so BCD trong A mov giay,a ;tra lai cho giay
cjne giay,#60h,main1 ;ss giay voi 60 sjmp main0 ;lam lai tu dau
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; chuong trinh con giai ma
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx gma: mov a,giay
anl a,#0fh ;xoa 4 bit cao hang chuc giay movc a,@a+dptr ;lay ma 7 doan
mov 27h,a ;cat ma vao o nho 20h mov a,giay
anl a,#0f0h ;xoa 4 bit thap hang dvi
swap a ;chuyen 4 bit cao xuong vi tri thap movc a,@a+dptr ;lay ma 7 doan hang chuc
mov 26h,a ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;CHUONG TRINH CON NGAT TIMER0 SAU KHOANG THOI GIAN 50MS
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx int_t0: INC bdn ;TANG BIEN DEM GIAY
MOV TH0,#3CH ;khoi tao lai timer MOV TL0,#0B5H
CLR TF0 RETI
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh con hien thi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx hthi: mov a,#01111111b ;ma quet
mov r0,#27h ht1: mov led7,@r0 mov quet,a lcall delay1 mov quet,#0ffh dec r0
rr a ;chuyen sang led ke cjne r0,#25h,ht1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;chuong trinh con delay1
delay1: mov r7,#0fh djnz r7,$
ret
;khai bao ma 7 doan tu so '0' den so '9'
ma7doan: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
end
5. Thực hiện các bước giống như các bài chuẩn cho đến khi mạch đếm đúng từ 00 đến 59. III. Câu hỏi và bài tập ứng dụng:
1. Tại sao phải chèn chương trình con hiển thị vào chương trình con delay? Hãy thử bỏ lệnh gọi chương trình con hiển thị trong chương trình con delay và cho nó vào chương trình chính sau lệnh gọi chương trình con delay rồi cho biết kết quả như thế nào?
2. Hãy viết chương trình đếm lên từ 00 đến 99 thì làm như thế nào? 3. Hãy viết chương trình đếm xuống từ 60 về 00 thì làm như thế nào?
I. Mục đích yêu cầu: biết cách viết chương trình đếm phút giây, cách kiểm tra chương trình đếm. II. Trình tự thực hiện: 1. Giải thuật: 180 NGÀY : SỐ TIẾT : LỚP : MSSV : THỰC HÀNH VI ĐIỀU KHIỂN BÀI SỐ : 2-3