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

📄 调整脉冲.asm

📁 数字万年历”的软件和硬件设计 软件环境:KEIL C集成环境
💻 ASM
字号:
;画脉冲程序,按键13,9时,调整周期,按键10,14时,调整幅度
CON82551  EQU     0EFFFH
PA82551   EQU     0EFFCH
PB82551   EQU     0EFFDH
PC82551   EQU     0EFFEH					    				 
CON8255C     EQU    0FFFFH
PA8255C      EQU    0FFFCH
PB8255C      EQU    0FFFDH
PC8255C      EQU    0FFFEH
COM 		 EQU 	50H
DAT			 EQU	40H
XX			 EQU	60H
YY			 EQU	61H
ZZ 			 EQU 	62H
NUM			 EQU	63H          
LRI			EQU     64H			
LRD			EQU     65H	
PINLV 		EQU		66H	
FUDU		EQU		68H
SHANG       EQU     70H
YU          EQU     71H
KEY         EQU     72H

			ORG    0000H
            LJMP   MAIN
            ORG    0035H

MAIN:      LCALL CSH
           LCALL DISP
LOOP0:     LCALL SCAN
           CJNE A,#0FFH,LOOP1
           LCALL DISP
		   LJMP LOOP0
LOOP1:     LCALL DELAY1 
           LCALL SCAN
		   CJNE A,#0FFH,LOOP2
		   LJMP LOOP0
LOOP2:     MOV KEY,A 
           LCALL SCAN
           
		   CJNE A,#0FFH,LOOP2		;增大周期
		   MOV A,KEY
  		   CJNE A,#7EH,AN1
		   LCALL CLEAR
		   LCALL MS40
		   INC PINLV
    	   LJMP OU
 
AN1:        CJNE A,#7DH,AN2		 ;增大幅度
		    LCALL CLEAR
		    LCALL MS40
            MOV R4,FUDU
            CJNE R4,#23,AA		  ;判断是否增加到最大值
		    LJMP OU
 AA:       INC FUDU 
           LCALL SET_FUDU
		   LJMP OU
AN2:       CJNE A,#0BEH,AN3		   	;减小周期
		   LCALL CLEAR
		   LCALL MS40
           DEC PINLV
		   LJMP OU
 
AN3:      CJNE A,#0BDH,LOOP0		;减小幅度
		  LCALL CLEAR
		  LCALL MS40
		  MOV R4,FUDU
           CJNE R4,#0,A3 			;判断是否到最小值
		    LJMP OU
A3:           DEC FUDU
		   LCALL SET_FUDU
  		
OU:       LCALL DISP
          LCALL MS40
		 LJMP LOOP0		   

CSH:   
         MOV   DPTR,#CON8255C
         MOV   A,#80H
         MOVX  @DPTR,A             ;设8255PA,PB,PC为输出方式
          MOV     DPTR,#CON82551      ;初始化程序,写入8255控制字
         MOV     A,#80H
         MOVX    @DPTR,A  
		 MOV COM,#3EH
         LCALL OUTI            ;关液晶显示器
		          
         LCALL MS40
         LCALL MS40
         LCALL MS40
         MOV COM,#3FH
         LCALL OUTI            ;开液晶显示
      	 LCALL CLEAR			 ;清屏
         
         LCALL MS40
         LCALL MS40
         LCALL MS40
	

         MOV PINLV,#6
		 MOV FUDU,#0
		 MOV ZZ,#0
		 LCALL SET_FUDU    
         LCALL START_LINE
		 MOV XX,#3			 ;设置起始行       
		 MOV YY,#00
	  	 MOV LRI,#09H
		 MOV LRD,#0DH
		  RET
		
DISP:    
			MOV R3,#00
D1:  	   	MOV R5,PINLV
DIS1:		MOV XX,#3		   ;画脉冲的上半部分
			MOV R4,SHANG
SSS0:		DEC XX				;改变幅度
            DJNZ R4,SSS0
            LCALL SET_PAGE
		    LCALL SET_LIE
			MOV R4,YU			;修正幅度的改变值					
            MOV A,#01H 
S1:			RR A
			DJNZ R4,S1
			MOV DAT,A
			LCALL OUTD		 
		    INC YY
		    INC R3
		    CJNE R3,#64,SS1	   ;判断是否画完半屏
			LJMP EX
			
SS1:		DJNZ R5 ,DIS1
            MOV XX,#4			 ;画下半部分
		    MOV R5,PINLV
			MOV R4,SHANG		  ;调整幅度
SSS1:		  INC XX
			 DJNZ R4,SSS1
DIS2:	    LCALL SET_PAGE
		    LCALL SET_LIE
			MOV R4,YU			  ;修正幅度
      	    MOV A,#80H
 S2:        RL A
		    DJNZ R4,S2
			MOV DAT,A 
			LCALL OUTD
			INC YY
		    INC R3
		    CJNE R3,#64,SS2		  ;判断是否画完半屏
		    LJMP EX
SS2:		DJNZ R5,DIS2
			CJNE R3,#64,D1
EX:			RET
		   
;幅度处理子程序 
SET_FUDU: MOV A,FUDU
          MOV B,#8
		  DIV AB
		   MOV YU,B
		  MOV R4,B
		  CJNE 	R4,#0,JIA
		  LJMP OU1
 JIA:     INC A
 OU1:     MOV SHANG,A
		  RET
		   
 

;起始行设置子程序 
START_LINE: MOV A,ZZ
            ADD A,#0C0H	
			MOV LRI,#09H
			MOV COM,A
			LCALL OUTI
			
			RET


;设置页地址
SET_PAGE:   MOV A,XX
            ADD A,#0B8H
			MOV COM,A
			LCALL OUTI
			RET

;设置列地址
SET_LIE:    MOV A,YY
            ADD A,#040H
			MOV COM,A
			LCALL OUTI
			RET

SET_LRI:	 MOV   A,LRI
         MOV   DPTR,#PC8255C
         MOVX  @DPTR,A
		 RET
SET_LRD:	 MOV   A,LRD
         MOV   DPTR,#PC8255C
         MOVX  @DPTR,A
		 RET

SCAN:   MOV      DPTR,#CON82551
        MOV      A,#81H
        MOVX     @DPTR,A           ;置PC口第四位输入,高四位输出
        MOV      DPTR,#PC82551
        MOV      A,#0FH           
        MOVX     @DPTR,A           ;高四位输出一
        MOVX     A,@DPTR           ;读取低四位
        ANL      A,#0FH
        MOV      B,A               ;保存PC口的低四位               
        MOV      DPTR,#CON82551
        MOV      A,#88H
        MOVX     @DPTR,A           ;置PC口低四位输出,高四位输入        
        MOV      DPTR,#PC82551
        MOV      A,#0F0H           ;低四位输出一
        MOVX     @DPTR,A
        MOVX     A,@DPTR           ;读取高四位
        ANL      A,#0F0H        
        ORL      A,B               ;取得键盘码 
	            
        RET

DELAY1:MOV     R3,#20               ;延时5ms
   D11:MOV     R4,#123
       NOP
   D12:DJNZ    R4,D12
       DJNZ    R3,D11
       RET

;清屏
CLEAR:      MOV XX,#00H
  NE_PAG:   MOV R5,#00
            MOV YY,#0
			LCALL SET_PAGE
			LCALL SET_LIE
	LP1:   MOV DAT,#00H
	        LCALL OUTD
			INC R5
			CJNE R5,#64,LP1
			INC XX
			MOV R4,XX
			CJNE R4,#8,NE_PAG
			RET

;写控制数据子程序,入口参数COM
OUTI:    PUSH  83H
         PUSH  82H
         PUSH  0E0H
         LCALL SET_LRI
         MOV   A,COM
         MOV   DPTR,#PB8255C
         MOVX  @DPTR,A
         MOV   A,#00H
         MOV   DPTR,#CON8255C
         MOVX  @DPTR,A                ;E=0
         MOV   A,#01H          
         MOVX  @DPTR,A                ;E=1
         POP   0E0H
         POP   82H
         POP   83H
         RET
;写显示数据子程序,入口参数DAT
OUTD:    PUSH  83H
         PUSH  82H
         PUSH  0E0H
         LCALL SET_LRD
         MOV   A,DAT
         MOV   DPTR,#PB8255C
         MOVX  @DPTR,A
         MOV   A,#00H
         MOV   DPTR,#CON8255C
         MOVX  @DPTR,A                 ;E=0
         MOV   A,#01H       
         MOVX  @DPTR,A                 ;E=1
         POP   0E0H
         POP   82H
         POP   83H
         RET
MS40:    MOV   R7,#0E8H
  MS2:   MOV   R6,#0FFH
  MS1:   DJNZ  R6,MS1
         DJNZ  R7,MS2
         RET
         END







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -