Em đang tập quét Led matrix (mô phỏng bằng phần mềm Proteus v7.8). Về phần cứng em dùng Transistor để kích Led và kết nối như hình dưới:
Em chỉ làm đơn giản là cho hiện số 2012 đứng yên trên ma trận 8x24 theo phương pháp quét hàng. Khi mô phỏng thì Led nháy loạn. Em nghĩ là do code chưa đúng. Anh chị nào trên diễn đàn giúp em sửa code với:
Code:
; P1 - Quet hang, tich cuc muc 1
; P3,P2,P0 - Xuat du lieu, tich cuc muc 0
;-------------------------------------
org 0h
sjmp main
so_2012: ; P3 P2 P0
db 11111111b, 11111111b, 11111111b
db 11000111b, 00011110b, 11110001b
db 10111010b, 11101100b, 11101110b
db 11111010b, 11001010b, 11111110b
db 11110110b, 10101110b, 11111101b
db 11101110b, 01101110b, 11111011b
db 11011110b, 11101110b, 11110111b
db 10000011b, 00011000b, 00100000b
;-------------------------------------
main:
call tat_mt
clr a ; xoa Acc
mov dptr, #so_2012 ; dat con tro tai bang ma
;-------------------------------------
;-------------------------------------
call tiep
sjmp main
;-------------------------------------
tiep: mov a, #00000001b ; khoi tao xung quet cho hang 1
display: mov p1, a ; xuat xung quet
rl a ; chuan bi xung quet cho hang tiep theo
call outp ; xuat du lieu
cjne a, #00000001, display ; chua quet du 8 hang: tiep tuc hien thi
ret ; quet du 8 hang: tro ve
;-------------------------------------
outp:
push acc ; cat thanh chua vao stack
clr a ; xoa Acc
movc a, @a+dptr ; nap du lieu vao Acc
mov p3, a ; xuat ra p3
inc dptr ; tang con tro den du lieu ke tiep
clr a ; xoa Acc
;
movc a, @a+dptr ; nap du lieu tiep theo vao Acc
mov p2, a ; xuat ra p2
inc dptr ; tang con tro den du lieu ke tiep
clr a ; xoa Acc
;
movc a, @a+dptr ; nap du lieu tiep theo vao Acc
mov p0, a ; xuat ra p0
inc dptr ; tang con tro de lay du lieu cho hang ke tiep
clr a ; xoa Acc
;
call delay ; goi thoi gian lam tre
mov p1, #0h ; xoa xung quet
call tat_mt
; call delay
pop acc ; nap lai thanh chua tu stack va
ret ; tro ve
;-------------------------------------
tat_mt:
mov p3, #0ffh ; tat ma tran
mov p2, #0ffh ;
mov p0, #0ffh ;
ret
;-------------------------------------
;-------------------------------------
delay:
push 00
push 01
MOV R0, #20
MOV R1, #248
DJNZ R1, $
DJNZ R0, $-4
POP 01
POP 00
ret
;-------------------------------------
end


Comment