📄 1.asm
字号:
;********************************
;端口定义
;********************************
EOC EQU P2.0H ;定义ADC0809控制端口
ALE EQU P3.3H
ST EQU P3.4H
OE EQU P3.5H
SHUMA_4 DATA 41H ;定义数码显示各位的读取代码
SHUMA_3 DATA 42H
SHUMA_2 DATA 43H
SHUMA_1 DATA 44H
;********************************
;开始
;********************************
ORG 0000H
LJMP START
ORG 0003H
RETI ;中断返回
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
ORG 0030H
;********************************
;主程序
;********************************
START: CLR P3.0H
SETB P3.1H
CLR P3.2H
MAIN: LCALL CLEAN
LCALL KEY
CLR EA ;禁止所有中断
LCALL ADCCAIJI ;采集数据
LCALL SJCL ;处理数据
LCALL DISP ;显示数据
AJMP MAIN
;********************************
;初始化所有变量
;********************************
CLEAN: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
CLR ALE
CLR ST
CLR OE
RET
;********************************
;检测按建
;********************************
KEY:
JNB P2.3H,KEY1
JNB P2.2H,KEY2
JNB P2.1H,KEY3
RET
KEY1: LCALL DELAY
JNB P2.3H,KEY11
RET
KEY11: CLR P3.0H
SETB P3.1H
CLR P3.2H
RET
KEY2: LCALL DELAY
JNB P2.2H,KEY22
RET
KEY22: SETB P3.0H
CLR P3.1H
CLR P3.2H
RET
KEY3: LCALL DELAY
JNB P2.1H,KEY33
RET
KEY33: CLR P3.0H
CLR P3.1H
CLR P3.2H
RET
;********************************
;采集数据
;********************************
ADCCAIJI: SETB ALE
NOP
NOP
NOP
CLR ALE
SETB ST
NOP
NOP
NOP
CLR ST
WAIT: JB EOC,MOVD ;等待AD转换结束
AJMP WAIT
MOVD: SETB OE ;开启采集
MOV A,P1
MOV 21H,A
MOV P0,#0FFH ;端口复位
MOV P1,#0FFH
MOV P2,#0FFH
RET
;********************************
;数据处理
;********************************
SJCL: MOV A,21H
MOV B,#0C4H ;乘以196(5V/255*10000)
MUL AB
MOV 31H,A ;将低4位数据存放于31H
MOV 32H,B ;将高4位数据存放于32H
;***********************************
;将所读入的二进制数转化成BCD码
;***********************************
BCD: MOV R3,#10H
MOV 35H,#00H ;最低两位存放地址
MOV 36H,#00H ;中间两位存放地址
MOV 37H,#00H ;最高两位存放地址
BCD0: CLR C
MOV A,31H
RLC A
MOV 31H,A
MOV A,32H
RLC A
MOV 32H,A
MOV A,35H
ADDC A,35H
DA A
MOV 35H,A
MOV A,36H
ADDC A,36H
DA A
MOV 36H,A
MOV A,37H
ADDC A,37H
DA A
MOV 37H,A
DJNZ R3,BCD0 ;2个字节转化16次
;***********************************
; 获得数码显示数据的代码
;***********************************
MOV A,35H ;获得数码显示第4位数据的代码
ANL A,#0F0H
SWAP A
MOV SHUMA_4,A ;存放在41H
MOV A,36H ;获得数码显示第3位数据的代码
ANL A,#0FH
MOV SHUMA_3,A ;存放在42H
MOV A,36H ;获得数码显示第2位数据的代码
ANL A,#0F0H
SWAP A
MOV SHUMA_2,A ;存放在43H
MOV A,37H ;获得数码显示第1位数据的代码
ANL A,#0FH
MOV SHUMA_1,A ;存放在44H
RET
;********************************
;数码显示
;********************************
DISP:
MOV P2,#0FFH ;端口初始化
MOV P0,#0FFH
MOV P2,#0EFH ;开通P2.7(COM1)
MOV A,SHUMA_4
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
MOV P2,#0FFH ;端口初始化
MOV P0,#0FFH
MOV P2,#0DFH ;开通P2.6(COM2)
MOV A,SHUMA_3
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
MOV P2,#0FFH ;端口初始化
MOV P0,#0FFH
MOV P2,#0BFH ;开通P2.5(COM3)
MOV A,SHUMA_2
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
MOV P2,#0FFH ;端口初始化
MOV P0,#0FFH
MOV P2,#07FH ;开通P2.4(COM4)
MOV A,SHUMA_1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
CLR P0.7
LCALL DL1MS
MOV P2,#0FFH ;端口初始化
MOV P0,#0FFH
RET
;********************************
;数据
;********************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;********************************
;延时程序
;********************************
DL1MS: MOV R6,#14H
DL1MS1: MOV R7,#19H
DL1MS2:DJNZ R7,DL1MS2
DJNZ R6,DL1MS1
RET
DL10MS: MOV R1,#30H
DL10MS1: MOV R0,#0FFH
DL10MS2:DJNZ R0,DL10MS2
DJNZ R1,DL10MS1
RET
DS1S: MOV R5,#25H
DL1S1: MOV R4,#40H
DL1S2: MOV R3,#250H
DL1S3: DJNZ R3,DL1S3
DJNZ R4,DL1S2
DJNZ R5,DL1S1
RET
DELAY:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -