void Key_Check(void)
{
Key_Status=Scan_Store_Key();
if((Key_Status>0)&&(Key_Status<13))
{
if(Key_Status==10)//*存包键
{
STORE_CLR;
STORE_OUT;
Delay_us(50);
STORE_SET;
Delay_us(100);
STORE_CLR;//RISING一次,启动M64 INT6中断
}
else if(Key_Status==12)//#取包键
{
Code_Buf_Init();
Time_Wait=0;//按键间隔时间5秒以上没反应退出
Code_Buf[0]=0x03;
SN=1;
LED_GREEN_OUT;
LED_GREEN_ON;
while(1)
{
Key_Status0=Scan_Key();//2ms扫描一次
if((Key_Status0>0)&&(Key_Status0<13))
{
if((Key_Status0==10)||(Key_Status0==12))//*,#,直接退出
{
Time_Wait=0;
Code_Buf[SN]=0x41;
//SPI_Send(Code_Buf[SN]);//M64里判断如果有10出现则代表直接退出
SN++;
Code_Buf[SN]=0x06;
//SPI_Send(Code_Buf[SN]);
Check_Sum(&Code_Buf[0],&Check_Buf[0]);
//SPI_Send(Check_Buf[0]);
//SPI_Send(Check_Buf[1]);
LED_RED_OUT;
LED_RED_ON;
Delay_ms(500);
LED_RED_OFF;
LED_GREEN_OFF;
break;
}
else if(Key_Status0==11)
{
Code_Buf[SN]=0x30;
SN++;
//SPI_Send(0x30);
Time_Wait=0;
if(SN>10)
{
Code_Buf[11]=0x06;//完整10位密码
Check_Sum(&Code_Buf[0],&Check_Buf[0]);
//SPI_Send(Check_Buf[0]);
//SPI_Send(Check_Buf[1]);
LED_RED_OUT;
LED_RED_ON;
Delay_ms(1000);
LED_RED_OFF;
LED_GREEN_OFF;
break;
}
}
else
{
Code_Buf[SN]=DEC_To_ASCII(Key_Status0);
SN++;
Time_Wait=0;
//SPI_Send(Code_Buf[SN]);
if(SN>10)
{
Code_Buf[11]=0x06;//完整10位密码
Check_Sum(&Code_Buf[0],&Check_Buf[0]);
//SPI_Send(Check_Buf[0]);
//SPI_Send(Check_Buf[1]);
LED_RED_OUT;
LED_RED_ON;
Delay_ms(1000);
LED_RED_OFF;
LED_GREEN_OFF;
break;
}
}
}
else
{
Time_Wait++;
}
if(Time_Wait>2500)
{
Code_Buf[SN]=0x06;//密码输入超时退出,M64判断接收的数据是否有10位即可
//SPI_Send(Code_Buf[SN]);
Check_Sum(&Code_Buf[0],&Check_Buf[0]);
//SPI_Send(Check_Buf[0]);
//SPI_Send(Check_Buf[1]);
LED_RED_OUT;
LED_RED_ON;
Delay_ms(2000);
LED_RED_OFF;
LED_GREEN_OFF;
break;
}
}
}
else
{
/*SPI_Send(0x03);//03,30,30,16,37,39,M64 LCD显示请按存包键后存包,按取包键后手动输入
数字密码取包
SPI_Send(0x30);
SPI_Send(0x30);
SPI_Send(0x16);
SPI_Send(0x37);
SPI_Send(0x39);*/
}
}
}
采用了回转扫描法取按键值,现在测试执行下来,基本功能都很正常,就是郁闷的取包键(#)那个功能,第一次按下去,如果5秒钟没键响应或输入满10个密码数字或按了*或#后都能正常退出WHILE循环,但是第二次再按#后,测试下来发现程序居然直接工作了第一个IF判断后马上退出了WHILE循环,红色LED闪半秒,然后再按#,又正常如初,如果10位密码数字没输入完,按了#中途退出,则再按#进入密码输入状态时无这种现象,郁闷,正在用LED测试大法进行排除,看问题到底是出在哪里?
|