📄 hhh.txt
字号:
if(temp>=0x80)bit_fans=1;
else bit_fans=0;
temp=buf2[0]<<5;
if(temp>=0x80)bit_baoj=1;
else bit_baoj=0;
temp=buf2[0]<<6;
if(temp>=0x80) bit_guas=1;
else bit_guas=0;
}
//*******************************************
void Working()/////此函数完成读卡并处理信息的所有功能
{
unsigned int a;
unsigned char aaa;
unsigned char tm2[6];
unsigned char time[5];
unsigned int m,nn,ff;
unsigned char p[5];
PwmRun();
a=0;
p[0]=0x88; //读卡密码
p[1]=0x88;
p[2]=0x88;
p[3]=0x88; //readi2c(26);
//********************************
//********************************
while(1)//开始读卡
{
Aor_Wake_up(p);
delay_ms(30);
a++;
if(Read_Card(buf1,buf2)==1) // Read_Card(buf1,buf2)==1 只读一次卡 Read_Car(buf2)==1
{
// LED_BLUE=0;
// LED_RED=1;
decrypt();//解密 // buf1存已经解密后数据, buf2为原始数据
goto looop;
for(a=0;a<5;a++) tm1[a]=buf1[5+a]; //
for(a=0;a<5;a++) tm2[a]=buf1[11+a]; //
if((readi2c(0)==buf1[17])&&(readi2c(1)==buf1[18])&&(readi2c(2)==buf1[19])&&(readi2c(3)==buf1[20]))//判断酒店代号相同
{PwmStop();break;}
else
{if ( (buf1[0]==0x01) || (buf1[0]==0x03) ) //初始化卡 设置卡处理
{
if(((readi2c(0)==0x00)&&(readi2c(1)==0x00))||((readi2c(0)==0xff)&&(readi2c(1)==0xff))||((readi2c(0)==buf1[17])&&(readi2c(1)==buf1[18]))) //第一次使用
{
if(((readi2c(2)==0x00)&&(readi2c(3)==0x00))||((readi2c(2)==0xff)&&(readi2c(3)==0xff))||((readi2c(2)==buf1[19])&&(readi2c(3)==buf1[20]))) //客户号相同或为初始状态
{writei2c(0,buf1[17]); //代理商号
writei2c(1,buf1[18]);
writei2c(2,buf1[19]); //用户号
writei2c(3,buf1[20]);
writei2c(4,buf1[2]); //房地址
writei2c(5,buf1[3]);
writei2c(6,buf1[4]);
writei2c(7,buf1[1]);
for(a=8;a<70;a++) writei2c(a,0x00);
if((readi2c(4)==buf1[2])&&(readi2c(5)==buf1[3])&&(readi2c(6)==buf1[4])&&(readi2c(7)==buf1[1]))
{Beetmap(1);PwmStop();goto L;}
else {Beetmap(8);PwmStop();goto L;} //写2416错了8声报警返回
for(a=0;a<3;a++)////写入时间
{
SetTime(tm1);
delay_us(500);
for(c=0;c<6;c++)time[c]=0;
GetTime(time);
if((time[0]==buf1[5])&&(time[1]==buf1[6])&&(time[2]==buf1[7])&&(time[3]==buf1[8])&&(time[4]==buf1[9]))
{
Beetmap(1);
goto L;
}
}
if(a>=3)
{
Beetmap(7); //写入时间不对
goto L;
}
}
}
}
Beetmap(6);
PwmStop();
goto L;
}
}
if(a>=40){a=0;PwmStop(); goto L;}
}
looop:
switch (buf1[0]) //卡类型
{
case 0x01://设置卡
{
for(a=0;a<5;a++)////写入时间
{
SetTime(tm1);
for(c=0;c<6;c++)
time[c]=0;
GetTime(time);
if((time[0]==buf1[5])&&(time[1]==buf1[6])&&(time[2]==
buf1[7])&&(time[3]==buf1[8])&&(time[4]==buf1[9])&&(a<3))goto M;
if(a>=3)
{
Beetmap(7);
break;
}
}
M:
writei2c(4,buf1[2]); //房地址
writei2c(5,buf1[3]);
writei2c(6,buf1[4]);
writei2c(7,buf1[1]);
for(a=8;a<70;a++) writei2c(a,0x00);
Beetmap(1);
break;
}
case 0x02:///时间设置卡
{
for(a=0;a<3;a++)////写入时间
{
SetTime(tm1);
delay_us(500);
for(c=0; c<6; c++) time[c]=0;
GetTime(time);
if((time[0]==buf1[5])&&(time[1]==buf1[6])&&(time[2]==buf1[7])&&(time[3]==buf1[8])&&(time[4]==buf1[9]))
{
Beetmap(1);
break;
}
}
if(a>=3)
{
Beetmap(7);
break;
}
}
case 0x03://///////////宾客卡//////////////////////////////////////////
{
if(Timecp(tm2)==0) //判断退房时间
{
Beetmap(4); //时间过期 OK
break;
}
if(EndTime(0x03)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if((buf1[2]==readi2c(4))&&(buf1[3]==readi2c(5))&&(buf1[4]==readi2c(6))) //判断房号
{
if(bit_krkm==0) //限制房间 限制客人卡开门志位
{
Beetmap(5);
break;
}
if(bit_fans==0) //反锁是否开门 OK
{if(K2==0) //反锁
{
Beetmap(2);
break;
}
}
LockOpen();
for(m=0;m<3000;m++)
{
if(K1==0) //门未关好
{jilu(buf1[22],buf1[23],buf1[24]);break;}
delay_ms(1);
}
LockClose();
//门未关好报警
break;
}
else {Beetmap(3);break;} //房号不对 OK
}
case 0x04: //办公卡
{ if(Timecp(tm2)==0) //判断退房时间
{
Beetmap(4); //时间过期
break;
}
if(EndTime(0x04)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if((buf1[2]==readi2c(4))&&(buf1[3]==readi2c(5))&&(buf1[4]==readi2c(6))) //判断房号
{
if(bit_fans==0) //反锁是否开门
{if(K2==0) //反锁
{
Beetmap(2);
break;
}
}
if(gai==1)
LockOpen();
else
{ Beetmap(1); LockClose(); }
jilu(buf1[22],buf1[23],buf1[24]);
}
else {Beetmap(3);break;} //房号不对
break;
}
case 0x05: //楼层卡
{ if(EndTime(0x05)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if((buf1[2]==readi2c(4))&&(buf1[3]==readi2c(5))&&(buf1[1]==readi2c(7))) //判断层号
{
if(bit_fans==0) //反锁是否开门
{if(K2==0) //反锁
{
Beetmap(2);
break;
}
}
LockOpen();
for(m=0;m<3000;m++)
{
if(K1==0)
{jilu(buf1[22],buf1[23],buf1[24]);break;}
delay_ms(1);
}
LockClose();
//门未关好报警
break;
}
else {Beetmap(3);break;} //房号不对
break;
}
case 0x06: //楼号卡
{ if(EndTime(0x06)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if(buf1[2]==readi2c(4)) //判断懂号
{
if(bit_fans==0) //反锁是否开门
{if(K2==0) //反锁
{
Beetmap(2);
break;
}
}
LockOpen();
for(m=0;m<3000;m++)
{
if(K1==0)
{jilu(buf1[22],buf1[23],buf1[24]);break;}
delay_ms(1);
}
LockClose();
//门未关好报警
break;
}
else {Beetmap(3);break;} //房号不对
break;
}
case 0x07: //区域卡
{ if(EndTime(0x07)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if(buf1[1]==readi2c(7)) //判断区域号
{
if(bit_fans==0) //反锁是否开门
{if(K2==0) //反锁
{
Beetmap(2);
break;
}
}
LockOpen();
for(m=0;m<3000;m++)
{
if(K1==0)
{jilu(buf1[22],buf1[23],buf1[24]);break;}
delay_ms(1);
}
LockClose();
//门未关好报警
break;
}
else {Beetmap(3);break;} //房号不对
break;
}
case 0x08: //总控卡
{ if(EndTime(0x08)==0) //判断挂失时间
{
Beetmap(4);
break;
}
LockOpen();
for(m=0;m<3000;m++)
{
if(K1==0)
{jilu(buf1[22],buf1[23],buf1[24]);break;}
delay_ms(1);
}
LockClose();
break;
}
case 0x09: //应急卡
{
if(EndTime(0x09)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if(gai==1)
LockOpen();
else
{ Beetmap(1); LockClose(); }
//LockOpen(); //开门
jilu(buf1[22],buf1[23],buf1[24]); //记录
break;
}
case 0x0a: //限制卡 退房卡
{
if(EndTime(0x0a)==0) //判断挂失时间
{
Beetmap(4);
break;
}
if (bit_krkm==0){bit_krkm=1;Beetmap(1);break;}
else {bit_krkm=0;Beetmap(1);break;}
}
case 0x0b:////通讯卡
{
ff=0;
Beetmap(2);
putchar(0x99);
while(1)
{
m=GetData();
putchar(m);
if(m<108)
{
ff=0;
mm=0;
for(nn=0;nn<10;nn++)
{
aaa=nn; //aaa=readi2c(m*10+100+nn);
//PutBit(aaa);
Write_block(aaa);
mm+=a;
}
// PutBit(mm);
Write_block(mm);
}
else {ff++;if(ff>=250)goto L;}
}
break;
}
default : Beetmap(10);break; //卡类型不对
}
L:
// Dinayuanchx(); //低压告警
// LED_BLUE=0;
SystemStop();
}
//****************************
//*****************************
//*****************************
unsigned char bianl;
unsigned char bianl2;
unsigned char bbbb;
//******************************
//*****************************
//*****************************
interrupt [7] Wod(void)//看门狗中断处理函数
{
bianl=0;
DDRD.3=1;
DDRC.5=0;
PORTC.5=1;
for(bbbb=0;bbbb<5;bbbb++)///////发送5个脉冲信号
{
PORTD.3=1;
NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
PORTD.3=0;
NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
}
while(PINC.5==0)bianl++;////////判断有没有阻宜信息
if(bianl<bianl2-1){message=1;bianl2=bianl;}///有阻宜信息message=1
else {bianl2=bianl;message=0;} //没阻宜message=0
}
//*******************************
//发送一组数据到手持机
void Write_block1(unsigned char *p)
{
unsigned char m, n;
unsigned char bbf1;
// nopthe=1;
write_bit3(0);
for(n=0;n<10;n++)
{ bbf1=p[n];
for(m=0;m<8;m++)
{
if(((bbf1>>m)%2)==1)write_bit3(1);
else write_bit3(0);
}
}
/*
for(m=0;m<8;m++)
{
if(((p>>m)%2)==1)write_bit3(1);
else write_bit3(0);
} */
// nopthe=0;
}
//*******************************
//*******************************
void main()
{
unsigned int m;
unsigned char n;
unsigned char pp[16];
SystemInit();
UCSR0A=0x00; //USART0初始化,波特率9600Hz,8个数据位,1个停止位,无奇偶校验,无中断使能
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00; //波特率
UBRR0L=0x33; //
// putchar(0x88);
for(n=0;n<16;n++)
{
pp[n]=n;
}
mep=1;
delay_ms(500);
mep=0;
delay_ms(90);
mep=1;
delay_ms(90);
mep=0;
while(1)
{
Write_block1(pp);
delay_ms(50);
/*
Write_block1(0x33);
delay_ms(50);
Write_block1(0x03);
delay_ms(10);
Write_block1(0x04);
delay_ms(10);
Write_block1(0x05);
delay_ms(10);
Write_block1(0x06);
delay_ms(10);
Write_block1(0x07);
delay_ms(10);
Write_block1(0x08);
delay_ms(10);
Write_block1(0x09);
delay_ms(10);
Write_block1(0x0a);
delay_ms(10);
*/
/*
if(message==1)////卡进入感应区
{
SystemInit();
// LED_RED=0;
Wog_Disable();
Working();///处理卡上信息
//Beetmap(1);
}
SystemStop();///转入睡眠
Wog_Enable();
sleep_enable();
powerdown();
*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -