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

📄 a.asm

📁 1602显示测试值,一种对电阻测试其值大小并用LCD1602显示
💻 ASM
字号:
        RS EQU P2.5
	RW EQU P2.3
	E  EQU P2.2
	ORG  0000H
	LJMP MAIN
	ORG  0030H 
MAIN:	lcall delay2
	lcall delay2
	lcall delay2
	lcall delay2
        MOV P0,#0FFH	;初始化端口
	MOV P1,#0FFH
	MOV P2,#0FFH
	MOV P3,#0FFH
        LCALL DELAY2
     	MOV P0,#01H  ;清屏 
	ACALL ENA
	MOV P0,#01H  ;清屏 
	ACALL ENA
	MOV P0,#38H  ;显示功能 
	ACALL ENA 
	MOV P0,#0FH  ;显示开关控制 
	ACALL ENA 
	MOV P0,#06H ;输入模式 
	ACALL ENA
	MOV P0,#0C0H       ;数据存贮器地址 
	ACALL ENA
MAIN1:  
     	MOV P0,#80H
	LCALL ENA
	MOV P0,#72H
	LCALL WRITE
	MOV P0,#81H
	LCALL ENA
	MOV P0,#65H
	LCALL WRITE
	MOV P0,#82H
	LCALL ENA
	MOV P0,#73H
	LCALL WRITE
	MOV P0,#83H
	LCALL ENA
	MOV P0,#69H
	LCALL WRITE
	MOV P0,#84H
	LCALL ENA
	MOV P0,#73H
	LCALL WRITE
        MOV P0,#85H
	LCALL ENA
	MOV P0,#74H
	LCALL WRITE
	MOV P0,#86H
	LCALL ENA
	MOV P0,#6FH
	LCALL WRITE
	MOV P0,#87H
	LCALL ENA
	MOV P0,#72H
	LCALL WRITE
	MOV P0,#88H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#89H
	LCALL ENA
	MOV P0,#63H
	LCALL WRITE
	MOV P0,#8AH
	LCALL ENA
	MOV P0,#68H
	LCALL WRITE
	MOV P0,#8BH
	LCALL ENA
	MOV P0,#65H
	LCALL WRITE
	MOV P0,#8CH
	LCALL ENA
	MOV P0,#63H
	LCALL WRITE
	MOV P0,#8DH
	LCALL ENA
	MOV P0,#6BH
	LCALL WRITE
	MOV P0,#8EH
	LCALL ENA
	MOV P0,#65H
	LCALL WRITE
	MOV P0,#8FH
	LCALL ENA
	MOV P0,#72H
	LCALL WRITE
	MOV P0,#0C0H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C1H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C2H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C3H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C4H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C5H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C6H
	LCALL ENA
	MOV P0,#20H
	LCALL WRITE
	MOV P0,#0C7H
	LCALL ENA
	MOV P0,#53H
	LCALL WRITE
	MOV P0,#0C8H
	LCALL ENA
	MOV P0,#48H
	LCALL WRITE
	MOV P0,#0C9H
	LCALL ENA
	MOV P0,#49H
	LCALL WRITE
	MOV P0,#0CAH
	LCALL ENA
	MOV P0,#42H
	LCALL WRITE
	MOV P0,#0CBH
	LCALL ENA
	MOV P0,#41H
	LCALL WRITE
	MOV P0,#0CCH
	LCALL ENA
	MOV P0,#4BH
	LCALL WRITE
	MOV P0,#0CDH
	LCALL ENA
	MOV P0,#41H
	LCALL WRITE
	MOV P0,#0CEH
	LCALL ENA
	MOV P0,#57H
	LCALL WRITE
	MOV P0,#0CFH
	LCALL ENA
	MOV P0,#41H
	LCALL WRITE
	MOV P0,#02H
	LCALL ENA
	JNB P2.0,PAIDUAN
        LJMP MAIN1
PAIDUAN:
	LCALL DELAY
	JNB P2.0,CHECKER
	NOP
	LJMP MAIN1
CHECKER:
	CLR P2.7
	LCALL DELAY3
	JB P1.0,BUTT1
	LCALL L1
	
	JNB P1.3,BUTT2
	LCALL L2
	JB P1.1,BUTT3
	LCALL L3
	JNB P1.4,BUTT4
	LCALL L4
	JB P1.2,BUTT5
	LCALL L5
	JNB P1.5,BUTT6
	MOV  DPTR,#NO_3  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#NO_33  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	LCALL K1
	SJMP $
BUTT1:
	CLR P2.4
WAIT1:	MOV DPTR,#ERR1  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#ERR2  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SJMP $
	
BUTT2:
	CLR P2.4
WAIT2:	MOV DPTR,#ERR3  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#ERR4  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SJMP $
BUTT3:
	CLR P2.4
WAIT3:	MOV DPTR,#ERR5  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#ERR6  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SJMP $
BUTT4:
	CLR P2.4
WAIT4:	MOV DPTR,#ERR7  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#ERR8  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SJMP $
BUTT5:
	CLR P2.4
WAIT5:	MOV DPTR,#ERR9  ;指针指到显示消息
        CALL  LCD_PRINT
      	MOV  A,#1          ;显示在第一行
        MOV  DPTR,#ERRA  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SJMP $
BUTT6:
	CLR P2.4
WAIT6:	MOV DPTR,#ERRB  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#ERRC  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SJMP $
K1:     CLR P2.4
	LCALL DELAY2
	LCALL DELAY2
	LCALL DELAY2
	SETB P2.4	
WAIT:	MOV DPTR,#TAB  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#TAB1  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	RET
L1:	MOV  DPTR,#NO1  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#NO11  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SETB P2.7
        LCALL DELAY3
	CLR P3.2
	LCALL DELAY3
	RET
L2:	MOV  DPTR,#NO_1  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#NO_11  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT

	SETB P3.2
	LCALL DELAY3
	CLR P2.1
	LCALL DELAY3
	RET
L3:	MOV  DPTR,#NO2  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#NO22  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SETB P2.1
        LCALL DELAY3
	CLR P3.4
	LCALL DELAY3
	RET
L4:	MOV  DPTR,#NO_2  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#NO_22  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SETB P3.4
	LCALL DELAY3
	CLR P2.6
	LCALL DELAY3
	RET
L5:	MOV  DPTR,#NO3  ;指针指到显示消息
      	MOV  A,#1          ;显示在第一行
        CALL  LCD_PRINT
        MOV  DPTR,#NO33  ;指针指到显示消息
        MOV  A,#2          ;显示在第一行
        CALL  LCD_PRINT
	SETB P2.6
        LCALL DELAY3
	CLR P3.3
	LCALL DELAY3
	RET
NO1:
DB "resistor checker",00
NO11:
DB "NO.1       R>2M ",00
NO_1:
DB "resistor checker",00
NO_11:
DB "NO.1      R<40M ",00
NO2:
DB "resistor checker",00
NO22:
DB "NO.2       R>2M ",00
NO_2:
DB "resistor checker",00
NO_22:
DB "NO.2      R<40M ",00
NO3:
DB "resistor checker",00
NO33:
DB "NO.3      R>40K ",00
NO_3:
DB "resistor checker",00
NO_33:
DB "NO.3      R<60K ",00
TAB:
DB "resistor checker",00
TAB1:
DB "             OK ",00
ERR1:
DB "resistor checker",00
ERR2:
DB "NO.1       R<2M ",00
ERR3:
DB "resistor checker",00
ERR4:
DB "NO.1      R>40M ",00
ERR5:
DB "resistor checker",00
ERR6:
DB "NO.2       R<2M ",00
ERR7:
DB "resistor checker",00
ERR8:
DB "NO.2      R>40M ",00
ERR9:
DB "resistor checker",00
ERRA:
DB "NO.3      R<40K ",00
ERRB:
DB "resistor checker",00
ERRC:
DB "NO.3      R>60K ",00
LCD_PRINT:       ;在LCD的第一行或第二行显示字符

          CJNE  A,#1,LINE2  ;判断是否为第一行
  LINE1:  MOV  A,#80H       ;设置 LCD 的第一行地址
          CALL  WCOM        ;写入命令
          CALL  CLR_LINE    ;清除该行字符数据
          MOV  A,#80H       ;设置 LCD 的第一行地址
          CALL  WCOM       ;写入命令
          JMP  FILL

  LINE2:  MOV  A,#0C0H      ;设置 LCD 的第二行地址
          CALL  WCOM        ;写入命令
          CALL  CLR_LINE    ;清除该行字符数据
          MOV  A,#0C0H      ;设置 LCD 的第二行地址
          CALL  WCOM
  FILL:   CLR  A            ;填入字符
          MOVC  A,@A+DPTR   ;由消息区取出字符
          CJNE  A,#0,LC1    ;判断是否为结束码
          RET
  LC1:    CALL  WDATA       ;写入数据
          INC  DPTR         ;指针加1
          JMP  FILL         ;继续填入字符
          RET
;=========================================
CLR_LINE:                  ;清除该行 LCD 的字符
         
 	 
	  MOV  R0,#24
   CL1:   MOV  A,#' '
          CALL  WDATA
          DJNZ  R0,CL1
          RET
ENA:	CLR RS
	NOP
	NOP
	NOP
	CLR RW 
	NOP
	NOP
	NOP
	CLR E 
	LCALL DELAY
	SETB E 
	NOP
	NOP
	RET
WCOM:                     ;以8位控制方式将命令写至LCD
          MOV  P0,A       ;写入命令
          CLR RS      ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
          CLR RW
          SETB E
          ACALL DELAY       
          CLR E
          RET
WRITE: 
        SETB RS             
	NOP
	CLR RW
	NOP
	CLR E
	LCALL DELAY
	SETB E
	RET

WDATA:                    ;以8位控制方式将数据写至LCD
          MOV  P0,A       ;写入数据
          SETB  RS        
          CLR  	RW
          SETB  E        
          CALL  DELAY
          CLR  	E
          CALL  DELAY
          RET
DELAY:	MOV R7,#100
D1:	MOV R6,#10
D2:	DJNZ R6,d2
	DJNZ R7,d1
	RET

	
DELAY2:	MOV R7,#200
D10:	MOV R6,#100
D20:	DJNZ R6,d20
	DJNZ R7,d10
	RET
DELAY3:	MOV R7,#200
D30:	MOV R6,#100
D40:	MOV R5,#2
	DJNZ R5,$
	DJNZ R6,D40
	DJNZ R7,D30
	RET

	END





⌨️ 快捷键说明

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