📄 a.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 + -