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