📄 13跑马灯渐亮渐暗.asm
字号:
;这个程序的重要意义在于,大家可以学习到以下知识;通过程序来控制LED或者数码管的亮度,来达到协调视觉\节能省电等目的.
org 00h
mov r0,#255;开始时让点亮的时间最长
mov r1,#00;开始时让熄灭的时间最短
jmp main
main:
setb p1.0
setb p1.1
setb p1.2
setb p1.3
setb p1.4
setb p1.5
setb p1.6
setb p1.7
inc r1
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
call ys100 ;调用熄灭延时,每次延时的长短为r1中的数值大小绝定
clr p1.0
clr p1.1
clr p1.2
clr p1.3
clr p1.4
clr p1.5
clr p1.6
clr p1.7
dec r0
call ys200 ;调用点亮延时,每次延时的长短为r1中的数值大小绝定
call ys200 ;调用点亮延时,每次延时的长短为r1中的数值大小绝定
call ys200 ;调用点亮延时,每次延时的长短为r1中的数值大小绝定
call ys200 ;调用点亮延时,每次延时的长短为r1中的数值大小绝定
call ys200 ;调用点亮延时,每次延时的长短为r1中的数值大小绝定
call ys200 ;调用点亮延时,每次延时的长短为r1中的数值大小绝定
jmp main
ys100:
mov 30h,r1
djnz 30h,$ ;这句话的意思是30h中的数减1不等于0就跳到当前行,即原地踏步,记住:这名话要值300元,如果你将来因为不懂这个美元,而问我,我会向你收300元学费的
ret
ys200:
mov 30h,r0
djnz 30h,$ ;这句话的意思是30h中的数减1不等于0就跳到当前行,即原地踏步,记住:这名话要值300元,如果你将来因为不懂这个美元,而问我,我会向你收300元学费的
ret
end
说明:灯长亮为最亮,灯长灭为最暗,利用人的视觉暂留特性,让灯快速的亮灭交替,通过改变亮灭的时间就可以改变灯的明暗
关于收学费,的确,很多事情都是很简单的,你不懂的话并且自学也不会的话,就只有交钱跟别人学,五一电子因为$而收学费是来者不拒,这不能怪我们贪财
这只能怪很多单片机教材并不向大家讲这个$符号的意思,或者虽然有讲,但是大家不去认真看,不去试,不去想,这才被本站捡了个便宜.
以上延时程序我随便复制了几下,大家可以自己写一个循环程序,让程序短小
以上程序不能算是渐亮渐暗,实际是突亮,如果要实行渐亮,需要在数值加1到255后,再变成减1,减1到0后再变成加1,这个程序就请大家自己去写吧,
如果请本站写的话,是要收钱的,不便处请大家谅解哟.
还有,人眼的亮度感觉并不是和亮暗的时间完全成比例的,这有存在一个非线性的关系,大家可以实践.
如要要制作一个亮度调节功能的话,也就是要修改寄存器的数值为某一固守数值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -