📄 lcd.lis
字号:
00B0 .dbline 59
00B0 ; if(cd==CMD)
00B0 4423 tst R20
00B2 11F4 brne L20
00B4 .dbline 60
00B4 ; SET_LCD_CMD;
00B4 C098 cbi 0x18,0
00B6 01C0 xjmp L21
00B8 L20:
00B8 .dbline 62
00B8 ; else
00B8 ; SET_LCD_DATA;
00B8 C09A sbi 0x18,0
00BA L21:
00BA .dbline 63
00BA ; SET_LCD_WRITE;
00BA C198 cbi 0x18,1
00BC .dbline 64
00BC ; SET_LCD_E;
00BC C29A sbi 0x18,2
00BE .dbline 65
00BE ; LCD_DIR_PORT = 0xff;
00BE 8FEF ldi R24,255
00C0 8ABB out 0x1a,R24
00C2 .dbline 66
00C2 ; LCD_OP_PORT = data;
00C2 0C80 ldd R0,y+4
00C4 0BBA out 0x1b,R0
00C6 .dbline 67
00C6 ; delay_nus(250);
00C6 0AEF ldi R16,250
00C8 9BDF xcall _delay_nus
00CA .dbline 68
00CA ; delay_nus(250);
00CA 0AEF ldi R16,250
00CC 99DF xcall _delay_nus
00CE .dbline 69
00CE ; CLEAR_LCD_E;
00CE C298 cbi 0x18,2
00D0 .dbline 70
00D0 ; LCD_OP_PORT = 0xff;
00D0 8FEF ldi R24,255
00D2 8BBB out 0x1b,R24
00D4 .dbline 71
00D4 ; asm("sei");
00D4 7894 sei
00D6 .dbline -2
00D6 L19:
00D6 0E940000 xcall pop_gset2
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym l data 4 c
00DC .dbsym r cd 20 c
00DC .dbsym r lr 22 c
00DC .dbend
00DC .dbfunc e read_LCD _read_LCD fc
00DC ; data -> R20
00DC ; lr -> R22
.even
00DC _read_LCD::
00DC 0E940000 xcall push_gset2
00E0 602F mov R22,R16
00E2 .dbline -1
00E2 .dbline 77
00E2 ;
00E2 ; }
00E2 ;
00E2 ; //--------------读数据函数-------------------
00E2 ; unsigned char read_LCD(unsigned char lr)
00E2 ; {
00E2 .dbline 80
00E2 ; unsigned char data;
00E2 ;
00E2 ; asm("cli");
00E2 F894 cli
00E4 .dbline 81
00E4 ; LCD_BUSY(lr);
00E4 062F mov R16,R22
00E6 B2DF xcall _LCD_BUSY
00E8 .dbline 82
00E8 ; SET_LCD_DATA;
00E8 C09A sbi 0x18,0
00EA .dbline 83
00EA ; LCD_DIR_PORT = 0x00;
00EA 2224 clr R2
00EC 2ABA out 0x1a,R2
00EE .dbline 84
00EE ; LCD_OP_PORT = 0xff;
00EE 8FEF ldi R24,255
00F0 8BBB out 0x1b,R24
00F2 .dbline 85
00F2 ; SET_LCD_READ;
00F2 C19A sbi 0x18,1
00F4 .dbline 86
00F4 ; SET_LCD_E;
00F4 C29A sbi 0x18,2
00F6 .dbline 87
00F6 ; delay_nms(1);
00F6 01E0 ldi R16,1
00F8 10E0 ldi R17,0
00FA 92DF xcall _delay_nms
00FC .dbline 88
00FC ; data=LCD_IP_PORT;
00FC 49B3 in R20,0x19
00FE .dbline 89
00FE ; CLEAR_LCD_E;
00FE C298 cbi 0x18,2
0100 .dbline 90
0100 ; SET_LCD_WRITE;
0100 C198 cbi 0x18,1
0102 .dbline 92
0102 ;
0102 ; LCD_BUSY(lr);
0102 062F mov R16,R22
0104 A3DF xcall _LCD_BUSY
0106 .dbline 93
0106 ; SET_LCD_DATA;
0106 C09A sbi 0x18,0
0108 .dbline 94
0108 ; LCD_DIR_PORT = 0x00;
0108 2224 clr R2
010A 2ABA out 0x1a,R2
010C .dbline 95
010C ; LCD_OP_PORT = 0xff;
010C 8FEF ldi R24,255
010E 8BBB out 0x1b,R24
0110 .dbline 96
0110 ; SET_LCD_READ;
0110 C19A sbi 0x18,1
0112 .dbline 97
0112 ; SET_LCD_E;
0112 C29A sbi 0x18,2
0114 .dbline 98
0114 ; delay_nus(250);
0114 0AEF ldi R16,250
0116 74DF xcall _delay_nus
0118 .dbline 99
0118 ; delay_nus(250);
0118 0AEF ldi R16,250
011A 72DF xcall _delay_nus
011C .dbline 100
011C ; data=LCD_IP_PORT;
011C 49B3 in R20,0x19
011E .dbline 101
011E ; CLEAR_LCD_E;
011E C298 cbi 0x18,2
0120 .dbline 102
0120 ; SET_LCD_WRITE;
0120 C198 cbi 0x18,1
0122 .dbline 103
0122 ; delay_nus(250);
0122 0AEF ldi R16,250
0124 6DDF xcall _delay_nus
0126 .dbline 104
0126 ; delay_nus(250);
0126 0AEF ldi R16,250
0128 6BDF xcall _delay_nus
012A .dbline 105
012A ; asm("sei");
012A 7894 sei
012C .dbline 106
012C ; return data;
012C 042F mov R16,R20
012E .dbline -2
012E L22:
012E 0E940000 xcall pop_gset2
0132 .dbline 0 ; func end
0132 0895 ret
0134 .dbsym r data 20 c
0134 .dbsym r lr 22 c
0134 .dbend
0134 .dbfunc e set_start_line_L _set_start_line_L fV
0134 ; line -> R20
.even
0134 _set_start_line_L::
0134 0E940000 xcall push_gset1
0138 402F mov R20,R16
013A 2197 sbiw R28,1
013C .dbline -1
013C .dbline 111
013C ; }
013C ;
013C ; //-----------------行列页选择函数------------------
013C ; void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-63
013C ; {
013C .dbline 112
013C ; write_LCD(LEFT,CMD,0xc0|line);
013C 842F mov R24,R20
013E 806C ori R24,192
0140 8883 std y+0,R24
0142 2227 clr R18
0144 0027 clr R16
0146 ADDF xcall _write_LCD
0148 .dbline -2
0148 L23:
0148 2196 adiw R28,1
014A 0E940000 xcall pop_gset1
014E .dbline 0 ; func end
014E 0895 ret
0150 .dbsym r line 20 c
0150 .dbend
0150 .dbfunc e set_start_line_R _set_start_line_R fV
0150 ; line -> R20
.even
0150 _set_start_line_R::
0150 0E940000 xcall push_gset1
0154 402F mov R20,R16
0156 2197 sbiw R28,1
0158 .dbline -1
0158 .dbline 116
0158 ; }
0158 ;
0158 ; void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-63
0158 ; {
0158 .dbline 117
0158 ; write_LCD(RIGHT,CMD,0xc0|line);
0158 842F mov R24,R20
015A 806C ori R24,192
015C 8883 std y+0,R24
015E 2227 clr R18
0160 01E0 ldi R16,1
0162 9FDF xcall _write_LCD
0164 .dbline -2
0164 L24:
0164 2196 adiw R28,1
0166 0E940000 xcall pop_gset1
016A .dbline 0 ; func end
016A 0895 ret
016C .dbsym r line 20 c
016C .dbend
016C .dbfunc e set_page_L _set_page_L fV
016C ; page -> R20
.even
016C _set_page_L::
016C 0E940000 xcall push_gset1
0170 402F mov R20,R16
0172 2197 sbiw R28,1
0174 .dbline -1
0174 .dbline 121
0174 ; }
0174 ;
0174 ; void set_page_L(unsigned char page) /*设置X地址 设置页*/ //0-7
0174 ; {
0174 .dbline 122
0174 ; write_LCD(LEFT,CMD,0xb8|page);
0174 842F mov R24,R20
0176 886B ori R24,184
0178 8883 std y+0,R24
017A 2227 clr R18
017C 0027 clr R16
017E 91DF xcall _write_LCD
0180 .dbline -2
0180 L25:
0180 2196 adiw R28,1
0182 0E940000 xcall pop_gset1
0186 .dbline 0 ; func end
0186 0895 ret
0188 .dbsym r page 20 c
0188 .dbend
0188 .dbfunc e set_page_R _set_page_R fV
0188 ; page -> R20
.even
0188 _set_page_R::
0188 0E940000 xcall push_gset1
018C 402F mov R20,R16
018E 2197 sbiw R28,1
0190 .dbline -1
0190 .dbline 125
0190 ; }
0190 ; void set_page_R(unsigned char page) /*设置X地址 设置页*/ //0-7
0190 ; {
0190 .dbline 126
0190 ; write_LCD(RIGHT,CMD,0xb8|page);
0190 842F mov R24,R20
0192 886B ori R24,184
0194 8883 std y+0,R24
0196 2227 clr R18
0198 01E0 ldi R16,1
019A 83DF xcall _write_LCD
019C .dbline -2
019C L26:
019C 2196 adiw R28,1
019E 0E940000 xcall pop_gset1
01A2 .dbline 0 ; func end
01A2 0895 ret
01A4 .dbsym r page 20 c
01A4 .dbend
01A4 .dbfunc e set_col_addr_L _set_col_addr_L fV
01A4 ; col -> R20
.even
01A4 _set_col_addr_L::
01A4 0E940000 xcall push_gset1
01A8 402F mov R20,R16
01AA 2197 sbiw R28,1
01AC .dbline -1
01AC .dbline 130
01AC ; }
01AC ;
01AC ; void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
01AC ; {
01AC .dbline 131
01AC ; write_LCD(LEFT,CMD,0x40|col);
01AC 842F mov R24,R20
01AE 8064 ori R24,64
01B0 8883 std y+0,R24
01B2 2227 clr R18
01B4 0027 clr R16
01B6 75DF xcall _write_LCD
01B8 .dbline -2
01B8 L27:
01B8 2196 adiw R28,1
01BA 0E940000 xcall pop_gset1
01BE .dbline 0 ; func end
01BE 0895 ret
01C0 .dbsym r col 20 c
01C0 .dbend
01C0 .dbfunc e set_col_addr_R _set_col_addr_R fV
01C0 ; col -> R20
.even
01C0 _set_col_addr_R::
01C0 0E940000 xcall push_gset1
01C4 402F mov R20,R16
01C6 2197 sbiw R28,1
01C8 .dbline -1
01C8 .dbline 135
01C8 ; }
01C8 ;
01C8 ; void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
01C8 ; {
01C8 .dbline 136
01C8 ; write_LCD(RIGHT,CMD,0x40|col);
01C8 842F mov R24,R20
01CA 8064 ori R24,64
01CC 8883 std y+0,R24
01CE 2227 clr R18
01D0 01E0 ldi R16,1
01D2 67DF xcall _write_LCD
01D4 .dbline -2
01D4 L28:
01D4 2196 adiw R28,1
01D6 0E940000 xcall pop_gset1
01DA .dbline 0 ; func end
01DA 0895 ret
01DC .dbsym r col 20 c
01DC .dbend
01DC .dbfunc e LCD_Init _LCD_Init fV
.even
01DC _LCD_Init::
01DC 2197 sbiw R28,1
01DE .dbline -1
01DE .dbline 142
01DE ; }
01DE ;
01DE ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -