51单片机汇编怎么用四个独立按键来控制流水灯的速度

51单片机汇编怎么用四个独立按键来控制流水灯的速度,第1张

不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P11==0) light_water(); 然后:

void light_water()

{

num=1;

for(a=0;a<8;a++)

{

P11=num<<1;

delay(1000); //延时;

keyboard();//执行时又不停扫描键盘函数;

}

}

这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了。

KEYR EQU P10//改下端口 忘记 p3口 是低还是高了

KEYL EQU P11

LED EQU P0

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

    MOV TMOD,#01H

    MOV TH0,#HIGH(65536-50000)

    MOV TL0,#LOW(65536-50000)

    SETB ET0

    SETB EA

    MOV A,#0FEH

    MOV LED,A

    MOV R2,#0

    CLR 00H

LOOP:

    CLR TR0

LOOPL:

    JB KEYL,LOOPR

    SETB TR0

    RL A

    MOV LED,A

    JNB 00H,$

    CLR 00H

    SJMP LOOPL

LOOPR:

    JB KEYR,LOOP

    SETB TR0

    RR A

    MOV LED,A

    JNB 00H,$

    CLR 00H

    SJMP LOOPR

T0ISR:

    CLR TR0

   MOV TH0,#HIGH(65536-50000)

   MOV TL0,#LOW(65536-50000)

    SETB TR0

    INC R2

    CJNE R2,#20,T0E

    MOV R2,#0

    SETB 00H

T0E:

    RETI

    END

低电平点亮

START:MOV R0,#8

MOV R1,#8

SETB C

MOV A,#0FEH

MOV P1,A

S1:RLC A

CALL DELAY

MOV P1,A

DJNZ R0,S1

SETB C

MOV A,#0FEH

MOV P2,A

S2:RLC A

CALL DELAY

MOV P2,A

DJNZ R1,S2

AJMP START

DELAY:MOV R5,#0FFH //改变值变延时时间

LOOP2: MOV R4,#0FFH//改变值变延时时间

LOOP1:DJNZ R4,LOOP1

DJNZ R5,LOOP2

RET

END

单片机的流水灯程序,因为程序就这么写的,决定了流水灯左移7次,再右移7次,结束两个循环后,才能执行下面的while(!key),按键才有效,而在循环过程中,不执行while(!key),所以按键无效。下图画红框内的两个循环。

要想按键随时有效,应该把两个移位函数_cror_,_crol_ 放在主程中,检测key也放在主程中,而不能这样放一个子程序中。

我就写个顺时针亮的程序(详细解释,其它的你就自己写),全手打的哦,用的是汇编,我水平也不怎么高,但是你的问题也是入门级的,还有我假设是高电位亮,一共12灯从P00开始到P14(P14和P00相接)。ORG 4000HSTART:CLR P0CLR P1 /P0 P1清零MOV P0,#80H/1灯亮LCALL DEL/调用延时程序MOV P0,#0C0HLCALL DELMOV P0,#0E0HLCALL DELMOV P0,#0F0HLCALL DELMOV P0,#0F8HLCALL DELMOV P0,#0FCHLCALL DELMOV P0,#0FEHLCALL DELMOV P0,#0FFHLCALL DELSTEB P0/P0口值位,前8灯全亮MOV P1,#080HLCALL DELMOV P1,#0C0HLCALL DELMOV P1,#0E0HLCALL DELMOV P1,#0F0HLCALL DELMOV P1,#0F8HLCALL DELLJMP START/程序跳到开始,进行循环DEL:MOV R7,#200MOV R5,#20DEL1:MOV R6,#123 NOPDEL2:DJNZ R6,DEL2DJNZ R7,DEL1DJNZ R5,DEL1RET/延时程序 共约1SSJMP $起始位4000H 可能不对 要自己找。

以上就是关于51单片机汇编怎么用四个独立按键来控制流水灯的速度全部的内容,包括:51单片机汇编怎么用四个独立按键来控制流水灯的速度、51单片机8个流水灯,一个按键从左到右,一个按键从右到左,用汇编语言、51单片机程序:按键控制流水灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9718697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存