⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 crt的控制软件,以87lpc764为主芯片。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       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 + -