📄 1602b_lcd.lis
字号:
0112 862F mov R24,R22
0114 972F mov R25,R23
0116 807F andi R24,240
0118 9070 andi R25,0
011A 28B2 in R2,0x18
011C 3324 clr R3
011E 282A or R2,R24
0120 392A or R3,R25
0122 28BA out 0x18,R2
0124 09C0 rjmp L7
0126 L6:
0126 .dbline 77
0126 ; else
0126 ; LCD_DATA_PORT |= command_temp&0xf0;
0126 842F mov R24,R20
0128 952F mov R25,R21
012A 807F andi R24,240
012C 9070 andi R25,0
012E 28B2 in R2,0x18
0130 3324 clr R3
0132 282A or R2,R24
0134 392A or R3,R25
0136 28BA out 0x18,R2
0138 L7:
0138 .dbline 78
0138 ; LCD_en_write();
0138 A5DF rcall _LCD_en_write
013A .dbline 79
013A ; LCD_RW_PORT |= LCD_RW;
013A C29A sbi 0x18,2
013C .dbline 80
013C ; LCD_RS_PORT ^= LCD_RS;
013C 82E0 ldi R24,2
013E 28B2 in R2,0x18
0140 2826 eor R2,R24
0142 28BA out 0x18,R2
0144 .dbline -2
0144 .dbline 81
0144 ; }
0144 L3:
0144 00D0 rcall pop_gset4
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r data_temp 22 i
0148 .dbsym r command_temp 20 i
0148 .dbsym r data 12 i
0148 .dbsym r command 10 i
0148 .dbend
0148 .dbfunc e LCD_wait_Ready _LCD_wait_Ready fV
.even
0148 _LCD_wait_Ready::
0148 .dbline -1
0148 .dbline 84
0148 ;
0148 ; void LCD_wait_Ready(void) //等待LCD空闲
0148 ; {
0148 .dbline 85
0148 ; LCD_DATA_DDR &= ~0x80; //PB7 I/O口方向设置为输入
0148 BF98 cbi 0x17,7
014A .dbline 86
014A ; LCD_RW_PORT |= LCD_RW; //RW=1
014A C29A sbi 0x18,2
014C .dbline 87
014C ; LCD_RS_PORT &= ~LCD_RS; //RS=0
014C C198 cbi 0x18,1
014E .dbline 88
014E ; LCD_EN_PORT |= LCD_EN; //EN=1
014E C39A sbi 0x18,3
0150 L9:
0150 .dbline 89
0150 L10:
0150 .dbline 89
0150 ; while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,读PD7,为0表示空闲;
0150 B799 sbic 0x16,7
0152 03C0 rjmp L12
0154 01E0 ldi R16,1
0156 10E0 ldi R17,0
0158 02C0 rjmp L13
015A L12:
015A 0027 clr R16
015C 1127 clr R17
015E L13:
015E 0030 cpi R16,0
0160 0107 cpc R16,R17
0162 B1F3 breq L9
0164 X2:
0164 .dbline 90
0164 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0164 C398 cbi 0x18,3
0166 .dbline 91
0166 ; LCD_DATA_DDR |= 0xf0;
0166 87B3 in R24,0x17
0168 806F ori R24,240
016A 87BB out 0x17,R24
016C .dbline -2
016C .dbline 92
016C ; }
016C L8:
016C .dbline 0 ; func end
016C 0895 ret
016E .dbend
016E .dbfunc e LCD_set_xy _LCD_set_xy fV
016E ; address -> R20
016E ; y -> R20
016E ; x -> R22
.even
016E _LCD_set_xy::
016E 00D0 rcall push_gset2
0170 422F mov R20,R18
0172 602F mov R22,R16
0174 .dbline -1
0174 .dbline 101
0174 ;
0174 ; /**********************************************************
0174 ; /* LCD_set_xy : 设置LCD显示的起始位置
0174 ; /* 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
0174 ; LCD第一行显示寄存器地址:0X80-0X8F
0174 ; LCD第一行显示寄存器地址:0XC0-0XCF
0174 ; ***********************************************************/
0174 ; void LCD_set_xy( unsigned char x, unsigned char y )
0174 ; {
0174 .dbline 103
0174 ; unsigned char address;
0174 ; if (y == 0) address = 0x80 + x;
0174 4423 tst R20
0176 19F4 brne L15
0178 .dbline 103
0178 462F mov R20,R22
017A 4058 subi R20,128 ; addi 128
017C 02C0 rjmp L16
017E L15:
017E .dbline 105
017E ; else
017E ; address = 0xC0 + x;
017E 462F mov R20,R22
0180 4054 subi R20,64 ; addi 192
0182 L16:
0182 .dbline 106
0182 ; LCD_write_char( address, 0 );
0182 2227 clr R18
0184 3327 clr R19
0186 042F mov R16,R20
0188 1127 clr R17
018A 82DF rcall _LCD_write_char
018C .dbline -2
018C .dbline 107
018C ; }
018C L14:
018C 00D0 rcall pop_gset2
018E .dbline 0 ; func end
018E 0895 ret
0190 .dbsym r address 20 c
0190 .dbsym r y 20 c
0190 .dbsym r x 22 c
0190 .dbend
0190 .dbfunc e LCD_write_string _LCD_write_string fV
0190 ; s -> R20,R21
0190 ; Y -> R10
0190 ; X -> R22
.even
0190 _LCD_write_string::
0190 00D0 rcall push_gset3
0192 A22E mov R10,R18
0194 602F mov R22,R16
0196 4E81 ldd R20,y+6
0198 5F81 ldd R21,y+7
019A .dbline -1
019A .dbline 114
019A ; /**********************************************************
019A ; /* LCD_write_string : 英文字符串显示函数
019A ; /* 输入参数:*s :英文字符串指针;
019A ; /* X、Y : 显示字符串的位置
019A ; ***********************************************************/
019A ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
019A ; {
019A .dbline 115
019A ; LCD_set_xy( X, Y );
019A 2A2D mov R18,R10
019C 062F mov R16,R22
019E E7DF rcall _LCD_set_xy
01A0 09C0 rjmp L19
01A2 L18:
01A2 .dbline 117
01A2 .dbline 118
01A2 E42F mov R30,R20
01A4 F52F mov R31,R21
01A6 2081 ldd R18,z+0
01A8 3327 clr R19
01AA 0027 clr R16
01AC 1127 clr R17
01AE 70DF rcall _LCD_write_char
01B0 .dbline 119
01B0 4F5F subi R20,255 ; offset = 1
01B2 5F4F sbci R21,255
01B4 .dbline 120
01B4 L19:
01B4 .dbline 116
01B4 ; while (*s)
01B4 E42F mov R30,R20
01B6 F52F mov R31,R21
01B8 2080 ldd R2,z+0
01BA 2220 tst R2
01BC 91F7 brne L18
01BE .dbline -2
01BE .dbline 121
01BE ; {
01BE ; LCD_write_char( 0, *s );
01BE ; s ++;
01BE ; }
01BE ; }
01BE L17:
01BE 00D0 rcall pop_gset3
01C0 .dbline 0 ; func end
01C0 0895 ret
01C2 .dbsym r s 20 pc
01C2 .dbsym r Y 10 c
01C2 .dbsym r X 22 c
01C2 .dbend
01C2 .dbfunc e LCD_write _LCD_write fV
01C2 ; data -> y+4
01C2 ; Y -> R22
01C2 ; X -> R20
.even
01C2 _LCD_write::
01C2 00D0 rcall push_gset2
01C4 622F mov R22,R18
01C6 402F mov R20,R16
01C8 .dbline -1
01C8 .dbline 128
01C8 ; /**********************************************************
01C8 ; /* LCD_write : 英文字符显示函数
01C8 ; /* 输入参数:data :英文字符
01C8 ; /* X、Y : 显示字符的位置
01C8 ; ***********************************************************/
01C8 ; void LCD_write(unsigned char X, unsigned char Y,unsigned data)
01C8 ; {
01C8 .dbline 129
01C8 ; LCD_set_xy( X, Y );
01C8 262F mov R18,R22
01CA 042F mov R16,R20
01CC D0DF rcall _LCD_set_xy
01CE .dbline 130
01CE ; LCD_write_char(0, data);
01CE 2C81 ldd R18,y+4
01D0 3D81 ldd R19,y+5
01D2 0027 clr R16
01D4 1127 clr R17
01D6 5CDF rcall _LCD_write_char
01D8 .dbline -2
01D8 .dbline 131
01D8 ; }
01D8 L21:
01D8 00D0 rcall pop_gset2
01DA .dbline 0 ; func end
01DA 0895 ret
01DC .dbsym l data 4 i
01DC .dbsym r Y 22 c
01DC .dbsym r X 20 c
01DC .dbend
01DC .dbfunc e LCD_clr _LCD_clr fV
.even
01DC _LCD_clr::
01DC .dbline -1
01DC .dbline 136
01DC ; /**********************************************************
01DC ; /* LCD_clr : 清屏函数
01DC ; ***********************************************************/
01DC ; void LCD_clr(void)
01DC ; {
01DC .dbline 137
01DC ; LCD_write_char(0x01,0);
01DC 2227 clr R18
01DE 3327 clr R19
01E0 01E0 ldi R16,1
01E2 10E0 ldi R17,0
01E4 55DF rcall _LCD_write_char
01E6 .dbline 138
01E6 ; delay_nms(2);
01E6 02E0 ldi R16,2
01E8 10E0 ldi R17,0
01EA .dbline -2
01EA .dbline 139
01EA ; }
01EA L22:
01EA .dbline 0 ; func end
01EA 00C0 rjmp _delay_nms
01EC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -