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