📄 dm134.txt
字号:
;use for lx ,gray=8
serial equ p1.7 ;data output pin
clock equ p1.6 ;clk output pin
latch equ p1.5 ;latch output pin
enable equ p1.4 ;enable outputpin
outl equ 20h ;out0~out7 data
outh equ 21h ;out8~out15 data
outtmp equ 32h ;output data tmp
;use for gray control
out0gray equ 33h ;pin out0 gray
out1gray equ 34h ;pin out1 gray
out2gray equ 35h ; .
out3gray equ 36h ; .
out4gray equ 37h ; .
out5gray equ 38h ;
out6gray equ 39h ;
out7gray equ 3ah ;
out8gray equ 3bh ;
out9gray equ 3ch ;
out10gray equ 3dh ;
out11gray equ 3eh ;
out12gray equ 3fh ; .
out13gray equ 40h ; .
out14gray equ 41h ; .
out15gray equ 42h ;pin out15 gray
outgraytmp0 equ 43h ;outgraytmp0~7 use for gray shift
outgraytmp1 equ 44h ; .
outgraytmp2 equ 45h ; .
outgraytmp3 equ 46h ; .
outgraytmp4 equ 47h ; .
outgraytmp5 equ 48h ; .
outgraytmp6 equ 49h ; .
outgraytmp7 equ 4ah ; .
grayset equ 0bh ;用于保存第一位数据的灰度,方便记录跑了一圈
outtime equ 4ch ;用于保存一帧数据的时间
outtimelong equ 13 ;set one frap time
outtimeshort equ 9 ;set one frap time
out0 equ 00h ;pin out0
out1 equ 01h ;pin out1
out2 equ 02h ; .
out3 equ 03h ; .
out4 equ 04h ; .
out5 equ 05h ;
out6 equ 06h ;
out7 equ 07h ;
out8 equ 08h ;
out9 equ 09h ;
out10 equ 0ah ; .
out11 equ 0bh ; .
out12 equ 0ch ; .
out13 equ 0dh ; .
out14 equ 0eh ;pin out14
out15 equ 0fh ;pin out15
roundbit equ f0 ;round flag
gray equ 0 ;set gray
graymax equ 31 ;gray-1
;;main program
org 0000h
ljmp 0030h
org 0030h
mov r0,#07fh
initramloop: mov @r0,#0
djnz r0,initramloop
lcall init
lcall tran16bitz
clr enable
mov r1,#0
djnz r1,$
setb enable
; long
m: mov r6,#8
main: ;mov out0gray,#31
mov outgraytmp6,#31
mov outgraytmp5,#20
mov outgraytmp4,#15
mov outgraytmp3,#13
mov outgraytmp2,#7
mov outgraytmp1,#3
mov outgraytmp0,#1
mov grayset,outgraytmp6
mov outtime,#outtimelong
main0: lcall outgrayshift
lcall doit
jnb roundbit,main0
djnz r6,main
;sjmp main0
;shor and fast
mov r6,#3
shortfast: mov outgraytmp6,#31
mov outgraytmp5,#20
mov outgraytmp4,#10
mov outgraytmp3,#3
mov outgraytmp2,#gray
mov outgraytmp1,#gray
mov outgraytmp0,#gray
mov grayset,outgraytmp6
mov outtime,#outtimeshort
mov b,#22
main1: push b
lcall outgrayshift
lcall doit
pop b
djnz b,main1
djnz r6,shortfast
;ret
ljmp m
; reset all ram and output pins
init: clr serial
clr clock
setb latch
setb enable
clr p1.0
clr p1.1
clr roundbit
mov sp,#5fh
ret
;now,it's show time
doit: mov r4,outtime ;1 frap time
doit0: mov r3,#31 ;out gray
doit1: lcall pwmmaker ;set outl and out outh
lcall tran16bitz
lcall tran16bitdata ;translation data
djnz r3,doit1
djnz r4,doit0
ret
;creat pwm
pwmmaker: push acc
mov a,out0gray
lcall subber
mov out0,c
mov a,out1gray
lcall subber
mov out1,c
mov a,out2gray
lcall subber
mov out2,c
mov a,out3gray
lcall subber
mov out3,c
mov a,out4gray
lcall subber
mov out4,c
mov a,out5gray
lcall subber
mov out5,c
mov a,out6gray
lcall subber
mov out6,c
mov a,out7gray
lcall subber
mov out7,c
mov a,out8gray
lcall subber
mov out8,c
mov a,out9gray
lcall subber
mov out9,c
mov a,out10gray
lcall subber
mov out10,c
mov a,out11gray
lcall subber
mov out11,c
mov a,out12gray
lcall subber
mov out12,c
mov a,out13gray
lcall subber
mov out13,c
mov a,out14gray
lcall subber
mov out14,c
mov a,out15gray
lcall subber
mov out15,c ;;light at the end
mov a,out15gray
jz pwmmaker1
; mov a,out14gray
; jz pwmmaker1
; setb out15
clr out8
pwmmaker1: pop acc
ret
; judge output is '1'or'0'
subber: clr c
subb a,r3
cpl c
ret
;change outgray
outgrayshift:
mov b,out15gray
mov out15gray,out14gray
mov out14gray,out13gray
mov out13gray,out12gray
mov out12gray,out11gray
mov out11gray,out10gray
mov out10gray,out9gray
mov out9gray,out8gray
mov out8gray,out7gray
mov out7gray,out6gray
mov out6gray,out5gray
mov out5gray,out4gray
mov out4gray,out3gray
mov out3gray,out2gray
mov out2gray,out1gray
mov out1gray,out0gray
mov out0gray,outgraytmp6
mov outgraytmp6,outgraytmp5
mov outgraytmp5,outgraytmp4
mov outgraytmp4,outgraytmp3
mov outgraytmp3,outgraytmp2
mov outgraytmp2,outgraytmp1
mov outgraytmp1,outgraytmp0
mov outgraytmp0,b
mov a,outgraytmp6
cjne a,grayset,outgrayshift0
setb roundbit
ret
outgrayshift0:
clr roundbit
; setb p3.7
ret
;send 16bits data in outl outh ;set latch-lef,enable-lef
tran16bitdata:
setb enable
push acc
setb serial
setb clock
clr clock
clr serial
mov outtmp,outh
lcall tran8bitdata
mov outtmp,outl
lcall tran8bitdata
clr latch;;;;;;;;;;;;;
clr enable
setb latch;;;;;;;;;;;;;
pop acc
;mov p0,outl
;mov p2,outh
ret
;send 8bits data in gray-tmp hight bit first
tran8bitdata:
mov a,#80h
mov r2,#8
loop: push acc
anl a,outtmp
jz outgray0
setb serial
setb clock
clr clock
sjmp outag
outgray0: clr serial
setb clock
clr clock
outag: pop acc
rr a
djnz r2,loop
ret
delay: mov r5,#100
delay0: mov r7,#0
djnz r7,$
djnz r5,delay0
ret
tran16bitz: mov outtmp,#00h
lcall tran8bitdata
lcall tran8bitdata
clr latch
clr enable
setb latch
; pop acc
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -