⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usart3_step_lcd.lst

📁 1. 熟悉AVR-atmega128单片机串口通信功能; 2. 掌握步进电机控制方法。 3. 初步掌握GCC的一般编程技巧。 4. 掌握AVR单片机中断、时钟的设置方法
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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 + -