📄 philips0.asm
字号:
;+++++++++++++++++++++++++++++++++++++++
;定义键盘及显示用
DISGE DATA 39H
DISSHI DATA 3AH
DISBAI DATA 3BH
DISQIAN DATA 3CH
DISWAN DATA 3DH
DISSHIWAN DATA 3EH
KEYBUFF DATA 00H
PLOCK_LED BIT P0.7
BBB BIT P0.6
;+++++++++++++++++++++++++++++++++++++++
;六位BCD码转三字节二进制码子程序用
GEWEI DATA 30H
SHIWEI DATA 31H
BAIWEI DATA 32H
QIANWEI DATA 33H
WANWEI DATA 34H
SHIWAN DATA 35H
OUTPUTL DATA 36H
OUTPUTM DATA 37H
OUTPUTH DATA 38H
;+++++++++++++++++++++++++++++++++++++++
SCL BIT P0.0
SDA BIT P0.1
;+++++++++++++++++++++++++++++++++++++++
ADBW DATA 40H
ADBR DATA 41H
DB1 DATA 42H
DB2 DATA 43H
CB DATA 44H
PB DATA 45H
BUFER3 DATA 46H
PLL_FSTEP DATA 47H
;+++++++++++++++++++++++++++++++++++++++
BEICHUH DATA 20H
BEICHUM DATA 21H
BEICHUL DATA 22H
;--------------------------------------
CHUSHUH DATA 23H
CHUSHUL DATA 24H
;----------------------------------------
SHANGH DATA 28H
SHANGM DATA 29H
SHANGL DATA 2AH
;--------------------------------------
YUSHUH DATA 2BH
YUSHUL DATA 2CH
;****************************************
;**************************************
STAR: MOV DISGE,#0
MOV DISSHI,#5
MOV DISBAI,#7
MOV DISQIAN,#9
MOV DISWAN,#4
MOV DISSHIWAN,#0
MOV SP,#50H
;-------------------------------------
;以下为LCD应用程序的初始化程序,必须放在程序的开头
RS BIT P2.0
RW BIT P2.1
E BIT P2.2
BF BIT P3.7
CKOU DATA P2
DKOU DATA P3
ZLING DATA 70H
SHUJU DATA 71H
;*******************************
MOV ZLING,#1B ;清屏
ACALL WRTC
MOV ZLING,#10B ;归位,AC=0
ACALL WRTC
MOV ZLING,#111000B ;8位数据总线,2行显示,5X7点阵
ACALL WRTC
MOV ZLING,#1100B ;开显示,开光标,光标闪动
ACALL WRTC
MOV ZLING,#110B ;光标不动,显示全部右移
ACALL WRTC
;***********************************
;***********************************
M: LCALL SEND_PLL
LCALL DISLCD1
;*************************************
;矩阵键盘扫描,键盘接在P1口
L1: MOV P1,#11110000B
MOV A,P1
CJNE A,#11110000B,HAVE_KEY
ACALL PLL_PLOCKTEST
SJMP L1
;--------------------------------
;读高频头内部处理的数据
PLL_PLOCKTEST: ACALL READ_DELAY
ACALL READ_TURN
MOV A,BUFER3
MOV C,ACC.6 ;读锁定指示到PLOCK_LED
MOV PLOCK_LED,C
;----------------------------------
READ_DELAY: PUSH 00H
PUSH 01H
MOV R0,#20
R_LOOP1: MOV R1,#20
R_LOOP2: DJNZ R1,R_LOOP2
DJNZ R0,R_LOOP1
POP 01H
POP 00H
RET
;--------------------------------
HAVE_KEY: MOV P1,#11111110B
JNB P1.6,K_SETF ;K0按下就转到数字设置
AJMP L1
K_SETF: ACALL KEYWAIT
ACALL K_SHUZI
ACALL SEND_PLL
AJMP L1
;-----------------------------------
;以下为输入数字的键盘扫描
;------------------------------------
K_SHUZI: NOP
LINE1: MOV P1,#11111110B
JNB P1.6,K0
JNB P1.5,K_ENTER
JNB P1.4,K_ESC
;--------------------------------
LINE2: MOV P1,#11111101B
JNB P1.6,K3
JNB P1.5,K6
JNB P1.4,K9
;-------------------------------
LINE3: MOV P1,#11111011B
JNB P1.6,K2
JNB P1.5,K5
JNB P1.4,K8
;-------------------------------
LINE4: MOV P1,#11110111B
JNB P1.6,K1
JNB P1.5,K4
JNB P1.4,K7
;--------------------------------
AJMP LINE1
;-------------------------------
K0: MOV KEYBUFF,#0
AJMP YIWEI
K1: MOV KEYBUFF,#1
AJMP YIWEI
K2: MOV KEYBUFF,#2
AJMP YIWEI
K3: MOV KEYBUFF,#3
AJMP YIWEI
K4: MOV KEYBUFF,#4
AJMP YIWEI
K5: MOV KEYBUFF,#5
AJMP YIWEI
K6: MOV KEYBUFF,#6
AJMP YIWEI
K7: MOV KEYBUFF,#7
AJMP YIWEI
K8: MOV KEYBUFF,#8
AJMP YIWEI
K9: MOV KEYBUFF,#9
AJMP YIWEI
;---------------------------------------
K_ENTER: LCALL KEYWAIT
RET
K_ESC: LCALL KEYWAIT
LCALL DATA_ESC
RET
;----------------------------------------
YIWEI: ACALL KEYWAIT
MOV DISSHIWAN,DISWAN
MOV DISWAN,DISQIAN
MOV DISQIAN,DISBAI
MOV DISBAI,DISSHI
MOV DISSHI,DISGE
MOV DISGE,KEYBUFF
ACALL DISLCD1
AJMP LINE1
;**************************************
;*************************************
DATA_ESC: MOV DISGE,GEWEI
MOV DISSHI,SHIWEI
MOV DISBAI,BAIWEI
MOV DISQIAN,QIANWEI
MOV DISWAN,WANWEI
MOV DISSHIWAN,SHIWAN
LCALL DISLCD1
RET
;***************************************
;***************************************
KEYWAIT: ACALL KEYDELAY
KW: MOV P1,#11110000B
MOV A,P1
CJNE A,#11110000B,KW
RET
;**************************************
KEYDELAY: PUSH 00H
PUSH 01H
MOV R0,#80
LOOP1: MOV R1,#255
LOOP2: CPL BBB
DJNZ R1,LOOP2
DJNZ R0,LOOP1
POP 01H
POP 00H
RET
;*******************************
;**********************************
;六位BCD码转三字节二进制码子程序
;入口: GEWEI、 SHIWEI、 BAIWEI、 QIANWEI、 WANWEI、 SHIWAN(个、十、百、千、万、十万位)
;出口: OUTPUTL、OUTPUTM、OUTPUTH 低、中、高八位
;占用资源A,B,GEWEI,SHIWEI,BAIWEI,QIANWEI,WANWEI,SHIWAN,66H,67H,68H,
;69H,6AH,6BH,6CH,6DH,6EH,3FH,70H,71H,OUTPUTH,OUTPUTM
;*****************************************
KH: MOV A,SHIWEI ; SHIWEI*10
MOV B,#10
MUL AB
MOV 66H,A
;--------------------------------
MOV A,BAIWEI ; BAIWEI*100
MOV B,#100
MUL AB
MOV 67H,A
MOV 68H,B
;--------------------------------
MOV A,QIANWEI ; QIANWEI*1000
MOV B,#10
MUL AB
MOV B,#100
MUL AB
MOV 69H,A
MOV 6AH,B
;---------------------------------
MOV A,WANWEI ; WANWEI*10000
MOV B,#10
MUL AB
MOV B,#100
MUL AB
MOV 6BH,A
MOV 6CH,B
;----------------------
MOV A,6BH
MOV B,#10
MUL AB
MOV R0,A
MOV R1,B
MOV A,6CH
MOV B,#10
MUL AB
MOV R2,A
MOV R3,B
MOV 6DH,R0
CLR C
MOV A,R1
ADD A,R2
MOV 6EH,A
MOV A,R3
ADDC A,#0
MOV 3FH,A
;-----------------------------------
MOV A,SHIWAN ; SHIWAN*100000
MOV B,#10
MUL AB
MOV B,#100
MUL AB
MOV 70H,A
MOV 71H,B
;-------------------------
MOV A,70H
MOV B,#100
MUL AB
MOV R0,A
MOV R1,B
MOV A,71H
MOV B,#100
MUL AB
MOV R2,A
MOV R3,B
MOV OUTPUTH,R0
CLR C
MOV A,R1
ADD A,R2
MOV OUTPUTM,A
MOV A,R3
ADDC A,#0
MOV OUTPUTL,A
;----------------------
ZH: CLR C
MOV R0,#0
D1: MOV A,GEWEI
ADD A,66H
JNC D2
INC R0
D2: ADD A,67H
JNC D3
INC R0
D3: ADD A,69H
JNC D4
INC R0
D4: ADD A,6DH
JNC D5
INC R0
D5: ADD A,OUTPUTH
JNC DEND
INC R0
DEND: MOV OUTPUTH,A
;---------------------
MOV A,R0
ADD A,68H
MOV 68H,A
MOV R0,#0
JNC M1
INC R0
M1: MOV A,68H
ADD A,6AH
JNC M2
INC R0
M2: ADD A,6EH
JNC M3
INC R0
M3: ADD A,OUTPUTM
JNC MEND
INC R0
MEND: MOV OUTPUTM,A
;---------------------
MOV A,R0
ADD A,3FH
MOV 3FH,A
H: MOV A,3FH
ADDC A,OUTPUTL
MOV OUTPUTL,A
RET
;*****************************************
;三字节除双字节商为三字节除法子程序
;被除数: BEICHUL(被除数最低位)~BEICHUH
;(被除数最高位)
;除数: CHUSHUL(除数最低位),CHUSHUH(除数最高位)
;商: SHANGL(商最低位)~SHANGH(商最高位)
;余数: YUSHUL(余数低位)~YUSHUH(余数高位)
;额外占用资源: R1,R2,R7
;------------------------------
CHUFA: MOV R7,#18H
MOV SHANGH,#0
MOV SHANGM,#0
MOV SHANGL,#0
MOV YUSHUH,#0
MOV YUSHUL,#0
SH_32DIV: CLR C
;----------------------------
MOV A,BEICHUL
RLC A
MOV BEICHUL,A
;----------------------------
MOV A,BEICHUM
RLC A
MOV BEICHUM,A
;----------------------------
MOV A,BEICHUH
RLC A
MOV BEICHUH,A
;----------------------------
MOV A,YUSHUL
RLC A
MOV YUSHUL,A
;----------------------------
MOV A,YUSHUH
RLC A
MOV YUSHUH,A
;----------------------------
MOV A,SHANGL
RLC A
MOV SHANGL,A
;----------------------------
MOV A,SHANGM
RLC A
MOV SHANGM,A
;----------------------------
MOV A,SHANGH
RLC A
MOV SHANGH,A
;+++++++++++++++++++++++++++++
CLR C
MOV A,YUSHUL
SUBB A,CHUSHUL
MOV R1,A
;-----------------------------
MOV A,YUSHUH
SUBB A,CHUSHUH
MOV R2,A
;+++++++++++++++++++++++++++++
JC TO_LOOP1
INC SHANGL
MOV A,R1
MOV YUSHUL,A
MOV A,R2
MOV YUSHUH,A
TO_LOOP1: DJNZ R7,SH_32DIV
;++++++++++++++++++++++++++++++++++
RET
;******************************************
SEND_PLL: MOV GEWEI,DISGE ;将显示BCD值送到二进制合成程序
MOV SHIWEI,DISSHI
MOV BAIWEI,DISBAI
MOV QIANWEI,DISQIAN
MOV WANWEI,DISWAN
MOV SHIWAN,DISSHIWAN
LCALL KH
;-------------------------------------------------
;----------------------------------------
MOV BEICHUH,OUTPUTL
MOV BEICHUM,OUTPUTM
MOV BEICHUL,OUTPUTH
;--------------------------------------
;---------------------------------------
;38000KHZ对应二进制数为: 9470H
ADDIF: CLR C
MOV A,BEICHUL
ADD A,#70H
MOV BEICHUL,A
MOV A,BEICHUM
ADDC A,#94H
MOV BEICHUM,A
MOV A,BEICHUH
ADDC A,#0
MOV BEICHUH,A
;-------------------------------------
;-------------------------------------
CLR C
MOV A,BEICHUL
SUBB A,#0C8H
MOV A,BEICHUM
SUBB A,#20H
MOV A,BEICHUH
SUBB A,#03H
JC SETUP_LHF
;---------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -