📄 240128.lis
字号:
00EC 2882 std y+0,R2
00EE 2227 clr R18
00F0 02E4 ldi R16,66
00F2 E1DF rcall _LCD_WR_CODE2
00F4 .dbline 124
00F4 ; LCD_WR_CODE2(LCD_GRH_WID,30,0);
00F4 2224 clr R2
00F6 2882 std y+0,R2
00F8 2EE1 ldi R18,30
00FA 03E4 ldi R16,67
00FC DCDF rcall _LCD_WR_CODE2
00FE .dbline -2
00FE L26:
00FE 2196 adiw R28,1
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbend
0102 .dbfunc e LCD_CLEAR _LCD_CLEAR fV
0102 ; i -> R20
0102 ; j -> R10
0102 ; data -> R22
.even
0102 _LCD_CLEAR::
0102 00D0 rcall push_gset3
0104 602F mov R22,R16
0106 2197 sbiw R28,1
0108 .dbline -1
0108 .dbline 130
0108 ; }
0108 ; /*******************************************************************************
0108 ; 清整屏
0108 ; *******************************************************************************/
0108 ; void LCD_CLEAR(unsigned char data)
0108 ; {
0108 .dbline 132
0108 ; unsigned char i,j;
0108 ; LCD_WR_CODE(0x98); //打开图形显示
0108 08E9 ldi R16,152
010A C1DF rcall _LCD_WR_CODE
010C .dbline 133
010C ; LCD_WR_CODE2(LCD_ADD_POS,0,0);
010C 2224 clr R2
010E 2882 std y+0,R2
0110 2227 clr R18
0112 04E2 ldi R16,36
0114 D0DF rcall _LCD_WR_CODE2
0116 .dbline 134
0116 ; LCD_WR_CODE(LCD_AUT_WR);
0116 00EB ldi R16,176
0118 BADF rcall _LCD_WR_CODE
011A .dbline 135
011A ; for(i=0;i<128;i++)
011A 4427 clr R20
011C 09C0 rjmp L31
011E L28:
011E .dbline 136
011E ; {
011E .dbline 137
011E ; for(j=0;j<30;j++)
011E AA24 clr R10
0120 03C0 rjmp L35
0122 L32:
0122 .dbline 138
0122 .dbline 139
0122 062F mov R16,R22
0124 A9DF rcall _LCD_WR_DATA
0126 .dbline 140
0126 L33:
0126 .dbline 137
0126 A394 inc R10
0128 L35:
0128 .dbline 137
0128 8A2D mov R24,R10
012A 8E31 cpi R24,30
012C D0F3 brlo L32
012E .dbline 141
012E L29:
012E .dbline 135
012E 4395 inc R20
0130 L31:
0130 .dbline 135
0130 4038 cpi R20,128
0132 A8F3 brlo L28
0134 .dbline 142
0134 ; {
0134 ; LCD_WR_DATA(data);
0134 ; }
0134 ; }
0134 ; LCD_WR_CODE(LCD_AUT_OVR);
0134 02EB ldi R16,178
0136 ABDF rcall _LCD_WR_CODE
0138 .dbline -2
0138 L27:
0138 2196 adiw R28,1
013A 00D0 rcall pop_gset3
013C .dbline 0 ; func end
013C 0895 ret
013E .dbsym r i 20 c
013E .dbsym r j 10 c
013E .dbsym r data 22 c
013E .dbend
013E .dbfunc e PRINT_240128 _PRINT_240128 fV
013E ; i -> R20
013E ; j -> R10
013E ; str -> R22,R23
.even
013E _PRINT_240128::
013E 00D0 rcall push_gset3
0140 B801 movw R22,R16
0142 2197 sbiw R28,1
0144 .dbline -1
0144 .dbline 148
0144 ; }
0144 ; /*******************************************************************************
0144 ; 显示一个240*128的图片 图片的大小为3840 。
0144 ; *******************************************************************************/
0144 ; void PRINT_240128(const unsigned char *str)
0144 ; {
0144 .dbline 150
0144 ; unsigned char i,j;
0144 ; LCD_WR_CODE(0x98);
0144 08E9 ldi R16,152
0146 A3DF rcall _LCD_WR_CODE
0148 .dbline 151
0148 ; LCD_WR_CODE2(LCD_ADD_POS,0,0);
0148 2224 clr R2
014A 2882 std y+0,R2
014C 2227 clr R18
014E 04E2 ldi R16,36
0150 B2DF rcall _LCD_WR_CODE2
0152 .dbline 152
0152 ; LCD_WR_CODE(LCD_AUT_WR);
0152 00EB ldi R16,176
0154 9CDF rcall _LCD_WR_CODE
0156 .dbline 153
0156 ; for(i=0;i<128;i++)
0156 4427 clr R20
0158 0DC0 rjmp L40
015A L37:
015A .dbline 154
015A ; {
015A .dbline 155
015A ; for(j=0;j<30;j++)
015A AA24 clr R10
015C 07C0 rjmp L44
015E L41:
015E .dbline 156
015E .dbline 157
015E 1B01 movw R2,R22
0160 6F5F subi R22,255 ; offset = 1
0162 7F4F sbci R23,255
0164 F101 movw R30,R2
0166 0491 lpm R16,Z
0168 87DF rcall _LCD_WR_DATA
016A .dbline 158
016A L42:
016A .dbline 155
016A A394 inc R10
016C L44:
016C .dbline 155
016C 8A2D mov R24,R10
016E 8E31 cpi R24,30
0170 B0F3 brlo L41
0172 .dbline 159
0172 L38:
0172 .dbline 153
0172 4395 inc R20
0174 L40:
0174 .dbline 153
0174 4038 cpi R20,128
0176 88F3 brlo L37
0178 .dbline 160
0178 ; {
0178 ; LCD_WR_DATA(*str++);
0178 ; }
0178 ; }
0178 ; LCD_WR_CODE(LCD_AUT_OVR);
0178 02EB ldi R16,178
017A 89DF rcall _LCD_WR_CODE
017C .dbline -2
017C L36:
017C 2196 adiw R28,1
017E 00D0 rcall pop_gset3
0180 .dbline 0 ; func end
0180 0895 ret
0182 .dbsym r i 20 c
0182 .dbsym r j 10 c
0182 .dbsym r str 22 pkc
0182 .dbend
0182 .dbfunc e LCD_SET_ADD _LCD_SET_ADD fV
0182 ; ucol -> R20
0182 ; urow -> R22
.even
0182 _LCD_SET_ADD::
0182 00D0 rcall push_gset2
0184 422F mov R20,R18
0186 602F mov R22,R16
0188 2197 sbiw R28,1
018A .dbline -1
018A .dbline 166
018A ; }
018A ; /*******************************************************************************
018A ; 设置当前地址,用于起点定位。
018A ; *******************************************************************************/
018A ; void LCD_SET_ADD(unsigned char urow, unsigned char ucol)
018A ; {
018A .dbline 167
018A ; LCD_WR_CODE2(LCD_ADD_POS,(urow*30+ucol) & 0xFF,(urow*30+ucol) / 256);
018A 8EE1 ldi R24,30
018C 869F mul R24,R22
018E 1001 movw R2,R0
0190 442E mov R4,R20
0192 5524 clr R5
0194 240C add R2,R4
0196 351C adc R3,R5
0198 20E0 ldi R18,256
019A 31E0 ldi R19,1
019C 8101 movw R16,R2
019E 00D0 rcall div16s
01A0 0883 std y+0,R16
01A2 222D mov R18,R2
01A4 3070 andi R19,0
01A6 04E2 ldi R16,36
01A8 86DF rcall _LCD_WR_CODE2
01AA .dbline 168
01AA ; gCurRow = urow;
01AA 60930100 sts _gCurRow,R22
01AE .dbline 169
01AE ; gCurCol = ucol;
01AE 40930000 sts _gCurCol,R20
01B2 .dbline -2
01B2 L45:
01B2 2196 adiw R28,1
01B4 00D0 rcall pop_gset2
01B6 .dbline 0 ; func end
01B6 0895 ret
01B8 .dbsym r ucol 20 c
01B8 .dbsym r urow 22 c
01B8 .dbend
01B8 .dbfunc e PRINT_words _PRINT_words fV
01B8 ; length -> y+0
01B8 ; uRow -> R22
01B8 ; uCol -> R10
01B8 ; i -> R12
01B8 ; k -> R14,R15
01B8 ; j -> R20
01B8 ; ptr -> y+15
01B8 ; y -> y+13
01B8 ; x -> y+11
.even
01B8 _PRINT_words::
01B8 00D0 rcall push_arg4
01BA 00D0 rcall push_gset5
01BC 2197 sbiw R28,1
01BE .dbline -1
01BE .dbline 175
01BE ; }
01BE ; /*******************************************************************************
01BE ; ASCII(8*16) 及 汉字(16*16) 显示函数,ASCII与汉字区别在于128做分界。
01BE ; *******************************************************************************/
01BE ; void PRINT_words (unsigned char x,unsigned char y, char *ptr)
01BE ; {
01BE .dbline 176
01BE ; unsigned char length=0,i=0,j=0,uRow=0,uCol=0;
01BE 0024 clr R0
01C0 0882 std y+0,R0
01C2 .dbline 176
01C2 CC24 clr R12
01C4 .dbline 176
01C4 4427 clr R20
01C6 .dbline 176
01C6 6627 clr R22
01C8 .dbline 176
01C8 AA24 clr R10
01CA .dbline 177
01CA ; unsigned int k=0;
01CA EE24 clr R14
01CC FF24 clr R15
01CE .dbline 178
01CE ; uRow = y;
01CE 6D85 ldd R22,y+13
01D0 .dbline 179
01D0 ; uCol = x;
01D0 AB84 ldd R10,y+11
01D2 .dbline 180
01D2 ; LCD_SET_ADD(uRow*16,uCol); //起点定位
01D2 2A2D mov R18,R10
01D4 80E1 ldi R24,16
01D6 869F mul R24,R22
01D8 002D mov R16,R0
01DA D3DF rcall _LCD_SET_ADD
01DC 03C0 rjmp L48
01DE L47:
01DE .dbline 184
01DE .dbline 185
01DE 0880 ldd R0,y+0
01E0 0394 inc R0
01E2 0882 std y+0,R0
01E4 .dbline 186
01E4 L48:
01E4 .dbline 183
01E4 ;
01E4 ;
01E4 ; while (ptr[length]!=0) //探测字串长度
01E4 E881 ldd R30,y+0
01E6 FF27 clr R31
01E8 0F84 ldd R0,y+15
01EA 1888 ldd R1,y+16
01EC E00D add R30,R0
01EE F11D adc R31,R1
01F0 2080 ldd R2,z+0
01F2 2220 tst R2
01F4 A1F7 brne L47
01F6 B2C0 rjmp L51
01F8 L50:
01F8 .dbline 188
01F8 ; {
01F8 ; length++;
01F8 ; }
01F8 ; while(i<length)//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
01F8 ; {
01F8 .dbline 189
01F8 ; uRow = gCurRow;
01F8 60910100 lds R22,_gCurRow
01FC .dbline 190
01FC ; uCol = gCurCol;
01FC A0900000 lds R10,_gCurCol
0200 .dbline 191
0200 ; if(ptr[i] <= 128)//ASCII
0200 EC2D mov R30,R12
0202 FF27 clr R31
0204 0F84 ldd R0,y+15
0206 1888 ldd R1,y+16
0208 E00D add R30,R0
020A F11D adc R31,R1
020C 2080 ldd R2,z+0
020E 80E8 ldi R24,128
0210 8215 cp R24,R2
0212 30F1 brlo L53
0214 .dbline 192
0214 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -