📄 lcddrive.lis
字号:
006E .dbline -1
006E .dbline 163
006E ; }
006E ; /***********************************************************************
006E ; * 名称:LCD_TestStaBit01()
006E ; * 功能:判断读写指令和读写数据是否允许。
006E ; * 入口参数:无
006E ; * 出口参数:返回0表示禁止,否则表示允许
006E ; ***********************************************************************/
006E ; uint8 LCD_TestStaBit01(void)
006E ; { /*uint8 i;
006E L12:
006E .dbline 170
006E L13:
006E .dbline 170
006E ;
006E ; for(i=100; i>0; i--)
006E ; { if( (LCD_ReadState()&0x03)==0x03 ) break;
006E ; }
006E ;
006E ; return(i);*/
006E ; while((LCD_ReadState()&0x03)!=3);
006E E6DF xcall _LCD_ReadState
0070 C801 movw R24,R16
0072 8370 andi R24,3
0074 9070 andi R25,0
0076 8330 cpi R24,3
0078 E0E0 ldi R30,0
007A 9E07 cpc R25,R30
007C C1F7 brne L12
007E .dbline -2
007E L11:
007E .dbline 0 ; func end
007E 0895 ret
0080 .dbend
0080 .dbfunc e LCD_TestStaBit3 _LCD_TestStaBit3 fc
0080 ; i -> R20
.even
0080 _LCD_TestStaBit3::
0080 0E940000 xcall push_gset1
0084 .dbline -1
0084 .dbline 180
0084 ; }
0084 ;
0084 ; /***********************************************************************
0084 ; * 名称:LCD_TestStaBit3()
0084 ; * 功能:数据自动写状态是否允许。
0084 ; * 入口参数:无
0084 ; * 出口参数:返回0表示禁止,否则表示允许
0084 ; ***********************************************************************/
0084 ; uint8 LCD_TestStaBit3(void)
0084 ; { uint8 i;
0084 .dbline 182
0084 ;
0084 ; for(i=100; i>0; i--)
0084 44E6 ldi R20,100
0086 0AC0 xjmp L19
0088 L16:
0088 .dbline 183
0088 ; { if( (LCD_ReadState()&0x08)==0x08 ) break;
0088 .dbline 183
0088 D9DF xcall _LCD_ReadState
008A C801 movw R24,R16
008C 8870 andi R24,8
008E 9070 andi R25,0
0090 8830 cpi R24,8
0092 E0E0 ldi R30,0
0094 9E07 cpc R25,R30
0096 09F4 brne L20
0098 .dbline 183
0098 04C0 xjmp L18
009A L20:
009A .dbline 184
009A L17:
009A .dbline 182
009A 4A95 dec R20
009C L19:
009C .dbline 182
009C 2224 clr R2
009E 2416 cp R2,R20
00A0 98F3 brlo L16
00A2 L18:
00A2 .dbline 186
00A2 ; }
00A2 ;
00A2 ; return(i);
00A2 042F mov R16,R20
00A4 .dbline -2
00A4 L15:
00A4 0E940000 xcall pop_gset1
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r i 20 c
00AA .dbend
00AA .dbfunc e LCD_WriteTCommand1 _LCD_WriteTCommand1 fc
00AA ; command -> R20
.even
00AA _LCD_WriteTCommand1::
00AA 0E940000 xcall push_gset1
00AE 402F mov R20,R16
00B0 .dbline -1
00B0 .dbline 197
00B0 ; }
00B0 ;
00B0 ;
00B0 ; /***********************************************************************
00B0 ; * 名称:LCD_WriteTCommand1()
00B0 ; * 功能:写无参数命令子程序。会先判断LCM状态字。
00B0 ; * 入口参数:command 要写入LCM的命令字
00B0 ; * 出口参数:操作出错返回0,否则返回1
00B0 ; ***********************************************************************/
00B0 ; uint8 LCD_WriteTCommand1(uint8 command)
00B0 ; { if( LCD_TestStaBit01()==0 ) return(0);
00B0 .dbline 197
00B0 DEDF xcall _LCD_TestStaBit01
00B2 0023 tst R16
00B4 11F4 brne L23
00B6 .dbline 197
00B6 0027 clr R16
00B8 03C0 xjmp L22
00BA L23:
00BA .dbline 198
00BA ; LCD_WriteCommand(command); // 发送命令字
00BA 042F mov R16,R20
00BC A1DF xcall _LCD_WriteCommand
00BE .dbline 200
00BE ;
00BE ; return(1);
00BE 01E0 ldi R16,1
00C0 .dbline -2
00C0 L22:
00C0 0E940000 xcall pop_gset1
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbsym r command 20 c
00C6 .dbend
00C6 .dbfunc e LCD_WriteTCommand3 _LCD_WriteTCommand3 fc
00C6 ; dat2 -> y+4
00C6 ; dat1 -> R22
00C6 ; command -> R20
.even
00C6 _LCD_WriteTCommand3::
00C6 0E940000 xcall push_gset2
00CA 622F mov R22,R18
00CC 402F mov R20,R16
00CE .dbline -1
00CE .dbline 214
00CE ; }
00CE ;
00CE ;
00CE ; /***********************************************************************
00CE ; * 名称:LCD_WriteTCommand3()
00CE ; * 功能:写双参数命令子程序。会先判断LCM状态字。
00CE ; * 入口参数:command 要写入LCM的命令字
00CE ; * dat1 参数1
00CE ; * dat2 参数2
00CE ; * 出口参数:操作出错返回0,否则返回1
00CE ; * 说明:先发送两字节参数据数据,再发送命令字
00CE ; ***********************************************************************/
00CE ; uint8 LCD_WriteTCommand3(uint8 command, uint8 dat1, uint8 dat2)
00CE ; { if( LCD_TestStaBit01()==0 ) return(0);
00CE .dbline 214
00CE CFDF xcall _LCD_TestStaBit01
00D0 0023 tst R16
00D2 11F4 brne L26
00D4 .dbline 214
00D4 0027 clr R16
00D6 11C0 xjmp L25
00D8 L26:
00D8 .dbline 215
00D8 ; LCD_WriteData(dat1); // 发送数据1
00D8 062F mov R16,R22
00DA A0DF xcall _LCD_WriteData
00DC .dbline 217
00DC ;
00DC ; if( LCD_TestStaBit01()==0 ) return(0);
00DC C8DF xcall _LCD_TestStaBit01
00DE 0023 tst R16
00E0 11F4 brne L28
00E2 .dbline 217
00E2 0027 clr R16
00E4 0AC0 xjmp L25
00E6 L28:
00E6 .dbline 218
00E6 ; LCD_WriteData(dat2); // 发送数据2
00E6 0C81 ldd R16,y+4
00E8 99DF xcall _LCD_WriteData
00EA .dbline 220
00EA ;
00EA ; if( LCD_TestStaBit01()==0 ) return(0);
00EA C1DF xcall _LCD_TestStaBit01
00EC 0023 tst R16
00EE 11F4 brne L30
00F0 .dbline 220
00F0 0027 clr R16
00F2 03C0 xjmp L25
00F4 L30:
00F4 .dbline 221
00F4 ; LCD_WriteCommand(command); // 发送命令字
00F4 042F mov R16,R20
00F6 84DF xcall _LCD_WriteCommand
00F8 .dbline 223
00F8 ;
00F8 ; return(1);
00F8 01E0 ldi R16,1
00FA .dbline -2
00FA L25:
00FA 0E940000 xcall pop_gset2
00FE .dbline 0 ; func end
00FE 0895 ret
0100 .dbsym l dat2 4 c
0100 .dbsym r dat1 22 c
0100 .dbsym r command 20 c
0100 .dbend
0100 .dbfunc e LCD_WriteTCommand2 _LCD_WriteTCommand2 fc
0100 ; dat1 -> R22
0100 ; command -> R20
.even
0100 _LCD_WriteTCommand2::
0100 0E940000 xcall push_gset2
0104 622F mov R22,R18
0106 402F mov R20,R16
0108 .dbline -1
0108 .dbline 236
0108 ; }
0108 ;
0108 ;
0108 ; /***********************************************************************
0108 ; * 名称:LCD_WriteTCommand2()
0108 ; * 功能:写单参数命令子程序。会先判断LCM状态字。
0108 ; * 入口参数:command 要写入LCM的命令字
0108 ; * dat1 参数1
0108 ; * 出口参数:操作出错返回0,否则返回1
0108 ; * 说明:先发送参数据数据,再发送命令字
0108 ; ***********************************************************************/
0108 ; uint8 LCD_WriteTCommand2(uint8 command, uint8 dat1)
0108 ; { if( LCD_TestStaBit01()==0 ) return(0);
0108 .dbline 236
0108 B2DF xcall _LCD_TestStaBit01
010A 0023 tst R16
010C 11F4 brne L33
010E .dbline 236
010E 0027 clr R16
0110 0AC0 xjmp L32
0112 L33:
0112 .dbline 237
0112 ; LCD_WriteData(dat1); // 发送数据1
0112 062F mov R16,R22
0114 83DF xcall _LCD_WriteData
0116 .dbline 239
0116 ;
0116 ; if( LCD_TestStaBit01()==0 ) return(0);
0116 ABDF xcall _LCD_TestStaBit01
0118 0023 tst R16
011A 11F4 brne L35
011C .dbline 239
011C 0027 clr R16
011E 03C0 xjmp L32
0120 L35:
0120 .dbline 240
0120 ; LCD_WriteCommand(command); // 发送命令字
0120 042F mov R16,R20
0122 6EDF xcall _LCD_WriteCommand
0124 .dbline 242
0124 ;
0124 ; return(1);
0124 01E0 ldi R16,1
0126 .dbline -2
0126 L32:
0126 0E940000 xcall pop_gset2
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym r dat1 22 c
012C .dbsym r command 20 c
012C .dbend
012C .dbfunc e LCD_WriteTData1 _LCD_WriteTData1 fc
012C ; dat -> R20
.even
012C _LCD_WriteTData1::
012C 0E940000 xcall push_gset1
0130 402F mov R20,R16
0132 .dbline -1
0132 .dbline 253
0132 ; }
0132 ;
0132 ;
0132 ; /***********************************************************************
0132 ; * 名称:LCD_WriteTData1()
0132 ; * 功能:写1字节数据子程序。会先判断状态字。
0132 ; * 入口参数:dat 要写入LCM的数据
0132 ; * 出口参数:操作出错返回0,否则返回1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -