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

📄 2.txt

📁 主要是防到锁的一些基于C语言的编程
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    
        case 3:
          return NINE;//键值为9
          break;
        case 4:
          return INPUT;//键值为输入
          break;

        case 5:
          return FOUR;//键值为4
          break;

        case 6:
          return FIVE;//键值为5
          break;

        case 7:
          return SIX;//键值为6
          break;

        case 8:
          return CLEAR;//键值为清除
          break;

        case 9:
          return ONE;//键值为1
          break;

        case 10:
          return TWO;//键值为2
          break;

        case 11:
          return THREE;//键值为3
          break;

        case 12:
          return MODIFY;//键值为修改
          break;
        case 13:
          return ZERO;//键值为0
          break;

        case 14:
          return LOCK;//键值为检查
          break;

        case 15:
          return STORE;//键值为存储
          break;

        case 16:
          return OK;//键值为确定
          break;
	}
}
/***********************************************************
Function: InitLock()
Description:初始化函数
Calls: r24c02(unsigned char address)
Called by: main ()
Input: NULL
Output: NULL
return: void
***********************************************************/      
void InitLock()
{
  unsigned char i;//循环变量

  for(i = 0; i < 6; i++)
  {
    password[i] = r24c02(i);//读出密码
  }

  TMOD = 0x11;//定时器方式1
  TH0 = -(50000 / 256);//定时器高位赋初值
  TL0 = -(50000 % 256);////定时器低位赋初值
  TH1 = -(50000 / 256);//定时器高位赋初值
  TL1 = -(50000 % 256);////定时器低位赋初值
  EA = 1;//开总中断
  ET0 = 1;//开定时器0中断
  ET1 = 1;//开定时器1中断
  TR0 = 0;//定时器0停止工作
  TR1 = 0;//定时器1停止工作
  RED = 1;//红灯灭
  YELLOW = 1;//黄灯灭
  GREEN = 1;//绿灯灭
  RING = 1;//铃声不响
  P0 = 0x00;
}
/***********************************************************
Function: Error ()
Description:报错函数
Calls: DelayMs (unsigned char i)
Called by: OpenLock(),ModifyPassword()
Input: NULL
Output: NULL
return: void
***********************************************************/
void Error()
{
  if(++errorTime >= 3)//如果错误次数等于三次
  {
    RED = 0;//红灯亮
	YELLOW = 1;//黄灯灭
	GREEN = 1;//绿灯亮
    RING = 0;//报警
    TR0 = 1;//定时器0工作
    errorTime = 0;//错误次数清零
    second = 0;//秒钟清0
    lock = 1;
  }
  else
  {
    YELLOW = 0;//黄灯亮
    RED = 1;
	GREEN = 1;
  }
  displayNum = 0;//显示数目清0
  DelayMs(1000);
}
/***********************************************************
Function: ErrorRing ()
Description:报警函数
Calls: DelayMs (unsigned char i)
Called by: ModifyPassword ()
Input: NULL
Output: NULL
return: void
***********************************************************/
void ErrorRing()
{
  RING = 0;
  DelayMs(500);
  RING = 1;
}
/***********************************************************
Function: Right ()
Description:密码输入正确函数
Calls: NULL
Called by: OpenLock(),ModifyPassword()
Input: NULL
Output: NULL
return: void
***********************************************************/
void Right()
{
  GREEN = 0;//绿灯亮
  RED = 1;//红灯灭
  YELLOW = 1;//黄灯灭
  DelayMs(1000);
}
/***********************************************************
Function: Clear()
Description:清0函数
Calls: NULL
Called by: Main()
Input: NULL
Output: NULL
return: void
***********************************************************/
void Clear()
{
  GREEN = 1;//绿灯灭
  YELLOW = 1;//黄灯灭 
  displayNum = 0;//显示个数清0
}
/***********************************************************
Function: DelayMs ()
Description:延时函数
Calls: NULL
Called by: ScanKey(unsigned char time)
Input: NULL
Output: NULL
return: void
***********************************************************/
void DelayMs(unsigned int ms)
{
  int i,j;
  for(i = 0; i < ms; i++)
  {
    for(j = 0; j < 110; j++);
  }
}
/********************************************
内部函数,延时1
********************************************/
void Delay(void)
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_(); /*根据晶振频率制定延时时间*/
}
/********************************************
内部函数,I2C开始
********************************************/
void Start(void)
{ 

    EA=0;
    SDA=1;
    SCL=1;
    Delay();
    SDA=0;
    Delay();
    SCL=0;
}
/********************************************
内部函数,I2C结束
********************************************/
void Stop(void)
{
    SDA=0;
    SCL=0;
    Delay();
    SCL=1;
    Delay();
    SDA=1;
    Delay();
    EA=1;
}
/********************************************
内部函数,输出ACK ,每个字节传输完成,输出ack=0,结束读书据,ack=1;
********************************************/
void WriteACK(unsigned char ack)
{
   SDA = ack;
   Delay();
   SCL=1;
   Delay();
   SCL=0;
}
/********************************************
内部函数,等待ACK
********************************************/
void WaitACK()
{  

   unsigned char errtime=20;
   SDA=1;
   Delay();      /*读ACK*/
   SCL=1;
   Delay();
   while(SDA)
  {  errtime--;
     if(!errtime)
     {
      Stop();
      break;
     }
   }
   SCL=0;
   Delay();
}
/********************************************
内部函数.输出数据字节
********************************************/
void writebyte(unsigned char wdata)
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
      if(wdata&0x80) SDA=1;
      else SDA=0;
      wdata<<=1;
      SCL=1;
      Delay();
      SCL=0;
   }
   WaitACK();   //如果通讯错误,将不能接收到ack
}
/********************************************
内部函数.输入数据
********************************************/
unsigned char Readbyte(void)
{
   unsigned char i,bytedata;
   SDA=1;
   for(i=0;i<8;i++)
   {
      SCL=1;
      bytedata<<=1;
      bytedata|=SDA;
      SCL=0;
      Delay();
   }
    return(bytedata);
}
////////////////读24c01--外部调用/////////////////////////
unsigned char r24c02(unsigned char address)
{  unsigned char mdata;
   Start();
   writebyte(0xa0);
   writebyte(address);
   Start();
   writebyte(0xa1);
   mdata=Readbyte();
   WriteACK(1);
   Stop();
   Delay();              //此处延时根据实际情况,如果没有延时,可能会不正常
   return(mdata);
}
//////////////////写24c01--外部调用//////////////////////////
void w24c02(unsigned char address,unsigned char udata)
{
   Start();
   writebyte(0xa0);
   writebyte(address);
   writebyte(udata);
   Stop();
   Delay();             //此处延时根据实际情况,如果没有延时,可能会不正常
}


/***********************************************************
Function: main()
Description:主函数
Calls: InitLock(), Scankey(), OpenLock(), ModifyPassword()
Called by: NULL
Input: NULL
Output: NULL
return: void
***********************************************************/
void main()
{
  unsigned char key;//输入的键值
  //unsigned char i;
 InitLock();//初始化电子锁 
  while(1)//执行电子锁工作
  {
    DisplayLed(displayNum);//显示LED
    key = ScanKey(MAXTIME);//扫描键盘得到按键的值	
    if(key == LOCK)
    {
      lock = (lock == 1) ? 0 : 1;
    }
    if(lock == 1)
    {
      continue;
    }
    switch(key)//根据键值选择功能
    {
      case INPUT://输入密码开锁
        OpenLock();
		Clear();//清除指示灯
        break;

      case MODIFY://修改密码
        ModifyPassword();
		Clear();//清除指示灯
        break;
    }
  }
}

































⌨️ 快捷键说明

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