📄 keyboard1.c
字号:
#include <e:\app\door\soft0814\main.h>
#include <e:\app\door\soft0814\keyboard.h>
#include <e:\app\door\soft0814\MfRc500.h>
#include <iom128v.h>
#include <macros.h>
#include <eeprom.h>
extern unsigned char key_pw[6];
extern unsigned char oldkey_pw[6];
extern unsigned int keycount;
extern unsigned char T2IR;
unsigned char scankey(void)
{
unsigned char keyc;
DDRC=0xff;
SET_KEY0();
SET_KEY1();
SET_KEY2();
SET_KEY3();
CLEAR_KEY4();
CLEAR_KEY5();
CLEAR_KEY6();
DDRA=PORTA=0x0;
delay_us(100);
keyc=PINC;
keyc=keyc<<1;
if(keyc==0x1E)
return 1;
else
return 0;
}
unsigned char keyvalue1(void)
{
unsigned char key1,value;
DDRC=0xFF;
CLEAR_KEY0();
SET_KEY1();
SET_KEY2();
SET_KEY3();
SET_KEY4();
SET_KEY5();
SET_KEY6();
DDRC=PORTC=0;
delay_us(100);
key1=PINC;
key1=key1<<1;
if(key1!=0xfc)
{
delay_ms(18);
key1=PINC;
key1=key1<<1;
if(key1!=0xfc)
{
switch(key1)
{
// case 0xfc:
// value=0xff;
// break;
case 0xdc: // * keyvalue
value=0x0a; // * key
break;
case 0xbc: // 0 keyvalue
value=0x0; // 0 key
break;
case 0x7c: // # keyvalue
value=0x0b; // # key
break;
default:
value=0xff;
break;
}
return value;
}
else return 0xFF;
}
else return 0xFF;
}
unsigned char keyvalue2(void)
{
unsigned char key1,value;
DDRC=0xFF;
SET_KEY0();
CLEAR_KEY1();
SET_KEY2();
SET_KEY3();
SET_KEY4();
SET_KEY5();
SET_KEY6();
DDRC=PORTC=0;
delay_us(100);
key1=PINC;
key1=key1<<1;
if(key1!=0xfa)
{
delay_ms(20);
key1=PINC;
key1=key1<<1;
if(key1!=0xfa)
{
switch(key1)
{
// case 0xfa:
// value=0xff;
// break;
case 0xda: // 7 keyvalue
value=0x07; // 7 key
break;
case 0xba: // 8 keyvalue
value=0x08; // 8 key
break;
case 0x7a: // 9 keyvalue
value=0x09; // 9 key
break;
default:
value=0xff;
break;
}
return value;
}
else return 0xFF;
}
else return 0xFF;
}
unsigned char keyvalue3(void)
{
unsigned char key1,value;
DDRC=0xFF;
SET_KEY0();
SET_KEY1();
CLEAR_KEY2();
SET_KEY3();
SET_KEY4();
SET_KEY5();
SET_KEY6();
DDRC=PORTC=0;
delay_us(100);
key1=PINC;
key1=key1<<1;
if(key1!=0xf6)
{
delay_ms(20);
key1=PINC;
key1=key1<<1;
if(key1!=0xf6)
{
switch(key1)
{
// case 0xf6:
// value=0xff;
// break;
case 0xD6: // 4 keyvalue
value=0x04; // 4 key
break;
case 0xb6: // 5 keyvalue
value=0x05; // 5 key
break;
case 0x76: // 6 keyvalue
value=0x06; // 6 key
break;
default:
value=0xff;
break;
}
return value;
}
else return 0xFF;
}
else return 0xFF;
}
unsigned char keyvalue4(void)
{
unsigned char key1,value;
DDRC=0xFF;
SET_KEY0();
SET_KEY1();
SET_KEY2();
CLEAR_KEY3();
SET_KEY4();
SET_KEY5();
SET_KEY6();
DDRC=PORTC=0;
delay_us(100);
key1=PINC;
key1=key1<<1;
if(key1!=0xee)
{
delay_ms(20);
key1=PINC;
key1=key1<<1;
if(key1!=0xee)
{
switch(key1)
{
// case 0xee:
// value=0xff;
// break;
case 0xce: // 1 keyvalue
value=0x01; // 1 key
break;
case 0xae: // 2 keyvalue
value=0x02; // 2 key
break;
case 0x6e: // 3 keyvalue
value=0x03; // 3 key
break;
default:
value=0xff;
break;
}
return value;
}
else return 0xFF;
}
else return 0xFF;
}
unsigned char keyvalue(void)
{
unsigned char cc1,cc2,cc3,cc4;
cc1=keyvalue1();
cc2=keyvalue2();
cc3=keyvalue3();
cc4=keyvalue4();
if(cc4!=0xff)
return cc4;
if(cc3!=0xff)
return cc3;
if(cc2!=0xff)
return cc2;
if(cc1!=0xff)
return cc1;
return 0xff;
}
unsigned char get_pw(void)
{
unsigned char i=0,st,y;
unsigned int j;
// unsigned long ll=0;
ll:
while(i<6)
{
// if(ll>6500)
// goto ll0;
st=scankey();
if(st==0)
{
// for(j=0;j<20000;j++);
y=keyvalue();
if(y==0xff)
goto ll;
if(y>=0x0a)
goto ll;
// break;
key_pw[i]=y;
while(!scankey())
{;}
// for(j=0;j<80000;j++);
// ll++;
i++;
}
}
return 1;
// ll0:
// return 0;
// beep();
}
void delay1(unsigned char second)
{
unsigned char i;
unsigned int j;
for(i=0;i<second;i++)
for(j=0;j<65000;j++);
}
unsigned char CMP_STRING(unsigned char *pt1,
unsigned char *pt2,unsigned char len)
{
unsigned char ct; // fixed lenth 4.
for (ct=0;ct<len;ct++)
{
if (*pt1++ != *pt2++)
return 1;
}
return 0; // equal return 0.
}
unsigned char CMP_PW(unsigned char password)
{
unsigned char i;
for(i=0;i<6;i++)
oldkey_pw[i]=EEPROMread(password+i);
if(CMP_STRING(oldkey_pw,key_pw,6)==1)
return 1;
return 0;
}
void delay_us(int time)
{
do
time--;
while(time>1);
}
void delay_ms(unsigned int time)
{
while(time!=0)
{
delay_us(1000);
time--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -