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 км/ч. Бюждет НЕ ОГРАНИЧЕН. С чего начать, в какую сторону копать?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12