51单片机汇编教程之八路流水灯实现详解

本帖继续展示关于51单片机的汇编学习,本期为流水灯

本帖使用keil5软件进行程序编写,使用proteus进行仿真

此链接为proteus中的基础设置https://blog.csdn.net/weixin_62311904/article/details/128823381?spm=1001.2014.3001.5502

建立keil5工程请转至此链接

https://blog.csdn.net/weixin_62311904/article/details/128823101?spm=1001.2014.3001.5502

流水灯主要是在小灯闪烁的基础上对小灯进行移动

八路流水则为赋值一组引脚并对引脚进行定义,在上一篇文章我们能知道当引脚置1时为高电平,此时小灯不亮,引脚置0时,低电平,小灯亮,所以可知在一组引脚中,可设置小灯初始位置从“01111111”开始亮起,而十六进制的“01111111”为“0FEH”,然后正在写一个小循环一直执行左流水这样程序就完成了。

当然,如果想要右流水的话就设置初始状态为“7FH”在调用“RR A”指令即可实现。

在keil5中编写好程序之后勾选魔术棒中Output中的.HEX输出

流水灯代码

        ORG 0000H          
         
START:  MOV A,#0FEH        ;设置流水初始位置
        
LOOP:   MOV P1,A           ;八路流水,所以赋值一组引脚
        LCALL DELAY        ;调用延时函数,小灯亮的时间
        RL A               ;左移指令
        LJMP LOOP
        
        
DELAY:  MOV R5,#20        ;延时函数
D1:     MOV R6,#20
D2:     MOV R7,#255
        DJNZ R7,$
        DJNZ R6,D2
        DJNZ R5,D1
        RET

         
        END

proteus的配置链接在最开始,这个是最终定稿,画图完毕,双击AT89C51,点击此处,找到之前建立的文件夹,点击Objects,找到编译后输出的.hex文件,点击确认

最后进行仿真即可,以上就是本帖内容。

二编,写了个双向流水的小程序,主要是DJNZ指令的使用,有兴趣可以试试,有趣的代码

        ORG 0000H
            
        
START:     MOV A,#0FEH
        MOV B,#7FH
        MOV R2,#8
        MOV R3,#8
        
LEFT:   MOV P1,A
        LCALL DELAY
        RL A
        DJNZ R2,LEFT
        
RIGHT:    RR A    
        LCALL DELAY    
        MOV P1,A
        DJNZ R3,RIGHT
        LJMP START
        
DELAY:    MOV R5,#20
D1:        MOV R6,#25
D2:        MOV R7,#255
        DJNZ R7,$
        DJNZ R6,D2
        DJNZ R5,D1
        RET
        END
物联沃分享整理
物联沃-IOTWORD物联网 » 51单片机汇编教程之八路流水灯实现详解

发表评论