📄 双足机器人.lst
字号:
_LeftFwd:
time --> R20
0109 940E0473 CALL push_gset1
010B 2F40 MOV R20,R16
(0162)
(0163) }
(0164)
(0165) }
(0166)
(0167) void LeftFwd(unsigned char time)//迈左脚步
(0168) {
010C C00A RJMP 0x0117
(0169)
(0170)
(0171) while(time>1)
(0172) {
(0173) time--;
010D 954A DEC R20
(0174)
(0175) PORTD&=0x3f;
010E B382 IN R24,0x12
010F 738F ANDI R24,0x3F
0110 BB82 OUT 0x12,R24
(0176) delay_20ms();
0111 DF58 RCALL _delay_20ms
(0177)
(0178)
(0179) PORTD|=0x40;
0112 9A96 SBI 0x12,6
(0180) delay_run();
0113 DF8A RCALL _delay_run
(0181) PORTD&=0x3f;
0114 B382 IN R24,0x12
0115 738F ANDI R24,0x3F
0116 BB82 OUT 0x12,R24
0117 E081 LDI R24,1
0118 1784 CP R24,R20
0119 F398 BCS 0x010D
011A 940E0476 CALL pop_gset1
011C 9508 RET
_RightUp:
time --> R20
011D 940E0473 CALL push_gset1
011F 2F40 MOV R20,R16
(0182) }
(0183)
(0184)
(0185)
(0186)
(0187) }
(0188)
(0189) void RightUp(unsigned char time)//抬右脚
(0190) {
0120 C00A RJMP 0x012B
(0191) while(time>1)
(0192) {
(0193) time--;
0121 954A DEC R20
(0194)
(0195) PORTD&=0x3f;
0122 B382 IN R24,0x12
0123 738F ANDI R24,0x3F
0124 BB82 OUT 0x12,R24
(0196) delay_20ms();
0125 DF44 RCALL _delay_20ms
(0197)
(0198)
(0199) PORTD|=0x80;
0126 9A97 SBI 0x12,7
(0200) delay_back();
0127 DF83 RCALL _delay_back
(0201) PORTD&=0x3f;
0128 B382 IN R24,0x12
0129 738F ANDI R24,0x3F
012A BB82 OUT 0x12,R24
012B E081 LDI R24,1
012C 1784 CP R24,R20
012D F398 BCS 0x0121
012E 940E0476 CALL pop_gset1
0130 9508 RET
_RightFwd:
time --> R20
0131 940E0473 CALL push_gset1
0133 2F40 MOV R20,R16
(0202)
(0203) }
(0204) }
(0205)
(0206) void RightFwd(unsigned char time)//迈右脚
(0207) {
0134 C00A RJMP 0x013F
(0208) while(time>1)
(0209) {
(0210) time--;
0135 954A DEC R20
(0211)
(0212) PORTD&=0x3f;
0136 B382 IN R24,0x12
0137 738F ANDI R24,0x3F
0138 BB82 OUT 0x12,R24
(0213) delay_20ms();
0139 DF30 RCALL _delay_20ms
(0214)
(0215)
(0216) PORTD|=0x40;
013A 9A96 SBI 0x12,6
(0217) delay_back();
013B DF6F RCALL _delay_back
(0218) PORTD&=0x3f;
013C B382 IN R24,0x12
013D 738F ANDI R24,0x3F
013E BB82 OUT 0x12,R24
013F E081 LDI R24,1
0140 1784 CP R24,R20
0141 F398 BCS 0x0135
0142 940E0476 CALL pop_gset1
0144 9508 RET
_display_time:
j --> R20
display --> R22
point --> R12
second --> R10
minute --> R14
n1 --> R20
0145 940E046B CALL push_gset5
0147 2EE2 MOV R14,R18
0148 2F40 MOV R20,R16
0149 84AA LDD R10,Y+10
014A 84CC LDD R12,Y+12
(0219) }
(0220)
(0221) }
(0222)
(0223)
(0224) /////////////////小车运动////////////////////////////////////////
(0225)
(0226)
(0227) /////////////液晶屏显示函数/////////////////////////////////////
(0228)
(0229)
(0230) void display_time(unsigned char n1,unsigned char minute,unsigned char second,unsigned char point)
(0231) //参数n1为控制是否显示冒号,11为不显示,10为显示.
(0232) //minute\second为两个最大为99的整数
(0233) //point为控制是否显示小数点,0为不显示,1为显示.
(0234) {
(0235) unsigned char j,display;
(0236) display=number[n1];
014B E683 LDI R24,0x63
014C E090 LDI R25,0
014D 2FE4 MOV R30,R20
014E 27FF CLR R31
014F 0FE8 ADD R30,R24
0150 1FF9 ADC R31,R25
0151 8160 LDD R22,Z+0
(0237) for(j=0;j<8;j++)
0152 2744 CLR R20
0153 C01A RJMP 0x016E
(0238) {
(0239) PORTC|=0x10;
0154 9AAC SBI 0x15,4
(0240) PORTC&=0xf7;delay_us(5);
0155 B385 IN R24,0x15
0156 7F87 ANDI R24,0xF7
0157 BB85 OUT 0x15,R24
0158 E005 LDI R16,5
0159 E010 LDI R17,0
015A DEF8 RCALL _delay_us
(0241) PORTC|=((display&0x01)<<3);delay_us(5);
015B 2F86 MOV R24,R22
015C 7081 ANDI R24,1
015D 0F88 LSL R24
015E 0F88 LSL R24
015F 0F88 LSL R24
0160 B225 IN R2,0x15
0161 2A28 OR R2,R24
0162 BA25 OUT 0x15,R2
0163 E005 LDI R16,5
0164 E010 LDI R17,0
0165 DEED RCALL _delay_us
(0242) PORTC&=0xef;delay_us(5);
0166 B385 IN R24,0x15
0167 7E8F ANDI R24,0xEF
0168 BB85 OUT 0x15,R24
0169 E005 LDI R16,5
016A E010 LDI R17,0
016B DEE7 RCALL _delay_us
(0243) display>>=1;
016C 9566 LSR R22
016D 9543 INC R20
016E 3048 CPI R20,0x8
016F F320 BCS 0x0154
(0244) }
(0245) display=number[minute/10];
0170 E02A LDI R18,0xA
0171 E030 LDI R19,0
0172 2D0E MOV R16,R14
0173 2711 CLR R17
0174 940E042F CALL div16s
0176 01F8 MOVW R30,R16
0177 E683 LDI R24,0x63
0178 E090 LDI R25,0
0179 0FE8 ADD R30,R24
017A 1FF9 ADC R31,R25
017B 8160 LDD R22,Z+0
(0246) for(j=0;j<8;j++)
017C 2744 CLR R20
017D C01D RJMP 0x019B
(0247) {
(0248) PORTC|=0x10;delay_us(5);
017E 9AAC SBI 0x15,4
017F E005 LDI R16,5
0180 E010 LDI R17,0
0181 DED1 RCALL _delay_us
(0249) PORTC&=0xf7;delay_us(5);
0182 B385 IN R24,0x15
0183 7F87 ANDI R24,0xF7
0184 BB85 OUT 0x15,R24
0185 E005 LDI R16,5
0186 E010 LDI R17,0
0187 DECB RCALL _delay_us
(0250) PORTC|=((display&0x01)<<3);delay_us(5);
0188 2F86 MOV R24,R22
0189 7081 ANDI R24,1
018A 0F88 LSL R24
018B 0F88 LSL R24
018C 0F88 LSL R24
018D B225 IN R2,0x15
018E 2A28 OR R2,R24
018F BA25 OUT 0x15,R2
0190 E005 LDI R16,5
0191 E010 LDI R17,0
0192 DEC0 RCALL _delay_us
(0251) PORTC&=0xef;delay_us(5);
0193 B385 IN R24,0x15
0194 7E8F ANDI R24,0xEF
0195 BB85 OUT 0x15,R24
0196 E005 LDI R16,5
0197 E010 LDI R17,0
0198 DEBA RCALL _delay_us
(0252) display>>=1;
0199 9566 LSR R22
019A 9543 INC R20
019B 3048 CPI R20,0x8
019C F308 BCS 0x017E
(0253) }
(0254) display=number[minute%10];
019D E02A LDI R18,0xA
019E E030 LDI R19,0
019F 2D0E MOV R16,R14
01A0 2711 CLR R17
01A1 940E042B CALL mod16s
01A3 01F8 MOVW R30,R16
01A4 E683 LDI R24,0x63
01A5 E090 LDI R25,0
01A6 0FE8 ADD R30,R24
01A7 1FF9 ADC R31,R25
01A8 8160 LDD R22,Z+0
(0255) if(point) //显示路程时米与厘米之加小数点
01A9 20CC TST R12
01AA F009 BEQ 0x01AC
(0256) display&=0x7f;
01AB 776F ANDI R22,0x7F
(0257) for(j=0;j<8;j++)
01AC 2744 CLR R20
01AD C01D RJMP 0x01CB
(0258) {
(0259) PORTC|=0x10;delay_us(5);
01AE 9AAC SBI 0x15,4
01AF E005 LDI R16,5
01B0 E010 LDI R17,0
01B1 DEA1 RCALL _delay_us
(0260) PORTC&=0xf7;delay_us(5);
01B2 B385 IN R24,0x15
01B3 7F87 ANDI R24,0xF7
01B4 BB85 OUT 0x15,R24
01B5 E005 LDI R16,5
01B6 E010 LDI R17,0
01B7 DE9B RCALL _delay_us
(0261) PORTC|=((display&0x01)<<3);delay_us(5);
01B8 2F86 MOV R24,R22
01B9 7081 ANDI R24,1
01BA 0F88 LSL R24
01BB 0F88 LSL R24
01BC 0F88 LSL R24
01BD B225 IN R2,0x15
01BE 2A28 OR R2,R24
01BF BA25 OUT 0x15,R2
01C0 E005 LDI R16,5
01C1 E010 LDI R17,0
01C2 DE90 RCALL _delay_us
(0262) PORTC&=0xef;delay_us(5);
01C3 B385 IN R24,0x15
01C4 7E8F ANDI R24,0xEF
01C5 BB85 OUT 0x15,R24
01C6 E005 LDI R16,5
01C7 E010 LDI R17,0
01C8 DE8A RCALL _delay_us
(0263) display>>=1;
01C9 9566 LSR R22
01CA 9543 INC R20
01CB 3048 CPI R20,0x8
01CC F308 BCS 0x01AE
(0264) }
(0265) display=number[second/10];
01CD E02A LDI R18,0xA
01CE E030 LDI R19,0
01CF 2D0A MOV R16,R10
01D0 2711 CLR R17
01D1 940E042F CALL div16s
01D3 01F8 MOVW R30,R16
01D4 E683 LDI R24,0x63
01D5 E090 LDI R25,0
01D6 0FE8 ADD R30,R24
01D7 1FF9 ADC R31,R25
01D8 8160 LDD R22,Z+0
(0266) for(j=0;j<8;j++)
01D9 2744 CLR R20
01DA C01D RJMP 0x01F8
(0267) {
(0268) PORTC|=0x10;delay_us(5);
01DB 9AAC SBI 0x15,4
01DC E005 LDI R16,5
01DD E010 LDI R17,0
01DE DE74 RCALL _delay_us
(0269) PORTC&=0xf7;delay_us(5);
01DF B385 IN R24,0x15
01E0 7F87 ANDI R24,0xF7
01E1 BB85 OUT 0x15,R24
01E2 E005 LDI R16,5
01E3 E010 LDI R17,0
01E4 DE6E RCALL _delay_us
(0270) PORTC|=((display&0x01)<<3);delay_us(5);
01E5 2F86 MOV R24,R22
01E6 7081 ANDI R24,1
01E7 0F88 LSL R24
01E8 0F88 LSL R24
01E9 0F88 LSL R24
01EA B225 IN R2,0x15
01EB 2A28 OR R2,R24
01EC BA25 OUT 0x15,R2
01ED E005 LDI R16,5
01EE E010 LDI R17,0
01EF DE63 RCALL _delay_us
(0271) PORTC&=0xef;delay_us(5);
01F0 B385 IN R24,0x15
01F1 7E8F ANDI R24,0xEF
01F2 BB85 OUT 0x15,R24
01F3 E005 LDI R16,5
01F4 E010 LDI R17,0
01F5 DE5D RCALL _delay_us
(0272) display>>=1;
01F6 9566 LSR R22
01F7 9543 INC R20
01F8 3048 CPI R20,0x8
01F9 F308 BCS 0x01DB
(0273) }
(0274) display=number[second%10];
01FA E02A LDI R18,0xA
01FB E030 LDI R19,0
01FC 2D0A MOV R16,R10
01FD 2711 CLR R17
01FE 940E042B CALL mod16s
0200 01F8 MOVW R30,R16
0201 E683 LDI R24,0x63
0202 E090 LDI R25,0
0203 0FE8 ADD R30,R24
0204 1FF9 ADC R31,R25
0205 8160 LDD R22,Z+0
(0275) for(j=0;j<8;j++)
0206 2744 CLR R20
0207 C01D RJMP 0x0225
(0276) {
(0277) PORTC|=0x10;delay_us(5);
0208 9AAC SBI 0x15,4
0209 E005 LDI R16,5
020A E010 LDI R17,0
020B DE47 RCALL _delay_us
(0278) PORTC&=0xf7;delay_us(5);
020C B385 IN R24,0x15
020D 7F87 ANDI R24,0xF7
020E BB85 OUT 0x15,R24
020F E005 LDI R16,5
0210 E010 LDI R17,0
0211 DE41 RCALL _delay_us
(0279) PORTC|=((display&0x01)<<3);delay_us(5);
0212 2F86 MOV R24,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -