📄 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 + -