📄 dianyabiao.asm
字号:
;****************************************************************
;本电压表可测量0~40v的电压,精确到个位。
;测量方法:利用LM331进行压频转换,公式如下:
; f0= Vin*R2/2.09*R8*R13*C5
; 则 f0=Vin*10000000/14212
; 所以,只要我们能测出在1421.2us内,有多少个f0,就是要测的电压 !
;此方法简单巧妙,读者可仔细体会其中的转换关系!!!
;将频率接到T1引脚上就可以进行测量了!!!
;*****************************************************************
ORG 0000H
AJMP BEGIN
ORG 000BH
AJMP COUNT0
ORG 0030H
BEGIN: MOV R1,#40H
CLR 00H
MOV SP,#50H
MOV IE,#82H ;开T0中断,T1只用来计数,不产生中断
MOV TMOD,#51H ;T0为定时器,T1为计数器
MOV TH0,#0FAH ;T0定时1421us
MOV TL0,#73H
MOV TH1,#0 ;T1所计的个数便是电压的值
MOV TL1,#0
MOV 14H,#0EH ;动态显示的驱动位在开机时的状态
MOV 15H,#0FH ;即只显示个位
MOV 16H,#0FH
MOV 17H,#0FH
LOOP: CLR P1.0 ; 设置行编码"1110"
SETB P1.1
SETB P1.2
SETB P1.3
JB P1.4,NEXT1 ;判断"1"键是否按下
ACALL DLY20MS ; 延时去抖
K0: JB P1.4,K00 ; 等待"1"键释放
AJMP K0
K00: JB 00H,PUTOFF ;电压表的开关
SETB 00H
NEXT1: JNB 00H,BACK ;当00H位为1时,动态显示开
MOV TCON,#50H ;开计数器
MOV @R1,14H ;动态显示数据显示输入时由右向左显示频率
MOV A,10H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV @R1,15H
MOV A,11H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV @R1, 16H
MOV A,12H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV @R1,17H
MOV A,13H
XCHD A,@R1
MOV DPTR,#6000H
MOV A,@R1
MOVX @DPTR,A
MOV A,#0F0H
MOV DPTR,#6000H
MOVX @DPTR,A
BACK: SJMP LOOP
PUTOFF: CLR 00H
SJMP LOOP
ORG 0100H
COUNT0: PUSH ACC ;保护A
MOV TCON,#00H ;关两个计数器
MOV A,TL1 ;取计数值进A中等待处理
MOV B,#10
DIV AB
MOV 10H,B ;电压值个位进10H
MOV 11H,A ;十位进11H,由动态显示窗口显示
MOV 15H,#0D0H
MOV TL1,#0 ;计数器清零
MOV TH0,#0FAH ;T0定时1421us
MOV TL0,#73H
MOV TCON,#50H ;开两个计数器
POP ACC
RETI
DLY20MS: MOV 22H,#70H ; 延时20毫秒子程序 *******占用资源22h,23h****************
DY1: MOV 23H,#69H
DY2: DJNZ 23H,DY2
DJNZ 22H,DY1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -