📄 pinlvji.asm
字号:
DisplayBuffer EQU 40H ;设置显示缓冲区的地址为40h-45h共6个字节
Disp1 EQU 21H
Disp2 EQU 22H
Disp3 EQU 23H
ORG 0000H
AJMP START
ORG 000BH ;T0中断入口
AJMP T0INT
ORG 0013H ;INT1中断入口
AJMP INT_1
ORG 0100H
START:
MOV SP,#70H
MOV IE,#86H ;开放T0、INT1中断
MOV TMOD,#01H ;T0定时
MOV TH0,#0D8H
MOV TL0,#0F0H ;定时10ms
MOV 20H,#100 ;100*10ms=1s
MOV Disp1,#0
MOV Disp2,#0
MOV Disp3,#0;存放采集到的频率
SETB TR0
WAIT: AJMP WAIT ;等待中断
T0INT: ;定时10ms产生中断
DJNZ 20H,NEXT1
MOV Disp2,TH1 ;1s时间到则采集数据
MOV Disp1,TL1
ACALL ConvertoBuffer
ACALL DISPLAY
AJMP EXIT
NEXT1: MOV TH0,#0D8H ;继续定时
MOV TL0,#0F0H
EXIT: RETI
INT_1: CLR C
MOV A,Disp1
ADD A,#01H
DA A
MOV Disp1,A
MOV A,Disp2
ADDC A,#00H
DA A
MOV Disp2,A
MOV A,Disp3
ADDC A,#00H
DA A
MOV Disp3,A
RETI
DISPLAY:
MOV R1,#DisplayBuffer ;指向显示数据首址
MOV R4,#11111110b ;扫描控制字初值
PLAY: MOV A,R4 ;扫描字放入A
MOV P2,A ;从P2口输出
MOV A,@R1 ;取显示数据到A
MOV DPTR,#TAB ;取段码表地址
MOVC A,@A+DPTR ;查显示数据对应段码
MOV P1,A ;段码放入P1口
LCALL Delay
INC R1 ;指向下一地址
MOV A,R4 ;扫描控制字放入A
JNB ACC.5,ENDOUT ;扫到第六位时结束
RL A ;A中数据循环左移
MOV R4,A ;放回R5内
AJMP PLAY ;跳回PLAY循环
ENDOUT:
RET ;子程序返回
TAB: DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH ;"0""1""2" "3""4""5""6""7" "8""9""
DB 39H,5EH,79H,71H,40H,00H
Delay:
MOV R6,#2
Del:
MOV R7,#249
DJNZ R7,$
DJNZ R6,Del
RET
ConvertoBuffer:
MOV R1,#DisplayBuffer ;R1指向显示缓冲区,存储要显示的六位
Convert:
MOV A,Disp1
MOV B,#10 ; 十位,个位分开,个位放在B中,十位放在A中
DIV AB
MOV @R1,B;
INC R1; 缓冲寄存器的地址加1
MOV @R1,A; 存入缓冲区
;
INC R1
MOV A,Disp2
MOV B,#10
DIV AB
MOV @R1,B;
INC R1; 缓冲寄存器的地址加1
MOV @R1,A;
;
INC R1
MOV A,Disp3
MOV B,#10
DIV AB
MOV @R1,B
INC R1; 缓冲寄存器的地址加1
MOV @R1,A;
;
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -