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

📄 sydzc.asm

📁 能够测量0hz~1Mhz范围内的各种频率
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        MOV     A,#'.'
  	ACALL 	WriteDataLCD
        MOV     A,LJ_J
  	ADD	A,#30H
  	ACALL 	WriteDataLCD
        MOV     A,LJ_F
  	ADD	A,#30H
        ACALL 	WriteDataLCD
        MOV     A,#5CH
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        RET
LCDDISP4:
        MOV     A,#80H       ;设定从第一行(80H)的第5个位置开始显示
  	ACALL   WriteCommandLCD
        MOV     A,#'S'
  	ACALL 	WriteDataLCD
        MOV     A,#'P'
  	ACALL 	WriteDataLCD
        MOV     A,SPHAO
  	ADD	A,#30H
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
  	MOV     A,#'D'
  	ACALL 	WriteDataLCD
        MOV     A,#'J'
  	ACALL 	WriteDataLCD
        MOV     A,#'X'
  	ACALL 	WriteDataLCD
        MOV     A,#'G'
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#0C0H       ;设定从第一行(80H)的第5个位置开始显示
  	ACALL   WriteCommandLCD
        MOV     A,DANJIA_S
  	ADD	A,#30H
  	ACALL 	WriteDataLCD
        MOV     A,DANJIA_Y
  	ADD	A,#30H
  	ACALL 	WriteDataLCD
        MOV     A,#2EH        ;"."号
  	ACALL 	WriteDataLCD
        MOV     A,DANJIA_J
  	ADD	A,#30H
  	ACALL 	WriteDataLCD
        MOV     A,DANJIA_F
  	ADD	A,#30H
  	ACALL 	WriteDataLCD
        MOV     A,#5CH
        ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        MOV     A,#' '
  	ACALL 	WriteDataLCD
        RET
;==========================KEYSCAN========================
KEYSCAN:
         CLR KEY_FLAG
	 ACALL KEYON
         JNZ DELAY        ;不为全0则有键按下跳到DILAY
         RET
DELAY:   ACALL D10MS      ;延时消抖动
         ACALL KEYON      ;再次判断有无键按下
         JNZ SCAN         ;有键按下跳至SCAN
         RET
SCAN:    MOV R1,#0FEH     ;首行扫描
         MOV R3,#00H      ;记录行号
KEYD:    MOV A,R1
         MOV KEY_PORT,A
         MOV A,KEY_PORT
         JB ACC.4,KEY1
         MOV A,#00H
         AJMP KEYDATA
KEY1:    JB ACC.5,KEY2
         MOV A,#04H
         AJMP KEYDATA
KEY2:    JB ACC.6,KEY3
         MOV A,#08H
         AJMP KEYDATA
KEY3:    JB ACC.7,NEXT
         MOV A,#0CH
KEYDATA: ADD A,R3        ;计算键值
         PUSH ACC
KEY4:    ACALL KEYON     ;判断按键释放没有?
         JNZ KEY4
         POP ACC
         MOV KEY_DATA,A       ;键值保存在KEY_DATA单元
         SETB KEY_FLAG        ;置标志位为1
         RET
NEXT:    INC R3
         MOV A,R1
         JNB ACC.3,EXIT   ;扫描完毕
         RL A
         MOV R1,A
         AJMP KEYD
EXIT:    RET
KEYON:   MOV KEY_PORT,#0F0H    ;高4位设为输入
         MOV A,KEY_PORT        ;读高四位
         CPL A           ;取反
         ANL A,#0F0H     ;屏蔽低四位
         RET
D10MS:   PUSH 07H
         PUSH 06H
         MOV R7,#05H
LOOP1:   MOV R6,#0F9H
         NOP
         NOP
LOOP2:   DJNZ R6,LOOP2
         DJNZ R7,LOOP1
         POP 06H
         POP 07H
         RET
;====================KEYJUST1================= 选择商品(012)
KEY_JUST1:
      	 MOV A,KEY_DATA
	 CJNE A,#10,KEY_N1
KEY_N0:  CLR C
	 SUBB A,#10
         CJNE A,#2,KEY_N3
KEY_N4:  MOV SPHAO,A              ;保存商品号
	 RL A
	 MOV DPTR,#JMP_TABLE
	 JMP @A+DPTR
	 NOP
	 NOP
         AJMP JUST_EXIT          ;???????????
KEY_N3:  JC KEY_N4
         AJMP MAIN_LOOP1
KEY_N1:  JNC KEY_N0
JUST_JMP:AJMP MAIN_LOOP1
JUST_EXIT: RET

JMP_TABLE:
	 AJMP FUNCTION_0
	 AJMP FUNCTION_1
	 AJMP FUNCTION_2
	 NOP
	 RET
FUNCTION_0:
	 MOV DANJIA_ZS,DANJIA0_ZS
         MOV DANJIA_XS,DANJIA0_XS
	 RET
FUNCTION_1:
	 MOV DANJIA_ZS,DANJIA1_ZS
         MOV DANJIA_XS,DANJIA1_XS
	 RET
FUNCTION_2:
	 MOV DANJIA_ZS,DANJIA2_ZS
         MOV DANJIA_XS,DANJIA2_XS
	 RET
;---------------------------------
KEY_JUST2:
      	 MOV A,KEY_DATA
	 CJNE A,#10,KEY1_N1
KEY1_N0: CLR C
	 SUBB A,#10
         CJNE A,#2,KEY1_N3
KEY1_N4: MOV SPHAO,A              ;保存商品号
	 RL A
	 MOV DPTR,#JMP_TABLE
	 JMP @A+DPTR
	 NOP
	 NOP
         AJMP JUST2_EXIT          ;???????????
KEY1_N3: JC KEY1_N4
         AJMP MAIN_LOOP5
KEY1_N1:  JNC KEY1_N0
JUST2_JMP:AJMP MAIN_LOOP5
JUST2_EXIT: RET
;================数据处理程序===================
DATA_CHULI1:
         MOV R6,DANJIA_ZS
         MOV R7,DANJIA_XS
         ACALL HB2
         MOV A,R4
         ACALL HBCD
         MOV DANJIA_S,R6
         MOV DANJIA_Y,R7
         MOV A,R5
         ACALL HBCD
         MOV DANJIA_J,R6
         MOV DANJIA_F,R7
         RET
DATA_CHULI2:    ;X/51*DANJIA
         MOV R2,#00H
         MOV R3,AD_DATA
         MOV R6,DANJIA_ZS
         MOV R7,DANJIA_XS
         ACALL MULD
         MOV R7,#33H
         ACALL DV31
         MOV ZHJIA_ZS,R4
         MOV ZHJIA_XS,R5
         MOV R6,#0H          ;R4R5中的数转到R6R7中
         MOV R7,#0H
         MOV A,R4
         XCH A,R6
         MOV A,R5
         XCH A,R7
         ACALL HB2
         MOV A,R3
         ACALL HBCD
         MOV ZHJIA_B,R7
         MOV A,R4
         ACALL HBCD
         MOV ZHJIA_S,R6
         MOV ZHJIA_Y,R7
         MOV A,R5
         ACALL HBCD
         MOV ZHJIA_J,R6
         MOV ZHJIA_F,R7
         RET
DATA_CHULI3:
      	MOV A,AD_DATA
	MOV B,#5
	MUL AB
	MOV AD_DATA1,B
	MOV B,#10
	MUL AB
	MOV AD_DATA2,B
	MOV B,#10
	MUL AB
	MOV AD_DATA3,B
	RET
DATA_CHULI4:
        CLR C
        MOV A,25H
        MOV B,#10H
        MUL AB
        ADD A,26H
        MOV R2,A
        CLR C
        MOV A,27H
        MOV B,#10H
        MUL AB
        ADD A,28H
        MOV R3,A
        ACALL BH2
        MOV A,SPHAO
        MOV B,#2
        MUL AB
        CLR C
        ADD A,#2AH
        MOV R0,A
        MOV A,R2
        MOV @R0,A
        INC R0
        MOV A,R3
        MOV @R0,A
        RET
;===============双字节乘法子程序=================
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MULD:    MOV A,R3  ;计算R3乘R7
         MOV B,R7
         MUL AB
         MOV R4,B                ;暂存部分积
         MOV R5,A
         MOV A,R3                ;计算R3乘R6
         MOV B,R6
         MUL AB
         ADD A,R4                ;累加部分积
         MOV R4,A
         CLR A
         ADDC A,B
         MOV R3,A
         MOV A,R2                ;计算R2乘R7
         MOV B,R7
         MUL AB
         ADD A,R4                ;累加部分积
         MOV R4,A
         MOV A,R3
         ADDC A,B
         MOV R3,A
         CLR A
         RLC A
         XCH A,R2                 ;计算R2乘R6
         MOV B,R6
         MUL AB
         ADD A,R3                 ;累加部分积
         MOV R3,A
         MOV A,R2
         ADDC A,B
         MOV R2,A
         RET
;=============三字节除以单字节子程序============
;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
DV31:    CLR C
         MOV A,R3
         SUBB A,R7
         JC DV30
         SETB OV;商溢出
         RET
DV30:    MOV R2,#10H         ;求R3R4R5/R7-→R4R5
DM23:    CLR C
         MOV A,R5
         RLC A
         MOV R5,A
         MOV A,R4
         RLC A
         MOV R4,A
         MOV A,R3
         RLC A
         MOV R3,A
         MOV F0,C
         CLR C
         SUBB A,R7
         ANL C,/F0
         JC DM24
         MOV R3,A
         INC R5
DM24:    DJNZ R2,DM23
         MOV A,R3             ;四舍五入
         ADD A,R3
         JC DM25
         SUBB A,R7
         JC DM26
DM25:    INC R5
         MOV A,R5
         JNZ DM26
         INC R4
DM26:    CLR OV
         RET                  ;商在R4R5中
;=========双字节十六进制整数转换成双字节BCD码整数=====
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2:     CLR A          ;BCD码初始化
         MOV R3,A
         MOV R4,A
         MOV R5,A
         MOV R2,#10H    ;转换双字节十六进制整数
HB3:     MOV A,R7       ;从高端移出待转换数的一位到CY中
         RLC A
         MOV R7,A
         MOV A,R6
         RLC A
         MOV R6,A
         MOV A,R5       ;BCD码带进位自身相加,相当于乘2
         ADDC A,R5
         DA A           ;十进制调整
         MOV R5,A
         MOV A,R4
         ADDC A,R4
         DA A
         MOV R4,A
         MOV A,R3
         ADDC A,R3
         MOV R3,A       ;双字节十六进制数的万位数不超过6,不用调整
         DJNZ R2,HB3    ;处理完16bit
         RET
;===================双字节的加法================
;R1R2+R3R4=R6R7(没有进位R6R7可以装下的数)
BCDA:    CLR C
         MOV A,R2
         ADD A,R4
         MOV R7,A
         MOV A,R1
         ADDC A,R3
         MOV R6,A
         RET
;===================HBCD========================
;入口条件:待转换的单字节十六进制整数在累加器A中
HBCD:    MOV B,#10H
         DIV AB
         MOV R6,A
         MOV R7,B
         RET
;==============R2R3(BCD)->R2R3===========
BH2:     MOV A,R3                 ;;将低字节转换成十六进制
         LCALL BCDH
         MOV R3,A
         MOV A,R2                  ;将高字节转换成十六进制
         LCALL BCDH
         MOV B,#100 ;扩大一百倍
         MUL AB
         ADD A,R3;和低字节按十六进制相加
         MOV R3,A
         CLR A
         ADDC A,B
         MOV R2,A
         RET
BCDH:    MOV B,#10H;分离十位和个位
         DIV AB
         MOV R4,B;暂存个位
         MOV B,#10 ;将十位转换成十六进制
         MUL AB
         ADD A,R4 ;按十六进制加上个位
         RET
;======================================================
;================AD==================
AD_TLC2543:
	JNB AD_EOC,AD_TLC2543
        JNB AD_EOC,AD_TLC2543
	CLR AD_CS
	MOV AD_DATA,#0
	MOV AD_DATAL,#0
	CLR AD_CLK
	MOV R5,#8
ADC_L1:	NOP
	MOV C,AD_OUT
        MOV A,AD_DATA
        RLC A
        MOV AD_DATA,A
        MOV A,AD_CON
        RLC A
        MOV AD_IN,C
        MOV AD_CON,A
        SETB AD_CLK
        NOP
        CLR AD_CLK
        DJNZ R5,ADC_L1
        CLR AD_IN
        MOV R5,#4
ADC_L2:	NOP
	MOV C,AD_OUT
	MOV A,AD_DATAL
	RLC A
	MOV AD_DATAL,A
	SETB AD_CLK
	NOP
	CLR AD_CLK
	DJNZ R5,ADC_L2
        SETB AD_CS
        RET
;================中断1服务程序==================
TIME0:   PUSH   ACC
         DJNZ 	TIM0,S0
	 MOV 	TIM0,#100
	 DJNZ 	TIM1,S0
	 MOV 	TIM1,#100		;统计100*100次
	 INC 	LSL
	 MOV 	A,LSL
	 CJNE 	A,#10,S0
	 MOV 	LSL,#0
	 INC 	LSH
	 MOV 	A,LSH
	 CJNE 	A,#6,S0
	 MOV 	LSH,#0          ;秒
	 INC 	LML
 	 MOV 	A,LML
	 CJNE 	A,#10,S0
	 MOV 	LML,#0
	 INC 	LMH
	 MOV 	A,LMH
	 CJNE 	A,#6,S0
	 MOV 	LMH,#0    ;分
	 INC 	LHL
	 MOV 	A,LHL
	 CJNE 	A,#10,S1
	 MOV 	LHL,#0
	 INC 	LHH
	 SJMP	S0
S1:	 MOV 	A,LHH
	 MOV 	B,#10
	 MUL 	AB
	 ADD 	A,LHL    ;判断是否到24时,LHH*10+LHL
	 CJNE 	A,#24,S0
 	 MOV 	LHH,#0
	 MOV 	LHL,#0      ;时
         INC    WEEK
         MOV    A,WEEK
         CJNE   A,#6,S2
S2:      JC S0
         MOV    WEEK,#00H
S0:      POP ACC
         RETI
;===============5S延时==================
DELAY5S: PUSH   04H
         PUSH   05H
         PUSH   06H
         MOV   R4,#50
DELAY5S_0:MOV  R5,#200
DELAY5S_1:MOV  R6,#245
         DJNZ   R6,$
         DJNZ   R5,DELAY5S_1
         DJNZ   R4,DELAY5S_0
         POP    06H
         POP    05H
         POP    04H
         RET
TABL1:   DB 'SMTWTFS'
TABL2:   DB 'uouehra'
TABL3:   DB 'nneddit'
         END

⌨️ 快捷键说明

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