控制程序.docx

上传人:b****7 文档编号:8945010 上传时间:2023-02-02 格式:DOCX 页数:19 大小:17.31KB
下载 相关 举报
控制程序.docx_第1页
第1页 / 共19页
控制程序.docx_第2页
第2页 / 共19页
控制程序.docx_第3页
第3页 / 共19页
控制程序.docx_第4页
第4页 / 共19页
控制程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

控制程序.docx

《控制程序.docx》由会员分享,可在线阅读,更多相关《控制程序.docx(19页珍藏版)》请在冰豆网上搜索。

控制程序.docx

控制程序

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1