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