📄 mix_exp.lst
字号:
(0211) unsigned char i;
(0212) unsigned char *char_p;
(0213) temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
04C5 0115 MOVW R2,R10
04C6 2444 CLR R4
04C7 2455 CLR R5
04C8 ED49 LDI R20,0xD9
04C9 E051 LDI R21,1
04CA E060 LDI R22,0
04CB E070 LDI R23,0
04CC 925A ST R5,-Y
04CD 924A ST R4,-Y
04CE 923A ST R3,-Y
04CF 922A ST R2,-Y
04D0 018A MOVW R16,R20
04D1 019B MOVW R18,R22
04D2 940E0D3B CALL empy32u
04D4 E08A LDI R24,0xA
04D5 E090 LDI R25,0
04D6 938A ST R24,-Y
04D7 940E0DF7 CALL lsr32
04D9 0178 MOVW R14,R16
(0214) for(i=0;i<3;i++)
04DA 24CC CLR R12
04DB C019 RJMP 0x04F5
(0215) {
(0216) adcval[3-i]=temp%10+0x30;
04DC 2C2C MOV R2,R12
04DD 2433 CLR R3
04DE E0E3 LDI R30,3
04DF E0F0 LDI R31,0
04E0 19E2 SUB R30,R2
04E1 09F3 SBC R31,R3
04E2 EB8C LDI R24,0xBC
04E3 E091 LDI R25,1
04E4 0FE8 ADD R30,R24
04E5 1FF9 ADC R31,R25
04E6 E02A LDI R18,0xA
04E7 E030 LDI R19,0
04E8 0187 MOVW R16,R14
04E9 940E0CF7 CALL mod16u
04EB 01C8 MOVW R24,R16
04EC 96C0 ADIW R24,0x30
04ED 8380 STD Z+0,R24
(0217) temp=temp/10;
04EE E02A LDI R18,0xA
04EF E030 LDI R19,0
04F0 0187 MOVW R16,R14
04F1 940E0CF9 CALL div16u
04F3 0178 MOVW R14,R16
04F4 94C3 INC R12
04F5 2D8C MOV R24,R12
04F6 3083 CPI R24,3
04F7 F320 BCS 0x04DC
(0218) }
(0219) adcval[0]=adcval[1];
04F8 902001BD LDS R2,_adcval+1
04FA 922001BC STS _adcval,R2
(0220) adcval[1]='.';
04FC E28E LDI R24,0x2E
04FD 938001BD STS _adcval+1,R24
(0221) adcval[4]='V';
04FF E586 LDI R24,0x56
0500 938001C0 STS 0x1C0,R24
(0222) adcval[5]=0;
0502 2422 CLR R2
0503 922001C1 STS 0x1C1,R2
(0223) char_p=adcval;
0505 EB8C LDI R24,0xBC
0506 E091 LDI R25,1
0507 015C MOVW R10,R24
(0224) return char_p;
0508 018C MOVW R16,R24
0509 940E0D74 CALL pop_gset5
050B 9508 RET
(0225) }
(0226) /* OCMJ4X8LCD初始化 */
(0227) void ocmj_init(void)
(0228) {
(0229) MCUCR=0;
_ocmj_init:
050C 2422 CLR R2
050D BE25 OUT 0x35,R2
(0230) DDRA=0xff;
050E EF8F LDI R24,0xFF
050F BB8A OUT 0x1A,R24
(0231) PORTA=0xff;
0510 BB8B OUT 0x1B,R24
(0232) DDRE=0x80;
0511 E880 LDI R24,0x80
0512 B982 OUT 0x02,R24
(0233) PORTE=0xff;
0513 EF8F LDI R24,0xFF
0514 B983 OUT 0x03,R24
(0234) PORTC=0xff;
0515 BB85 OUT 0x15,R24
(0235) DDRD=0x00;
0516 BA21 OUT 0x11,R2
(0236) PORTD=0xff;
0517 BB82 OUT 0x12,R24
(0237) clr_reset;//LCD复位
0518 98AB CBI 0x15,3
(0238) delay_ms(10);
0519 E00A LDI R16,0xA
051A E010 LDI R17,0
051B 940E0CE3 CALL _delay_ms
(0239) set_reset;
051D 9AAB SBI 0x15,3
(0240) clr_answer;
051E 981F CBI 0x03,7
(0241) delay_ms(10);
051F E00A LDI R16,0xA
0520 E010 LDI R17,0
0521 940E0CE3 CALL _delay_ms
0523 9508 RET
(0242) }
(0243) /* 写数据到LCD */
(0244) void ocmj_write(unsigned char data)
(0245) {
(0246) while(ask!=0)
_ocmj_write:
data --> R16
0524 990E SBIC 0x01,6
0525 CFFE RJMP _ocmj_write
(0247) ;
(0248) data_port=data;
0526 BB0B OUT 0x1B,R16
(0249) wait;
0527 0000 NOP
0528 0000 NOP
(0250) set_answer;
0529 9A1F SBI 0x03,7
(0251) wait;
052A 0000 NOP
052B 0000 NOP
(0252) while(ask==0)
052C 9B0E SBIS 0x01,6
052D CFFE RJMP 0x052C
(0253) ;
(0254) clr_answer;
052E 981F CBI 0x03,7
052F 9508 RET
_ico_tran:
j --> R20
i --> R14
ico_p --> R10
y --> R12
x --> R22
0530 940E0D9A CALL push_gset5
0532 2EC2 MOV R12,R18
0533 2F60 MOV R22,R16
0534 84AA LDD R10,Y+10
0535 84BB LDD R11,Y+11
(0255) }
(0256) /* 传送32*32ICO点阵数据到LCD */
(0257) /* x:0~15(字节为单位) y:0~64 */
(0258) /* ico_p:指向图形数据的指针 */
(0259) void ico_tran(unsigned char x,unsigned char y,const unsigned char *ico_p)
(0260) {
(0261) unsigned char i,j;
(0262) x+=4;
0536 5F6C SUBI R22,0xFC
(0263) for(j=0;j<32;j++)
0537 2744 CLR R20
0538 C016 RJMP 0x054F
(0264) {
(0265) for(i=0;i<4;i++)
0539 24EE CLR R14
053A C00E RJMP 0x0549
(0266) {
(0267) ocmj_write(0xf3);
053B EF03 LDI R16,0xF3
053C DFE7 RCALL _ocmj_write
(0268) ocmj_write(x);
053D 2F06 MOV R16,R22
053E DFE5 RCALL _ocmj_write
(0269) ocmj_write(y);
053F 2D0C MOV R16,R12
0540 DFE3 RCALL _ocmj_write
(0270) ocmj_write(*ico_p);
0541 01F5 MOVW R30,R10
0542 9104 LPM R16,0(Z)
0543 DFE0 RCALL _ocmj_write
(0271) ico_p++;
0544 01C5 MOVW R24,R10
0545 9601 ADIW R24,1
0546 015C MOVW R10,R24
(0272) x++;
0547 9563 INC R22
0548 94E3 INC R14
0549 2D8E MOV R24,R14
054A 3084 CPI R24,4
054B F378 BCS 0x053B
(0273) }
(0274) x-=4;
054C 5064 SUBI R22,4
(0275) y++;
054D 94C3 INC R12
054E 9543 INC R20
054F 3240 CPI R20,0x20
0550 F340 BCS 0x0539
0551 940E0D74 CALL pop_gset5
0553 9508 RET
_cls:
j --> R20
i --> R14
width --> R22
high --> R10
y --> R12
x --> Y+10
0554 940E0CF2 CALL push_arg4
0556 940E0D9A CALL push_gset5
0558 0169 MOVW R12,R18
0559 84AE LDD R10,Y+14
055A 8968 LDD R22,Y+16
(0276) }
(0277) }
(0278) /* 清除屏幕区域 */
(0279) void cls(unsigned x,unsigned y,unsigned char high,unsigned char width)
(0280) {
(0281) unsigned char i,j;
(0282) x+=2;
055B 858A LDD R24,Y+10
055C 859B LDD R25,Y+11
055D 9602 ADIW R24,2
055E 879B STD Y+11,R25
055F 878A STD Y+10,R24
(0283) for(j=0;j<high;j++)
0560 2744 CLR R20
0561 C021 RJMP 0x0583
(0284) {
(0285) for(i=0;i<width;i++)
0562 24EE CLR R14
0563 C011 RJMP 0x0575
(0286) {
(0287) ocmj_write(0xf0);
0564 EF00 LDI R16,0xF0
0565 DFBE RCALL _ocmj_write
(0288) ocmj_write(x);
0566 850A LDD R16,Y+10
0567 851B LDD R17,Y+11
0568 DFBB RCALL _ocmj_write
(0289) ocmj_write(y);
0569 2D0C MOV R16,R12
056A DFB9 RCALL _ocmj_write
(0290) ocmj_write(55);
056B E307 LDI R16,0x37
056C DFB7 RCALL _ocmj_write
(0291) ocmj_write(90);
056D E50A LDI R16,0x5A
056E DFB5 RCALL _ocmj_write
(0292) x++;
056F 858A LDD R24,Y+10
0570 859B LDD R25,Y+11
0571 9601 ADIW R24,1
0572 879B STD Y+11,R25
0573 878A STD Y+10,R24
0574 94E3 INC R14
0575 16E6 CP R14,R22
0576 F368 BCS 0x0564
(0293) }
(0294) x-=width;
0577 2E26 MOV R2,R22
0578 2433 CLR R3
0579 840A LDD R0,Y+10
057A 841B LDD R1,Y+11
057B 1802 SUB R0,R2
057C 0813 SBC R1,R3
057D 861B STD Y+11,R1
057E 860A STD Y+10,R0
(0295) y++;
057F 01C6 MOVW R24,R12
0580 9601 ADIW R24,1
0581 016C MOVW R12,R24
0582 9543 INC R20
0583 154A CP R20,R10
0584 F2E8 BCS 0x0562
0585 940E0D74 CALL pop_gset5
0587 9624 ADIW R28,4
0588 9508 RET
_bmp_tran:
j --> R20
i --> R14
bmp_p --> R22
width --> R10
high --> R12
y --> Y+12
x --> Y+10
0589 940E0CF2 CALL push_arg4
058B 940E0D9A CALL push_gset5
058D 84CE LDD R12,Y+14
058E 88A8 LDD R10,Y+16
058F 896A LDD R22,Y+18
0590 897B LDD R23,Y+19
(0296) }
(0297) }
(0298) /* 传送bmp点阵数据到LCD */
(0299) /* x:0~15(字节为单位) y:0~64 */
(0300) /* bmp_p:指向图形数据的指针 */
(0301) /* high:位图高度(点阵行为单位) */
(0302) /* width:位图宽度(以字节为单位)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -