一、原理总结??利用两个寄存器 R4 和 R5 来存储两个数码管的显示数字,R4 用来存储前一个数码管显示数字,而 R5 用来存储后一个数码管显示数字,利用左移操作 RLC 取 A 中首位放入 C 中,然后将 C 输入到数码管中,使用 R0 来控制循环,对于 R4 和 R5 重复上述过程各自重复8次,使得当数码管中每位都有数据时,数码管便会显示,之后使用停顿函数使数码管上数字停留一段时间 。
二、程序分析图示部分:代码部分: ; Reset Vector org 0000h jmp Start ;==================================================================== ; CODE SEGMENT ;==================================================================== org 0100h TAB : DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;是用来存储0-15这16个数据,之后使用A来寻址 PAUSE: ;停顿函数 ;R1是第一层嵌套循环,R2是第二层嵌套循环,当R2不为0时跳转,为0时不跳转,执行DJNZ R1,D1使得R1- -,当R1不为0时跳转,为0时不跳转 。 MOV R1,#255 ;R1是第一层嵌套循环 D1:MOV R2,#255 ;R2是第二层嵌套循环 D2:DJNZ R2,D2 ;当R2不为0时跳转,为0时不跳转,执行DJNZ R1,D1使得R1- - DJNZ R1,D1 ;当R1不为0时跳转,为0时不跳转 RET LED: ;数码管亮灯函数 MOV R0,#8 ;将8赋值给R0,8位左移 MOV A,R5 ;R5代表右边的LED的数 MOVC A,@A+DPTR ;A是偏移地址,是从DPTR中寻址 LOOP1: RLC A ;A左移,将A中高位放入C中 CLR P1.4 ;传输C到数码管中 MOV P1.5,C SETB P1.4 DJNZ R0,LOOP1 ;若R0为0,也即是执行完8次循环,不跳转,否则跳转 MOV R0,#8 ;和上面同理 MOV A,R4 MOVC A,@A+DPTR LOOP2: RLC A CLR P1.4 MOV P1.5,C SETB P1.4 DJNZ R0,LOOP2 MOV R6,#0 ;使用停顿函数,构成3层循环,使停顿时间延迟 S1:LCALL PAUSE INC R6 CJNE R6,#10,S1 ;循环次数为10次 RET START: MOV p0,A ;将p0置为0,使上面的数码管不显示 MOV DPTR,#TAB ;将TAB首地址赋给DPTR MOV R4,#0 ;赋初值为0 MOV R5,#0 ;赋初值为0 JMP XUNHUAN A1:MOV C,P1.0 ;当开关不闭合时,持续显示一个数字 JC XUNHUAN MOV C,9 ;当9号接口传输数据时,复位 JC FUWEI INC R5 ;R5++ CJNE R5,#16,XUNHUAN ;当R5为16时要对R4++,而R5<16时跳转 MOV R5,#0 INC R4 CJNE R4,#16,XUNHUAN ;当R4为16时重新执行START,而R5<16时跳转 JMP FUWEI XUNHUAN: LCALL LED JMP A1 FUWEI: MOV R4,#0 MOV R5,#0 JMP A1 JMP START ;==================================================================== END
经验总结扩展阅读
- 有趣实验 .NET下数据库的负载均衡
- 绵阳外国语实验学校好不好
- 晋江有哪些幼儿园
- 中学实验室视频是什么梗?
- 中学实验室事件是什么?
- 王者荣耀实验室之末世和破晓被动测试?
- 有关于科学小实验的制作视频吗?
- 实验室诊断方法包括哪些内容?
- 怎么通过实验室检查诊断家禽疾病?
- 谁能通俗解释下量子纠缠实验为什么需要随机数