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

📄 cp2512.c

📁 cp2512触摸按键的程序
💻 C
字号:
#include "cp2512.h"
#include "main.h"
extern  volatile unsigned char init_case;                           //产生其它中断变量
extern unsigned char key_temp[14];
eeprom extern unsigned char password[14];
extern unsigned int time_counter;
extern unsigned char station;
unsigned int cp2512_rd(unsigned char add)
{
 unsigned int data=0;
 i2c_start();
 i2c_write(i2c_add);
 i2c_write(add);
 i2c_start();
 i2c_write(i2c_add | 1);
 data=i2c_read(1);
 data<<=8;
 data+=i2c_read(0);
 i2c_stop();
 return data;
 }


/****************************************************/
/****               返回按键值                   ****/
/****************************************************/
 unsigned char get_cp_key(void)
  {
   unsigned int  temp=0;
   temp=cp2512_rd(0x30);
    delay_ms(100);
   switch (temp)
   {
    case 0x0000:temp=0;break;
    case 0x0001:temp=1;break;//*
    case 0x0002:temp=2;break;
    case 0x0004:temp=3;break;
    case 0x0008:temp=4;break;
    case 0x0010:temp=5;break;//0
    case 0x0020:temp=6;break;
    case 0x0040:temp=7;break;
    case 0x0080:temp=8;break;
    case 0x0100:temp=9;break;
    case 0x0200:temp=10;break; //# 
    case 0x0400:temp=11;break;   
    case 0x0800:temp=12;break;  
    default : temp=0;break;
   }
   return temp;
  }


void cp2512_wr(unsigned char re_add,unsigned int data)
{
 i2c_start();
 i2c_write(i2c_add);
 i2c_write(re_add);
 i2c_write(data>>8);
 i2c_write(data);
 i2c_stop();
}

/*********************密码判断***************************/

unsigned char pass_word(void)
{
  unsigned char temp,i,j;
  temp=0;
  i=0;
  j=0;
 for(i=0;i<14;i++)
   {
    key_temp[i]=0;
   }
 i=0;                        //将i置零
 delay_ms(100);
 while(1)
 {
     
       //没有按键,等待
   if(init_case==INIT_CASE)
       return INIT_CASE;    

  while(temp==0)
    {
    
    temp=get_cp_key();
    delay_ms(50);
    if(init_case==INIT_CASE)
       return INIT_CASE;
    }
  key_press();
   
  //time_counter=0;
  switch(temp)
  {
   case 1:                           //"*"取消已按过的键值,并有成功音
     {
       time_counter=0;
      for(j=0;j<i;j++)
       {
        key_temp[j]=0;                //清空按键缓存
       }
      temp=0;
      i=0;
      break;
     }                                 //"#"进行密码判断
   case 10:
     {
      for(j=0;j<14;j++)
       {
        if(key_temp[j]!=password[j])
        {
         return FALSE;
        }
       }

      return TRUE;
      break;
     }
   default:
     {
      time_counter=0;
      key_temp[i]=temp;          //有按键,进行按键处理
      temp=0;

      i++;
      if(i>=15) return FALSE;
      else break;
     }
  }
  delay_ms(200);
 }
}

/*************密码注册**********************/
unsigned char add_password(void)
{
 unsigned temp,i,j;
 temp=0;
 i=0;
 j=0;
 for(i=0;i<14;i++)
   {
    key_temp[i]=0;
   }
 i=0;
 while(1)
 {
  if(init_case==INIT_CASE)
      {
       return INIT_CASE;
        break;
      }  
  temp=get_cp_key();
  if(temp!=0)
  {
   delay_ms(10);
   key_press();
   time_counter=0;
   switch(temp)
   {
    case 1:                           //"*"取消已按过的键值,并有成功音
     {
     time_counter=0;
      for(j=0;j<i;j++)
       {
        key_temp[j]=0;                //清空按键缓存
       }
      break;
     }
    case 10:                              //"#"进行密码判断
     {
     if(i<4)
      return FALSE;
     for(j=0;j<14;j++)
       {
        password[j]=key_temp[j] ;
       }
       return TRUE;
      break; 
     }
    default:
     {
      time_counter=0;
      key_temp[i]=temp;          //有按键,进行按键处理
      delay_ms(50);
      i++;
      if(i>=15) return FALSE;
      else break;
     }
   }
  }
 }
}






/***************cp2512初始化********************/
unsigned char cp2512_init(void)
{
 cp2512_wr(0x05,0x0fff);
 cp2512_wr(0x06,0x0fff);
 cp2512_wr(0x2e,0x03fff);
 cp2512_rd(0x33);
}

⌨️ 快捷键说明

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