📄 key.h
字号:
#define judge_k0 !(PIND&(1<<PD2))
#define judge_k1 !(PIND&(1<<PD3))
#define judge_k2 !(PIND&(1<<PD4))
#define judge_k3 !(PIND&(1<<PD5))
const prog_uchar beging_bmp[]={"欢迎使用中岗GSM遥控模块"};
const prog_uchar qsrmm_bmp[]={"请输入密码:"};
const prog_uchar mmcwqcxsr_bmp[]={"密码错误请重新输入:"};
const prog_uchar xgmm_bmp[]={"1修改密码"};
const prog_uchar xgbtl_bmp[]={"2修改波特率"};
const prog_uchar xgfshm_bmp[]={"3修改发送方号码"};
const prog_uchar xgdxzx_bmp[]={"4修改短信中心"};
const prog_uchar xuanze1_bmp[]={0xa2,0xd9};//数字(1)
const prog_uchar xuanze2_bmp[]={0xa2,0xda};//数字(2)
const prog_uchar xuanze3_bmp[]={0xa2,0xdb};//数字(3)
const prog_uchar xuanze4_bmp[]={0xa2,0xdc};//数字(4)
const prog_uchar qsrxmm_bmp[]={"请输入新密码:"};
const prog_uchar xgmmcg_bmp[]={"修改成功!"};
const prog_uchar qsrxbtl_bmp[]={"请输入新波特率:"};
const prog_uchar qsrxdhhm_bmp[]={"请输入新对方号码:"};
const prog_uchar qsrxzxhm_bmp[]={"请输入新中心号码:"};
uchar bmp_num=0;//显示画面
uchar bmp_rest=0xff;
/**************************************************************
功能:手动设置时的密码判断子程序
参数:pMsg要判断的密码列
返回: 0:正确0xff:错误
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
uchar judje_mimashuru(char* pMsg)
{
char a[6];
eeprom_read_block (&a[0],&mima[0], mima_weishu);//取密码到a
if(memcmp(pMsg,a,mima_weishu)==0)
return 0;//密码正确返回零
else
return 0xff;//密码错误返回0xff
}
/**************************************************************
功能:按键初始化
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void key_int(void)
{
PORTD|=(1<<PD2);//按键初始化
DDRD&=~(1<<PD2);
PORTD|=(1<<PD3);//按键初始化
DDRD&=~(1<<PD3);
PORTD|=(1<<PD4);//按键初始化
DDRD&=~(1<<PD4);
PORTD|=(1<<PD5);//按键初始化
DDRD&=~(1<<PD5);
}
/**************************************************************
功能:按键0-3延时
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void delay_k0(void)
{uint b;
for(b=30;(judge_k0)&&(b>0);b--)
_delay_ms(30);
}
void delay_k1(void)
{uint b;
for(b=30;(judge_k1)&&(b>0);b--)
_delay_ms(30);
}
void delay_k2(void)
{uint b;
for(b=30;(judge_k2)&&(b>0);b--)
_delay_ms(30);
}
void delay_k3(void)
{uint b;
for(b=30;(judge_k3)&&(b>0);b--)
_delay_ms(30);
}
/**************************************************************
功能:判断按键0-3是否按下
参数:无
返回: 按下0xff未按下0
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
uchar judge_k0_0xff(void)
{
if (judge_k0)
{
delay_k0();
//bmp_rest=0xff;
return 0xff;
}
return 0;
}
uchar judge_k1_0xff(void)
{
if (judge_k1)
{
delay_k1();
//bmp_rest=0xff;
return 0xff;
}
return 0;
}
uchar judge_k2_0xff(void)
{
if (judge_k2)
{
delay_k2();
//bmp_rest=0xff;
return 0xff;
}
return 0;
}
uchar judge_k3_0xff(void)
{
if (judge_k3)
{
delay_k3();
//bmp_rest=0xff;
return 0xff;
}
return 0;
}
/**************************************************************
功能:显示开机画面
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void display_bmp_0(void)
{
if(bmp_rest&&bmp_num==0)
{
WriteTextRom(beging_bmp);//显示开机信息
bmp_rest=0;
}
if(judge_k0_0xff()||judge_k1_0xff()||judge_k2_0xff()||judge_k3_0xff())
{
bmp_num=1;//显示输入密码界面
bmp_rest=0xff;
}
}
/**************************************************************
功能:显示请输入密码画面
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void display_bmp_1(void)
{ uchar shuru_mima[mima_weishu];//设置输入缓存区
uchar a=0;
uchar b;
//清输入缓存区
for(b=0;b<mima_weishu;b++)
{
shuru_mima[b]='*';
}
//更新标题信息
if(bmp_rest)
{
WriteTextRom(qsrmm_bmp);//显示开机信息
bmp_rest=0;
}
write_char(1, 1,shuru_mima,mima_weishu);//显示密码输入区
//按键处理
while(1)
{
if(judge_k0_0xff())//增加减按下
{
if(shuru_mima[a]<0x7a&&shuru_mima[a]>=0x30)
{
shuru_mima[a]++;
}
else
shuru_mima[a]=0x30;
}
if(judge_k1_0xff())//减小按下
{
if(shuru_mima[a]>0x30)
{
shuru_mima[a]--;
}
else
shuru_mima[a]=0x7a;
}
if(judge_k2_0xff())//确定键按下
{
if(a<mima_weishu-1&&shuru_mima[a]!=0x2a)//输入完成
{
a++;
}
else if(a>=mima_weishu-1&&shuru_mima[a]!=0x2a)
{
if(judje_mimashuru(shuru_mima)==0)//如果密码正确
{
bmp_num=2;
bmp_rest=0xff;
break;
}
else//密码错误
{
WriteTextRom(mmcwqcxsr_bmp);//显示密码错误
//清输入缓存区
for(b=0;b<mima_weishu;b++)
{
shuru_mima[b]='*';
}
a=0;
}
}
}
if(judge_k3_0xff())//取消键按下
{
if(a>0&&shuru_mima[a]!=0x2a)
shuru_mima[a]=0x2a;
else if(a>0&&shuru_mima[a]==0x2a)
{
a--;
shuru_mima[a]=0x2a;
}
else if(a==0&&shuru_mima[a]==0x2a)
{
bmp_rest=0xff;
bmp_num=0;
return a;
}
else
{
a=0;
shuru_mima[a]=0x2a;
}
}
write_char(1, 1,shuru_mima,mima_weishu);
}
}
/**************************************************************
功能:显示设置选择界面
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void display_bmp_2(void)
{
uchar a=0;//索引标志
while(1)
{
//增加键按下改变索引
if(judge_k0_0xff())
{
bmp_rest=0xff;//置位需要更新显示标志
if(a<3)
a++;
else
a=0;
}
//减小键按下改变索引
if(judge_k1_0xff())
{
bmp_rest=0xff;//置位需要更新显示标志
if(a>0)
a--;
else
a=3;
}
//根据索引更新显示
if(bmp_rest)
{
switch(a)
{
case 0:
SdCmd(0x01); // 清除显示
write_charRom(0,0,xgmm_bmp,10);
write_charRom(1,0,xgbtl_bmp,12);
write_charRom(0,0,xuanze1_bmp,2);
break;
case 1:
SdCmd(0x01); // 清除显示
write_charRom(0,0,xgmm_bmp,10);
write_charRom(1,0,xgbtl_bmp,12);
write_charRom(1,0,xuanze2_bmp,2);
break;
case 2:
SdCmd(0x01); // 清除显示
write_charRom(0,0,xgfshm_bmp,16);
write_charRom(1,0,xgdxzx_bmp,14);
write_charRom(0,0,xuanze3_bmp,2);
break;
case 3:
SdCmd(0x01); // 清除显示
write_charRom(0,0,xgfshm_bmp,16);
write_charRom(1,0,xgdxzx_bmp,14);
write_charRom(1,0,xuanze4_bmp,2);
break;
default:
break;
}
bmp_rest=0;
}
//设置建按下根据索引进入响应的子菜单
if(judge_k2_0xff())
{
bmp_rest=0xff;
bmp_num=3+a;
break;
}
//返回建按下返回短信遥控状态并将修改后的信息写入gsm卡
if(judge_k3_0xff())
{
reset_bois();//gsm卡写信息的程序
bmp_rest=0xff;
bmp_num=0;
break;
}
}
}
/**************************************************************
功能:显示修改密码界面
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void display_bmp_3(void)
{
uchar shuru_mima[mima_weishu];
uchar a=0;
uchar b;
eeprom_read_block (shuru_mima,&mima[0],mima_weishu);//读旧号码
if(bmp_rest)
{
WriteTextRom(qsrxmm_bmp);//请输入新密码
bmp_rest=0;
}
write_char(1, 1,shuru_mima, mima_weishu);//显示旧号码;
while(1)
{ //上、下键按下表示需要修改
if(judge_k0_0xff()||judge_k1_0xff())
{ //清对方号码缓存区为*
for(b=0;b<mima_weishu;b++)
{
shuru_mima[b]='*';
}
break;//打断死循环
}
//返回键或者确定键按下表示不做修改
else if(judge_k2_0xff()||judge_k3_0xff())
{
bmp_rest=0xff;//需要更新标题
bmp_num=2;//置画面标志为画面2
return a;//打断程序返回画面2
}
}
write_char(1, 1,shuru_mima, mima_weishu);////显示号码为********
while(1)
{
if(judge_k0_0xff())//增加减按下
{
if(shuru_mima[a]<0x7a&&shuru_mima[a]>=0x30)
{
shuru_mima[a]++;
}
else
shuru_mima[a]=0x30;
}
if(judge_k1_0xff())//减小按下
{
if(shuru_mima[a]>0x30)
{
shuru_mima[a]--;
}
else
shuru_mima[a]=0x7a;
}
if(judge_k2_0xff())//确定键按下
{
if(a<mima_weishu-1&&shuru_mima[a]!=0x2a)//输入完成
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -