📄 dianzimimasuo.c
字号:
#include<reg52.h>
#include<intrins.h>
// #include<c02.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P3^2;
sbit cs=P2^7;
sbit dat=P3^6;
sbit clk=P3^7;
sbit bill=P1^6;
// #ifndef _24c02_H_
// #define _24c02_H_ //24c02驱动程序
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
sbit SDA=P3^5;
sbit SCK=P3^4;
void delay10ms(void)
{unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void DelayWait()
{ _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void Start_Cond()
{ SDA=1;
DelayWait();
SCK=1;
DelayWait();
SDA=0;
DelayWait();
SCK=0;
}
void Stop_Cond()
{ SDA=0;
DelayWait();
SCK=1;
DelayWait();
SDA=1;
DelayWait();
SCK=0;
}
void Ack()
{ SDA=0;
SCK=1;
DelayWait();
SCK=0;
DelayWait();
}
void NoAck()
{ unsigned char i;
SDA=1;
_nop_();
SCK=1;
DelayWait();
while((SDA==1)&&(i<250))i++;
SCK=0;
DelayWait();
}
bit Write8Bit(unsigned char input)
{ unsigned char i;
for(i=0;i<8;i++)
{ SCK=0;
input<<=1;
SDA=CY;
DelayWait();
SCK=1;
DelayWait();
SCK=0;
}
SCK=0;
DelayWait();
SDA=1;
DelayWait();
return(CY);
}
unsigned char Read8Bit()
{ unsigned char i,j=0;
SCK=0;
DelayWait();
SDA=1;
DelayWait();
for(i=8;i!=0;i--)
{ SCK=1;
DelayWait();
j=(j<<1)|SDA;
SCK=0;
DelayWait();
}
return j;
}
unsigned char Read_one_Flash(unsigned char nAddr)
{ unsigned char Data;
Start_Cond();
Write8Bit(WriteDeviceAddress);
NoAck();
Write8Bit(nAddr);
NoAck();
Start_Cond();
DelayWait();
Write8Bit(ReadDeviceAddress);
NoAck();
Data=Read8Bit();
Stop_Cond();
return(Data);
}
void Write_one_Flash(unsigned char nAddr,unsigned char Data)
{ Start_Cond();
Write8Bit(WriteDeviceAddress);
NoAck();
Write8Bit(nAddr);
NoAck();
Write8Bit(Data);
NoAck();
Stop_Cond();
}
void Read_Flash(unsigned char *nContent,unsigned char nAddr,unsigned char nLen)
{ unsigned char count;
for(count=0;count<nLen;count++)
{*(nContent+count)=Read_one_Flash (nAddr+count);}
}
void Write_Flash(unsigned char *nContent,unsigned char nAddr,unsigned char nLen)
{ unsigned char temp;
unsigned char count;
for(count=0;count<nLen;count++)
{temp=*(nContent+count);
Write_one_Flash((nAddr+count),temp);
delay10ms();
delay10ms();
}
}
// #endif
uchar b[6]={0x01,0x02,0x03,0x04,0x05,0x06},c[6]={0x02,0x03,0x04,0x05,0x06,0x07};
uchar *q,*r,count;
void first(void)
{ q=b;r=c;
Write_Flash(q,0x00,6);
Write_Flash(r,0x06,6);
}
void delayus(uchar i)
{uchar j;
do
{for(j=0;j<8;j++);
}while(i--);
}
void delayms(uchar i)
{uint j;
do
{for(j=0;j<333;j++);
}while(i--);
}
void bill1(void)//输入密码正确
{ uchar i=2;
while(i)
{ delayms(22);
delayms(22);
bill=0;
delayms(22);
delayms(22);
bill=1;
--i;
}
}
void bill2(void)//输入密码错误
{ uchar i=10;
while(i)
{ delayms(7);
delayms(7);
bill=0;
delayms(7);
delayms(7);
bill=1;
--i;
}
}
void send(uchar j)
{uchar i;
clk=0;
delayus(5);
for(i=0;i<8;i++)
{if(j&0x80)
dat=1;
else
dat=0;
clk=1;
delayus(1);
clk=0;
delayus(1);
j=j<<1;
}
dat=0;
return;
}
uchar receive()
{ uchar i,j;
j=1;
clk=0;
dat=1;
delayus(5);
for(i=0;i<8;i++)
{ clk=1;
delayus(1);
j=j*2;
if(dat)
j|=0x01;
clk=0;
delayus(1);
}
dat=0;
return j;
}
bit compare(uchar *string1,uchar *string2)
{uchar t;
for(t=0;t<6;t++)
{if(string1[t]!=string2[t])
return(0);
}
return(1);
}
void main()
{bit js,k,jp;
uchar i,keynum,s;
uchar a[7],d[6],*p,*u;
first();
p=a;u=d;
Read_Flash(u,0x06,6);
count=0;
k=0;
cs=1;
key=1;
clk=0;
dat=0;
delayms(25);
cs=0;
send(0xa4);
cs=1;
while(1)
{ for(count=0;count<7;count++)
{ if(key==0)
{ cs=0;
send(0x15);
keynum=receive();
cs=1;
switch(keynum)
{ case 0x1e: i=0x0d;break; //0x0d,改密键
case 0x16: i=0x0c;break;
case 0x0e: i=0x0b;break;
case 0x06: i=0x0a;break;
case 0x1d: i=0x0e;break; //0x0e,取消键
case 0x15: i=0x09;break;
case 0x0d: i=0x06;break;
case 0x05: i=0x03;break;
case 0x1c: i=0x0f;break; //0x0f,确定键
case 0x14: i=0x08;break;
case 0x0c: i=0x05;break;
case 0x04: i=0x02;break;
case 0x1b: i=0x00;break;
case 0x13: i=0x07;break;
case 0x0b: i=0x04;break;
case 0x03: i=0x01;break;
default : break;
}
if(count<6)
{ if((i!=0x0f)&&(i!=0x0e)&&(i!=0x0d))
{cs=0;send(0xcb);send(0x00);cs=1;a[count]=i;} }
if(i==0x0e)
{count=0;cs=0;send(0xa4);cs=1;}
if((i=0x0f)&&(count==6))
{count=0;cs=0;send(0xcb);send(0x0f);cs=1;
js=compare(p,q); jp=compare(p,u); k=js|jp;
if(k) bill1(); else bill2(); }
if((i=0x0d)&&k)
{cs=0;send(0xcb);send(0x0d);cs=1;count=0;
for(s=0;s<6;s++)
{d[s]=a[s];} Write_Flash(u,0x06,6);}
while(key==0);
}
while(key!=0);
cs=0;
send(0xa0);
cs=1;
} } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -