?? 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 + -