串行控制七段数码管
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