📄 lcd.lis
字号:
0082 8F70 andi R24,15
0084 82BB out 0x12,R24
0086 .dbline 95
0086 ; LCD_DATA_PORT |= datal&0xf0; //send low 4bit
0086 842F mov R24,R20
0088 807F andi R24,240
008A 22B2 in R2,0x12
008C 282A or R2,R24
008E 22BA out 0x12,R2
0090 .dbline 96
0090 ; LCD16xx_en_write();
0090 D5DF xcall _LCD16xx_en_write
0092 .dbline -2
0092 .dbline 97
0092 ; }
0092 L4:
0092 0E940000 xcall pop_gset3
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbsym r datal 20 c
0098 .dbsym r datah 22 c
0098 .dbsym r data 20 c
0098 .dbsym r command 10 c
0098 .dbend
0098 .dbfunc e LCD16xx_wait_Ready _LCD16xx_wait_Ready fV
.even
0098 _LCD16xx_wait_Ready::
0098 .dbline -1
0098 .dbline 100
0098 ;
0098 ; void LCD16xx_wait_Ready(void) //等待LCD空闲
0098 ; {
0098 .dbline 101
0098 ; LCD_DATA_DDR &= ~0x80; //PD7 I/O口方向设置为输入
0098 8F98 cbi 0x11,7
009A .dbline 102
009A ; RW_H; //RW=1
009A D99A sbi 0x1b,1
009C .dbline 103
009C ; RS_L; //RS=0
009C DA98 cbi 0x1b,2
009E .dbline 104
009E ; E_H; //EN=1
009E D89A sbi 0x1b,0
00A0 L8:
00A0 .dbline 105
00A0 L9:
00A0 .dbline 105
00A0 ; while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,读PD7,为0表示空闲;
00A0 8799 sbic 0x10,7
00A2 03C0 rjmp L11
00A4 01E0 ldi R16,1
00A6 10E0 ldi R17,0
00A8 02C0 xjmp L12
00AA L11:
00AA 0027 clr R16
00AC 1127 clr R17
00AE L12:
00AE 0030 cpi R16,0
00B0 0107 cpc R16,R17
00B2 B1F3 breq L8
00B4 X0:
00B4 .dbline 106
00B4 ; E_L; //EN=0
00B4 D898 cbi 0x1b,0
00B6 .dbline 107
00B6 ; LCD_DATA_DDR |= LCD_DATA;
00B6 81B3 in R24,0x11
00B8 806F ori R24,240
00BA 81BB out 0x11,R24
00BC .dbline -2
00BC .dbline 108
00BC ; }
00BC L7:
00BC .dbline 0 ; func end
00BC 0895 ret
00BE .dbend
00BE .dbfunc e LCD16xx_set_xy _LCD16xx_set_xy fV
00BE ; address -> R20
00BE ; y -> R10
00BE ; x -> R22
.even
00BE _LCD16xx_set_xy::
00BE 0E940000 xcall push_gset3
00C2 A22E mov R10,R18
00C4 602F mov R22,R16
00C6 .dbline -1
00C6 .dbline 120
00C6 ;
00C6 ; /*-----------------------------------------------------------------------
00C6 ; LCD_set_xy : 设置LCD显示的起始位置
00C6 ;
00C6 ; 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
00C6 ; LCD第一行显示寄存器地址:0x80-0x8F
00C6 ; LCD第一行显示寄存器地址:0xC0-0xCF
00C6 ; 编写日期 :2006年08月30日
00C6 ; 最后修改日期 :2006年08月30日
00C6 ; -----------------------------------------------------------------------*/
00C6 ; void LCD16xx_set_xy( unsigned char x, unsigned char y )
00C6 ; {
00C6 .dbline 122
00C6 ; unsigned char address;
00C6 ; if (y == 0)
00C6 AA20 tst R10
00C8 19F4 brne L14
00CA .dbline 123
00CA ; address = 0x80 + x;
00CA 462F mov R20,R22
00CC 4058 subi R20,128 ; addi 128
00CE 0EC0 xjmp L15
00D0 L14:
00D0 .dbline 124
00D0 ; else if(y == 1)
00D0 8A2D mov R24,R10
00D2 8130 cpi R24,1
00D4 19F4 brne L16
00D6 .dbline 125
00D6 ; address = 0xc0 + x;
00D6 462F mov R20,R22
00D8 4054 subi R20,64 ; addi 192
00DA 08C0 xjmp L17
00DC L16:
00DC .dbline 126
00DC ; else if(y == 2)
00DC 8A2D mov R24,R10
00DE 8230 cpi R24,2
00E0 19F4 brne L18
00E2 .dbline 127
00E2 ; address = 0x90 + x;
00E2 462F mov R20,R22
00E4 4057 subi R20,112 ; addi 144
00E6 02C0 xjmp L19
00E8 L18:
00E8 .dbline 129
00E8 ; else
00E8 ; address = 0xd0 + x;
00E8 462F mov R20,R22
00EA 4053 subi R20,48 ; addi 208
00EC L19:
00EC L17:
00EC L15:
00EC .dbline 130
00EC ; LCD16xx_write_char( 1,address );
00EC 242F mov R18,R20
00EE 01E0 ldi R16,1
00F0 AFDF xcall _LCD16xx_write_char
00F2 .dbline -2
00F2 .dbline 131
00F2 ; }
00F2 L13:
00F2 0E940000 xcall pop_gset3
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbsym r address 20 c
00F8 .dbsym r y 10 c
00F8 .dbsym r x 22 c
00F8 .dbend
00F8 .dbfunc e LCD16xx_write_string _LCD16xx_write_string fV
00F8 ; s -> R20,R21
00F8 ; Y -> R10
00F8 ; X -> R22
.even
00F8 _LCD16xx_write_string::
00F8 0E940000 xcall push_gset3
00FC A22E mov R10,R18
00FE 602F mov R22,R16
0100 4E81 ldd R20,y+6
0102 5F81 ldd R21,y+7
0104 .dbline -1
0104 .dbline 141
0104 ; /*-----------------------------------------------------------------------
0104 ; LCD16xx_write_string : 英文字符串显示函数
0104 ;
0104 ; 输入参数:*s :英文字符串指针;
0104 ; X、Y : 显示字符串的位置
0104 ; 编写日期 :2006年08月30日
0104 ; 最后修改日期 :2006年08月30日
0104 ; -----------------------------------------------------------------------*/
0104 ; void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
0104 ; {
0104 .dbline 142
0104 ; LCD16xx_set_xy( X, Y );
0104 2A2D mov R18,R10
0106 062F mov R16,R22
0108 DADF xcall _LCD16xx_set_xy
010A 0AC0 xjmp L22
010C L21:
010C .dbline 144
010C .dbline 145
010C 05E0 ldi R16,5
010E 10E0 ldi R17,0
0110 0E940000 xcall _delay_nus
0114 .dbline 146
0114 FA01 movw R30,R20
0116 2081 ldd R18,z+0
0118 0027 clr R16
011A 9ADF xcall _LCD16xx_write_char
011C .dbline 147
011C 4F5F subi R20,255 ; offset = 1
011E 5F4F sbci R21,255
0120 .dbline 148
0120 L22:
0120 .dbline 143
0120 ; while (*s)
0120 FA01 movw R30,R20
0122 2080 ldd R2,z+0
0124 2220 tst R2
0126 91F7 brne L21
0128 .dbline -2
0128 .dbline 149
0128 ; {
0128 ; delay_nus(5);
0128 ; LCD16xx_write_char( 0, *s );
0128 ; s++;
0128 ; }
0128 ; }
0128 L20:
0128 0E940000 xcall pop_gset3
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym r s 20 pc
012E .dbsym r Y 10 c
012E .dbsym r X 22 c
012E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -