📄 asdf.c
字号:
#define uchar unsigned char //定义一下方便使用
#include "reg52.h"
#include "intrins.h" //调用头文件
#define WriteDeviceAddress 0xa0 // AT24C02的识别码是1010,硬件的三个地址引脚接地为000,最后一位为0时表示向存储器写入数据
#define ReadDviceAddress 0xa1 //最后一位为1时表示从存储器读出数据。0xa0=1010 000 0 ,0xa1=1010 000 1 .
sbit Scl=P3^4; //串行时钟信号
sbit Sda=P3^5; //串行数据信号
sbit xin=P2^0; //在硬件电路上驱动青色发光二极管,用与显示当前处于密码输入状态
sbit xin_on=P3^6; // 在硬件电路上驱动继电器,当8位密码输入正确时,继电器工作
sbit ch_pass=P2^2; // 在硬件电路上驱动红色发光二极管,用于显示当前处于修改密码状态
sbit on=P3^7;
static cound ; // 用于计算密码输入的个数,每次输入8位密码后,清0
uchar code DB_dat[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // 存放数码管显示字符码
uchar DB_password[8]; // 存放从存储器中读取的原始密码
uchar DB_inword[8]; // 存放从键盘输入的密码
void DelayMs(unsigned int number) //延时函数 延时1 MS
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--) ;
}
}
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); // 返回读出的数据
}
uchar Key() //键盘扫描子程序
{ uchar KValue;
uchar tmp;
P1|=0xff; //将P1口的接键盘的位置1
KValue=P1;
KValue|=0x00; //将未接键的位置1
if(KValue==0xff) //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -