Ср июл 11, 2012 17:51:47
#define Group1 (Pa1), (Pa2), (Pa3), (Pb2), (Pb3), (Pb4)
GROUP_WRITE(0x55, Group1);
typedef PinList<Pa1, Pa2, Pa3, Pb2, Pb3, Pb4> Group1;
Group1::Write(0x55);
Ср июл 11, 2012 18:23:12
сначала развожу плату, как мне удобнее, а потом под железо пишу код, а не наоборот.
Ср июл 11, 2012 18:42:53
Ср июл 11, 2012 21:54:50
зачем лишние микросхемы
Ср июл 11, 2012 23:07:06
Чт июл 12, 2012 16:33:25
Чт июл 12, 2012 18:52:09
Слева: PD0, PD1, PD2, PD3, PD4PB6, PB7, PD5, PD6, PD7, PB0
Cправа: PC5, PC4, PC3, PC2, PC1, PC0, PB5, PB4, PB3, PB2, PB1
Чт июл 12, 2012 19:48:47
#define PIN_COUNT 11 // Количество виртуальных пинов
// Массив соответствия виртуальных пинов
unsigned char ptable[PIN_COUNT,3]{
// Порт B Порт C Порт D
{0b00010000, 0b00000000, 0b00000000}, // виртуальный пин 0: порт B, бит 4
{0b00000000, 0b00100000, 0b00000000},
{0b00000000, 0b10000000, 0b00000000},
{0b00001000, 0b00000000, 0b00100000},
{0b00000000, 0b00000100, 0b00000000},
{0b00000100, 0b00000000, 0b00000000},
{0b00000000, 0b00000000, 0b00000000},
{0b00000000, 0b00000001, 0b00000000}, // виртуальный пин 7: порт C, бит 0
{0b00000000, 0b00000000, 0b00001000},
{0b00000000, 0b00000000, 0b00000010},
{0b10000000, 0b00000000, 0b00000000} // виртуальный пин 10: порт B, бит 7
}
// Сброс виртуального пина
// Если виртуальный порт должен вмещать больше 16 пинов,
// то надо (unsigned int val) исправить на (unsigned long int val)
void outVirtual(unsigned int val)
{
unsigned char tempB, tempC, tempD, i;
tempB=PORTB;
tempC=PORTC;
tempD=PORTD;
for (i=0; i < PIN_COUNT; i++)
{
if (val & 0x0001)
{
tempB|=ptable[i, 0];
tempC|=ptable[i, 1];
tempD|=ptable[i, 2];
}
else
{
tempB&=(~ptable[i, 0]);
tempC&=(~ptable[i, 1]);
tempD&=(~ptable[i, 2]);
}
val=val>>1;
}
PORTB=tempB;
PORTC=tempC;
PORTD=tempD;
}
Чт июл 12, 2012 19:58:07
Чт июл 12, 2012 21:53:37
Rondo писал(а):U235 спасибо, щас буду раскуривать Ваш код !
Пт июл 13, 2012 10:29:32
#define seg_A PORTB_Bit3
#define seg_B PORTB_Bit6
#define seg_C PORTC_Bit1
#define seg_D PORTD_Bit7
#define seg_E PORTB_Bit1
#define seg_F PORTD_Bit1
#define seg_G PORTD_Bit5
#define seg_DP PORTB_Bit5
#define seg_1 PORTC_Bit0
#define seg_2 PORTB_Bit4
#define seg_3 PORTB_Bit2
#define seg_4 PORTB_Bit0
#define seg_5 PORTD_Bit6
#define seg_6 PORTB_Bit7
#define seg_7 PORTD_Bit2
#define seg_8 PORTD_Bit0
void LED_DRIVER(unsigned char num,unsigned char data)
{
seg_A = 0;
seg_B = 0;
seg_C = 0;
seg_D = 0;
seg_E = 0;
seg_F = 0;
seg_G = 0;
seg_DP = 0;
num ^= 0xFF;
seg_1 = num;
num>>=1;
seg_2 = num;
num>>=1;
seg_3 = num;
num>>=1;
seg_4 = num;
num>>=1;
seg_5 = num;
num>>=1;
seg_6 = num;
num>>=1;
seg_7 = num;
num>>=1;
seg_8 = num;
seg_A = data;
data>>=1;
seg_B = data;
data>>=1;
seg_C = data;
data>>=1;
seg_D = data;
data>>=1;
seg_E = data;
data>>=1;
seg_F= data;
data>>=1;
seg_G = data;
data>>=1;
seg_DP = data;
}
Сб июл 14, 2012 17:35:21
Сб июл 14, 2012 21:28:35
Rondo писал(а):U235 можно по подробней о массиве соответствия виртуальных пинов ? я что то не понял зачем он =\
И я что то не понял, как мне из вашего примера "собрать в кучу" разные пины в один порт? если не сложно - обьясните по пальцам
PORTB=value;
{0b00010000, 0b00000000, 0b00000000}
Вс июл 15, 2012 10:40:18