![]()  | 
			
					roboforum.ruТехнический форум по робототехнике.  | 
			
				
					 | 
		

#include <mega16.h> 
#include <delay.h> 
unsigned char segment[10]= 
{ 0x40,0x76,0xC,0x24,0x32,0x21,0x1,0x74,0x0,0x20 },
data[4]= {0,0,0,0};
int i=0;             
     
     void cifra(int z)
{  
    PORTC=0xFF;   
    PORTC = segment[z];
    delay_ms(4); 
    
}
   
   void print(int n)
{ 
 data[0]=n%10; n = n/10;   
 data[1]=n%10; n = n/10;    
 data[2]=n%10; n = n/10;     
 data[3]=n%10; 
 
 }
 
void beep(int z)
    {  
    
    for(i=0;i<z;i++)
        {
        PORTD.7=0;
        delay_ms(50); 
        PORTD.7=1;
        delay_ms(50); 
        PORTD.7=0;
        } 
    }
    
void initialization()
{ 
 
 PORTA=0xF0;
 DDRA=0xFD;             
 
 PORTC=0xFF;
 DDRC=0xFF;  
 
 PORTD=0x00;
 DDRD=0x80;
 TCCR0=0x03;
 TCNT0=0x00;
 OCR0=0x00;
 ASSR=0x00;
 TCCR2=0x04;
 TCNT2=0x00;
 OCR2=0x00;
 TIMSK=0x41;   
 
 #asm("sei") 
 
 
}
  
void main(void)
{
 initialization();  
 
 while (1)
      {  
       
      print(1478);       
      
      };
}          
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{         
PORTA=0x10; cifra(data[0]); 
PORTA=0x20; cifra(data[1]);
PORTA=0x40; cifra(data[2]);
PORTA=0x80; cifra(data[3]);
}
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{ 
if (PINA.1==0) beep(1); 
}volatile char rest = 0, cnt = 0;
inline void process_beep() {
  if (rest >= 0) {
    speaker = cnt & 1;
    rest--;
  } else speaker = 0;
}
tmr_int_ovf() {
  cnt++;
  process_beep();
  if (button_is_pressed) rest = 50;
}
#include <mega16.h> 
#include <delay.h> 
unsigned char segment[10]= 
{ 0x40,0x76,0xC,0x24,0x32,0x21,0x1,0x74,0x0,0x20 },     //symbols of 7-segment indicator
//   0    1    2   3    4    5   6    7   8    9  
data[4]= {0,0,0,0};                                     //4 symbols in 4 indicators
            
     
   void print(unsigned char n)                          //processing data, 
{ 
 
 data[0]=n%10; n = n/10;                               //calculating   
 data[1]=n%10; n = n/10;    
 data[2]=n%10; n = n/10;     
 data[3]=n%10; 
 
 }
 
void beep()
    { 
        PORTD.7=1;       
    }
    
void initialization()
{ 
 
 PORTA=0xF0;
 DDRA=0xFD;             
 
 PORTC=0xFF;
 DDRC=0xFF;  
 
 PORTD=0x00;
 DDRD=0x80;
 TCCR0=0x03;
 TCNT0=0x00;
 OCR0=0x00;
 ASSR=0x00;
 TCCR2=0x04;
 TCNT2=0x00;
 OCR2=0x00;
 TIMSK=0x41;   
 
 #asm("sei") 
 
}
  
void main(void)
{
 initialization();  
 
 while (1)
      {  
        
      print(1478);       
       
      };
}          
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{         
PORTC=0xFF; PORTA=0x10; PORTC = segment[data[0]]; delay_ms(5); 
PORTC=0xFF; PORTA=0x20; PORTC = segment[data[1]]; delay_ms(5); 
PORTC=0xFF; PORTA=0x40; PORTC = segment[data[2]]; delay_ms(5); 
PORTC=0xFF; PORTA=0x80; PORTC = segment[data[3]]; delay_ms(5); 
}
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{ 
if (PINA.1==0)
{
 beep();
 delay_ms(50);
 PORTD.7=0;
 } 
}interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{ 
#asm("sei")
if (PINA.1==0)
{ 
  PORTD.7=1;
  delay_ms(50);
  PORTD.7=0;
 } 
}volatile char rest = 0, cnt = 0;
// rest - количество "тиков", которые осталось совершить. нужно чтобы динамик еще чуть-чуть покричал после отпускания кнопки
// cnt - просто вспомогательный счетчик
inline void process_beep() {
  if (rest > 0) {
    speaker = cnt & 1;    // cnt&1 эквивалентно cnt%2, т.е. на ножке будет четность cnt
    rest--;
  } else speaker = 0;
}
tmr_int_ovf() {     // это прерывание срабатывает раз в 50мс
  cnt++;            // cnt++ изменяет четность cnt
  process_beep();
  if (button_is_pressed) rest = 50;
}
d3xr писал(а):Задача. Разработать шасси для полноразмерной роботизированной платформы (с человеческий рост). 2 ведущих колеса, 1 подруливающее. Переносимый вес - около 80кг (в идеале 150). Требуемая скорость - 5 км/ч. Бюждет НЕ ОГРАНИЧЕН. С чего начать, в какую сторону копать?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0