1.
Код: Выделить всё
char red_kb[3]={0, 0, 0}; //массив для ф-ции char red_kb[3]={0, 0, 0}; зачем он нужен? и зачем мы нулям присваиваем инверсное значение кнопок?
void init_red_kb(void)
{
DDRB=0xFF;
PORTB=0xFF;
}
void read_red_kb(void)
{
red_kb[0]=~RED_BTN_0;
red_kb[1]=~RED_BTN_1;
red_kb[2]=~RED_BTN_2;
}
void main(void)
{
int j=0;
init_red_kb();
PORTD=0xFF;
DDRD=0xFF;
while (1)
{
read_red_kb();
if (red_kb[1]){j=0;} //
if (red_kb[0]){j+=1;}
if (red_kb[2]){j-=1;}
PORTD=~j;
delay_ms(500);
}
}
2.
Код: Выделить всё
const char select_col[3]={0xEF, 0xDF, 0xBF};
char BUTTON_E[12]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
void trans_delay(void){#asm("NOP")};
void main(void)
{ //
unsigned char key_buffer, i;
//
PORTB=0xFF;
DDRB=0x00;
//
PORTD=0xFF;
DDRD=0xFF;
//
PORTE=0xFF;
DDRE=0xF0;
while (1)
{
for(i=0; i<3; ++i){
PORTE=select_col[i];
trans_delay(); // зачем делается здесь NOP? это ожидание пока не нажмётся какая нибудь кнопка?
BUTTON_E[i]=~PINE.3; // что происходит здесь? получается мы кнопкам присваиваем значение кнопок? для чего прибавление +3 каждый раз?
BUTTON_E[i+3]=~PINE.2;
BUTTON_E[i+6]=~PINE.1;
BUTTON_E[i+9]=~PINE.0;
}
}
} 