|
楼主 |
发表于 2013-5-22 22:41:19
|
显示全部楼层
请尊重原创,引用本文发表者,请注明出处.
作者:彬
qq:243280383 870035775
邮箱: 870035775@QQ.COM
博客: http://blog.sina.com.cn/vision243280383
单片机断电密码保存电子锁 (2008-09-15 11:02:08)
作品简介:电子密码锁是集计算机技术、电子技术、数字密码技术为一体的机电一体化高科技产品,具有安全性高,使用方便等优点。本论文从电子密码锁系统的功能,硬件电路设计,软件设计分别论述这一系统。通过使用单片机AT89S52作为控制核心,连接外部存储器AT24C02,实现密码断电保存,制作一种密码锁。
下面共享AT24C02的驱动程序:
(AT24C02的三个引脚都接地 所以写入的地址是0xa0 ,写容许引脚接地)
void Start(void) /
{
Sda=0;
Scl=1;
_nop_ (); //根据时序图尽心延时
_nop_ ();
_nop_ ();
_nop_ ();
Sda=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void Ack(void)
{
Sda=0;
_nop_ ();
_nop_ (); //延时 根据时序图
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
}
void NoAck(void)
{
Sda=1;
_nop_ (); //根据时序图进行延时
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
}
void Send(uchar Data)
{
uchar BitCounter=8;
uchar temp;
do
{
temp=Data;
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0; //如果最高位是0就发送0
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--; //没发完一位数据就减一
}while(BitCounter); //如果发送完8位后跳出循环
Scl=0; //释放总线
}
uchar Read(void)
{
uchar temp=0;
uchar temp1=0;
uchar BitCounter=8; //定义从存储器读出的数据位数
Sda=1;
do{
Scl=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{ temp1=temp<<1; //逐位的读出
temp=temp1;
}
BitCounter--;
}while(BitCounter); //读出8位后跳出循环
return(temp); //返回读出的数据
}
void WrToROM(uchar Data,uchar Address) //向存储器写一字节的数据 函数
{
uchar i=0;
Start(); //调用起始条件函数
Send(0xa0); // 发送命令,准备写入数据到存储器,让存储器做好准备
Ack(); // 调用应答函数
Send(Address); // 先发送要写入数据的的存储器内存地址
Ack(); // 调用应答函数
Send(Data); // 开始发送要写入到存储器中的数据
Ack(); // 调用应答函数
Stop(); // 调用停止发送函数,表示发送完毕
}
uchar RdFromROM(uchar Address) // 从存储器读出一字节的数据
{
uchar i;
Start(); //调用起始条件函数
Send(0xa0); // 让存储器准备接受命令
Ack();
Send(Address); // 发送要读出来的数据地址
Ack();
Start(); // 重新调用起始函数
Send(0xa1); // 发送读出数据的命令
Ack();
i=Read ( ); // 开始读出数据
Scl=0;
NoAck(); // 读出数据成功。返回信号成功信号给存储器
Stop();
return (i); // 返回读出的数据
}
相关链接:http://blog.sina.com.cn/vision243280383 |
|
|