门禁的配件差不多买回来了。at89s52要二十块,24c02要十块,7805要5块,洞洞板一小块要十块,id读卡器45块。唉,什么都贵死了。
光这个的价格就可以买个好的单门门禁了。但是制作的乐趣却是买不到的,
上次的IIC和韦根26的程序从这里打开:http://www.51hei.com/mcu/1231.html
累啊!脑力劳动比体力劳动要累多了!写得并调式好几个程序花了我不少精力,打字都嫌累了,贴上几个程序:
/*////////////////////////////////////
函数原型:
函数说明:串口接收中断
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
void ser() interrupt 4
{
RI=0;
z=SBUF;
ai=1;
}
/*////////////////////////////////////
函数原型:void sound(uchar a)
函数说明:蜂鸣器发声,a为需要发出多少次DIDI音
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
void sound(uchar a)
{
uchar x,y;
for(;a>0;a--)
{
for(x=255;x>0;x--)
{
beep=0;
for(y=150;y>0;y--)
beep=1;
beep=0;
}
ysms(500);
}
}
void ysms(unsigned int x)
{
unsigned int a;
unsigned int b;
for(a=x;a>0;a--)
{
for(b=50;b>0;b--);
}
}
/*////////////////////////////////////
函数原型:void inscard(void)
函数说明:存入卡号到EEPROM
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
void inscard(void)
{
while(1)
{
if(re())
{
if(iscard()==0)//如果没有这卡号/
{
uchar a,b;
b=ckdz(); //查找空置/
for(a=3;a<6;a++)
{
wt24c(b,WG[a]);
ys100us(1000);
b++;
}
// wt24c(0,b);
ys100us(1000);
sound(1);
break;
}
sound(2);
break;
}
if(key()==12)
{
sound(1);
break;
}
}
}
/*////////////////////////////////////
函数原型:void delcard(void)
函数说明:从EEPROM中删除卡号
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
void delcard(void)
{
while(1)
{
if(re())
{
if(iscard()!=0) //如果有这张卡号/
{
uchar a,b;
b=iscard(); //查找空置/
for(a=0;a<3;a++)
{
wt24c(b,0xff);
ys100us(1000);
b=b+1;
}
// wt24c(0,b);
ys100us(1000);
sound(1);
break;
}
sound(2);
break;
}
if(key()==12)
{
sound(2);
break;
}
}
}
/*////////////////////////////////////
函数原型:uchar iscard(void)
函数说明:查找是否有此卡
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
uchar iscard(void)
{
uchar a,b;
for(a=8;a<128;a++)
{
if(rd24c(a)==WG[3])
{
a++;
if(rd24c(a)==WG[4])
{
a++;
if(rd24c(a)==WG[5])
{
b=a-2;
return b;
}
}
}
if(a==127)return 0;
}
}
/*////////////////////////////////////
函数原型:uchar ckdz(void)
函数说明:查找EEPROM的空白位置地址
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
uchar ckdz(void)//查空地址/
{
uchar a,b,c;
for(a=2;a<126;a++)
{
c=a;
c++;
if(rd24c(a)==0xff)
{
a++;
if(rd24c(a)==0xff)
{
a++;
if(rd24c(a)==0xff)
{
b=a-2;
return b;
}
}
}
if(c==126)return 0xff;
}
}
/*////////////////////////////////////
函数原型:void readcard(void)
函数说明:读卡正确
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
void readcard(void)
{
if(re())
{
if(iscard()!=0)
{
SEND(&WG[0]);
open();
}sound(2);
}
}
/*////////////////////////////////////
函数原型:void open(void)
函数说明:打开
版本:V1.0.0
程序员:LIY12586
////////////////////////////////////*/
void open(void)
{
//out=0;
SEND(&WG[0]);
sound(1);
ysms(10000);
//out=1;
}
