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

📄 lcd.lst

📁 利用HOLTEK单片机开发的1602液晶驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
; 110: 	LCM_E = 0;
 110  0004  3512        CLR [012H].2

; 111: 	LCM_E = 1;
文件:LCD.c        盛群编译器版本 2.86 页次7 

 111  0005  3112        SET [012H].2
 111  0006              L22:
 111  0006              L23:

; 112: 	while (_pb & Busy); //检测忙信号
 112  0006  3F94        SZ __pb.7
 112  0007  2800     R  JMP L22

; 113: 	return(_pb);
 113  0008  0714        MOV A,__pb
 113  0009              L21:
 113  0009  0003        RET
 113  000A              _ReadStatusLCM ENDP

; 117: {
 117  0000              @LCMInit .SECTION 'CODE'
 117  0000              PUBLIC _LCMInit
 117  0000              _LCMInit PROC

; 118: 	WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 118  0000  0F38        MOV A,038h
 118  0001  0080     R  MOV WriteCommandLCM0,A
 118  0002  0F00        MOV A,00h
 118  0003  0080     R  MOV WriteCommandLCM1,A
 118  0004  2000     R  CALL _WriteCommandLCM

; 119: 	Delay5Ms(); 
 119  0005  2000     R  CALL _Delay5Ms

; 120: 	WriteCommandLCM(0x38,0);
 120  0006  0F38        MOV A,038h
 120  0007  0080     R  MOV WriteCommandLCM0,A
 120  0008  0F00        MOV A,00h
 120  0009  0080     R  MOV WriteCommandLCM1,A
 120  000A  2000     R  CALL _WriteCommandLCM

; 121: 	Delay5Ms(); 
 121  000B  2000     R  CALL _Delay5Ms

; 122: 	WriteCommandLCM(0x38,0);
 122  000C  0F38        MOV A,038h
 122  000D  0080     R  MOV WriteCommandLCM0,A
 122  000E  0F00        MOV A,00h
 122  000F  0080     R  MOV WriteCommandLCM1,A
 122  0010  2000     R  CALL _WriteCommandLCM

; 123: 	Delay5Ms(); 
 123  0011  2000     R  CALL _Delay5Ms

; 125: 	WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
文件:LCD.C        盛群编译器版本 2.86 页次7

 125  0012  0F38        MOV A,038h
 125  0013  0080     R  MOV WriteCommandLCM0,A
 125  0014  0F01        MOV A,01h
 125  0015  0080     R  MOV WriteCommandLCM1,A
 125  0016  2000     R  CALL _WriteCommandLCM

; 126: 	WriteCommandLCM(0x08,1); //关闭显示 
 126  0017  0F08        MOV A,08h
文件:LCD.c        盛群编译器版本 2.86 页次8 

 126  0018  0080     R  MOV WriteCommandLCM0,A
 126  0019  0F01        MOV A,01h
 126  001A  0080     R  MOV WriteCommandLCM1,A
 126  001B  2000     R  CALL _WriteCommandLCM

; 127: 	WriteCommandLCM(0x01,1); //显示清屏
 127  001C  0F01        MOV A,01h
 127  001D  0080     R  MOV WriteCommandLCM0,A
 127  001E  0F01        MOV A,01h
 127  001F  0080     R  MOV WriteCommandLCM1,A
 127  0020  2000     R  CALL _WriteCommandLCM

; 128: 	WriteCommandLCM(0x06,1); // 显示光标移动设置
 128  0021  0F06        MOV A,06h
 128  0022  0080     R  MOV WriteCommandLCM0,A
 128  0023  0F01        MOV A,01h
 128  0024  0080     R  MOV WriteCommandLCM1,A
 128  0025  2000     R  CALL _WriteCommandLCM

; 129: 	WriteCommandLCM(0x0C,1); // 显示开及光标设置
 129  0026  0F0C        MOV A,0ch
 129  0027  0080     R  MOV WriteCommandLCM0,A
 129  0028  0F01        MOV A,01h
 129  0029  0080     R  MOV WriteCommandLCM1,A
 129  002A  2000     R  CALL _WriteCommandLCM
 129  002B              L25:
 129  002B  0003        RET
 129  002C              _LCMInit ENDP

; 134: {
 134  0000              @Display .SECTION 'CODE'
 134  0000              PUBLIC _Display
 134  0000              _Display PROC

; 133: void Display( Uchar dd ) 
 133  0000              PUBLIC Display0
 133  0000  00          LOCAL Display0 DB ? ; dd

; 137: 	for (i=0;i<8;i++)
 137  0000  1F00     R  CLR CR8
 137  0001  2800     R  JMP L30
 137  0002              L27:

; 139: 		DisplayOneChar(i,1,dd++);
 139  0002  0700     R  MOV A,CR8
 139  0003  0080     R  MOV DisplayOneChar0,A
 139  0004  0F01        MOV A,01h
 139  0005  0080     R  MOV DisplayOneChar1,A
 139  0006  0700     R  MOV A,Display0
 139  0007  0080     R  MOV b0_7,A
 139  0008  1480     R  INC Display0
 139  0009  0700     R  MOV A,b0_7
 139  000A  0080     R  MOV DisplayOneChar2,A
 139  000B  2000     R  CALL _DisplayOneChar

; 140: 		dd &= 0x7f;
文件:LCD.C        盛群编译器版本 2.86 页次8

 140  000C  3400     R  CLR Display0.7

; 141: 		if (dd<32) dd=32;
文件:LCD.c        盛群编译器版本 2.86 页次9 

 141  000D  0700     R  MOV A,Display0
 141  000E  0A20        SUB A,020h
 141  000F  3C0A        SZ [0ah].0
 141  0010  2800     R  JMP L31
 141  0011  0F20        MOV A,020h
 141  0012  0080     R  MOV Display0,A
 141  0013              L31:
 141  0013              L28:

; 137: 	for (i=0;i<8;i++)
 137  0013  1480     R  INC CR8
 137  0014              L30:
 137  0014  0700     R  MOV A,CR8
 137  0015  0A08        SUB A,08h
 137  0016  380A        SNZ [0ah].0
 137  0017  2800     R  JMP L27
 137  0018              L26:
 137  0018  0003        RET
 137  0001  00          LOCAL b0_7 DB ?

; 135: 	Uchar i;
 135  0002  00          LOCAL CR8 DB ? ; i
 135  0019              _Display ENDP

; 147: {
 147  0000              @DisplayOneChar .SECTION 'CODE'
 147  0000              PUBLIC _DisplayOneChar
 147  0000              _DisplayOneChar PROC

; 146: void DisplayOneChar(Uchar X, Uchar Y, Uchar DData)
 146  0000              PUBLIC DisplayOneChar0
 146  0000  00          LOCAL DisplayOneChar0 DB ? ; X
 146  0000              PUBLIC DisplayOneChar1
 146  0001  00          LOCAL DisplayOneChar1 DB ? ; Y
 146  0000              PUBLIC DisplayOneChar2
 146  0002  00          LOCAL DisplayOneChar2 DB ? ; DData

; 148: 	Y &= 0x1;
 148  0000  0F01        MOV A,01h
 148  0001  0680     R  ANDM A,DisplayOneChar1

; 149: 	X &= 0xF; //限制X不能大于15,Y不能大于1
 149  0002  0F0F        MOV A,0fh
 149  0003  0680     R  ANDM A,DisplayOneChar0

; 150: 	if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 150  0004  1080     R  SZ DisplayOneChar1
 150  0005  2800     R  JMP L36
 150  0006  2800     R  JMP L34
 150  0007              L36:
 150  0007  3000     R  SET DisplayOneChar0.6
 150  0008              L34:

; 151: 	X |= 0x80; //算出指令码
文件:LCD.C        盛群编译器版本 2.86 页次9

 151  0008  3000     R  SET DisplayOneChar0.7

; 152: 	WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
 152  0009  0700     R  MOV A,DisplayOneChar0
文件:LCD.c        盛群编译器版本 2.86 页次10 

 152  000A  0080     R  MOV WriteCommandLCM0,A
 152  000B  0F00        MOV A,00h
 152  000C  0080     R  MOV WriteCommandLCM1,A
 152  000D  2000     R  CALL _WriteCommandLCM

; 153: 	WriteDataLCM(DData);
 153  000E  0700     R  MOV A,DisplayOneChar2
 153  000F  0080     R  MOV WriteDataLCM0,A
 153  0010  2000     R  CALL _WriteDataLCM
 153  0011              L33:
 153  0011  0003        RET
 153  0012              _DisplayOneChar ENDP

; 158: {
 158  0000              @DisplayListChar .SECTION 'CODE'
 158  0000              PUBLIC _DisplayListChar
 158  0000              _DisplayListChar PROC

; 157: void DisplayListChar(Uchar X, Uchar Y, Uchar *DData)
 157  0000              PUBLIC DisplayListChar0
 157  0000  00          LOCAL DisplayListChar0 DB ? ; X
 157  0000              PUBLIC DisplayListChar1
 157  0001  00          LOCAL DisplayListChar1 DB ? ; Y
 157  0000              PUBLIC DisplayListChar2
 157  0002  0002[       LOCAL DisplayListChar2 DB 2 DUP (?) ; DData
            00
            ]

; 161: 	ListLength = 0;
 161  0000  1F00     R  CLR CR11

; 162: 	Y &= 0x1;
 162  0001  0F01        MOV A,01h
 162  0002  0680     R  ANDM A,DisplayListChar1

; 163: 	X &= 0xF; //限制X不能大于15,Y不能大于1
 163  0003  0F0F        MOV A,0fh
 163  0004  0680     R  ANDM A,DisplayListChar0
 163  0005  2800     R  JMP L39
 163  0006              L38:

; 166: 		if (X <= 0xF) //X坐标应小于0xF
 166  0006  0F0F        MOV A,0fh
 166  0007  0200     R  SUB A,DisplayListChar0
 166  0008  380A        SNZ [0ah].0
 166  0009  2800     R  JMP L41

; 168: 			DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
 168  000A  0700     R  MOV A,DisplayListChar0
 168  000B  0080     R  MOV DisplayOneChar0,A
 168  000C  0700     R  MOV A,DisplayListChar1
 168  000D  0080     R  MOV DisplayOneChar1,A
 168  000E  0700     R  MOV A,CR11
 168  000F  0300     R  ADD A,DisplayListChar2
 168  0010  0080     R  MOV b0_9,A
文件:LCD.C        盛群编译器版本 2.86 页次10

 168  0011  0700     R  MOV A,DisplayListChar2[1]
 168  0012  0080     R  MOV b0_9[1],A
 168  0013  0700     R  MOV A,b0_9[1]
文件:LCD.c        盛群编译器版本 2.86 页次11 

 168  0014  0084        MOV [04H],A
 168  0015  0700     R  MOV A,b0_9
 168  0016  0083        MOV [03H],A
 168  0017  0702        MOV A,[02H]
 168  0018  0080     R  MOV b0_9,A
 168  0019  0700     R  MOV A,b0_9
 168  001A  0080     R  MOV DisplayOneChar2,A
 168  001B  2000     R  CALL _DisplayOneChar

; 169: 			ListLength++;
 169  001C  1480     R  INC CR11

; 170: 			X++;
 170  001D  1480     R  INC DisplayListChar0
 170  001E              L41:
 170  001E              L39:

; 164: 	while (DData[ListLength]>0x20) //若到达字串尾则退出
 164  001E  0700     R  MOV A,CR11
 164  001F  0300     R  ADD A,DisplayListChar2
 164  0020  0080     R  MOV b0_9,A
 164  0021  0700     R  MOV A,DisplayListChar2[1]
 164  0022  0080     R  MOV b0_9[1],A
 164  0023  0700     R  MOV A,b0_9[1]
 164  0024  0084        MOV [04H],A
 164  0025  0700     R  MOV A,b0_9
 164  0026  0083        MOV [03H],A
 164  0027  0702        MOV A,[02H]
 164  0028  0080     R  MOV b0_9,A
 164  0029  0F20        MOV A,020h
 164  002A  0200     R  SUB A,b0_9
 164  002B  380A        SNZ [0ah].0
 164  002C  2800     R  JMP L38
 164  002D              L37:
 164  002D  0003        RET
 164  0004  0002[       LOCAL b0_9 DB 2 DUP(?)
            00
            ]

; 159: 	Uchar ListLength;
 159  0006  00          LOCAL CR11 DB ? ; ListLength
 159  002E              _DisplayListChar ENDP

; 177: {
 177  0000              @Delay5Ms .SECTION 'CODE'
 177  0000              PUBLIC _Delay5Ms
 177  0000              _Delay5Ms PROC

; 178: 	_delay(15000);
 178  0000  0F0E        MOV A,0eH
 178  0001  0080     E  MOV RH,A
 178  0002  0F9D        MOV A,09dH
 178  0003  2000     E  CALL __DELAYY3
 178  0004              L43:
 178  0004  0003        RET
 178  0005              _Delay5Ms ENDP

; 183: {
 183  0000              @Delay400Ms .SECTION 'CODE'
 183  0000              PUBLIC _Delay400Ms
文件:LCD.c        盛群编译器版本 2.86 页次12 

 183  0000              _Delay400Ms PROC
文件:LCD.C        盛群编译器版本 2.86 页次11


; 185: 	for(i=0;i<20;i++)
 185  0000  1F00     R  CLR CR12
 185  0001              L45:

; 187: 		_delay(60000);
 187  0001  0F3A        MOV A,03aH
 187  0002  0080     E  MOV RH,A
 187  0003  0F79        MOV A,079H
 187  0004  2000     E  CALL __DELAYY3
 187  0005              L46:

; 185: 	for(i=0;i<20;i++)
 185  0005  1480     R  INC CR12
 185  0006  0F80        MOV A,80h
 185  0007  0400     R  XOR A,CR12
 185  0008  0A94        SUB A,094h
 185  0009  380A        SNZ [0ah].0
 185  000A  2800     R  JMP L45
 185  000B              L44:
 185  000B  0003        RET

; 184: 	int i;
 184  0000  00          LOCAL CR12 DB ? ; i
 184  000C              _Delay400Ms ENDP

;  39: void main(void)
  39  0000              STARTSEC .SECTION 'CODE'
  39  0000              STARTUP:
  39  0000  0003        RET
  39  0001              EXTERN RH:BYTE
  39  0001              EXTERN T2:BYTE
  39  0001              EXTERN __DELAYY0:NEAR
  39  0001              EXTERN __DELAYY1:NEAR
  39  0001              EXTERN __DELAYY2:NEAR
  39  0001              EXTERN __DELAYY3:NEAR
  39  0001              EXTERN __DELAYY4:NEAR
  39  0001              EXTERN __DELAYY5:NEAR
  39  0000              @CODE .SECTION AT 0 'CODE'
  39  0000  2800     R  JMP begin
  39  0001              @DUMMY PROC
  39  0001  2000     R  CALL _main
  39  0002              @DUMMY ENDP


        0 Errors

⌨️ 快捷键说明

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