#include <REGX52.H>
#include "fault_scan.h"
#include "AT24C04.H"
#include "LCD1602.H"
#include "common.h"
uchar keyValue,key_state;
KeyStruct KeyNum;
uchar address_save=0;
uchar get_keyvalue()
{
uchar keyValue=0xff;
keyValue&=~((!(uchar)key0)<<0);//0xfe;
keyValue&=~((!(uchar)key1)<<1);//0xfd;
keyValue&=~((!(uchar)key2)<<2);//0xfb;
keyValue&=~((!(uchar)key3)<<3);//0xf7;
keyValue&=~((!(uchar)key4)<<4);//0xef;
return keyValue;
}
uchar keyscan(KeyStruct* KeyNum)
{
unsigned char State=KeyNum->State;
unsigned char KeyTemp=KeyNum->Value;
keyValue=0;
keyValue=get_keyvalue();
switch(State)
{
case CheckKey:
if(keyValue == 0xff)
{
break;
}
KeyTemp=keyValue;
State=DelayKey;
case DelayKey:
Delay5ms();
State= KeyTemp==keyValue ? KeyFallEdge:CheckKey;
break;
case KeyFallEdge:
State=KeyDown;
break;
case KeyDown:
State= KeyTemp==keyValue ? KeyDown:KeyRisEdge;
break;
case KeyRisEdge:
State=CheckKey;
break;
}
KeyNum->State=State;
KeyNum->Value=keyValue;
return State;
}
void key_process()
{
if(key_state==KeyFallEdge)
{
switch (keyValue)
{
uchar temp,i,table[3];
//模块 时间 类型
case 0xfe://故障1
write_add(address_save++,1,0);
write_add(address_save++,200,0);
write_add(address_save++,36,0);
write_add(200,address_save-1,0);
ShowString(6,0,"YES!",4);
break;
case 0xfd://故障2
temp=read_add(200,0);
for(i=0;i<3;i++)
{
table[i]=read_add(temp--,0);
}
ShowString(5,1,"NICE!",5);
break;
case 0xfb://故障3
break;
case 0xf7://故障4
break;
case 0xef://查询故障 +1
break;
default:
break;
}
}
}
void Delay5ms() //@24.000MHz
{
unsigned char i, j;
i = 117;
j = 184;
do
{
while (--j);
} while (--i);
}