本不想帖代码的,但延时的技术总让我难以释怀,还是弄出来让大家谈谈,我这里怎么延时效果都不行,就是8个点亮的时候比一个点亮很多。
595是M74HC595B1,难道是它的问题?
;09h for countor 1s
;0ah for line selector
;0bh for code of display;
;0ch for code of display in interrupt;
;0dh for counter of display code in interrupt;
MR_ equ p3.0
SH equ p3.1
ST equ p3.2
OE_ equ p3.3
DATAS equ p3.4
org 000h
LJMP Main
ORG 000BH
LJMP INIT0
ORG 0030h
main:
mov sp,#70h
CLR OE_
CLR SH
CLR ST
CLR DATAS
setb MR_
mov r0,#30h
mov r2,#0h
mov r7,#8h
mov 09h,#0h
dispzone:
mov a,r2
mov dptr,#datadb
movc a,@a+dptr
mov @r0,a
inc r0
inc r2
djnz r7,dispzone
MOV 09H,#00H ;软件计数器预清0
MOV 0cH,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
loop:
mov r0,#80h
mov 0ah,r0
mov 0bh,#30h
mov r2,#8h
loop1:
mov a,#0ffh
mov p1,a
mov r0,0ah
lcall sendto
mov a,0ah
rr a
mov 0ah,a
mov r0,0bh
mov a,@r0
cpl a
mov p1,a
inc 0bh
lcall delay1ms
djnz r2,loop1
lcall delay
sjmp loop
;把R0的并行数串行输出到行选
sendto:
push acc
CLR SH
CLR ST
CLR DATAS
sendtime:
mov r7,#8h
mov a,r0
clr c
sendcy:
rlc a
mov DATAS,C
setb SH
lcall delay20ns
clr SH
lcall delay20ns
djnz r7,sendcy
setb ST
lcall delay20ns
clr ST
lcall delay20ns
pop acc
ret
delay:
mov r3,#05h
delay0:
mov r4,#0ffh
djnz r4,$
djnz r3,delay0
ret
delay1ms:
mov r5,#04h
delay1ms1:
mov r6,#0ffh
djnz r6,$
djnz r5,delay1ms1
ret
delay20ns:
mov r5,#6h
djnz r5,$
ret
INIT0:
PUSH ACC
PUSH PSW ;将PSW和ACC推入堆栈保护
INC 09H
MOV A,09H
CJNE A,#10h,T_RET ;09H单元中的值到了16了吗?
T_L1:
MOV 09H,#0 ;清软件计数器
inc 0ch
mov a,0ch
cjne a,#0eh,continue ;不为10继续。到10次后从0开始新一轮显示。
clr a
mov 0ch,#0
continue:
mov r1,#30h
mov 0dh,#8h
mov dptr,#datadb
mov b,#8h
mul ab
add a,dpl
mov dpl,a
loop_disp:
clr a
movc a,@a+dptr
mov @r1,a
inc r1
inc dptr
djnz 0dh,loop_disp
T_RET:
MOV TH0,#15H
MOV TL0,#9FH ;重置定时常数
POP PSW
POP ACC
RETI
datadb:
DB 07EH, 066H, 066H, 066H, 066H, 066H, 066H, 07EH ;0
DB 038H, 018H, 018H, 018H, 018H, 018H, 018H, 07EH ;1
DB 07CH, 00CH, 00CH, 07CH, 07CH, 060H, 060H, 07CH ;2
DB 07EH, 006H, 006H, 07EH, 07EH, 006H, 006H, 07EH ;3
DB 00CH, 014H, 024H, 044H, 07EH, 004H, 004H, 004H ;4
DB 07CH, 040H, 040H, 07CH, 07CH, 004H, 004H, 07CH ;5
DB 03EH, 022H, 020H, 020H, 03EH, 022H, 022H, 03EH ;6
DB 07CH, 044H, 004H, 004H, 004H, 004H, 004H, 004H ;7
DB 03EH, 022H, 022H, 03EH, 03EH, 022H, 022H, 03EH ;8
DB 03EH, 022H, 022H, 03EH, 002H, 002H, 002H, 03EH ;9
; db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
db 81h,42h,24h,18h,18h,24h,42h,81h
DB 00h,6ch,92h,82h,44h,28h,10h,00h ;LOVE
DB 0FFH,0A5H,0A5H,0E7H,81H,99H,0A5H,0FFH ;jiong
db 0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,07Fh
; DB 099H,099H,099h,081h,081h,099h,099h,099h
DB 09FH,0afh,0b7h,0bbh,0b7h,0afh,09fh,0ffh
db 0ffh,000h,000h,0e7h,0e7h,000h,000h,0ffh
end
|