51单片机汇编语言流水灯代码

简介: 51单片机汇编语言流水灯代码

效果图:

方法一: 写出所有亮灯可能,然后循环

MAIN:
    MOV P2, #11111110B
    LCALL DELAY
    MOV P2, #11111101B
    LCALL DELAY
    MOV P2, #11111011B
    LCALL DELAY
    MOV P2, #11110111B
    LCALL DELAY
    MOV P2, #11101111B
    LCALL DELAY
    MOV P2, #11011111B
    LCALL DELAY
    MOV P2, #10111111B
    LCALL DELAY
    MOV P2, #01111111B
    CALL DELAY
LJMP MAIN
 
 
DELAY:
MOV R7, #3    ;@11.0592MHz
D1:
PUSH 30H
PUSH 31H
MOV 30H, #180
MOV 31H, #68
NEXT:
DJNZ 31H, NEXT
DJNZ 30H, NEXT
POP 31H
POP 30H
DJNZ R7, D1
RET
END

这种方式比较好理解一些,修改R7的立即数可以更改流水灯的快慢

方法二:用一个变量接收数据,然后左移,反复循环即可

MOV A,#0FEH
MAIN:   
  MOV   P2,A
  LCALL   DELAY
  RL     A                ;将A进行左移
  SJMP   MAIN
 
 
DELAY:
MOV R7, #3    
D1:
    PUSH 30H
    PUSH 31H
    MOV 30H, #180
    MOV 31H, #68
NEXT:
    DJNZ 31H, NEXT
    DJNZ 30H, NEXT
    POP 31H
    POP 30H
    DJNZ R7, D1
RET
END

相比之下方法二会更加灵活一些,修改变量A的值可以更改流水灯模式,修改R7的值可以控制流水灯快慢

方法三:数组点灯。将所有的亮灯可能转成十六进制放在数组里面,然后依次读取数组里面的十六进制数,将读取到数赋值给P2引脚。

MAIN:  
    MOV R1,#8     ;等下用来记录循环了次数,因为有个灯,所以赋值为8
    MOV R2,#00H     ;用来存储偏移量
    MOV DPTR,#TAB   ;将数组的首地址用DPTR来记录
 
UP: 
    MOV   A,R2          ;将当前偏移量赋值给变量A
    MOVC  A,@A+DPTR   ;MOVC A,@A+DPTR是读取地址为A+DPTR存储单元的内容。
    MOV   P2,A      ;读取到的数组内容赋值给P2引脚
    LCALL DELAY       ;LCALL的意思是调用,调用DELAYMS
    INC   R2      ;inc代表加一(偏移量加一)
    DJNZ  R1,UP         ;将R7减一,非0则跳转到UP,为0则执行下一句(可以执行8次)
    SJMP  MAIN          ;SJMP是跳转的意思,跳转到UP0的位置
 
DELAY:
  MOV R7, #3        ;#3代表延时三百毫秒(晶振是11.0592HZ)
D1:
  PUSH 30H
  PUSH 31H
  MOV 30H, #180
  MOV 31H, #68
NEXT:
  DJNZ 31H, NEXT
  DJNZ 30H, NEXT
  POP 31H
  POP 30H
  DJNZ R7, D1
RET
TAB:  DB   0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH   ;定义了一个数组
 
END

注:数组一般放在程序的末尾,而不是像c语言那样放在程序的开头。

相关文章
|
27天前
|
网络协议 C++
解决MASM32代码汇编出错: error A2181: initializer must be a string or single item
解决MASM32代码汇编出错: error A2181: initializer must be a string or single item
|
2月前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
168 1
|
2月前
|
存储 算法 程序员
神秘代码世界惊现高效秘籍!究竟是什么让汇编语言编程如此强大?快来一探究竟!
【8月更文挑战第31天】《代码之美:探索高效汇编语言编程的最佳实践》介绍了汇编语言在系统内核、嵌入式系统及高性能应用中的不可替代作用。书中强调了深入理解处理器架构、提升代码可读性、优化算法与数据结构及有效利用寄存器等最佳实践的重要性。通过具体示例,如在 x86 架构下实现高效的加法函数,展示了如何运用这些技巧编写出既高效又可靠的汇编代码,充分展现了汇编语言的独特魅力及其在现代软件开发中的价值。
38 0
|
29天前
|
Windows
【原创】DOS下TSR程序的汇编演示代码2--黑屏保护程序
【原创】DOS下TSR程序的汇编演示代码2--黑屏保护程序
|
29天前
【原创】DOS下TSR程序的汇编演示代码1--自动按键程序
【原创】DOS下TSR程序的汇编演示代码1--自动按键程序
|
2月前
|
NoSQL 前端开发 程序员
【震撼揭秘!】程序员绝不会告诉你的秘密:掌握汇编语言调试,轻松从软件故障中全身而退——透视代码底层,成为Bug猎人!
【8月更文挑战第31天】《调试的艺术:如何利用汇编语言追踪和解决软件问题》探讨了使用汇编语言进行高效调试的方法。无论是初学者还是资深开发者,面对棘手的 bug 时,高级语言的信息往往不足。文章通过具体示例展示如何通过汇编代码定位问题,如 C 语言中数组求和函数的崩溃问题。借助 `gcc -S` 生成的汇编代码和 GDB 调试器,可以深入理解程序行为,从而更准确地解决问题。掌握这一技能,将使你在复杂问题面前更加从容。
36 2
|
2月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
|
2月前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
|
2月前
|
C语言
【51单片机】用汇编语言实现点灯、闪烁
【51单片机】用汇编语言实现点灯、闪烁
|
2月前
|
C# 开发者 图形学
Xamarin 竟在游戏开发领域大胆探索,跨平台优势与强大功能结合,开启游戏开发新潮流!
【8月更文挑战第31天】《Xamarin在游戏开发领域的探索》介绍了Xamarin作为跨平台开发框架,在移动游戏开发中的应用。它利用C#语言的优势,提供高效的开发体验,并结合各平台图形库实现高质量画面。本文还展示了Xamarin如何简化游戏逻辑处理、支持多线程编程及与Unity等工具集成,提升游戏质量和开发效率。此外,Xamarin还支持热更新和多平台发布,进一步优化游戏维护流程。
38 0