![Smile :)](http://roboforum.ru/images/smilies/smile.gif)
Скорее всего эта функция прилично места занимает. Если она уже в коде где то используется, то наверно выигрыш будет. Она конечно проработана и оптимизирована, но она слишком универсальна и поэтому видимо не маленькая.
Технический форум по робототехнике.
то мы начали уже без вас дискутировать на тему ненужной вам оптимизации
ну зачем так сразу. на каждый индикатор по триггеру и все ок.
Ваша занимает 688 байт, моя 426.
Нужно каким-то способом сделать так, чтобы во время вычислений на индикаторах оставалось число с прошлого замера...
unsigned char segment[10]= {
0b0000001, 0b1001111, //0,1
0b0010010, 0b0000110, //2,3
0b1001011, 0b0100100, //4,5
0b0100000, 0b0001111, //6,7
0b0000000, 0b0000100 //8,9
};
PORTC = segment[x];
HarryStar писал(а):PORTC = a;
PORTD = (a & 0b01000000) << 1;
Например так. (в случае, если вам не важно что на битах PORTC.6, PORTC.7 и битах PORTD.0-6)
PORTC = segment[x];
PORTD.7 = PORTC.6;
#include <mega16.h> //Включаем библиотеку для работы с микроконтроллером ATMega16
#include <delay.h> //Включаем библиотеку для организации задержек
int i,a, x1,x10, disp;
unsigned char segment[10]= {
// gedcfab gedcfab
0b1000000, 0b1110110, //0,1
0b0001100, 0b0100100, //2,3
0b0110010, 0b0100001, //4,5
0b0000001, 0b1110100, //6,7
0b0000000, 0b0100000 //8,9
};
void clr_all()
{
PORTD=0xFF; // Подтянуть порт D к 1
PORTC=0xFF; // Подтянуть порт C к 1
PORTA=0x00; // Подтянуть порт A к 0
}
void main(void)
{
while(1)
{
PORTD=0xFF; // Подтянуть порт D к 1
DDRD=0xFF; // Все порты D - выходы
PORTC=0xFF; // Подтянуть порт C к 1
DDRC=0xFF; // Все порты C - выходы
PORTA=0x00; // Подтянуть порт A к 0
DDRA=0xFF; // Все порты A - выходы
//disp = 42;
for (disp=0; disp<99; disp++)
{
delay_ms(500);
x10=disp/10;
x1=disp-x10*10;
PORTA.7 = 0;
PORTA.6 = 1;
PORTC = segment[x1];
PORTD.7 = PORTC.6;
delay_ms(5);
PORTA.6 = 0;
PORTA.7 = 1;
PORTC = segment[x10];
PORTD.7 = PORTC.6;
delay_ms(5);
};
};
}
for (i=0; i<99; i++)
{
delay_ms(500);
disp = 42;
x10=disp/10;
x1=disp-x10*10;
PORTA.7 = 0;
PORTA.6 = 1;
PORTC = segment[x1];
PORTD.7 = PORTC.6;
delay_ms(5);
PORTA.6 = 0;
PORTA.7 = 1;
PORTC = segment[x10];
PORTD.7 = PORTC.6;
delay_ms(5);
};