本帖继续展示关于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文件,点击确认
最后进行仿真即可,以上就是本帖内容。文章来源:https://www.toymoban.com/news/detail-465114.html
二编,写了个双向流水的小程序,主要是DJNZ指令的使用,有兴趣可以试试,有趣的代码文章来源地址https://www.toymoban.com/news/detail-465114.html
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
到了这里,关于51汇编单片机学习(三)八路流水灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!