旋转木马旋转木马_51单片机旋转木马程序

hacker|
156

51单片机跑马灯程序

不好意思,延时用了楼上的。keil下编译OK。假设P1接灯。

ORG 00H

SJMP START

ORG 30H

START:

MOV A ,#00

SETB C

MOV R0,#9

;从左到右

LOOP1:

RLC A

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP1

;从右到左

MOV R0,#9

LOOP2:

RRC A

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP2

SJMP START

DELAY:

MOV R6,#20

DELAY_0:MOV R5,#255

DJNZ R5,$

DJNZ R6,DELAY_0

RET

END

这个程序比较简单了。再精简,只能精简一句,将MOV P1,A 放在DELAY函数里。这样减少一行。

简单介绍一下:

首先就是你要轮流点亮,就是将1循环一圈,因为你要全灭一次,所以用到CY。

RG 00H

SJMP START

ORG 30H

START:

MOV A ,#00 ;//清空A寄存器

SETB C     ;//将CY置1,然后带进位左移就会进入将A的b0

MAINLOOP: ;//大循环起始

MOV R0,#9 ;设置移位次数,要灭一次,所以设置为9

;从左到右

LOOP1:

RLC A     ;带进位左移一次;第一次移位结果为01

MOV P1, A ;将A中值放入P1点亮对应LED;该句可放在DELAY里,然后从右到左也去掉该句

ACALL DELAY ;延时,保持灯亮一段时间,自己根据实际情况调整一下。

DJNZ R0, LOOP1 ;循环,点亮下一个灯,最后一次,A为0,将全灭一次,CY为1

;从右到左

MOV R0,#9 ;设置循环次数

LOOP2:    ;循环起始表示

RRC A     ;带进位右移,第一次结果为80H

MOV P1, A ;更新P1点亮对应LED

ACALL DELAY ;延时,保持灯亮一段时间

DJNZ R0, LOOP2 ;循环,点亮下一个灯

SJMP MAINLOOP  ;循环,重新开始下一轮

如果你是管脚输出低LED才亮,只需将MOV A ,#00 和SETB C改为MOV A, #0FFH和CLR C即可。

方案2:位寻址区00做标志,为0从左到右,该标志为1从右到左

ORG 00H

SJMP START

ORG 30H

START:

MOV A ,#00

SETB C

MOV R0,#9

CLR 00H

LOOP1:

RLLED:

JB 00H, RRLED

RLC A

AJMP DISP

RRLED:

RRC A

DISP:

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP1

CPL 00H

AJMP START

DELAY:

MOV R6,#20

DELAY_0:MOV R5,#255

DJNZ R5,$

DJNZ R6,DELAY_0

RET

END

下面是方案1的流程图,这种流程图不知怎么写好,而且写出来基本是对每行的代码的解释。

用51单片机程序,用脚踏控制步进马达旋转,旋转圈数可调,每完成一次计数一个,用1602液晶显示

你用1个按键控制调节状态,这个时侯,显示调节值,用几个按键调节数值(个位,十位,百们,千位),在按状态键,回到计数状态,用脚踏板启动马达,马达 连接计数传感器到单片机,当圈数=调节值变量就停止,计数变量再变成0,程序自己去写,当然硬件与软件要一至

急求,51单片机走马灯+按键暂停这个用汇编语言编一个程序,图

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

    JB P1.0,MAIN1

    JNB P1.0,$

    MOV P0,#0FCH

    SJMP MAIN

MAIN1:

    JB P1.1,MAIN2

    JNB P1.1,$

    MOV P0,#0F3H

    SJMP MAIN

MAIN2:

    JB P1.2,MAIN3

    JNB P1.2,$

    MOV P0,#0CFH

    SJMP MAIN

MAIN3:

    JB P1.3,MAIN

    JNB P1,3,$

    MOV P0,#3FH

    SJMP MAIN

    END

0条大神的评论

发表评论