⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asdf.c

📁 单片机断电密码保存电子锁 一个比较好的设 很好的
💻 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 + -