设计目的
1.学习大体理论在实践中综合运用的初步经验,掌握电路设计的大体方式、设计步骤,培育综合设计与调试能力。
2.掌握汇编语言程序设计方式。
3.培育实践技术,提高分析和解决实际问题的能力。
设计任务及要求
1.彩灯用8个发光二极管代替。
2.,然后全亮、全灭,再循环。
3.彩灯亮点移动时刻距离为秒。
设计方式
本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
若是要让接在口的LED1亮起来,那么只要把口的电平变成低电平就可以够了;相反,若是要接在口的LED1熄灭,就要把口的电平变成高电平。同理,接在~口的其他7个LED的点亮和熄灭的方式同LED1。因此,要实现流水灯功能,咱们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。一样的道理,能够让8个灯左移点亮,全亮、全灭。
在此咱们还应注意一点,由于人眼的视觉暂留效应和单片机执行每条指令的时刻很短,咱们在控制二极管亮灭的时候应该延时一段时刻,不然咱们就看不到“流水”效果了。
程序设计
ORG 0000H ;单片机上电后从0000H地址执行
AJMP START1 ;跳转到主程序寄存地址处
ORG 0030H ;设置主程序开始地址
MOV SP,#60H ;设置堆栈起始地址为60H
START1: MOV A,#0FEH ;ACC中装入LED1亮的数据(二进制的)
MOV P1,A ;将ACC的数据送P1口
ACALL DELAY ;挪用延时子程序
MOV R0,#7 ;将数据再移动7次就完成一个8位流水进程
AJMP LOOP1
START2: MOV A,#0BFH ;ACC中装入LED7亮的数据(二进制的)
MOV P1,A ;将ACC的数据送P1口
ACALL DELAY ;挪用延时子程序
MOV R0,#5 ;将数据再移动5次就完成一个6位流水进程
AJMP LOOP2
START3: MOV A,#00H ;ACC中装入所有灯都亮的数据(二进制的00000000)
AJMP LOOP3
START4: MOV A,#0FFH ;ACC中装入所有灯都灭的数据(二进制的)
AJMP LOOP4
LOOP1: RL A ;将ACC中的数据左移一名
MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
DJNZ R0,LOOP1 ;没有移动够7次继续移动
AJMP START2 ;移动完7次后跳到START2
LOOP2: RR A ;将ACC中的数据右移一名
MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
DJNZ R0,LOOP2 ;没有移动够5次继续移动
AJMP START3 ;移动完5次后跳到START3
LOOP3: MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
AJMP START4 ;跳到START4
LOOP4: MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
AJMP START1 ;跳到START1
DELAY: MOV R7,#5 ;延时
DEL1: MOV R6,#200
DEL2: MOV R5,#248
DEL3: DJNZ R5,DEL3
NOP
DJNZ R6,DEL2
DJNZ R7,DEL1
RET ;子程序返回
END ;程序结束
版权声明:本文为CSDN博主「大佬们看过来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_52297671/article/details/122244673
设计目的
1.学习大体理论在实践中综合运用的初步经验,掌握电路设计的大体方式、设计步骤,培育综合设计与调试能力。
2.掌握汇编语言程序设计方式。
3.培育实践技术,提高分析和解决实际问题的能力。
设计任务及要求
1.彩灯用8个发光二极管代替。
2.,然后全亮、全灭,再循环。
3.彩灯亮点移动时刻距离为秒。
设计方式
本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
若是要让接在口的LED1亮起来,那么只要把口的电平变成低电平就可以够了;相反,若是要接在口的LED1熄灭,就要把口的电平变成高电平。同理,接在~口的其他7个LED的点亮和熄灭的方式同LED1。因此,要实现流水灯功能,咱们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。一样的道理,能够让8个灯左移点亮,全亮、全灭。
在此咱们还应注意一点,由于人眼的视觉暂留效应和单片机执行每条指令的时刻很短,咱们在控制二极管亮灭的时候应该延时一段时刻,不然咱们就看不到“流水”效果了。
程序设计
ORG 0000H ;单片机上电后从0000H地址执行
AJMP START1 ;跳转到主程序寄存地址处
ORG 0030H ;设置主程序开始地址
MOV SP,#60H ;设置堆栈起始地址为60H
START1: MOV A,#0FEH ;ACC中装入LED1亮的数据(二进制的)
MOV P1,A ;将ACC的数据送P1口
ACALL DELAY ;挪用延时子程序
MOV R0,#7 ;将数据再移动7次就完成一个8位流水进程
AJMP LOOP1
START2: MOV A,#0BFH ;ACC中装入LED7亮的数据(二进制的)
MOV P1,A ;将ACC的数据送P1口
ACALL DELAY ;挪用延时子程序
MOV R0,#5 ;将数据再移动5次就完成一个6位流水进程
AJMP LOOP2
START3: MOV A,#00H ;ACC中装入所有灯都亮的数据(二进制的00000000)
AJMP LOOP3
START4: MOV A,#0FFH ;ACC中装入所有灯都灭的数据(二进制的)
AJMP LOOP4
LOOP1: RL A ;将ACC中的数据左移一名
MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
DJNZ R0,LOOP1 ;没有移动够7次继续移动
AJMP START2 ;移动完7次后跳到START2
LOOP2: RR A ;将ACC中的数据右移一名
MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
DJNZ R0,LOOP2 ;没有移动够5次继续移动
AJMP START3 ;移动完5次后跳到START3
LOOP3: MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
AJMP START4 ;跳到START4
LOOP4: MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;挪用延时子程序
AJMP START1 ;跳到START1
DELAY: MOV R7,#5 ;延时
DEL1: MOV R6,#200
DEL2: MOV R5,#248
DEL3: DJNZ R5,DEL3
NOP
DJNZ R6,DEL2
DJNZ R7,DEL1
RET ;子程序返回
END ;程序结束
版权声明:本文为CSDN博主「大佬们看过来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_52297671/article/details/122244673
暂无评论