📄 mjdata.c.bak
字号:
//#include <pic.h>
//#include <pic1687x.h>
//#include "DJ485headB.h"
//#include <conio.h> //模拟232用
//24LC04的读写
//11-25 号的程序在原来的基础上把24LC04Q增加了读写EE32/08的功能,并增加删除卡程序,和读进行来卡号处理程序等
//11-27 做了点测试看一下读写EE32和08的效果,并增加了08到32的子程序
#include "config.H"
bank1 char c485Buf[35];
//bank1 char testbuf[01];
//bank1 char cData[10];
unsigned char BJCardBuf[3];//比较EEPROM中的卡号用的缓存
unsigned char testbuf[2];
uint8 KeyBuf[8];//按键的值的缓存
uint16 BJReAddr ;//返回的地址
//uchar LKCOUNT ; //放置联网控制器的数量
uint16 ts;
#define MASTER
unsigned char read[10];//读缓存
uint8 write[10];//写缓存
//24l04
uchar EEType;//存储器的类型
void delay1ms(char count);
void IOINT(void); //IO口初始化
//void Key(void);
//bank1 char cTest[10];
//char tbuf=0;
//char test=0;
/*unsigned char i,bbt[9];
const unsigned char KKB[8]= {
0x00, 0x02,0x01 ,0x01 ,0x00 ,0xA2 , 0X0E ,0X00} ;
const unsigned char KKE[8]= {
0x00, 0x02,0x01 ,0x01 ,0x00 ,0xA3 , 0X0E ,0X00} ;
char cPacketReady;
char cLenOfData;
char cCmd, c;
*/
//char LCDDATA ;
uint16 testlend;
//bit SHOUDAO=0X00; //收到连接
bit bj=0;
extern bit err_flag;
//0x01; //默认是自动连接测试,否则是手动连接
//1为自动运行,0为手动运行
/* 汉字:欢迎使用门禁数据处理系统! */
const unsigned char HZ_HYSY[26] = {
0XBB, 0XB6, 0XD3, 0XAD, 0XCA, 0XB9, 0XD3, 0XC3, 0XC3, 0XC5, 0XBD, 0XFB, 0XCA, 0XFD, 0XBE, 0XDD, 0XB4, 0XA6, 0XC0, 0XED, 0XCF, 0XB5, 0XCD, 0XB3, 0XA3, 0XA1
};
/* 汉字:请输入指纹 */
const unsigned char HZ_QSLZW[10] = {
0XC7, 0XEB, 0XCA, 0XE4, 0XC8, 0XEB, 0XD6, 0XB8, 0XCE, 0XC6
};
/* 汉字:删除成功! */
const unsigned char HZ_SCCG[10] = {
0XC9, 0XBE, 0XB3, 0XFD, 0XB3, 0XC9, 0XB9, 0XA6, 0XA3, 0XA1
};
/* 汉字:找不到卡号! */
const unsigned char HZ_ZBDKH[12] = {
0XD5, 0XD2, 0XB2, 0XBB, 0XB5, 0XBD, 0XBF, 0XA8, 0XBA, 0XC5, 0XA3, 0XA1
};
/* 汉字:请确认卡号 */
const unsigned char HZ_QQRKH[10] = {
0XC7, 0XEB, 0XC8, 0XB7, 0XC8, 0XCF, 0XBF, 0XA8, 0XBA, 0XC5
};
/* 汉字:找到卡号 */
const unsigned char HZ_ZDKH[8] = {
0XD5, 0XD2, 0XB5, 0XBD, 0XBF, 0XA8, 0XBA, 0XC5
};
//写数据函数要求的参数为
//写放数据的数量,和地址指纹
/* 汉字:删卡请按1 复制请按2 */
const unsigned char HZ_SKFZ[24] = {
0XC9, 0XBE, 0XBF, 0XA8, 0XC7, 0XEB, 0XB0, 0XB4, 0XA3, 0XB1, 0XA1, 0XA0, 0XA1, 0XA0, 0XB8, 0XB4, 0XD6, 0XC6, 0XC7, 0XEB, 0XB0, 0XB4, 0XA3, 0XB2
};
/* 汉字:08到32请按3 修复请按4 */
const unsigned char HZ_832CF[28] = {
0XA3, 0XB0, 0XA3, 0XB8, 0XB5, 0XBD, 0XA3, 0XB3, 0XA3, 0XB2, 0XC7, 0XEB, 0XB0, 0XB4, 0XA3, 0XB3, 0XA1, 0XA0, 0XD0, 0XDE, 0XB8, 0XB4, 0XC7, 0XEB, 0XB0, 0XB4, 0XA3, 0XB4
};
uint8 writeeeprom(uint8 Len,uint16 StartAddr,uint8 *WriteBuf )
{
uint16 i;
uint8 k;
if (Len<30||(Len!=0))
{
for(i=0;i<Len;i++)
{
WriteDate=*WriteBuf;
nop;
nop;
iic_write(StartAddr);
nop;
delay1ms(10);
if(err_flag==1)
{
SDA=1;
SCL=1;
return NOT_OK;
break;
}
WriteBuf++;
StartAddr++;
}
return OK ;
}
else return NOT_OK;
/*
uint16 c ;//联控制数据的计数
uint16 d=0;
for ( c = 1; c < testlend; c++ )
{
WriteDate=0xff;
iic_write(d); // 址址与数量
nop;
nop;
delay1ms(10);
if(err_flag==1)
{
SDA=0;
SCL=0;
break;
}
d++;
}
*/
//
}
void readeeprom(uint8 ReadLen ,uint16 ReadAddr )
{
uint16 i,k;
if(ReadLen!=0)
{
for (i=0;i<ReadLen;i++)
{
read[i]=iic_read(ReadAddr);
ReadAddr++;
}
}
}
void delay1ms(uchar count)
{
// int i,j;
uchar i,j;
for(i=0;i<count;i++)
for(j=0;j<130;j++)
;
}
/* 查找EERPOM中是否有与缓存中相同的数量 */
//如果找到有相同的卡就返回地址和返回找到成功,如果
//没有就返回失败的指令
//形参是储存器的类型和比较卡的缓存
uchar BJ_EE_Card(uchar EEType,uchar *BJ_EE_Buf)
{
//如果EEPROM的类型是08的话
//uchar Buf[3];//数据缓存
//22 12 32 23 23 11
//11 22 22 23 22 33
uint16 i,j;//
if(EEType==8)
{
for(i=0;i<MAX24LC08;i=i+16)
{
for (j=i;j<(i+15);j=j+3)
if(iic_read(j)==BJ_EE_Buf[0] && iic_read(j+1)==BJ_EE_Buf[1] && iic_read(j+2)==BJ_EE_Buf[2])
{
nop;
BJReAddr = j;
return BJ_OK;
}
}
}
/*
if(EEType==8)
{
for(i=0;i<MAX24LC08;i=i+16)
{
for (j=i;j<(i+15);j=j+3)
if(iic_read(j)==BJCardBuf[0] && iic_read(j+1)==BJCardBuf[1] && iic_read(j+2)==BJCardBuf[2])
{
nop;
BJReAddr = j;
return BJ_OK;
}
}
}
*/
else if(EEType==32)
{
nop;
}
return BJ_Full;
}
//删除掉缓存中的卡
uchar DELOneCard(uint16 AdddrBuf)
{
BJCardBuf[0]=0xff;
BJCardBuf[1]=0xff;
BJCardBuf[2]=0Xff;
writeeeprom(3,AdddrBuf,BJCardBuf);
}
//把按键输入的8位数据处理成三个门禁的字节
void Key( ) //按键值处理
{
uint32 Buf;//键值处理缓存
BJCardBuf[0]=KeyBuf[0]*100+KeyBuf[1]*10+KeyBuf[2];
nop;
Buf=(KeyBuf[3]*10000+KeyBuf[4]*1000+KeyBuf[5]*100)+KeyBuf[6]*10+KeyBuf[7];
nop;
BJCardBuf[2]=Buf%256;
BJCardBuf[1]=Buf>>8;
nop;
}
//把08的数据复制到32中,并把0F的数据改为32
void Copy08to32(void)
{
uint16 i;
for(i=0;i<MAX24LC08;i++)
{
EEType=EE8;
WriteDate=iic_read(i);
EEType=EE32;
iic_write(i);
}
//写完数据后把08改为32
EEType=EE32;
WriteDate=0x32;
iic_write(0x0f);
}
void IOINT(void) //IO口初始化
{
ADCON1 = 0x07;
/*
TRISA=0X28;
TRISB=0X00;
TRISC=0XC4;
TRISD=0X00;
TRISE=0X07;
*/
//RA口定义
//RA0 RA1 RA2 LCD使用
TRISA=0X28;
//RB口定义
/* RB2 RB1 RB0
RB3 1 2 3
RB4 4 5 6
RB5 7 8 9
RB6 取消 0 确认
*/
TRISB=0XF8;
//RC口定义
// RC0 DATA
// RC1 SCL 待写芯片
//RC2 DATA
//RC3 SCL 母片位置
//RC4 RFDATA 未用
//RC5 BEEP
//RC6 RC7 串口通讯
TRISC=0XDF;
//RD口定义
//RD LCD 数据
TRISD=0X00;
}
void main(void)
{
// SHOUDAO=0;
IOINT();
Lcdint();
asm("NOP");
asm("NOP");
EEType=EE8;
KeyBuf[0]=0;
KeyBuf[1]=2;
KeyBuf[2]=6;
KeyBuf[3]=1;
KeyBuf[4]=2;
KeyBuf[5]=4;
KeyBuf[6]=5;
KeyBuf[7]=4;
Key();
//LcdFuc2(26,&HZ_HYSY); //欢迎界面
//delay1ms(1000);
//LcdFuc2(24,&HZ_SKFZ); //删除卡和复制
nop;
//delay1ms(1000);
//LcdFuc2(28,&HZ_832CF); // 修复
// Setup();
SDA_IO=1;
SCL_IO=1;
SDA=1;
SCL=1;
delay1ms(0x50);
asm("NOP");
// iic_write(0X00); // 址址与数量
testlend=360;
// readeeprom();
for (ts=0;ts<10;ts++)
{
write[ts]=ts;
}
nop;
readeeprom(10,0);
nop;
nop;
nop;
BJCardBuf[0]=0x04;
BJCardBuf[1]=0x05;
BJCardBuf[2]=0x06;
//BJReAddr=0X3F8;
//DELOneCard(BJReAddr);
//writeeeprom(3,252,BJCardBuf);
nop;
nop;
// readeeprom();
nop;
if(BJ_EE_Card(8,BJCardBuf)==BJ_OK)
{nop;
nop;
LcdFuc2(8,&HZ_ZDKH);
nop;
nop;
DELOneCard(BJReAddr);
nop;
nop;
LcdFuc2(8,&HZ_SCCG); //删除卡成功!
nop;
nop;
while(1);
}
else
{
LcdFuc2(12,&HZ_ZBDKH);
while(1);
}
nop;
nop;
SDA_IO=0;
SCL_IO=0;
SDA=0;
SCL=0;
asm("NOP");
asm("NOP");
LcdFuc2(10,&HZ_QQRKH);//请输入指纹
while(1)
{}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -