本帖最后由 mentooo 于 2021-12-29 12:23 编辑
《实例解读51单片机完全学习与应用》程序8-15
目标:数码管显示1和5
原代码如下:Keil调试不正确!!新手求解
- ORG 00H
- START:
- MOV 30H,#1 ; 低位七段数码管DS0显示数据
- MOV 31H,#5 ; 高位七段数码管DS1显示数据
- MOV R0,#30H ; R0=30H
- MOV R1,#40H ; R1=40H
- MOV R2,#2 ; R2=2
- DP10:
- MOV DPTR,#TABLE ; 装表
- MOV A,@R0 ; 将R0所指的数据载入A
- MOVC A,@A+DPTR ; 取表
- MOV @R1,A ; 把数据暂时保存在R1所指的地址中
- INC R1 ; R1自增1
- INC R0 ; R0自增1
- DJNZ R2,DP10 ; 如果R2不等于0,说明没有取完两个段码,跳回DP10循环
- MOV R0,#40H ; R0=40H,指向刚才保存段码的空间
- MOV R1,#2 ; R1=2,段码共有2个字节数
- DP11:
- MOV R2,#8 ; R2=8,每位显示数据共有8个段码,R2作计数器
- MOV A,@R0 ; 把R0指向的段码数据载入A
- DP12:
- RLC A ; 段码数据向左移动一位
- MOV P2.0,C ; 串行输出一位段码数据
- CLR P2.1 ; 发送位移脉冲
- SETB P2.1 ; 形成上升沿
- DJNZ R2,DP12 ; 判断是否输出8位段码
- INC R0 ; R0自增1
- DJNZ R1,DP11 ; 判断是否输出两个显示数据
- JMP $
- TABLE: ;七段数码管显示数据表(段码)
- DB 40H,79H,24H,30H,19H ;0,1,2,3,4
- DB 12H,02H,78H,00H,10H ;5,6,7,8,9
- END
复制代码
|