📄 lcd1602.lis
字号:
00AC 969A sbi 0x12,6
00AE .dbline 73
00AE ; PORTB&=0x0f;
00AE 88B3 in R24,0x18
00B0 8F70 andi R24,15
00B2 88BB out 0x18,R24
00B4 .dbline 74
00B4 ; PORTB|= data&0xf0;
00B4 842F mov R24,R20
00B6 807F andi R24,240
00B8 28B2 in R2,0x18
00BA 282A or R2,R24
00BC 28BA out 0x18,R2
00BE .dbline 75
00BE ; EN_CLR;
00BE 9698 cbi 0x12,6
00C0 .dbline -2
00C0 L17:
00C0 0E940000 xcall pop_gset1
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbsym r data 20 c
00C6 .dbend
00C6 .dbfunc e LCD_clear _LCD_clear fV
.even
00C6 _LCD_clear::
00C6 .dbline -1
00C6 .dbline 79
00C6 ; }
00C6 ;
00C6 ; /*显示屏清空显示*/
00C6 ; void LCD_clear(void) {
00C6 .dbline 81
00C6 ;
00C6 ; LCD_write_com(0x01);
00C6 01E0 ldi R16,1
00C8 B5DF xcall _LCD_write_com
00CA .dbline 82
00CA ; delay_ms(5);
00CA 05E0 ldi R16,5
00CC A4DF xcall _delay_ms
00CE .dbline -2
00CE L18:
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbend
00D0 .dbfunc e LCD_write_str _LCD_write_str fV
00D0 ; s -> R20,R21
00D0 ; y -> R10
00D0 ; x -> R22
.even
00D0 _LCD_write_str::
00D0 0E940000 xcall push_gset3
00D4 A22E mov R10,R18
00D6 602F mov R22,R16
00D8 4E81 ldd R20,y+6
00DA 5F81 ldd R21,y+7
00DC .dbline -1
00DC .dbline 86
00DC ; }
00DC ;
00DC ; /*显示屏字符串写入函数*/
00DC ; void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) {
00DC .dbline 88
00DC ;
00DC ; if (y == 0) {
00DC AA20 tst R10
00DE 21F4 brne L20
00E0 .dbline 88
00E0 .dbline 89
00E0 ; LCD_write_com(0x80 + x);
00E0 062F mov R16,R22
00E2 0058 subi R16,128 ; addi 128
00E4 A7DF xcall _LCD_write_com
00E6 .dbline 90
00E6 ; }
00E6 09C0 xjmp L23
00E8 L20:
00E8 .dbline 91
00E8 ; else {
00E8 .dbline 92
00E8 ; LCD_write_com(0xC0 + x);
00E8 062F mov R16,R22
00EA 0054 subi R16,64 ; addi 192
00EC A3DF xcall _LCD_write_com
00EE .dbline 93
00EE ; }
00EE 05C0 xjmp L23
00F0 L22:
00F0 .dbline 95
00F0 .dbline 96
00F0 FA01 movw R30,R20
00F2 0081 ldd R16,z+0
00F4 C5DF xcall _LCD_write_data
00F6 .dbline 97
00F6 4F5F subi R20,255 ; offset = 1
00F8 5F4F sbci R21,255
00FA .dbline 98
00FA L23:
00FA .dbline 95
00FA ;
00FA ; while (*s) {
00FA FA01 movw R30,R20
00FC 2080 ldd R2,z+0
00FE 2220 tst R2
0100 B9F7 brne L22
0102 .dbline -2
0102 L19:
0102 0E940000 xcall pop_gset3
0106 .dbline 0 ; func end
0106 0895 ret
0108 .dbsym r s 20 pc
0108 .dbsym r y 10 c
0108 .dbsym r x 22 c
0108 .dbend
0108 .dbfunc e LCD_write_char _LCD_write_char fV
0108 ; data -> y+4
0108 ; y -> R22
0108 ; x -> R20
.even
0108 _LCD_write_char::
0108 0E940000 xcall push_gset2
010C 622F mov R22,R18
010E 402F mov R20,R16
0110 .dbline -1
0110 .dbline 102
0110 ; LCD_write_data( *s);
0110 ; s ++;
0110 ; }
0110 ; }
0110 ;
0110 ; /*显示屏单字符写入函数*/
0110 ; void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) {
0110 .dbline 104
0110 ;
0110 ; if (y == 0) {
0110 6623 tst R22
0112 21F4 brne L26
0114 .dbline 104
0114 .dbline 105
0114 ; LCD_write_com(0x80 + x);
0114 042F mov R16,R20
0116 0058 subi R16,128 ; addi 128
0118 8DDF xcall _LCD_write_com
011A .dbline 106
011A ; }
011A 03C0 xjmp L27
011C L26:
011C .dbline 107
011C ; else {
011C .dbline 108
011C ; LCD_write_com(0xC0 + x);
011C 042F mov R16,R20
011E 0054 subi R16,64 ; addi 192
0120 89DF xcall _LCD_write_com
0122 .dbline 109
0122 ; }
0122 L27:
0122 .dbline 111
0122 ;
0122 ; LCD_write_data( data);
0122 0C81 ldd R16,y+4
0124 ADDF xcall _LCD_write_data
0126 .dbline -2
0126 L25:
0126 0E940000 xcall pop_gset2
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym l data 4 c
012C .dbsym r y 22 c
012C .dbsym r x 20 c
012C .dbend
012C .dbfunc e LCD_init _LCD_init fV
.even
012C _LCD_init::
012C .dbline -1
012C .dbline 115
012C ; }
012C ;
012C ; /*显示屏初始化函数*/
012C ; void LCD_init(void) {
012C .dbline 117
012C ;
012C ; DDRB = 0xFF; /*I/O口方向设置*/
012C 8FEF ldi R24,255
012E 87BB out 0x17,R24
0130 .dbline 118
0130 ; DDRD |= (1 << PD3) | (1 << PD4) | (1 << PD6);
0130 81B3 in R24,0x11
0132 8865 ori R24,88
0134 81BB out 0x11,R24
0136 .dbline 119
0136 ; LCD_write_com(0x28); /*显示模式设置*/
0136 08E2 ldi R16,40
0138 7DDF xcall _LCD_write_com
013A .dbline 120
013A ; delay_ms(15);
013A 0FE0 ldi R16,15
013C 6CDF xcall _delay_ms
013E .dbline 121
013E ; LCD_write_com(0x28);
013E 08E2 ldi R16,40
0140 79DF xcall _LCD_write_com
0142 .dbline 122
0142 ; delay_ms(5);
0142 05E0 ldi R16,5
0144 68DF xcall _delay_ms
0146 .dbline 123
0146 ; LCD_write_com(0x28);
0146 08E2 ldi R16,40
0148 75DF xcall _LCD_write_com
014A .dbline 124
014A ; delay_ms(5);
014A 05E0 ldi R16,5
014C 64DF xcall _delay_ms
014E .dbline 125
014E ; LCD_write_com(0x28);
014E 08E2 ldi R16,40
0150 71DF xcall _LCD_write_com
0152 .dbline 127
0152 ;
0152 ; LCD_write_com(0x08); /*显示关闭*/
0152 08E0 ldi R16,8
0154 6FDF xcall _LCD_write_com
0156 .dbline 128
0156 ; LCD_write_com(0x01); /*显示清屏*/
0156 01E0 ldi R16,1
0158 6DDF xcall _LCD_write_com
015A .dbline 129
015A ; LCD_write_com(0x06); /*显示光标移动设置*/
015A 06E0 ldi R16,6
015C 6BDF xcall _LCD_write_com
015E .dbline 130
015E ; delay_ms(5);
015E 05E0 ldi R16,5
0160 5ADF xcall _delay_ms
0162 .dbline 131
0162 ; LCD_write_com(0x0C); /*显示开及光标设置*/
0162 0CE0 ldi R16,12
0164 67DF xcall _LCD_write_com
0166 .dbline -2
0166 L28:
0166 .dbline 0 ; func end
0166 0895 ret
0168 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -