📄 ex10-4.sdi
字号:
03E4,24 30,, ADD A,#30H
03E6,C0 F0,, PUSH B
03E8,85 2F F0,, MOV B,LCD_X
03EB,12 04 97,, LCALL LCDP2
03EE,D0 F0,, POP B
03F0,74 0A,, MOV A,#0AH
03F2,C5 F0,, XCH A,B
03F4,84,, DIV AB
03F5,24 30,, ADD A,#30H
03F7,05 2F,, INC LCD_X
03F9,C0 F0,, PUSH B
03FB,85 2F F0,, MOV B,LCD_X
03FE,12 04 97,, LCALL LCDP2
0401,D0 F0,, POP B
0403,05 2F,, INC LCD_X
0405,E5 F0,, MOV A,B
0407,85 2F F0,, MOV B,LCD_X
040A,24 30,, ADD A,#30H
040C,12 04 97,, LCALL LCDP2
040F,22,, RET
,,,
0410,,SHOW_DIG2L,SHOW_DIG2L:
0410,75 F0 64,, MOV B,#100
0413,84,, DIV AB
0414,74 0A,, MOV A,#0AH
0416,C5 F0,, XCH A,B
0418,84,, DIV AB
0419,24 30,, ADD A,#30H
041B,C0 F0,, PUSH B
041D,85 2F F0,, MOV B,LCD_X
0420,12 04 97,, LCALL LCDP2
0423,D0 F0,, POP B
0425,05 2F,, INC LCD_X
0427,E5 F0,, MOV A,B
0429,85 2F F0,, MOV B,LCD_X
042C,24 30,, ADD A,#30H
042E,12 04 97,, LCALL LCDP2
0431,22,, RET
,,,
,,,;************************ 显示区 BCD 码温度值刷新子程序 **********************
0432,E5 2A,DISPBCD,DISPBCD: MOV A,TEMPLC
0434,54 0F,, ANL A,#0FH
0436,F5 70,, MOV 70H,A ;小数位
0438,E5 2A,, MOV A,TEMPLC
043A,C4,, SWAP A
043B,54 0F,, ANL A,#0FH
043D,F5 71,, MOV 71H,A ;个位
043F,E5 29,, MOV A,TEMPHC
0441,54 0F,, ANL A,#0FH
0443,F5 72,, MOV 72H,A ;十位
0445,E5 29,, MOV A,TEMPHC
0447,C4,, SWAP A
0448,54 0F,, ANL A,#0FH
044A,F5 73,, MOV 73H,A ;百位
044C,22,DISPBCD2,DISPBCD2: RET
,,,
,,,;*************************** LCD 显示数据处理子程序 *************************
044D,E5 73,CONV,CONV: MOV A,73H ;加载百位数据
044F,75 2F 06,, MOV LCD_X,#6 ;设置位置
0452,B4 01 03,, CJNE A,#1,CONV1
0455,02 04 6B,, JMP CONV2
0458,B4 0B 05,CONV1,CONV1: CJNE A,#0BH,CONV11
045B,74 2D,, MOV A,#"-" ;"-"号显示
045D,02 04 62,, JMP CONV111
0460,74 20,CONV11,CONV11: MOV A,#" " ;"+"号不显示
0462,85 2F F0,CONV111,CONV111: MOV B,LCD_X
0465,12 04 97,, LCALL LCDP2
0468,02 04 6E,, JMP CONV3
046B,12 04 8E,CONV2,CONV2: LCALL SHOW_DIG2 ;显示数据
046E,05 2F,CONV3,CONV3: INC LCD_X
0470,E5 72,, MOV A,72H ;十位
0472,12 04 8E,, LCALL SHOW_DIG2
0475,05 2F,, INC LCD_X
0477,E5 71,, MOV A,71H ;个位
0479,12 04 8E,, LCALL SHOW_DIG2
047C,05 2F,, INC LCD_X
047E,74 2E,, MOV A,#'.'
0480,85 2F F0,, MOV B,LCD_X
0483,12 04 97,, LCALL LCDP2
0486,E5 70,, MOV A,70H ;加载小数点位
0488,05 2F,, INC LCD_X ;设置显示位置
048A,12 04 8E,, LCALL SHOW_DIG2 ;显示数据
048D,22,, RET
,,,
,,,;*************************** 第二行显示数字子程序 *************************
048E,24 30,SHOW_DIG2,SHOW_DIG2:ADD A,#30H
0490,85 2F F0,, MOV B,LCD_X
0493,12 04 97,, LCALL LCDP2
0496,22,, RET
,,,
,,,;*************************** 第二行显示数字子程序 *************************
0497,C0 E0,LCDP2,LCDP2: PUSH ACC
0499,E5 F0,, MOV A,B ;设置显示地址
049B,24 C0,, ADD A,#0C0H ;设置LCD的第二行地址
049D,12 05 23,, LCALL WCOM ;写入命令
04A0,D0 E0,, POP ACC ;由堆栈取出A
04A2,12 05 31,, LCALL WDATA ;写入数据
04A5,22,, RET
,,,
,,,;*************************** 对 LCD 做初始化设置及测试*************************
04A6,C2 A2,SET_LCD,SET_LCD: CLR LCD_EN
04A8,12 04 AF,, LCALL INIT_LCD ;初始化 LCD
04AB,12 02 A8,, LCALL STORE_DATA ;将自定义字符存入LCD的CGRAM
04AE,22,, RET
,,,
,,,;****************************** LCD初始化 ***********************************
04AF,74 38,INIT_LCD,INIT_LCD: MOV A,#38H ;2行显示,字形5*7点阵
04B1,12 05 23,, LCALL WCOM
04B4,12 05 73,, LCALL DELAY1
04B7,74 38,, MOV A,#38H
04B9,12 05 23,, LCALL WCOM
04BC,12 05 73,, LCALL DELAY1
04BF,74 38,, MOV A,#38H
04C1,12 05 23,, LCALL WCOM
04C4,12 05 73,, LCALL DELAY1
04C7,74 0C,, MOV A,#0CH ;开显示,显示光标,光标不闪烁
04C9,12 05 23,, LCALL WCOM
04CC,12 05 73,, LCALL DELAY1
04CF,74 01,, MOV A,#01H ;清除 LCD 显示屏
04D1,12 05 23,, LCALL WCOM
04D4,12 05 73,, LCALL DELAY1
04D7,22,, RET
,,,
,,,;***************************** 清除LCD的第一行字符 **************************
04D8,74 80,CLR_LINE1,CLR_LINE1:MOV A,#80H ;设置 LCD 的第一行地址
04DA,12 05 23,, LCALL WCOM
04DD,78 18,, MOV R0,#24 ;设置计数值
04DF,74 20,C1, C1: MOV A,#' ' ;载入空格符至LCD
04E1,12 05 31,, LCALL WDATA ;输出字符至LCD
04E4,D8 F9,, DJNZ R0,C1 ;计数结束
04E6,22,, RET
,,,;************************* LCD的第一行或第二行显示字符 **********************
04E7,B4 01 10,LCD_PRINT,LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行
04EA,74 80,LINE1, LINE1: MOV A,#80H ;设置 LCD 的第一行地址
04EC,12 05 23,, LCALL WCOM ;写入命令
04EF,12 05 14,, LCALL CLR_LINE ;清除该行字符数据
04F2,74 80,, MOV A,#80H ;设置 LCD 的第一行地址
04F4,12 05 23,, LCALL WCOM ;写入命令
04F7,02 05 07,, JMP FILL
04FA,74 C0,LINE2, LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址
04FC,12 05 23,, LCALL WCOM ;写入命令
04FF,12 05 14,, LCALL CLR_LINE ;清除该行字符数据
0502,74 C0,, MOV A,#0C0H ;设置 LCD 的第二行地址
0504,12 05 23,, LCALL WCOM
0507,E4,FILL, FILL: CLR A ;填入字符
0508,93,, MOVC A,@A+DPTR ;由消息区取出字符
0509,B4 00 01,, CJNE A,#0,LC1 ;判断是否为结束码
050C,22,, RET
050D,12 05 31,LC1, LC1: LCALL WDATA ;写入数据
0510,A3,, INC DPTR ;指针加1
0511,80 F4,, JMP FILL ;继续填入字符
0513,22,, RET
,,,
,,,;*************************** 清除1行 LCD 的字符 ****************************
0514,78 18,CLR_LINE,CLR_LINE: MOV R0,#24
0516,74 20,CL1,CL1: MOV A,#' '
0518,12 05 31,, LCALL WDATA
051B,D8 F9,, DJNZ R0,CL1
051D,22,, RET
051E,7F FA,DE,DE: MOV R7,#250
0520,DF FE,, DJNZ R7,$
0522,22,, RET
,,,
,,,;**************************** LCD 间接控制方式命令写入 *************************
0523,F5 80,WCOM,WCOM: MOV P0,A ;写入命令
0525,C2 A0,, CLR LCD_RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
0527,C2 A1,, CLR LCD_RW
0529,D2 A2,, SETB LCD_EN
052B,12 05 73,, LCALL DELAY1
052E,C2 A2,, CLR LCD_EN
0530,22,, RET
,,,
,,,;**************************** LCD 间接控制方式数据写入 *************************
0531,F5 80,WDATA,WDATA: MOV P0,A ;写入数据
0533,D2 A0,, SETB LCD_RS
0535,C2 A1,, CLR LCD_RW
0537,D2 A2,, SETB LCD_EN
0539,12 05 1E,, LCALL DE
053C,C2 A2,, CLR LCD_EN
053E,12 05 1E,, LCALL DE
0541,22,, RET
,,,
,,,;************************** 在LCD的第一行显示字符 **************************
0542,C0 E0,LCDP1,LCDP1: PUSH ACC
0544,E5 F0,, MOV A,B ;设置显示地址
0546,24 80,, ADD A,#80H ;设置LCD的第一行地址
0548,12 05 23,, LCALL WCOM ;写入命令
054B,D0 E0,, POP ACC ;由堆栈取出A
054D,12 05 31,, LCALL WDATA ;写入数据
0550,22,, RET
,,,
,,,;****************************** 声光报警子程序 *******************************
0551,7E 64,BEEP_BL,BEEP_BL: MOV R6,#100
0553,12 05 62,BL2, BL2: LCALL DEX1
0556,B2 B7,, CPL BEEP
0558,B2 93,, CPL RELAY
055A,DE F7,, DJNZ R6,BL2
055C,7D 0A,, MOV R5,#10
055E,12 05 68,, LCALL DELAY
0561,22,, RET
0562,7F B4,DEX1, DEX1: MOV R7,#180
0564,00,DE2, DE2: NOP
0565,DF FD,, DJNZ R7,DE2
0567,22,, RET
,,,
,,,;****************************** 延时子程序 *******************************
0568,7E 32,DELAY,DELAY: MOV R6,#50
056A,7F 64,DL1, DL1: MOV R7,#100
056C,DF FE,, DJNZ R7,$
056E,DE FA,, DJNZ R6,DL1
0570,DD F6,, DJNZ R5,DELAY
0572,22,, RET
0573,7E 19,DELAY1,DELAY1: MOV R6,#25 ;延时5毫秒
0575,7F 64,DL2, DL2: MOV R7,#100
0577,DF FE,, DJNZ R7,$
0579,DE FA,, DJNZ R6,DL2
057B,22,, RET
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -