📄 usart3_step_lcd.lst
字号:
338: 0e 94 7f 01 call 0x2fe <delay>
33c: 08 95 ret
0000033e <lcd_con>:
33e: 80 e0 ldi r24, 0x00 ; 0
340: 90 e7 ldi r25, 0x70 ; 112
342: 90 93 1a 02 sts 0x021A, r25
346: 80 93 19 02 sts 0x0219, r24
34a: 81 e0 ldi r24, 0x01 ; 1
34c: 90 e7 ldi r25, 0x70 ; 112
34e: 90 93 18 02 sts 0x0218, r25
352: 80 93 17 02 sts 0x0217, r24
356: 0e 94 99 01 call 0x332 <lcd_control_wait>
35a: e0 91 19 02 lds r30, 0x0219
35e: f0 91 1a 02 lds r31, 0x021A
362: 80 81 ld r24, Z
364: 88 63 ori r24, 0x38 ; 56
366: 80 83 st Z, r24
368: 0e 94 99 01 call 0x332 <lcd_control_wait>
36c: e0 91 19 02 lds r30, 0x0219
370: f0 91 1a 02 lds r31, 0x021A
374: 80 81 ld r24, Z
376: 82 60 ori r24, 0x02 ; 2
378: 80 83 st Z, r24
37a: 0e 94 99 01 call 0x332 <lcd_control_wait>
37e: e0 91 19 02 lds r30, 0x0219
382: f0 91 1a 02 lds r31, 0x021A
386: 80 81 ld r24, Z
388: 81 60 ori r24, 0x01 ; 1
38a: 80 83 st Z, r24
38c: 0e 94 99 01 call 0x332 <lcd_control_wait>
390: e0 91 19 02 lds r30, 0x0219
394: f0 91 1a 02 lds r31, 0x021A
398: 80 81 ld r24, Z
39a: 86 60 ori r24, 0x06 ; 6
39c: 80 83 st Z, r24
39e: 0e 94 99 01 call 0x332 <lcd_control_wait>
3a2: e0 91 19 02 lds r30, 0x0219
3a6: f0 91 1a 02 lds r31, 0x021A
3aa: 80 81 ld r24, Z
3ac: 8e 60 ori r24, 0x0E ; 14
3ae: 80 83 st Z, r24
3b0: 0e 94 99 01 call 0x332 <lcd_control_wait>
3b4: 08 95 ret
000003b6 <initialize_text_lcd>:
3b6: 0f 93 push r16
3b8: 1f 93 push r17
3ba: 0e 94 9f 01 call 0x33e <lcd_con>
3be: e0 91 17 02 lds r30, 0x0217
3c2: f0 91 18 02 lds r31, 0x0218
3c6: 10 e3 ldi r17, 0x30 ; 48
3c8: 10 83 st Z, r17
3ca: 0e 94 92 01 call 0x324 <lcd_data_wait>
3ce: e0 91 17 02 lds r30, 0x0217
3d2: f0 91 18 02 lds r31, 0x0218
3d6: 10 83 st Z, r17
3d8: 0e 94 92 01 call 0x324 <lcd_data_wait>
3dc: e0 91 17 02 lds r30, 0x0217
3e0: f0 91 18 02 lds r31, 0x0218
3e4: 0a e3 ldi r16, 0x3A ; 58
3e6: 00 83 st Z, r16
3e8: 0e 94 92 01 call 0x324 <lcd_data_wait>
3ec: e0 91 17 02 lds r30, 0x0217
3f0: f0 91 18 02 lds r31, 0x0218
3f4: 10 83 st Z, r17
3f6: 0e 94 92 01 call 0x324 <lcd_data_wait>
3fa: e0 91 17 02 lds r30, 0x0217
3fe: f0 91 18 02 lds r31, 0x0218
402: 10 83 st Z, r17
404: 0e 94 92 01 call 0x324 <lcd_data_wait>
408: e0 91 17 02 lds r30, 0x0217
40c: f0 91 18 02 lds r31, 0x0218
410: 00 83 st Z, r16
412: 0e 94 92 01 call 0x324 <lcd_data_wait>
416: e0 91 17 02 lds r30, 0x0217
41a: f0 91 18 02 lds r31, 0x0218
41e: 10 83 st Z, r17
420: 0e 94 92 01 call 0x324 <lcd_data_wait>
424: e0 91 17 02 lds r30, 0x0217
428: f0 91 18 02 lds r31, 0x0218
42c: 10 83 st Z, r17
42e: 0e 94 92 01 call 0x324 <lcd_data_wait>
432: 1f 91 pop r17
434: 0f 91 pop r16
436: 08 95 ret
00000438 <go_step_1phase>:
}
void go_step_1phase(unsigned time)
{
PORTD=(one_phase1[phase_pnt1++]<<4);
438: 30 91 12 01 lds r19, 0x0112
43c: e3 2f mov r30, r19
43e: ff 27 eor r31, r31
440: e5 5f subi r30, 0xF5 ; 245
442: fe 4f sbci r31, 0xFE ; 254
444: 20 81 ld r18, Z
446: 22 95 swap r18
448: 20 7f andi r18, 0xF0 ; 240
44a: 3f 5f subi r19, 0xFF ; 255
44c: 30 93 12 01 sts 0x0112, r19
450: 22 bb out 0x12, r18 ; 18
phase_pnt1&=0x03;
452: 20 91 12 01 lds r18, 0x0112
456: 23 70 andi r18, 0x03 ; 3
458: 20 93 12 01 sts 0x0112, r18
delay(time,100);}
45c: 64 e6 ldi r22, 0x64 ; 100
45e: 70 e0 ldi r23, 0x00 ; 0
460: 0e 94 7f 01 call 0x2fe <delay>
464: 08 95 ret
00000466 <go_step_2phase>:
void go_step_2phase(unsigned time)
{
PORTD=(one_phase2[phase_pnt2++]<<4);
466: 30 91 10 01 lds r19, 0x0110
46a: e3 2f mov r30, r19
46c: ff 27 eor r31, r31
46e: e9 5f subi r30, 0xF9 ; 249
470: fe 4f sbci r31, 0xFE ; 254
472: 20 81 ld r18, Z
474: 22 95 swap r18
476: 20 7f andi r18, 0xF0 ; 240
478: 3f 5f subi r19, 0xFF ; 255
47a: 30 93 10 01 sts 0x0110, r19
47e: 22 bb out 0x12, r18 ; 18
phase_pnt2&=0x03;
480: 20 91 10 01 lds r18, 0x0110
484: 23 70 andi r18, 0x03 ; 3
486: 20 93 10 01 sts 0x0110, r18
delay(time,100);
48a: 64 e6 ldi r22, 0x64 ; 100
48c: 70 e0 ldi r23, 0x00 ; 0
48e: 0e 94 7f 01 call 0x2fe <delay>
492: 08 95 ret
00000494 <To_Numeric>:
}
SIGNAL(SIG_OVERFLOW0)
{TCNT0=0xf0;
if(second2!='0') second2--;
else if((second2=='0')&&(second1!='0')){second1=To_Numeric(second1)-1+'0';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2!='0')){minute2=To_Numeric(minute2)-1+'0';second1='5';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2=='0')&&(minute1!='0')){minute1=To_Numeric(minute1)-1+'0';minute2='9';second1='5';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2=='0')&&(minute1=='0')&&(hour2!='0')){hour2=To_Numeric(hour2)-1+'0';minute1='5';minute2='9';second1='5';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2=='0')&&(minute1=='0')&&(hour2=='0')&&(hour1!='0'))
{hour2='9';minute1='5';minute2='9';second1='5';second2='9';}
else {hour1=hour2=minute1=minute2=second1=second2='0';
while(1){go_step_1phase(speed);
}
}
lcd_control=TLCD_CTRL;
lcd_data=TLCD_DATA;
lcd_control_wait();
*lcd_control|=0x38;
lcd_control_wait();
*lcd_control|=0x02;
lcd_control_wait();
*lcd_control|=0x06;
lcd_control_wait();
*lcd_control|=0x0e;
lcd_control_wait();
*lcd_data=hour1;
lcd_data_wait();
*lcd_data=hour2;
lcd_data_wait();
*lcd_data=':';
lcd_data_wait();
*lcd_data=minute1;
lcd_data_wait();
*lcd_data=minute2;
lcd_data_wait();
*lcd_data=':';
lcd_data_wait();
*lcd_data=second1;
lcd_data_wait();
*lcd_data=second2;
lcd_data_wait();
}
void initialize_timer3(void)
{TCNT3H=0xff;
TCNT3L=0xf0;
TCCR3B=0x05;
ETIMSK=0x04;
sei();
}
SIGNAL(SIG_OVERFLOW3)
{TCNT3H=0xff;
TCNT3L=0xf0;
if(second2!='0') second2--;
else if((second2=='0')&&(second1!='0')){second1=To_Numeric(second1)-1+'0';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2!='0')){minute2=To_Numeric(minute2)-1+'0';second1='5';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2=='0')&&(minute1!='0')){minute1=To_Numeric(minute1)-1+'0';minute2='9';second1='5';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2=='0')&&(minute1=='0')&&(hour2!='0')){hour2=To_Numeric(hour2)-1+'0';minute1='5';minute2='9';second1='5';second2='9';}
else if((second2=='0')&&(second1=='0')&&(minute2=='0')&&(minute1=='0')&&(hour2=='0')&&(hour1!='0'))
{hour2='9';minute1='5';minute2='9';second1='5';second2='9';}
else { hour1=hour2=minute1=minute2=second1=second2='0';
while(1){go_step_2phase(speed);}
}
lcd_control=TLCD_CTRL;
lcd_data=TLCD_DATA;
lcd_control_wait();
*lcd_control|=0x38;
lcd_control_wait();
*lcd_control|=0x02;
lcd_control_wait();
*lcd_control|=0x06;
lcd_control_wait();
*lcd_control|=0x0e;
lcd_control_wait();
*lcd_data=hour1;
lcd_data_wait();
*lcd_data=hour2;
lcd_data_wait();
*lcd_data=':';
lcd_data_wait();
*lcd_data=minute1;
lcd_data_wait();
*lcd_data=minute2;
lcd_data_wait();
*lcd_data=':';
lcd_data_wait();
*lcd_data=second1;
lcd_data_wait();
*lcd_data=second2;
lcd_data_wait();
}
SIGNAL(SIG_INTERRUPT0)
{dir=0;
}
SIGNAL(SIG_UART1_RECV)
{unsigned char data;
unsigned char tmphead;
data=UDR1;
tmphead=(UART_RxHead+1)&UART_RX_BUFFER_MASK;
UART_RxHead=tmphead;
if(tmphead==UART_RxTail){}
UART_RxBuf[tmphead]=data;
}
SIGNAL(SIG_UART1_DATA)
{ unsigned char tmptail;
if(UART_TxHead!=UART_TxTail){tmptail=(UART_TxTail+1)&UART_TX_BUFFER_MASK;
UART_TxTail=tmptail;
UDR1=UART_TxBuf[tmptail];}
else{UCSR1B&=~(1<<UDRIE);}
}
unsigned char ReceiveByte(void)
{ unsigned char tmptail;
while(UART_RxHead==UART_RxTail);
tmptail=(UART_RxTail+1)&UART_RX_BUFFER_MASK;
UART_RxTail=tmptail;
return UART_RxBuf[tmptail];
}
void TransmitByte(unsigned char data)
{ unsigned char tmphead;
tmphead=(UART_TxHead+1)&UART_TX_BUFFER_MASK;
while(tmphead==UART_TxTail);
UART_TxBuf[tmphead]=data;
UART_TxHead=tmphead;
UCSR1B|=(1<<UDRIE);
}
int main(void)
{
unsigned char data;
unsigned int i,j;
Initialize();
initialize_text_lcd();
DDRD=0Xf0;
print_logo();
while(1)
{
data=ReceiveByte();
switch(data)
{
case '\r':TransmitByte('\r');
TransmitByte('\n');
print_prompt();
break;
case '\n':TransmitByte('\r');
TransmitByte('\n');
print_prompt();
break;
case 'f':
case 'F':TransmitByte(data);
print_Message((unsigned char *)M_SELECT);
data=ReceiveByte();
if(data=='1')
{ TransmitByte(data);
print_Message((unsigned char *)M_Forward_JIASU);
data=ReceiveByte();
if (data=='1')
{speed=50;TransmitByte(data);data=ReceiveByte();
while(1){if(dir)go_step_1phase(speed);
else {dir=1;break;}}
break;}
else if(data=='2')
{speed=40;TransmitByte(data);data=ReceiveByte();
while(1){if(dir)go_step_1phase(speed);
else {dir=1;break;}}
break;}
else if(data=='3')
{speed=30;TransmitByte(data);data=ReceiveByte();
while(1){if(dir)go_step_1phase(speed);
else {dir=1;break;}}
break;}
else {TransmitByte('\r');TransmitByte('\n');break;}
break; }
else if(data=='2')
{ TransmitByte(data);
print_Message((unsigned char *)M_Forward_JIANSU);
data=ReceiveByte();
if (data=='1')
{speed=60;TransmitByte(data);data=ReceiveByte();
while(1){if(dir)go_step_1phase(speed);
else {dir=1;break;}}
}
else if(data=='2')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -