📄 main.asm
字号:
MOV SUBADR1,#08H
MOV BYTECNT,#1 ;将字节数送入BYTECNT
LCALL RcvSub
JB retry, XML2
RET
;*****************************************************************
;将EEPROM中的数据调入LM1238的三个DAC寄存器中以及CONTRCTL(对比度)中
;*****************************************************************
DYSJ:
MOV SlvAdr,#0A0H ;将数据从EEPROM中调出
MOV SubAdr,#20H
MOV ByteCnt,#1
LCALL RcvSub1
JB retry,DYSJ
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
MM0: MOV SlvAdr,#0BAH ;将数据存入CONTRCTL中
MOV SubAdr,#13H
MOV SubAdr1,#08H
MOV ByteCnt,#1
LCALL SendSub
JB retry,MM0
;********************************************************
KKJP: MOV SlvAdr,#0A0H ;将数据从EEPROM中调出
MOV SubAdr,#21H
MOV ByteCnt,#1
LCALL RcvSub1
JB retry,KKJP
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
MM1: MOV SlvAdr,#0BAH ;将数据存入DAC2中
MOV SubAdr,#15H
MOV SubAdr1,#08H
MOV ByteCnt,#1
LCALL SendSub
JB retry,MM1
;************************************************
KKJP1:MOV SlvAdr,#0A0H ;将数据从EEPROM中调出
MOV SubAdr,#22H
MOV ByteCnt,#1
LCALL RcvSub1
JB retry,KKJP1
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
MM2: MOV SLVADR,#0BAH ;将数据存入DAC3中
MOV SUBADR,#14H
MOV SUBADR1,#08H
MOV ByteCnt,#1
LCALL SendSub
JB retry,MM2
;*****************************************************
KKJP2:MOV SlvAdr,#0A0H ;将数据从EEPROM中调出
MOV SubAdr,#23H
MOV ByteCnt,#1
LCALL RcvSub1
JB retry,KKJP2
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
MM3: MOV SLVADR,#0BAH ;将数据存入DAC1中
MOV SUBADR,#16H
MOV SUBADR1,#08H
MOV ByteCnt,#1
LCALL SendSub
JB retry,MM3
RET
;**************************************
;将LM1238调节后的数值保存入EEPROM
;**************************************
CSJ:
MOV SlvAdr,#0BAH ;从CONTRCTL中将数据调出
MOV SubAdr,#13H
MOV SubAdr1,#08H
MOV ByteCnt,#1
LCALL RcvSub
JB retry,CSJ
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
MMX0: MOV SlvAdr,#0A0H
MOV SubAdr,#20H
MOV ByteCnt,#1
LCALL SendSub1
JB retry,MMX0
MMX:
MOV SlvAdr,#0BAH ;从DAC2中将数据调出
MOV SubAdr,#15H
MOV SubAdr1,#08H
MOV ByteCnt,#1
LCALL RcvSub
JB retry,MMX
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
HLU: MOV SlvAdr,#0A0H
MOV SubAdr,#21H
MOV ByteCnt,#1
LCALL SendSub1
JB retry,HLU
MMX1:
MOV SlvAdr,#0BAH ;从DAC3中将数据调出
MOV SubAdr,#14H
MOV SubAdr1,#08H
MOV ByteCnt,#1
LCALL RcvSub
JB retry,MMX1
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
HLU1: MOV SlvAdr,#0A0H
MOV SubAdr,#22H
MOV ByteCnt,#1
LCALL SendSub1
JB retry,HLU1
MMX2:
MOV SlvAdr,#0BAH ;从DAC1中将数据调出
MOV SubAdr,#16H
MOV SubAdr1,#08H
MOV ByteCnt,#1
LCALL RcvSub
JB retry,MMX2
MOV R0,#RcvDat
MOV A,@R0
MOV R0,#XmtDat
MOV @R0,A
HLU2: MOV SlvAdr,#0A0H
MOV SubAdr,#23H
MOV ByteCnt,#1
LCALL SendSub1
JB retry,HLU2
RET
;***********************************
;定时器1初始化程序(需修改)
;***********************************
INIT_TM1:
MOV TMOD, #10H ;定时器1置为模式1
MOV TH1, #00H ;定时0.128mS@6MHz
MOV TL1, #00H
; SETB ET1 ;开放T1中断使能.
ORL TCON, #40H ;启动 T1
RET
;***********************************************************************
;定时器1置初值,打开时钟中断
;***********************************************************************
;CZ_TM1:
; LCALL SDelay
; LCALL SDelay
; LCALL SDelay
; LCALL SDelay
; MOV TH1,#00H ;置初值
; MOV TL1,#00H
; SETB ET1 ;开放T1中断使能
; RET
;***********************************************************************
;键盘初始化程序
;***********************************************************************
INIT_KBI:
MOV KBI,#08H ;使能P0.3口产生中断
SETB EKB ;使能键盘中断允许位
RET
;************************************************************************
;关闭掉电检测功能
;************************************************************************
GBDD_CK:
ANL AUXR1,#0BFH
RET
;************************************************************************
;*名称: KEY_TASK *
;*用途: 键盘处理子程序.根据键盘扫描得到的键值执行相应的操作. *
;*返回: *
;* R7 检测到的键值 *
;*说明: *
;************************************************************************
KEY_TASK:
PUSH ACC ;保存占用的寄存器.
PUSH PSW
PUSH B
PUSH 05H ;
MOV B, #00H
LCALL KEY_SCAN1
LCALL KEY_SCAN2
LCALL KEY_SCAN
MOV A, R7
MOV R5, A
JZ KEY_TASK_A
MOV SOFT_TMR3, #02H
CLR A
KEY_TASK_S: DJNZ SOFT_TMR3, KEY_TASK_S
LCALL KEY_SCAN
MOV A,R7
CJNE A,05H,KEY_TASK_Z
MOV B,A
KEY_TASK_A: JZ KEY_TASK_Z
MOV A, B
CJNE A, #01H, KEY_TASK_AB
KEY_TASK_WAIT1:
CLR ET1
LCALL KEY_ZJ_CZ
JMP KEY_TASK_Z
KEY_TASK_AB: CJNE A, #02H, KEY_TASK_AC
CLR ET1
LCALL KEY_XSJ_CZ
JMP KEY_TASK_Z
KEY_TASK_AC: CJNE A, #03H, KEY_TASK_AD
CLR ET1
LCALL KEY_XXJ_CZ
JMP KEY_TASK_Z
KEY_TASK_AD: CJNE A,#04H,KEY_TASK_Z
CLR ET1
LCALL KEY_DSJ_CZ
KEY_TASK_Z: MOV R7, B
; LCALL CSJ
POP 05H
POP B
POP PSW
POP ACC
RET
;************************************************************************
;*名称: KEY_SCAN *
;*用途: 键盘扫描子程序 *
;*返回: *
;* R7 检测到的键值 *
;************************************************************************
KEY_SCAN: PUSH ACC
PUSH PSW
PUSH B
MOV B, #00H
JB KEY_ZJ, KEY_SCAN_B
MOV B, #01H
JMP KEY_SCAN_Z
KEY_SCAN_B: JB KEY_XSJ,KEY_SCAN_C
MOV B, #02H
JMP KEY_SCAN_Z
KEY_SCAN_C: JB KEY_XXJ, KEY_SCAN_D
MOV B, #03H
JMP KEY_SCAN_Z
KEY_SCAN_D: JB KEY_DSJ,KEY_SCAN_Z
MOV B,#04H
KEY_SCAN_Z: MOV R7, B
POP B
POP PSW
POP ACC
RET
;************************************************************************
;*名称: KEY_RELS *
;*用途: 判断当前按键是否处于全部释放的状态 *
;*返回: CY C=0 有键按下; *
;* C=1 无键按下. *
;*说明: *
;************************************************************************
KEY_RELS:
PUSH ACC
PUSH B
CLR F0
LCALL KEY_SCAN
MOV A, R7
MOV B, A
JNZ KEY_RELS_Z
MOV SOFT_TMR3, #01H
KEY_RELS_A:
MOV A, SOFT_TMR3
JZ KEY_RELS_A ;等待延时结束.
LCALL KEY_SCAN ;延时后进行第二次扫描.
MOV A, R7
JNZ KEY_RELS_Z
SETB F0 ;确认无按键按下,设置F0=1
KEY_RELS_Z:
MOV C, F0
POP B
POP ACC
RET
;**************************************************************
;对双键同时按下进行检测(在P0.1键操作时检测
;**************************************************************
KEY_SCAN1: PUSH ACC
PUSH PSW
PUSH B
MOV B,#00H
JB KEY_ZJ,KEY_SCAN_Z1
LCALL D20MS
LCALL D20MS
JB KEY_XSJ,KEY_SCAN_Z1
LCALL D20MS
LCALL D20MS
JB KEY_ZJ,KEY_SCAN_Z1
LCALL D20MS
LCALL D20MS
JB KEY_XSJ,KEY_SCAN_Z1
LCALL D20MS
LCALL D20MS
JB KEY_ZJ,KEY_SCAN_Z1
LCALL D20MS
LCALL D20MS
JB KEY_XSJ,KEY_SCAN_Z1
LCALL GBCD
LCALL CDZH
CJAJSF: LCALL KEY_RELS
LCALL SDELAY
LCALL KEY_RELS
JNC CJAJSF
KEY_SCAN_Z1: MOV R7, B ;返回扫描得到的键值
POP B
POP PSW
POP ACC
RET
;**************************************************************
;对双键同时按下进行检测(在P0.3键操作时检测)
;**************************************************************
KEY_SCAN2:
PUSH ACC
PUSH PSW
PUSH B
MOV B,#00H
JB KEY_XXJ,KEY_SCAN_Z2
LCALL D20MS
LCALL D20MS
JB KEY_DSJ,KEY_SCAN_Z2
LCALL D20MS
LCALL D20MS
JB KEY_XXJ,KEY_SCAN_Z2
LCALL D20MS
LCALL D20MS
JB KEY_DSJ,KEY_SCAN_Z2
LCALL D20MS
LCALL D20MS
JB KEY_XXJ,KEY_SCAN_Z2
LCALL D20MS
LCALL D20MS
JB KEY_DSJ,KEY_SCAN_Z2
LCALL GBCD
LCALL CDZH
CJAJSF2: LCALL KEY_RELS
LCALL SDELAY
LCALL KEY_RELS
JNC CJAJSF2
KEY_SCAN_Z2: MOV R7, B ;返回扫描得到的键值
POP B
POP PSW
POP ACC
RET
;**************************************************************
;四个按键操作子程序
;**************************************************************
;键1操作子程序(P0.1),对亮度或帧幅进行增加操作
;应该分为两步,首先检测ICN_INDX寄存器的值,如果为33H,则对帧幅
;进行操作,否则,就对亮度进行操作
;**************************************************************
KEY_ZJ_CZ:
;***************************************************************************
;关键之处
; LCALL KEY_SCAN1 ;进行两键同时按下检测
;***************************************************************************
LCALL EXP2 ;读ICN_INDX寄存器的值,
MOV R0,#RcvDat
MOV A,@R0
CJNE A,#00H,KEY71
AJMP KEY72
KEY71: CJNE A,#11H,KEY15
AJMP KEY72
KEY15: CJNE A,#22H,KEY16
AJMP KEY72
KEY16: CJNE A,#55H,KEY81
KEY72: LCALL IIPD ;将11H置入ICN_INDX寄存器中
LCALL GHSW ;高亮度调用“+”
;对BAR_CNTL寄存器后五位进行操作
KEY1:
LCALL DDBRZ
LCALL XMLL1
LCALL DBDTJ
LCALL CDJDT
LCALL CSJ
LCALL SDelay
LCALL KEY_RELS
JC FH
; LCALL KEY_TASK ;再进行一次键盘检测
LJMP KEY1
KEY81: CJNE A,#33H,FH
; LCALL IIPD2 ;将33H置入ICN_INDX寄存器中,决定调用场幅图片
LCALL GHSW ;高亮度调用“+”
KEY82: LCALL DCBRZ
LCALL XMLL1
LCALL CZTJ
LCALL CCJDT
LCALL CSJ
LCALL SDelay
LCALL KEY_RELS ;检查按键是否释放
JC FH
; LCALL KEY_TASK ;再进行一次键盘检测
LJMP KEY82
FH:
LCALL CSJ
RET
;**************************************************
;键2操作子程序(P0.2),对对比度进行减少操作
;**************************************************
KEY_XSJ_CZ:
LCALL EXP2 ;读ICN_INDX寄存器的值,
MOV R0,#RcvDat
MOV A,@R0
CJNE A,#00H,KEY73
AJMP KEY74
KEY73: CJNE A,#11H,KEY_1
AJMP KEY74
KEY_1: CJNE A,#22H,KEY_2
AJMP KEY74
KEY_2: CJNE A,#55H,KEY91
KEY74: LCALL IIPD
LCALL GHSW1
;对BAR_CNTL寄存器后五位进行操作
KEY2: LCALL DDBRZ
LCALL XMLL4
;对对比度寄存器进行操作
LCALL DBDTJ1
LCALL CDJDT
LCALL CSJ
LCALL SDelay
LCALL KEY_RELS ;检查按键是否释放
JC TU34
LJMP KEY2
KEY91: CJNE A,#33H,TU34
; LCALL IIPD2
LCALL GHSW1
KEY92: LCALL DCBRZ
LCALL XMLL4 ;对BAR_CNTL进行操作(减少时)
;对场幅进行操作
LCALL CZTJ1
LCALL CCJDT
LCALL CSJ
LCALL SDelay
LCALL KEY_RELS ;检查按键是否释放
; LCALL D20MS
; LCALL KEY_RELS
JC TU34
; LCALL KEY_TASK ;再进行一次键盘检测
LJMP KEY92
TU34: LCALL CSJ
RET
;**********************************************************
;键3操作子程序(P0.3),对亮度进行增加操作
;**********************************************************
KEY_XXJ_CZ:
;*****************************************************************
;关键操作
; LCALL KEY_SCAN2
;*****************************************************************
LCALL EXP2 ;读ICN_INDX寄存器的值,
MOV R0,#RcvDat
MOV A,@R0
CJNE A,#00H,KEY57
AJMP KEY58
KEY57: CJNE A,#22H,KEY_3
AJMP KEY58
KEY_3: CJNE A,#11H,KEY_4
AJMP KEY58
KEY_4: CJNE A,#33H,KEY51
KEY58: LCALL IIPD1
LCALL GHSW ;高亮度调用“+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -