如果把这一大堆照片堆叠在一起,形成一张照片,可以得到类似慢门拍摄的效果。
如果把这一大堆照片组合到一起,形成一个动画,就是延时摄影的效果了。
做延时摄影,用美图秀秀的“闪图”功能很方便……唯一缺点是一次只能编辑50张照片……
具体方法如下:
1、针对不同的 *** 作系统和编译器,需要了解预留多少空间才能较好地保证程序安全。
2、在程序中设置堆栈预留空间的方法,可以通过在函数中添加 __attribute__((noinline, noclone)) 属性,然后使用 __builtin_alloca() 函数来预留空间。
3、另外,也可以在编译时使用一些工具来检测和分析程序的堆栈使用情况。
;已知 (A) = 02H, (SP) = 40H, (41H) = FFH, (42H) = FFH
;这是一个子程序,调用时PC由硬件自动入栈,所以调用后SP = 40H+2 = 42H,而42H处值=FFH
POP DPH ;出栈,栈数据放到DPH和DPL,这时DPTR = FFFFH
POP DPL ;因为开始SP =42H,出栈后SP = 42H - 2 = 40H
MOV DPTR,#3000H ;向寄存器DPTR写入数据3000H
RR A ;A右移一次,A=02H=0000 0010 -->0000 0001=01H
MOV B,A ;B = A = 01H
MOVC A,@A+DPTR ;将ROM地址 A+DPTR = 01H+3000H = 3001H 处的数据读到A中
PUSH ACC ;将 读到的数据 推入栈,看数据区3001H处 = 10H
;入栈是先SP+1,再读入数据,所以(41H) = 10H,SP = 41H
MOV A,B ;A = B = 01H
INC A ;A = 01H+1 = 02H
MOVC A,@A+DPTR ;读取ROM 3002H地址单元的内容:80H
PUSH ACC ;将 读到的数据 推入栈,这时(42H) = 80H,SP = 40H
RET ;返回时,PC由硬件出栈,因为这时SP已经不是42H,而且程序一开始
;就执行POP导致PC入栈值读出来,然后经过MOV DPTR,#3000H语句就丢失掉了,程序可能回不到
;调用前的地方,而是跑到 读取到的数据 1080H这个地方了,所以执行完后PC = 1080H
;--数据地址区----------
ORG 3000H
DB 10H,80H,30H,50H,30H,50H
请你参考:
高手们喜欢这样写,看懂了就没有那么可怕了,其实就是一种保存数据的方法。
下面逐句分析,先说明一下吧:PUSH与POP必须成对出现,否则就乱了;另外谁跟谁是一对也得弄清。
DELAY:MOV R2,#30H //以下3行不解释了
ACALL DELAY0
RET
DELAY0: PUSH 02H //把02H单元的数据入栈,就是把R2的数据存入堆栈。
//用的是第一组寄存器(m1m0=00)
//把堆栈看作盖楼,现在盖了一层
DELAY1: PUSH 02H //还是把R2 的数据入栈,这是大楼的第二层了
DELAY2: PUSH 02H //还是把R2 的数据入栈,这是大楼的第三层了
DELAY3: DJNZ R2, DELAY3 //在这一行循环,直到R2为0
POP 02H //第三层出栈,把栈内的数据d给02H单元,就是装入R2。
//第三层拆了,不存在了。
DJNZ R2, DELAY2 //R2不为0,返回DELAY2,重新盖第三层。
//R2为0,往下执行,第三层不盖了,第三层不存在了。
POP 02H //第二层出栈,栈内数据d给R2,第二层拆了
DJNZ R2, DELAY1 //R2不为0,返回DELAY1,重盖第二层。
//R2为0,往下执行,第二层不盖了,第二层不存在了。
POP 02H //第一层出栈,第一层拆了
DJNZ R2, DELAY0 //R2不为0,返回DELAY0,重盖第一层。
//R2为0,往下执行,第一层不盖了,整个大楼消失了。
RET
3看懂没有,好好看看,仔细想想,相信你能弄懂!!!!
以上就是关于利用单反相机按一定的间隔拍多张照片,然后用ps软件堆栈在一起,可以模拟延时拍摄吗全部的内容,包括:利用单反相机按一定的间隔拍多张照片,然后用ps软件堆栈在一起,可以模拟延时拍摄吗、如何设置堆栈预留空间才能保证程序安全、单片机8051堆栈问题程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)