📄 lcd.lis
字号:
01AE 8830 cpi R24,8
01B0 A0F0 brlo L38
01B2 8FE0 ldi R24,15
01B4 8A15 cp R24,R10
01B6 88F0 brlo L38
01B8 .dbline 139
01B8 .dbline 139
01B8 88E0 ldi R24,8
01BA 8A9D mul R24,R10
01BC 802D mov R24,R0
01BE 8054 subi R24,64
01C0 8883 std y+0,R24
01C2 262F mov R18,R22
01C4 8601 movw R16,R12
01C6 BDDF xcall _displaychar_right
01C8 .dbline 139
01C8 88E0 ldi R24,8
01CA 8A9D mul R24,R10
01CC 802D mov R24,R0
01CE 8054 subi R24,64
01D0 8883 std y+0,R24
01D2 262F mov R18,R22
01D4 2F5F subi R18,255 ; addi 1
01D6 8A01 movw R16,R20
01D8 B4DF xcall _displaychar_right
01DA .dbline 139
01DA L38:
01DA .dbline -2
01DA L35:
01DA 2196 adiw R28,1
01DC 0E940000 xcall pop_gset4
01E0 .dbline 0 ; func end
01E0 0895 ret
01E2 .dbsym r heng 10 c
01E2 .dbsym r zong 22 c
01E2 .dbsym r array2 20 pc
01E2 .dbsym r array1 12 pc
01E2 .dbend
01E2 .dbfunc e displayL _displayL fV
01E2 ; i -> R20
01E2 ; y -> y+4
01E2 ; x -> R20
01E2 ; array -> R22,R23
.even
01E2 _displayL::
01E2 0E940000 xcall push_gset2
01E6 422F mov R20,R18
01E8 B801 movw R22,R16
01EA .dbline -1
01EA .dbline 145
01EA ;
01EA ; if((heng>=8)&&(heng<=15))
01EA ; {displaychar_right(array1,zong,(heng-8)*8); displaychar_right(array2,zong+1,(heng-8)*8);}
01EA ; }
01EA ;
01EA ; /****************************** LCD汉字显示函数(8*16)****************************************/
01EA ;
01EA ; void displayL(uchar*array,uchar x,uchar y) //array是点阵字模指针,x是指屏竖方向的坐标,y是指屏横方向上的坐标
01EA ; {
01EA .dbline 147
01EA ; uchar i;
01EA ; lcdcommand(0,0xb8+x); //设置显示本字符的初始地址
01EA 242F mov R18,R20
01EC 2854 subi R18,72 ; addi 184
01EE 0027 clr R16
01F0 1FDF xcall _lcdcommand
01F2 .dbline 148
01F2 ; lcdcommand(0,0x40+y);
01F2 2C81 ldd R18,y+4
01F4 205C subi R18,192 ; addi 64
01F6 0027 clr R16
01F8 1BDF xcall _lcdcommand
01FA .dbline 149
01FA ; for(i=0;i<16;i++) //每半个字代码为16元素的数组
01FA 4427 clr R20
01FC 08C0 xjmp L44
01FE L41:
01FE .dbline 150
01FE .dbline 151
01FE E42F mov R30,R20
0200 FF27 clr R31
0202 E60F add R30,R22
0204 F71F adc R31,R23
0206 2081 ldd R18,z+0
0208 0027 clr R16
020A 24DF xcall _lcddatas
020C .dbline 153
020C L42:
020C .dbline 149
020C 4395 inc R20
020E L44:
020E .dbline 149
020E 4031 cpi R20,16
0210 B0F3 brlo L41
0212 .dbline -2
0212 L40:
0212 0E940000 xcall pop_gset2
0216 .dbline 0 ; func end
0216 0895 ret
0218 .dbsym r i 20 c
0218 .dbsym l y 4 c
0218 .dbsym r x 20 c
0218 .dbsym r array 22 pc
0218 .dbend
0218 .dbfunc e displayR _displayR fV
0218 ; i -> R20
0218 ; y -> y+4
0218 ; x -> R20
0218 ; array -> R22,R23
.even
0218 _displayR::
0218 0E940000 xcall push_gset2
021C 422F mov R20,R18
021E B801 movw R22,R16
0220 .dbline -1
0220 .dbline 159
0220 ; {
0220 ; lcddatas(0,*(array+i));
0220 ;
0220 ; }
0220 ;
0220 ; }
0220 ;
0220 ;
0220 ; void displayR(uchar*array,uchar x,uchar y) //array是点阵字模指针,x是指屏竖方向的坐标,y是指屏横方向上的坐标
0220 ; {
0220 .dbline 162
0220 ; uchar i;
0220 ;
0220 ; lcdcommand(1,0xb8+x);
0220 242F mov R18,R20
0222 2854 subi R18,72 ; addi 184
0224 01E0 ldi R16,1
0226 04DF xcall _lcdcommand
0228 .dbline 163
0228 ; lcdcommand(1,0x40+y);
0228 2C81 ldd R18,y+4
022A 205C subi R18,192 ; addi 64
022C 01E0 ldi R16,1
022E 00DF xcall _lcdcommand
0230 .dbline 165
0230 ;
0230 ; for(i=0;i<16;i++) //每半个字代码为16元素的数组
0230 4427 clr R20
0232 08C0 xjmp L49
0234 L46:
0234 .dbline 166
0234 .dbline 167
0234 E42F mov R30,R20
0236 FF27 clr R31
0238 E60F add R30,R22
023A F71F adc R31,R23
023C 2081 ldd R18,z+0
023E 01E0 ldi R16,1
0240 09DF xcall _lcddatas
0242 .dbline 168
0242 L47:
0242 .dbline 165
0242 4395 inc R20
0244 L49:
0244 .dbline 165
0244 4031 cpi R20,16
0246 B0F3 brlo L46
0248 .dbline -2
0248 L45:
0248 0E940000 xcall pop_gset2
024C .dbline 0 ; func end
024C 0895 ret
024E .dbsym r i 20 c
024E .dbsym l y 4 c
024E .dbsym r x 20 c
024E .dbsym r array 22 pc
024E .dbend
024E .dbfunc e display_chinese _display_chinese fV
024E ; heng -> R10
024E ; zong -> R22
024E ; array2 -> R20,R21
024E ; array1 -> R12,R13
.even
024E _display_chinese::
024E 0E940000 xcall push_gset4
0252 A901 movw R20,R18
0254 6801 movw R12,R16
0256 2197 sbiw R28,1
0258 6985 ldd R22,y+9
025A AB84 ldd R10,y+11
025C .dbline -1
025C .dbline 173
025C ; {
025C ; lcddatas(1,*(array+i));
025C ; }
025C ;
025C ; }
025C ;
025C ; void display_chinese(uchar*array1,uchar*array2,uchar zong,uchar heng)
025C ; {
025C .dbline 174
025C ; if((heng>=0)&&(heng<=3)) //左半屏显示
025C 8A2D mov R24,R10
025E 8030 cpi R24,0
0260 A0F0 brlo L51
0262 83E0 ldi R24,3
0264 8A15 cp R24,R10
0266 88F0 brlo L51
0268 .dbline 175
0268 ; {
0268 .dbline 176
0268 ; displayL(array1,zong*2,heng*16); displayL(array2,zong*2+1,heng*16);
0268 80E1 ldi R24,16
026A 8A9D mul R24,R10
026C 0882 std y+0,R0
026E 82E0 ldi R24,2
0270 869F mul R24,R22
0272 202D mov R18,R0
0274 8601 movw R16,R12
0276 B5DF xcall _displayL
0278 .dbline 176
0278 80E1 ldi R24,16
027A 8A9D mul R24,R10
027C 0882 std y+0,R0
027E 82E0 ldi R24,2
0280 869F mul R24,R22
0282 202D mov R18,R0
0284 2F5F subi R18,255 ; addi 1
0286 8A01 movw R16,R20
0288 ACDF xcall _displayL
028A .dbline 177
028A ; }
028A L51:
028A .dbline 178
028A 8A2D mov R24,R10
028C 8430 cpi R24,4
028E C0F0 brlo L53
0290 87E0 ldi R24,7
0292 8A15 cp R24,R10
0294 A8F0 brlo L53
0296 .dbline 179
0296 .dbline 180
0296 80E1 ldi R24,16
0298 8A9D mul R24,R10
029A 802D mov R24,R0
029C 8054 subi R24,64
029E 8883 std y+0,R24
02A0 82E0 ldi R24,2
02A2 869F mul R24,R22
02A4 202D mov R18,R0
02A6 8601 movw R16,R12
02A8 B7DF xcall _displayR
02AA .dbline 180
02AA 80E1 ldi R24,16
02AC 8A9D mul R24,R10
02AE 802D mov R24,R0
02B0 8054 subi R24,64
02B2 8883 std y+0,R24
02B4 82E0 ldi R24,2
02B6 869F mul R24,R22
02B8 202D mov R18,R0
02BA 2F5F subi R18,255 ; addi 1
02BC 8A01 movw R16,R20
02BE ACDF xcall _displayR
02C0 .dbline 181
02C0 L53:
02C0 .dbline -2
02C0 L50:
02C0 2196 adiw R28,1
02C2 0E940000 xcall pop_gset4
02C6 .dbline 0 ; func end
02C6 0895 ret
02C8 .dbsym r heng 10 c
02C8 .dbsym r zong 22 c
02C8 .dbsym r array2 20 pc
02C8 .dbsym r array1 12 pc
02C8 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -