控制程序.docx
《控制程序.docx》由会员分享,可在线阅读,更多相关《控制程序.docx(19页珍藏版)》请在冰豆网上搜索。
控制程序
6个八段数码管显示程序
OUTBITEQU08002H;位控制口
OUTSEGEQU08004H;段控制口
INEQU08001H;键盘读入口
LEDBUFEQU60H;显示缓冲
NUMEQU70H;显示的数据
DELAYTEQU75H;
ljmpStart
LEDMAP:
;八段管显示码
DB4FH,06H,5BH,06H,07H,3FH,7DH,07H
DELAY:
;延时子程序
MOVR6,#1;
DELAYLOOP:
djnzr6,DelayLoop
djnzr5,Delay
RET
DISPLAYLED:
MOVR0,#LEDBUF
MOVR1,#6;共6个八段管
MOVR2,#00000001B;从右边开始显示
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
movx@dptr,a;关所有八段管
MOVA,@R0
MOVDPTR,#OUTSEG
movx@dptr,a
MOVDPTR,#OUTBIT
MOVA,R2
movx@dptr,a;显示一位八段管
MOVR6,#1000;01
CALLDELAY
MOVA,R2;显示下一位
rla
MOVR2,A
INCR0
djnzr1,Loop
MOVDPTR,#OUTBIT
MOVA,#0
movx@dptr,a;关所有八段管
RET
START:
MOVSP,#40H
MOVNUM,#0
MLOOP:
;incNum
MOVA,NUM
MOVB,A
MOVR0,#LEDBUF
FILLBUF:
MOVA,B
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr;数字转换成显示码
MOV@R0,A;显示在码填入显示缓冲
INCR0
INCB
cjner0,#LEDBuf+6,FillBuf
MOVDELAYT,#30
DISPAGAIN:
CALLDISPLAYLED;显示
djnzDelayT,DispAgain
ljmpMLoop
END
键盘及显示程序
OUTBITEQU08002H;位控制口
OUTSEGEQU08004H;段控制口
INEQU08001H;键盘读入口
LEDBUFEQU60H;显示缓冲
ljmpStart
LEDMAP:
;八段管显示码
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DELAY:
;延时子程序
MOVR7,#0
DELAYLOOP:
djnzr7,DelayLoop
djnzr6,DelayLoop
RET
DISPLAYLED:
MOVR0,#LEDBUF
MOVR1,#6;共6个八段管
MOVR2,#00100000B;从左边开始显示
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
movx@dptr,a;关所有八段管
MOVA,@R0
MOVDPTR,#OUTSEG
movx@dptr,a
MOVDPTR,#OUTBIT
MOVA,R2
movx@dptr,a;显示一位八段管
MOVR6,#1
CALLDELAY
MOVA,R2;显示下一位
rra
MOVR2,A
INCR0
djnzr1,Loop
RET
TESTKEY:
MOVDPTR,#OUTBIT
MOVA,#0
movx@dptr,a;输出线置为0
MOVDPTR,#IN
movxa,@dptr;读入键状态
cpla
anla,#0fh;高四位不用
RET
KEYTABLE:
;键码定义
DB16H,15H,14H,0FFH
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH
DB0EH,03H,06H,09H
DB0FH,02H,05H,08H
DB00H,01H,04H,07H
GETKEY:
MOVDPTR,#OUTBIT
MOVP2,DPH
MOVR0,#LOW(IN)
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVA,R1;找出键所在列
cpla
movx@dptr,a
cpla
rra
MOVR1,A;下一列
movxa,@r0
cpla
anla,#0fh
JNZGOON1;该列有键入
djnzr2,KLoop
MOVR2,#0FFH;没有键按下,返回0ffh
sjmpExit
GOON1:
MOVR1,A;键值=列X4+行
MOVA,R2
DECA
rla
rla
MOVR2,A;r2=(r2-1)*4
MOVA,R1;r1中为读入的行值
MOVR1,#4
LOOPC:
rrca;移位找出所在行
JCEXIT
INCR2;r2=r2+行值
djnzr1,LoopC
EXIT:
MOVA,R2;取出键码
MOVDPTR,#KEYTABLE
movca,@a+dptr
MOVR2,A
WAITRELEASE:
MOVDPTR,#OUTBIT;等键释放
clra
movx@dptr,a
MOVR6,#10
CALLDELAY
CALLTESTKEY
JNZWAITRELEASE
MOVA,R2
RET
START:
MOVSP,#40H
MOVLEDBUF+0,#0;显示8.8.8.8.
MOVLEDBUF+1,#0
MOVLEDBUF+2,#0
MOVLEDBUF+3,#0
MOVLEDBUF+4,#0
MOVLEDBUF+5,#0
MLOOP:
CALLDISPLAYLED;显示
CALLTESTKEY;有键入?
JZMLOOP;无键入,继续显示
CALLGETKEY;读入键码
anla,#0fh;显示键码
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF,A
MLOOP1:
CALLDISPLAYLED;显示
CALLTESTKEY;有键入?
JZMLOOP1;无键入,继续显示
CALLGETKEY;读入键码
anla,#0fh;显示键码
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+1,A
MLOOP2:
CALLDISPLAYLED;显示
CALLTESTKEY;有键入?
JZMLOOP2;无键入,继续显示
CALLGETKEY;读入键码
anla,#0fh;显示键码
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+2,A
MLOOP3:
CALLDISPLAYLED;显示
CALLTESTKEY;有键入?
JZMLOOP3;无键入,继续显示
CALLGETKEY;读入键码
anla,#0fh;显示键码
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+3,A
MLOOP4:
CALLDISPLAYLED;显示
CALLTESTKEY;有键入?
JZMLOOP4;无键入,继续显示
CALLGETKEY;读入键码
anla,#0fh;显示键码
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+4,A
MLOOP5:
CALLDISPLAYLED;显示
CALLTESTKEY;有键入?
JZMLOOP5;无键入,继续显示
CALLGETKEY;读入键码
anla,#0fh;显示键码
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+5,A
JMPMLOOP
END
时钟程序
OUTBITEQU08002H;位控制口
OUTSEGEQU08004H;段控制口
INEQU08001H;键盘读入口
LEDBUFEQU60H;显示缓冲
HOUREQU40H
MINUTEEQU41H
SECONDEQU42H
C100USEQU43H
TICKEQU10000
T100USEQU256-50
ljmpStart
ORG000BH
T0INT:
PUSHPSW
PUSHACC
MOVA,C100US+1
JNZGOON
DECC100US
GOON:
DECC100US+1
MOVA,C100US
orla,C100us+1
JNZEXIT
MOVC100US,#HIGH(TICK)
MOVC100US+1,#LOW(TICK)
INCSECOND
MOVA,SECOND
cjnea,#60,Exit
MOVSECOND,#0
INCMINUTE
MOVA,MINUTE
cjnea,#60,Exit
MOVMINUTE,#0
INCHOUR
MOVA,HOUR
cjnea,#24,Exit
MOVHOUR,#0
EXIT:
POPACC
POPPSW
reti
DELAY:
;延时子程序
MOVR7,#0
DELAYLOOP:
djnzr7,DelayLoop
djnzr6,DelayLoop
RET
LEDMAP:
;八段管显示码
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DISPLAYLED:
MOVR0,#LEDBUF
MOVR1,#6;共6个八段管
MOVR2,#00100000B;从左边开始显示
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
movx@dptr,a;关所有八段管
MOVA,@R0
MOVDPTR,#OUTSEG
movx@dptr,a
MOVDPTR,#OUTBIT
MOVA,R2
movx@dptr,a;显示一位八段管
MOVR6,#1
CALLDELAY
MOVA,R2;显示下一位
rra
MOVR2,A
INCR0
djnzr1,Loop
RET
;===============================================
TOLED:
MOVDPTR,#LEDMAP
movca,@a+dptr
RET
TESTKEY:
MOVDPTR,#OUTBIT
MOVA,#0
movx@dptr,a;输出线置为0
MOVDPTR,#IN
movxa,@dptr;读入键状态
cpla
anla,#0fh;高四位不用
RET
KEYTABLE:
;键码定义
DB16H,15H,14H,0FFH
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH
DB0EH,03H,06H,09H
DB0FH,02H,05H,08H
DB00H,01H,04H,07H
GETKEY:
MOVDPTR,#OUTBIT
MOVP2,DPH
MOVR0,#LOW(IN)
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVA,R1;找出键所在列
cpla
movx@dptr,a
cpla
rra
MOVR1,A;下一列
movxa,@r0
cpla
anla,#0fh
JNZGOON1;该列有键入
djnzr2,KLoop
MOVR2,#0FFH;没有键按下,返回0ffh
sjmpExit1
GOON1:
MOVR1,A;键值=列X4+行
MOVA,R2
DECA
rla
rla
MOVR2,A;r2=(r2-1)*4
MOVA,R1;r1中为读入的行值
MOVR1,#4
LOOPC:
rrca;移位找出所在行
JCEXIT1
INCR2;r2=r2+行值
djnzr1,LoopC
EXIT1:
MOVA,R2;取出键码
MOVDPTR,#KEYTABLE
movca,@a+dptr
MOVR2,A
WAITRELEASE:
MOVDPTR,#OUTBIT;等键释放
clra
movx@dptr,a
MOVR6,#10
CALLDELAY
CALLTESTKEY
JNZWAITRELEASE
MOVA,R2
RET
START:
MOVTMOD,#02H;模式2,定时器
MOVTH0,#T100US
MOVTL0,#T100US
MOVIE,#10000010B;EA=1,IT0=1
CALLGETKEY;读入键码
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+0,A
;显示键码
MOVR6,A
CALLGETKEY;读入键码
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+1,A
;显示键码
MOVR7,A
MOVA,#0
MOVR5,#0AH
ADD1:
ADDA,R6
DECR5
JZADD1
ADDA,R7
MOVHOUR,A
MOVR6,#0
MOVR5,#0
MOVR7,#0
CALLGETKEY;读入键码
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+2,A
;显示键码
MOVR6,A
CALLGETKEY;读入键码
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+3,A
;显示键码
MOVR7,A
MOVA,#0
MOVR5,#0AH
ADD2:
ADDA,R6
DECR5
JZADD2
ADDA,R7
MOVMINUTE,A
MOVR6,#0
MOVR5,#0
MOVR7,#0
CALLGETKEY;读入键码
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+4,A
;显示键码
MOVR6,A
CALLGETKEY;读入键码
anla,#0fh
MOVDPTR,#LEDMAP
movca,@a+dptr
MOVLEDBUF+5,A
;显示键码
MOVR7,A
MOVA,#0
MOVR5,#0AH
ADD3:
ADDA,R6
DECR5
JZADD3
ADDA,R7
MOVSECOND,A
MOVR6,#0
MOVR5,#0
MOVR7,#0
MOVC100US,#HIGH(TICK)
MOVC100US+1,#LOW(TICK)
SETBTR0;启动定时器0
MLOOP:
MOVA,HOUR
MOVB,#10
DIVAB
CALLTOLED
MOVLEDBUF,A
MOVA,B
CALLTOLED
orla,#80h
MOVLEDBUF+1,A
MOVA,MINUTE
MOVB,#10
DIVAB
CALLTOLED
MOVLEDBUF+2,A
MOVA,B
CALLTOLED
orla,#80h
MOVLEDBUF+3,A
MOVA,SECOND
MOVB,#10
DIVAB
CALLTOLED
MOVLEDBUF+4,A
MOVA,B
CALLTOLED
MOVLEDBUF+5,A
CALLDISPLAYLED
ljmpMLoop
END
步进电机
ORG0H
MOV20H,#00H
MOVP1,#01H
MOV42H,#084H
MOV43H,#020H
START:
MOVR7,#64H
MLP0:
MOVR6,42H
mlpx0:
lcalldel
djnzr6,mlpx0
DEC42H
lcallsteps
djnzr7,mlp0
MOVR7,#64H
MLP1:
MOVR6,43H
mlpx1:
lcalldel
djnzr6,mlpx1
lcallsteps
djnzr7,mlp1
MOVR7,#64H
MLP2:
MOVR6,42H
mlpx2:
lcalldel
djnzr6,mlpx2
INC42H
lcallsteps
djnzr7,mlp2
;mov20h,#80h
cpl20h.15
MOVP1,#01H
ljmpstart
RET
STEPS:
INC20H
anl20h,#83h
JB7,STPSC
MOVDPTR,#FTAB
sjmpstpw
STPSC:
MOVDPTR,#CTAB
STPW:
MOVA,20H
anla,#03h
movca,@a+dptr
MOVP1,A
RET
FTAB:
DB01H,02H,04H,08H
CTAB:
DB01H,08H,04H,02H
DEL:
MOVR5,#00H
del0:
djnzr5,del0
RET
END