📄 main.c
字号:
PORTC = 0xc3;//PORTC7,PORTC6,PORTC1,PORTC0 ==> key input ,enable_up
DDRC = 0x00;//PC7,PC6,PC1,PC0 ==> PRESS KEY INPUT ; PC2PC3PC4PC5 ==>JTAG USE
PORTD = 0xf8;//PORTD3-PORTD7 ==> LED CS ,enable_up ;
DDRD = 0xff;//PD3,PD4,PD5,PD6,PD7 ==>LED CS USE ;PD2,PD1,PD0 OUTPUT DS1302 USE
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
// CLI(); //disable all interrupts
port_init();
spi_init(); //初始化SPI接口
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
// SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void PasswordProcess(void)
{
int val;
EepromDayDataRd();
if(DayData[0]==0)
{
Password_alarm=TRUE;
}
else
{
ReadTime();
EepromDateValueRd();
// if((year0==0 && year1==0 &&month1==0 &&month0==1 &&date1==0&&date0==1)||(year0==0xf && year1==0xf &&month1==0x1 &&month0==0xf &&date1==0x3&&date0==0xf))
if((year1==0 && month1==0 && date1==0)||(year1==0xa5 && month1==0x1f && date1==0x3f)) //070616 modify
{
Password_alarm=TRUE;
}
else
{
val=CompareDate();
if((val==-1) ||( val > DayData[0])) Password_alarm=TRUE;
else
{
if(val!=Oneday)
{
Oneday=val;
DayData[0]=DayData[0]-val;
EepromDayDataWr();
}
Password_alarm=FALSE;
}
}
}
}
void main(void)
{
char bit,i=0,kind=0;
uint loop=0,KK=0,pwloop=0;
uchar tempPW[PASSWORDLENGHT];
val=0;
KeyCode=0;
DispBuffer[0]=CharFont[16];
DispBuffer[1]=CharFont[16];
DispBuffer[2]=CharFont[0];
DispBuffer[3]=CharFont[0];
DispBuffer[4]=CharFont[0];
DispBuffer[5]=0x00;
SI_Count=0;
CLI(); //关中断
init_devices();
// timer0_init();
// FactorySetup();
ModeStatus=MODE_NOMALE;
CurrentKey=KEY_FUNCTION;
BackKey=KEY_FUNCTION;
CurrentKind=KIND0;
K1Count=0;
val_kind=0;
Password_alarm=FALSE;
EepromDateValueRd();
#ifdef VERSION_CONTROL
if(DateValue[0]==0xff && DateValue[1]==0xff && DateValue[2]==0xff && DateValue[3]==0xff ) //070617 mask
#endif
{
FactorySetup();
val_lenght=MINVAL_LENGHT;
EepromICnumberWr();
EepromViewModeWr();
DS1302_Init();
EepromDateValueWr();
EepromDayDataWr();
PasswordCannel();
}
EepromICnumberRd();
EepromViewModeRd();
for(i=MAXVAL_KIND-1;i>=0;i--)
{
if(KindData[i]!=0)
{
i=i+1;
break;
}
}
val_kind=i;
EepromPasswordRd();
if(Password_Enable==TRUE)
{
PasswordProcess();
}
SEI(); //开中断
#ifdef VERSION_CONTROL
WatchDog(7);
#endif
while(1)
{ if(KeyCode==0) KeyCode=PressKeyProcess();
if(KeyCode!=0){
switch(KeyCode)
{
case KEY_UP://k2
if(ModeStatus==MODE_LENGHT)
{
if(val_lenght<MAXVAL_LENGHT)
val_lenght++;
K1Count=5;
}
else if(ModeStatus==MODE_KIND)
{
if(val_kind<MAXVAL_KIND)
{
KindData[val_kind]=TRUE;
val_kind++;
}
else val_kind=0;
}
else if(ModeStatus==MODE_PASSWORD)
{
if(PassDate_flag==PASSWORD_SETUP)
{
if(KK<MAXNUMBER) KK++;
}
else
{
if(KK<MAXDATE) KK++;
}
K1Count=0;
//K4Count=0;
}
break;
case KEY_DOWN://k3
// DS1302_Init();
// ReadTime();
if(ModeStatus==MODE_LENGHT)
{
if(val_lenght>MINVAL_LENGHT)
val_lenght--;
K1Count=5;
}
else if(ModeStatus==MODE_KIND)
{
if(val_kind<MAXVAL_KIND)
{
KindData[val_kind]=FALSE;
val_kind++;
}
else val_kind=0;
}
else if(ModeStatus==MODE_PASSWORD)
{
if(KK>0) KK--;
K1Count=0;
// K4Count=0;
}
break;
case KEY_FUNCTION://k1
BackKey=CurrentKey;
CurrentKey=KEY_FUNCTION;
K1Count++;
switch(ModeStatus)
{
case MODE_NOMALE:
ModeStatus=MODE_LENGHT;
break;
case MODE_LENGHT:
if(K1Count==2)
{
ModeStatus=MODE_KIND;
}
else if(K1Count==7) //base 5
{
K1Count=0;
ModeStatus=MODE_NOMALE;
kind=0;
EepromICnumberWr();
}
break;
case MODE_KIND:
K1Count=0;
ModeStatus=MODE_NOMALE;
kind=0;
EepromViewModeWr();
break;
case MODE_PASSWORD:
if(PassDate_flag==INVALE_SETUP || PassDate_flag==DATE_SETUP)
{
PassDate_flag=DATE_SETUP;
if(K1Count==2)
{
K1Count=0;
ModeStatus=MODE_NOMALE;
kind=0;
DayData[0]=KK;
DayData[1]=0x00;
EepromDayDataWr();
}
}
break;
default:
break;
}
break;
case KEY_K4: //k4
if(ModeStatus==MODE_PASSWORD)
{
if(PassDate_flag==INVALE_SETUP || PassDate_flag==PASSWORD_SETUP){
PassDate_flag=PASSWORD_SETUP;
// if(KK==0 && K4Count>0)
if(K4Count>5)
{
if(Password_Enable==FALSE)
{
K1Count=0;
ModeStatus=MODE_NOMALE;
kind=0;
EepromPasswordWr();
Password_Enable=TRUE;
break;
}
else
{
if(tempPW[0]==PasswordData[0] &&tempPW[1]==PasswordData[1]&&tempPW[2]==PasswordData[2]&&tempPW[3]==PasswordData[3]&&tempPW[4]==PasswordData[4])
{
ModeStatus=MODE_PASSWORD;
PassDate_flag=PASSWORD_SETUP;
PwModify_flag=TRUE;
K1Count=0;
K4Count=0;
KK=0;
break;
}
else
{
if(PwModify_flag==3)
{
EepromPasswordWr();
}
K1Count=0;
ModeStatus=MODE_NOMALE;
kind=0;
break;
}
}
}
K4Count++;
switch(K4Count)
{
case 2: //byte1
PasswordData[0]=KK;
break;
case 3: //byte2
PasswordData[1]=KK;
break;
case 4: //byte3
PasswordData[2]=KK;
break;
case 5: //byte4
PasswordData[3]=KK;
break;
case 6: //byte5
PasswordData[4]=KK;
break;
default:
break;
}
// if(Password_Enable==TRUE && PwModify_flag>=TRUE)
if(Password_Enable==TRUE && PwModify_flag==TRUE) //070616 modify
{
if(K4Count==2 && PasswordData[0]==0x3)
{
ModeStatus=MODE_PASSWORD;
PassDate_flag=PASSWORD_SETUP;
PwModify_flag=3;
K1Count=0;
K4Count=0;
KK=0;
}
else if(K4Count==2 && PasswordData[0]==0x8)
{
ModeStatus=MODE_PASSWORD;
PassDate_flag=DATE_SETUP;
K1Count=0;
K4Count=0;
KK=0;
}
else if(K4Count==3 && PasswordData[0]==38&& PasswordData[1]==83)
{
K1Count=0;
ModeStatus=MODE_NOMALE;
kind=0;
PasswordCannel();
break;
}
}
KK=0;
}
}
break;
case KEY_K1K4RST://k1k4
FactorySetup();
EepromICnumberWr();
EepromViewModeWr();
WatchDog(0);
while(1);
break;
case KEY_K3K4RST: //k3k4
EepromPasswordRd();
PwModify_flag=FALSE;
if(Password_Enable==FALSE)
{
ModeStatus=MODE_PASSWORD;
PassDate_flag=INVALE_SETUP;
K1Count=0;
K4Count=0;
KK=0;
}
else
{
ModeStatus=MODE_PASSWORD;
PassDate_flag=PASSWORD_SETUP;
K1Count=0;
K4Count=0;
for(i=0;i<PASSWORDLENGHT;i++)
tempPW[i]=PasswordData[i];
KK=0;
}
break;
default:
break;
}
KeyCode=0;
if(ModeStatus==MODE_LENGHT)
{
DispBuffer[0]=CharFont[17];
loop=val_lenght;
bit=loop/1000;
DispBuffer[1]=CharFont[bit];
loop=loop-bit *1000;
bit=loop/100;
DispBuffer[2]=CharFont[bit];
loop=loop-bit *100;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
BLenghtCount=val_lenght;
}
else if(ModeStatus==MODE_KIND)
{
DispBuffer[0]=CharFont[0];
loop=val_kind;
DispBuffer[1]=CharFont[16];
bit=loop/100;
DispBuffer[2]=CharFont[bit];
loop=loop-bit *100;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
}
else if(ModeStatus==MODE_PASSWORD)
{
if(PassDate_flag==PASSWORD_SETUP)
{
DispBuffer[0]=CharFont[18];
DispBuffer[2]=CharFont[0];
switch(K4Count)
{
case 1: //byte1
DispBuffer[1]=CharFont[1];
break;
case 2: //byte2
DispBuffer[1]=CharFont[2];
break;
case 3: //byte3
DispBuffer[1]=CharFont[3];
break;
case 4: //byte4
DispBuffer[1]=CharFont[4];
break;
case 5: //byte5
DispBuffer[1]=CharFont[5];
break;
default:
if(PwModify_flag==TRUE) //070616 modify
DispBuffer[1]=CharFont[18];
else if(PwModify_flag==3)//070616 modify
DispBuffer[1]=CharFont[16];
else
DispBuffer[1]=CharFont[6];
break;
}
loop=KK;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
}
else if(PassDate_flag==DATE_SETUP)
{
DispBuffer[0]=CharFont[19];
DispBuffer[1]=CharFont[19];
loop=KK;
bit=loop/100;
DispBuffer[2]=CharFont[bit];
loop=loop-bit *100;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
}
else
{
DispBuffer[0]=CharFont[18];
DispBuffer[1]=CharFont[19];
loop=KK;
bit=loop/100;
DispBuffer[2]=CharFont[bit];
loop=loop-bit *100;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
}
}
else
{
DispBuffer[0]=CharFont[16];
DispBuffer[1]=CharFont[16];
DispBuffer[2]=CharFont[0];
DispBuffer[3]=CharFont[0];
DispBuffer[4]=CharFont[0];
}
DispBuffer[5]=0x00;
}
if(ModeStatus==MODE_NOMALE)
{
if(Password_alarm==FALSE)
{
if(KindData[kind]==TRUE)
{
DispBuffer[0]=CharFont[16];
DispBuffer[1]=CharFont[16];
loop=kind;
bit=loop/100;
DispBuffer[2]=CharFont[bit];
loop=loop-bit *100;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
Display();
SendKindData(kind);
/* for(i=1;i<val_lenght;i++)
{
if(SendKindData(0x0 | 0x80)==1) break;
}
*/
}
kind++;
if(kind>=MAXVAL_KIND)
kind=0;
}
else
{
kind=0;
DispBuffer[0]=CharFont[16];
DispBuffer[1]=CharFont[16];
loop=kind;
bit=loop/100;
DispBuffer[2]=CharFont[bit];
loop=loop-bit *100;
bit=loop/10;
DispBuffer[3]=CharFont[bit];
loop=loop-bit *10;
DispBuffer[4]=CharFont[loop];
Display();
SendKindData(kind);
}
}
/*
KK++;
if(KK>1500)
{KK=0;
ReadTime();
DispBuffer[0]=CharFont[hour1];
DispBuffer[1]=CharFont[hour0];
DispBuffer[2]=CharFont[minute1];
DispBuffer[3]=CharFont[minute0];
DispBuffer[4]=CharFont[second0];
}
*/
Display();
if(pwloop>100)
{
pwloop=0;
if(Password_Enable==TRUE)
{
PasswordProcess();
}
}
else pwloop++;
}
}
void Display(void)
{
PORTD=0xf7;
PORTA=DispBuffer[0];
Delay(10);
PORTD=0xef;
PORTA=DispBuffer[1];
Delay(10);
PORTD=0xdf;
PORTA=DispBuffer[2];
Delay(10);
PORTD=0xbf;
PORTA=DispBuffer[3];
Delay(10);
PORTD=0x7f;
PORTA=DispBuffer[4];
Delay(10);
#ifdef VERSION_CONTROL
/* WDT 复位*/
_WDR();
#endif
}
void Display_Fast(void)
{
PORTD=0xf7;
PORTA=DispBuffer[0];
Delay(1);
PORTD=0xef;
PORTA=DispBuffer[1];
Delay(1);
PORTD=0xdf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -