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

📄 key.h

📁 用AVR控制GPRM模块。用于远程通讯等等
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -