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

📄 save.h

📁 用共阴极数码管做的密码锁,可修改密码
💻 H
字号:
/*****************启动总线**********************/
void start(void)
{                  //
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();                  //
}

/*****************停止IIC总线****************/
void stop(void)
{
SDA=0;
_nop_(); 
_nop_(); 
SCL=1;
_nop_(); 
_nop_(); 
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
}

/*****************发送应答信号****************/
void ack(void)
{
SDA=0;
_nop_(); 
_nop_(); ;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_(); 
_nop_();
}

/*****************发送无应答信号****************/
void noack(void)
{
SDA=1;
_nop_(); 
_nop_(); 
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_(); 
_nop_(); 
_nop_(); 
}

/*****************检查应答信号****************/
bit cack(void)
{
SDA=1;
_nop_(); 
_nop_(); 
SCL=1;
_nop_(); 
_nop_();
CY=SDA;
SCL=0;
_nop_(); 
_nop_();
return (CY); 
}


uchar in()
{
 uchar read_data;	
 for(i = 0; i < 8; i++)
 {
  SDA=1;
  _nop_();
  SCL = 1;
  _nop_();
  _nop_();
  _nop_();
  read_data <<= 1;
  read_data |= (uchar)SDA;
  _nop_();
  _nop_();
  SCL = 0;
  _nop_();
  _nop_();
 }
 return(read_data);
}



void out(uchar write_data)
{
 //uchar i;
 for(i = 0; i < 8; i++)  // 循环移入8个位
 {
  write_data<<=1;
  SDA=CY;
  _nop_();
  _nop_();
  SCL = 1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  SCL=0;
  _nop_();
 }
 _nop_();
 _nop_();
}




void write(uchar addr,uchar *databuf,uchar number )  // 在指定地址addr处写入数据write_data
{
    //uchar i;
wr: start();
    out(0xa0);
    if(cack())
    stop();
    else
    {
       out(addr);
	   if(cack())
	   stop();
	   else
	   {
         for(i=0;i<number;i++)
	     {
	      out(*databuf++);
		  if(cack())
		  goto wr;
		  }
          stop();
		}
	 
	 }
	 delay(10);	   // 写入周期
}

 

void read(uchar addr,uchar *databuf,uchar number)
// 在指定地址读取
{	  //uchar i;
rd:   start();
      out(0xa0);
  	  if(cack())
	  stop();
	  else
	  {
	    out(addr);
        if(cack())
		stop();
		else
		{
		  start();
		  out(0xa1);
		  if(cack())
		  goto rd;
		  else
		   {
			 for(i=0;i<number-1;i++)
		   	 {
			   *databuf=in();
			   ack();
			   databuf++;
			  }
			  *databuf=in();
			  noack();
			  stop();
		    }  
         }
	   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -