📄 main.c
字号:
#include <REGX52.H>
#include <absacc.h>
#include <intrins.h>
//测试通过
//#define TIME10 600
//#define TIME05 300
//#define TIME00 80
#define BEEP P1_3
#define BITIN !bitin;
#define INPORT P1_0 //天线引脚
unsigned int TIME05=260; //0.5P脉宽 =256us
unsigned int TIME10=550; //1P脉宽 =512us
unsigned int TIME00=50; //最小脉宽
unsigned char TT=0; //延时参数
unsigned char Buff[30]; //接收缓冲
bit bitin; //波形暂存
unsigned char readbit() //波形转换
{
unsigned int mk=500;
TL0=TH0=0;
TR0=1;
while(mk--)
if(bitin!=INPORT) //电平变化
break;
TR0=0;
if(mk==0)
return 0; //超时错误
bitin=INPORT;
mk=TH0*256+TL0; //脉宽,
if((mk>TIME05)&&(mk<=TIME10))
return 1; //1P
if((mk>=TIME00)&&(mk<=TIME05))
return 2; //0.5P
return 0;
}
unsigned char readdata() //读位操作
{
switch(readbit())
{
case 1: //1T
return BITIN;
case 2: //0.5T
if(readbit()!=2) return 2; //等待另一0.5P
return BITIN;
default:
return 2;
}
}
bit CheckData()
{
unsigned char i,j;
bitin=INPORT;
//if(readdata()!=0)
// return 0;
for(i=0;i<9;i++)
{
if(readdata()!=1) //数据帧头9个1
return 0;
}
//数据
for(i=0;i<11;i++)
{
Buff[i]=0x00;
for(j=0;j<5;j++)
{
Buff[i]<<=1;
switch(readdata()) //数据装载
{
case 0: //0
break;
case 1: //1
Buff[i]|=0x08;
break;
case 2: //err
return 0;
}
}
}
P1_0=!P1_0;
P1_1=!P1_1;
//结束位
if(Buff[10]&0x08!=0x00)
return 0;
//*
//行奇校验位
for(i=0;i<10;i++)
if((((Buff[i]>>4) ^
(Buff[i]>>3) ^
(Buff[i]>>2) ^
(Buff[i]>>1) ^
Buff[i])&0x08)!=0)
return 0;
//列奇校验位
j=0;
for(i=0;i<11;i++)
j=j ^ (Buff[i]&0x80);
if(j!=0)
return 0;
for(i=0;i<11;i++)
j=j ^ (Buff[i]&0x40);
if(j!=0)
return 0;
for(i=0;i<11;i++)
j=j ^ (Buff[i]&0x20);
if(j!=0)
return 0;
for(i=0;i<11;i++)
j=j ^ (Buff[i]&0x10);
if(j!=0)
return 0;//*/
return 1;
}
bit ReadCardNo() //读取卡号
{
unsigned char i=10;
unsigned char j;
bitin=INPORT;
for(i=90;i&&bitin==INPORT;i--);
if(!i)return 0;
for(i=0;i<20;i=i+2)
{
if(CheckData())
{
//Buff[1]=0x22;
//Buff[2]=i;
return 1;
}
else
{
j=TT+i;
while(j--);
}
}
return 0;
}
void Sound(void)
{unsigned int a;
BEEP=0;
for(a=0;a<20000;a++);
BEEP=1;
}
void main(void)
{Sound();
while(1)
{ if(ReadCardNo()) Sound();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -