А как можно тут переделать чтобы получился кодовый замочек? Не хочу работать с EEPROM. Можно ли без EEPROM памяти?
Код: Выделить всё
#include <mega8.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
int i=0,j=0, k=0;
char portState[4]= {0xEF,0xDF,0xBF,0x7F};
char inputState[4]={0x01,0x02,0x04,0x08};
char mass2[4][4]={{'1','2','3','4'},
{'5','6','7','8'},
{'9','A','B','C'},
{'D','E','F','D'}};
char mass3[3]={'1','2','3'};
// Timer 2 output compare interrupt service routine
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
for(i=0; i<4; i++)
{
PORTD=portState[i];
for(j=0; j<4; j++)
{
if(((PIND&inputState[j])==0))
{
while((PIND&inputState[j])!=inputState[j]){};
if( (mass2[i][j] == mass3[i])&(mass2[i][j+1] == mass3[i+1])&(mass2[i][j+2] == mass3[i+2])) // ?
{
lcd_putsf("Parol priniat!");
}
else
{
lcd_putsf("Parol nevernyj!");
}
lcd_putchar(mass2[i][j]); // vyvod informatsii (mass2[i][j]) na LCD
}
}
}
}
void main(void)
{
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=P State0=P
PORTC=0x03;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=P State0=P
PORTD=0xFF;
DDRD=0xF0;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x0F;
TCNT2=0x00;
OCR2=0xC3;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x80;
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
if(PINC.0==0)
{
lcd_clear();
}
};
}