📄 lcd-m8.lst
字号:
019B 9721 SBIW R28,1
(0113) }
(0114)
(0115) void clrlcd(void)
(0116) {
(0117) uchar i,j;
(0118) for(j=0;j<8;j++)
019C 2744 CLR R20
019D C00B RJMP 0x01A9
(0119) for(i=0;i<128;i++)
019E 2766 CLR R22
019F C006 RJMP 0x01A6
(0120) {
(0121) w8(i,j,0x0);
01A0 2422 CLR R2
01A1 8228 STD Y+0,R2
01A2 2F24 MOV R18,R20
01A3 2F06 MOV R16,R22
01A4 DFE9 RCALL _w8
01A5 9563 INC R22
01A6 3860 CPI R22,0x80
01A7 F3C0 BCS 0x01A0
01A8 9543 INC R20
01A9 3048 CPI R20,0x8
01AA F398 BCS 0x019E
01AB 9621 ADIW R28,1
01AC D343 RCALL pop_gset2
01AD 9508 RET
_clr_row:
i --> R20
b --> R22
a --> R12
row --> R10
01AE D34B RCALL push_gset4
01AF 2EC2 MOV R12,R18
01B0 2EA0 MOV R10,R16
01B1 9721 SBIW R28,1
01B2 8569 LDD R22,Y+9
(0122) }
(0123) }
(0124)
(0125)
(0126) void clr_row(uchar row,uchar a,uchar b)
(0127) {
(0128) uchar i;
(0129) CS1_1,CS2_1;
01B3 9A5D SBI 0x0B,5
01B4 9A5E SBI 0x0B,6
(0130) for(i=a;i<b;i++)
01B5 2D4C MOV R20,R12
01B6 C006 RJMP 0x01BD
(0131) w8(i,row,0);
01B7 2422 CLR R2
01B8 8228 STD Y+0,R2
01B9 2D2A MOV R18,R10
01BA 2F04 MOV R16,R20
01BB DFD2 RCALL _w8
01BC 9543 INC R20
01BD 1746 CP R20,R22
01BE F3C0 BCS 0x01B7
01BF 9621 ADIW R28,1
01C0 D333 RCALL pop_gset4
01C1 9508 RET
_dis_en:
p --> R20
i --> R22
c --> R22
y --> R10
x --> R12
01C2 D337 RCALL push_gset4
01C3 2EA2 MOV R10,R18
01C4 2EC0 MOV R12,R16
01C5 9721 SBIW R28,1
01C6 8569 LDD R22,Y+9
(0132) }
(0133)
(0134) uchar dis_en(uchar x,uchar y,uchar c)
(0135) {
(0136) uchar i;
(0137) const uchar *p;
(0138) //*取指针
(0139) if(c>='A'&&c<='Z')
01C7 3461 CPI R22,0x41
01C8 F058 BCS 0x01D4
01C9 E58A LDI R24,0x5A
01CA 1786 CP R24,R22
01CB F040 BCS 0x01D4
(0140) {
(0141) p=&A_Z[(c-'A')*5];
01CC E085 LDI R24,5
01CD 9F86 MUL R24,R22
01CE 01A0 MOVW R20,R0
01CF EE8F LDI R24,0xEF
01D0 EF9E LDI R25,0xFE
01D1 0F48 ADD R20,R24
01D2 1F59 ADC R21,R25
(0142) }
01D3 C052 RJMP 0x0226
(0143) else if (c>='a' && c<='z')
01D4 3661 CPI R22,0x61
01D5 F058 BCS 0x01E1
01D6 E78A LDI R24,0x7A
01D7 1786 CP R24,R22
01D8 F040 BCS 0x01E1
(0144) {
(0145) p=&a_z[(c-'a')*5];
01D9 E085 LDI R24,5
01DA 9F86 MUL R24,R22
01DB 01A0 MOVW R20,R0
01DC ED81 LDI R24,0xD1
01DD EF9E LDI R25,0xFE
01DE 0F48 ADD R20,R24
01DF 1F59 ADC R21,R25
(0146) }
01E0 C045 RJMP 0x0226
(0147) else if (c>='0' && c<='9')
01E1 3360 CPI R22,0x30
01E2 F058 BCS 0x01EE
01E3 E389 LDI R24,0x39
01E4 1786 CP R24,R22
01E5 F040 BCS 0x01EE
(0148) {
(0149) p=&num0_9[(c-'0')*5];
01E6 E085 LDI R24,5
01E7 9F86 MUL R24,R22
01E8 01A0 MOVW R20,R0
01E9 E488 LDI R24,0x48
01EA E090 LDI R25,0
01EB 0F48 ADD R20,R24
01EC 1F59 ADC R21,R25
(0150) }
01ED C038 RJMP 0x0226
(0151) else
(0152) {
(0153) switch (c)
01EE 2777 CLR R23
01EF 336A CPI R22,0x3A
01F0 E0E0 LDI R30,0
01F1 077E CPC R23,R30
01F2 F111 BEQ 0x0215
01F3 E38A LDI R24,0x3A
01F4 E090 LDI R25,0
01F5 1786 CP R24,R22
01F6 0797 CPC R25,R23
01F7 F04C BLT 0x0201
01F8 326E CPI R22,0x2E
01F9 E0E0 LDI R30,0
01FA 077E CPC R23,R30
01FB F0B1 BEQ 0x0212
01FC 326F CPI R22,0x2F
01FD E0E0 LDI R30,0
01FE 077E CPC R23,R30
01FF F109 BEQ 0x0221
0200 C023 RJMP 0x0224
0201 356E CPI R22,0x5E
0202 E0E0 LDI R30,0
0203 077E CPC R23,R30
0204 F0B1 BEQ 0x021B
0205 356F CPI R22,0x5F
0206 E0E0 LDI R30,0
0207 077E CPC R23,R30
0208 F079 BEQ 0x0218
0209 356E CPI R22,0x5E
020A E0E0 LDI R30,0
020B 077E CPC R23,R30
020C F0BC BLT 0x0224
020D 376E CPI R22,0x7E
020E E0E0 LDI R30,0
020F 077E CPC R23,R30
0210 F069 BEQ 0x021E
0211 C012 RJMP 0x0224
(0154) {
(0155) case '.':p=x_p;break;
0212 E843 LDI R20,0x83
0213 E051 LDI R21,1
0214 C011 RJMP 0x0226
(0156) case ':':p=x_mh;break;
0215 E74E LDI R20,0x7E
0216 E051 LDI R21,1
0217 C00E RJMP 0x0226
(0157) case '_':p=x_ds;break;
0218 E749 LDI R20,0x79
0219 E051 LDI R21,1
021A C00B RJMP 0x0226
(0158) case '^':p=x_shang;break;
021B E84D LDI R20,0x8D
021C E051 LDI R21,1
021D C008 RJMP 0x0226
(0159) case '~':p=x_xia;break;
021E E848 LDI R20,0x88
021F E051 LDI R21,1
0220 C005 RJMP 0x0226
(0160) case '/':p=x_xg;break;
0221 E744 LDI R20,0x74
0222 E051 LDI R21,1
0223 C002 RJMP 0x0226
(0161) default:p=space;break;
0224 E64F LDI R20,0x6F
0225 E051 LDI R21,1
(0162) }
(0163) }
(0164) for(i=0;i<5;i++)
0226 2766 CLR R22
0227 C00B RJMP 0x0233
(0165) w8(x+i,y,p[i]);
0228 2FE6 MOV R30,R22
0229 27FF CLR R31
022A 0FE4 ADD R30,R20
022B 1FF5 ADC R31,R21
022C 91E4 LPM R30,0(Z)
022D 83E8 STD Y+0,R30
022E 2D2A MOV R18,R10
022F 2D0C MOV R16,R12
0230 0F06 ADD R16,R22
0231 DF5C RCALL _w8
0232 9563 INC R22
0233 3065 CPI R22,5
0234 F398 BCS 0x0228
(0166) return x+5;
0235 2D0C MOV R16,R12
0236 5F0B SUBI R16,0xFB
0237 9621 ADIW R28,1
0238 D2BB RCALL pop_gset4
0239 9508 RET
_dis_en_row:
cnt --> R20
i --> R22
p --> R10
y --> R12
x --> R22
023A D2BF RCALL push_gset4
023B 2EC2 MOV R12,R18
023C 2F60 MOV R22,R16
023D 9721 SBIW R28,1
023E 84A9 LDD R10,Y+9
023F 84BA LDD R11,Y+10
(0167) }
(0168)
(0169)
(0170) //返回操作后的x(列)坐标值
(0171) uchar dis_en_row(uchar x,uchar y,uchar *p)
(0172) {
(0173) uchar i,cnt=x;
0240 2F46 MOV R20,R22
(0174) for(i=0;p[i]!=0;i++)
0241 2766 CLR R22
0242 C00B RJMP 0x024E
(0175) {
(0176) cnt=dis_en(cnt,y,p[i]);
0243 2FE6 MOV R30,R22
0244 27FF CLR R31
0245 0DEA ADD R30,R10
0246 1DFB ADC R31,R11
0247 8020 LDD R2,Z+0
0248 8228 STD Y+0,R2
0249 2D2C MOV R18,R12
024A 2F04 MOV R16,R20
024B DF76 RCALL _dis_en
024C 2F40 MOV R20,R16
024D 9563 INC R22
024E 2FE6 MOV R30,R22
024F 27FF CLR R31
0250 0DEA ADD R30,R10
0251 1DFB ADC R31,R11
0252 8020 LDD R2,Z+0
0253 2022 TST R2
0254 F771 BNE 0x0243
(0177) }
(0178) return cnt;
0255 2F04 MOV R16,R20
0256 9621 ADIW R28,1
0257 D29C RCALL pop_gset4
0258 9508 RET
_dis_num:
i --> R20
c --> R22
y --> R10
x --> R12
0259 D2A0 RCALL push_gset4
025A 2EA2 MOV R10,R18
025B 2EC0 MOV R12,R16
025C 9721 SBIW R28,1
025D 8569 LDD R22,Y+9
(0179) }
(0180)
(0181)
(0182) uchar dis_num(uchar x,uchar y,uchar c)
(0183) {
(0184) uchar i;
(0185) for(i=0;i<5;i++)
025E 2744 CLR R20
025F C012 RJMP 0x0272
(0186) {
(0187) w8(x+i,y,num0_9[(5*c)+i]);//num0_9[c*5+i]);
0260 E085 LDI R24,5
0261 9F86 MUL R24,R22
0262 01F0 MOVW R30,R0
0263 2E24 MOV R2,R20
0264 2433 CLR R3
0265 0DE2 ADD R30,R2
0266 1DF3 ADC R31,R3
0267 E388 LDI R24,0x38
0268 E091 LDI R25,1
0269 0FE8 ADD R30,R24
026A 1FF9 ADC R31,R25
026B 91E4 LPM R30,0(Z)
026C 83E8 STD Y+0,R30
026D 2D2A MOV R18,R10
026E 2D0C MOV R16,R12
026F 0D02 ADD R16,R2
0270 DF1D RCALL _w8
0271 9543 INC R20
0272 3045 CPI R20,5
0273 F360 BCS 0x0260
(0188) }
(0189) return x+5;
0274 2D0C MOV R16,R12
0275 5F0B SUBI R16,0xFB
0276 9621 ADIW R28,1
0277 D27C RCALL pop_gset4
0278 9508 RET
_dis_5:
ent --> R20
n --> R22
lock --> R10
num --> Y+1
i --> R12
dat --> R14
y --> Y+18
x --> Y+16
0279 D23D RCALL push_arg4
027A D27D RCALL push_gset5
027B 9726 SBIW R28,6
027C 88EC LDD R14,Y+20
027D 88FD LDD R15,Y+21
(0190) }
(0191)
(0192)
(0193) uchar dis_5(uchar x,uchar y,unit dat)
(0194) {
(0195) uchar num[5]={10};
027E EA8C LDI R24,0xAC
027F E091 LDI R25,1
0280 01FE MOVW R30,R28
0281 9631 ADIW R30,1
0282 E005 LDI R16,5
0283 E010 LDI R17,0
0284 93FA ST R31,-Y
0285 93EA ST R30,-Y
0286 939A ST R25,-Y
0287 938A ST R24,-Y
0288 D294 RCALL asgncblk
(0196) uchar i,n=0,lock=0,ent=x;
0289 2766 CLR R22
028A 24AA CLR R10
028B 8948 LDD R20,Y+16
(0197) for(i=0;i<5;i++)
028C 24CC CLR R12
028D C011 RJMP 0x029F
(0198) {
(0199) num[i]=dat%10;
028E E02A LDI R18,0xA
028F E030 LDI R19,0
0290 0187 MOVW R16,R14
0291 D22A RCALL mod16u
0292 01CE MOVW R24,R28
0293 9601 ADIW R24,1
0294 2DEC MOV R30,R12
0295 27FF CLR R31
0296 0FE8 ADD R30,R24
0297 1FF9 ADC R31,R25
0298 8300 STD Z+0,R16
(0200) dat/=10;
0299 E02A LDI R18,0xA
029A E030 LDI R19,0
029B 0187 MOVW R16,R14
029C D221 RCALL div16u
029D 0178 MOVW R14,R16
029E 94C3 INC R12
029F 2D8C MOV R24,R12
02A0 3085 CPI R24,5
02A1 F360 BCS 0x028E
(0201) }
(0202) for(i=5;i>1;i--)
02A2 E085 LDI R24,5
02A3 2EC8 MOV R12,R24
02A4 C026 RJMP 0x02CB
(0203) {
(0204) if((num[i-1]>0&&num[i-1]<10)||(lock==1))
02A5 01CE MOVW R24,R28
02A6 2DEC MOV R30,R12
02A7 27FF CLR R31
02A8 0FE8 ADD R30,R24
02A9 1FF9 ADC R31,R25
02AA 8020 LDD R2,Z+0
02AB 2433 CLR R3
02AC 1432 CP R3,R2
02AD F440 BCC 0x02B6
02AE 01CE MOVW R24,R28
02AF 2DEC MOV R30,R12
02B0 27FF CLR R31
02B1 0FE8 ADD R30,R24
02B2 1FF9 ADC R31,R25
02B3 8180 LDD R24,Z+0
02B4 308A CPI R24,0xA
02B5 F018 BCS 0x02B9
02B6 2D8A MOV R24,R10
02B7 3081 CPI R24,1
02B8 F489 BNE 0x02CA
(0205) {
(0206) lock=1;
02B9 24AA CLR R10
02BA 94A3 INC R10
(0207) dis_num(x+n*5,y,num[i-1]);
02BB 01CE MOVW R24,R28
02BC 2DEC MOV R30,R12
02BD 27FF CLR R31
02BE 0FE8 ADD R30,R24
02BF 1FF9 ADC R31,R25
02C0 8020 LDD R2,Z+0
02C1 8228 STD Y+0,R2
02C2 892A LDD R18,Y+18
02C3 E085 LDI R24,5
02C4 9F86 MUL R24,R22
02C5 8908 LDD R16,Y+16
02C6 0D00 ADD R16,R0
02C7 DF91 RCALL _dis_num
(0208) n++;
02C8 9563 INC R22
(0209) ent+=5;
02C9 5F4B SUBI R20,0xFB
02CA 94CA DEC R12
02CB E081 LDI R24,1
02CC 158C CP R24,R12
02CD F2B8 BCS 0x02A5
(0210) }
(0211) }
(0212) dis_num(x+n*5,y,num[0]);
02CE 8029 LDD R2,Y+1
02CF 8228 STD Y+0,R2
02D0 892A LDD R18,Y+18
02D1 E085 LDI R24,5
02D2 9F86 MUL R24,R22
02D3 8908 LDD R16,Y+16
02D4 0D00 ADD R16,R0
02D5 DF83 RCALL _dis_num
(0213) return ent+5;
02D6 2F04 MOV R16,R20
02D7 5F0B SUBI R16,0xFB
02D8 9626 ADIW R28,6
02D9 D21C RCALL pop_gset5
02DA 9624 ADIW R28,4
02DB 9508 RET
_disen:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -