📄 lcd.lis
字号:
006C L4:
006C 0E940000 xcall pop_gset2
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r data 20 c
0072 .dbsym r command 22 c
0072 .dbend
0072 .dbfunc e LCD16xx_wait_Ready _LCD16xx_wait_Ready fV
.even
0072 _LCD16xx_wait_Ready::
0072 .dbline -1
0072 .dbline 94
0072 ;
0072 ; }
0072 ;
0072 ; void LCD16xx_wait_Ready(void) //等待LCD空闲
0072 ; {
0072 .dbline 95
0072 ; LCD_DATA_DDR &= ~0x80; //PD7 I/O口方向设置为输入
0072 A798 cbi 0x14,7
0074 .dbline 96
0074 ; LCD_RS_PORT &= ~LCD_RS; //RS=0
0074 9698 cbi 0x12,6
0076 .dbline 97
0076 ; LCD_EN_PORT |= LCD_EN; //EN=1
0076 979A sbi 0x12,7
0078 L8:
0078 .dbline 98
0078 L9:
0078 .dbline 98
0078 ; while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,读PD7,为0表示空闲;
0078 9F99 sbic 0x13,7
007A 03C0 rjmp L11
007C 01E0 ldi R16,1
007E 10E0 ldi R17,0
0080 02C0 xjmp L12
0082 L11:
0082 0027 clr R16
0084 1127 clr R17
0086 L12:
0086 0030 cpi R16,0
0088 0107 cpc R16,R17
008A B1F3 breq L8
008C X0:
008C .dbline 99
008C ; LCD_EN_PORT &= ~LCD_EN; //EN=0
008C 9798 cbi 0x12,7
008E .dbline 100
008E ; LCD_DATA_DDR |= LCD_DATA;
008E 84B3 in R24,0x14
0090 8F6F ori R24,255
0092 84BB out 0x14,R24
0094 .dbline -2
0094 L7:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
0096 .dbfunc e LCD16xx_set_xy _LCD16xx_set_xy fV
0096 ; address -> R20
0096 ; y -> R10
0096 ; x -> R22
.even
0096 _LCD16xx_set_xy::
0096 0E940000 xcall push_gset3
009A A22E mov R10,R18
009C 602F mov R22,R16
009E .dbline -1
009E .dbline 113
009E ; }
009E ;
009E ; /*-----------------------------------------------------------------------
009E ; LCD_set_xy : 设置LCD显示的起始位置
009E ;
009E ; 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
009E ; LCD第一行显示寄存器地址:0x80-0x8F
009E ; LCD第一行显示寄存器地址:0xC0-0xCF
009E ; 编写日期 :2006年08月30日
009E ; 最后修改日期 :2006年08月30日
009E ; -----------------------------------------------------------------------*/
009E ; void LCD16xx_set_xy( unsigned char x, unsigned char y )
009E ; {
009E .dbline 115
009E ; unsigned char address;
009E ; if (y == 0)
009E AA20 tst R10
00A0 19F4 brne L14
00A2 .dbline 116
00A2 ; address = 0x81 + x;
00A2 462F mov R20,R22
00A4 4F57 subi R20,127 ; addi 129
00A6 11C0 xjmp L15
00A8 L14:
00A8 .dbline 117
00A8 ; else if(y == 1)
00A8 8A2D mov R24,R10
00AA 8130 cpi R24,1
00AC 19F4 brne L16
00AE .dbline 118
00AE ; address = 0xc1 + x;
00AE 462F mov R20,R22
00B0 4F53 subi R20,63 ; addi 193
00B2 0BC0 xjmp L17
00B4 L16:
00B4 .dbline 119
00B4 ; else if(y == 2)
00B4 8A2D mov R24,R10
00B6 8230 cpi R24,2
00B8 19F4 brne L18
00BA .dbline 120
00BA ; address = 0x91 + x;
00BA 462F mov R20,R22
00BC 4F56 subi R20,111 ; addi 145
00BE 05C0 xjmp L19
00C0 L18:
00C0 .dbline 121
00C0 ; else if(y == 3)
00C0 8A2D mov R24,R10
00C2 8330 cpi R24,3
00C4 11F4 brne L20
00C6 .dbline 122
00C6 ; address = 0xd1 + x;
00C6 462F mov R20,R22
00C8 4F52 subi R20,47 ; addi 209
00CA L20:
00CA L19:
00CA L17:
00CA L15:
00CA .dbline 123
00CA ; LCD16xx_write_char( 1,address );
00CA 242F mov R18,R20
00CC 01E0 ldi R16,1
00CE BCDF xcall _LCD16xx_write_char
00D0 .dbline -2
00D0 L13:
00D0 0E940000 xcall pop_gset3
00D4 .dbline 0 ; func end
00D4 0895 ret
00D6 .dbsym r address 20 c
00D6 .dbsym r y 10 c
00D6 .dbsym r x 22 c
00D6 .dbend
00D6 .dbfunc e LCD16xx_write_string _LCD16xx_write_string fV
00D6 ; s -> R20,R21
00D6 ; Y -> R10
00D6 ; X -> R22
.even
00D6 _LCD16xx_write_string::
00D6 0E940000 xcall push_gset3
00DA A22E mov R10,R18
00DC 602F mov R22,R16
00DE 4E81 ldd R20,y+6
00E0 5F81 ldd R21,y+7
00E2 .dbline -1
00E2 .dbline 134
00E2 ; }
00E2 ; /*-----------------------------------------------------------------------
00E2 ; LCD16xx_write_string : 英文字符串显示函数
00E2 ;
00E2 ; 输入参数:*s :英文字符串指针;
00E2 ; X、Y : 显示字符串的位置
00E2 ; 编写日期 :2006年08月30日
00E2 ; 最后修改日期 :2006年08月30日
00E2 ; -----------------------------------------------------------------------*/
00E2 ; void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
00E2 ; {
00E2 .dbline 135
00E2 ; LCD16xx_set_xy( X, Y );
00E2 2A2D mov R18,R10
00E4 062F mov R16,R22
00E6 D7DF xcall _LCD16xx_set_xy
00E8 06C0 xjmp L24
00EA L23:
00EA .dbline 137
00EA .dbline 138
00EA FA01 movw R30,R20
00EC 2081 ldd R18,z+0
00EE 0027 clr R16
00F0 ABDF xcall _LCD16xx_write_char
00F2 .dbline 139
00F2 4F5F subi R20,255 ; offset = 1
00F4 5F4F sbci R21,255
00F6 .dbline 140
00F6 L24:
00F6 .dbline 136
00F6 ; while (*s)
00F6 FA01 movw R30,R20
00F8 2080 ldd R2,z+0
00FA 2220 tst R2
00FC B1F7 brne L23
00FE .dbline -2
00FE L22:
00FE 0E940000 xcall pop_gset3
0102 .dbline 0 ; func end
0102 0895 ret
0104 .dbsym r s 20 pc
0104 .dbsym r Y 10 c
0104 .dbsym r X 22 c
0104 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -