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