📄 datafax.c
字号:
Com_Send_Byte(temp);
}
break;
case FILE_SEEK:
SPI_Read_Point=0;
SPI_Write_Point=0;
Set_SPI_Master;
SPI_SS=0;
Delayms(2);
LCD_Show_Data(2,20,"FIEL SEEKING..");
for(i=0;i<37;i++) SPI_Send_Byte(Com_Recv_Buf[i]);
Set_SPI_Slave;
temp_bit=SPI_SS;
SPI_TI=0;
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_10S)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return ;
}
}
if(SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
if(SPI_Read_Point==4) break;
}
if(SPI_Read_Point<4)
{
temp=0x00;
for(i=0;i<5;i++) Com_Send_Byte(temp);
temp=0xAC;
Com_Send_Byte(temp);
}
else
{
for(i=0;i<5;i++) Com_Send_Byte(SPI_Recv_Buf[i]);
temp=0xAC;
Com_Send_Byte(temp);
}
break;
case WRITE_FILE:
Data_Len=(ulong)Com_Recv_Buf[1];
Data_Len<<=8;;
Data_Len+=(ulong)Com_Recv_Buf[2];
Data_Len<<=8;
Data_Len+=(ulong)Com_Recv_Buf[3];
Data_Len<<=8;
Data_Len+=(ulong)Com_Recv_Buf[4];
SPI_Read_Point=0;
SPI_Write_Point=0;
Set_SPI_Master;
SPI_SS=0;
Delayms(2);
Com_Read_Point=0;
Cnt_Long_1ms=0;
while(Com_Write_Point<Data_Len+37)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return ;
}
}
}
LCD_Show_Data(2,20,"WRITING DATA..");
for(Com_Read_Point=0;Com_Read_Point<Com_Write_Point;Com_Read_Point++) SPI_Send_Byte(Com_Recv_Buf[Com_Read_Point]);
LCD_Show_Data(2,20,"WRITED DATA...");
Set_SPI_Slave;
temp_bit=SPI_SS;
SPI_TI=0;
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_10S) // wait USB response
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_Exit=true;
Flag_KB_Enable=true;
return ;
}
}
if(SPI_Read_Point!=SPI_Write_Point) SPI_Read_Point++;
if(SPI_Read_Point==4) break;
}
if(SPI_Read_Point<4)
{
temp=0x00;
for(i=0;i<5;i++) Com_Send_Byte(temp);
temp=0xAD;
Com_Send_Byte(temp);
}
else
{
for(i=0;i<5;i++) Com_Send_Byte(SPI_Recv_Buf[i]);
temp=0xAD;
Com_Send_Byte(temp);
}
break;
case FILE_EOF:
temp=0xAE;
Com_Send_Byte(temp);
Recv_Finished.Active=true;
SYS_Status=SYS_RECIEVE_FINISHED_STATE;
break;
default:
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_KB_Enable=true;
return ;
}
}
break;
}
}
//-----------------------------------------
// 接收文件
//-----------------------------------------
void Do_Recieve_File()
{
File_Name[0]=0x00;
Recv_Finished.Active=false;
Flag_Exit=false;
if(MODEM_Status!=MODEM_CONNECTED_STATE)
{
Error_Display("MODEM DISCONNECT");
return;
}
while(1)
{
if(Flag_1ms)
{
Flag_1ms=false;
Capture_KEY_Event();
}
if(Key_Down.Active)
{
Key_Down.Active=false;
if(Key_Down.Byte_data==KB_EXIT)
{
Do_Cancel();
Flag_KB_Enable=true;
return ;
}
}
if(Flag_Exit) return;
if(!Get_Request())
{
// Error_Display("TIME OUT");
// return;
}
else
{
Response_Request();
if(Recv_Finished.Active) break;
}
}
Recieve_Finished_Display();
}
//-----------------------------------------------
// 从字库中查找汉字的索引值
//------------------------------------------------
byte Search_Word(byte *search_Word)
{ byte j;
for(j=0;j<65;j++)
{
if(search_Word[0]==SYS_WORD[j][0] && search_Word[1]==SYS_WORD[j][1])
{
return j;
}
}
return 0xff;
}
//------------------------------------------------
// 从字库中查找字符的索引值
//------------------------------------------------
byte Search_Byte(byte search_Byte)
{ byte j;
for(j=0;j<91;j++)
{
if(search_Byte==SYS_BYTE[j])
{
return j;
}
}
return 0xff;
}
//-------------------------------------------------
// LCD在指定坐标显示指定的字符串
//-------------------------------------------------
void LCD_Show_Data(byte X,byte Y,byte *tempstr)
{
byte ch;
byte index;
byte WORD_Temp[2];
while(*tempstr!=0)
{
ch=*tempstr;
if(ch<=127)
{
Y--;
index=Search_Byte(ch);
if(index!=0xff)
SelectShow_Byte(X,Y,index);
tempstr++;
}
else
{
Y-=2;
WORD_Temp[0]=ch;
tempstr++;
WORD_Temp[1]=*tempstr;
index=Search_Word(WORD_Temp);
if(index!=0xff)
SelectShow_Word(X,Y,index);
tempstr++;
}
if(Y==0)
{
if(X>0) X--;
Y=20;
}
}
}
//-----------------------------------------
// 系统显示
//-------------------------------------------
void SYS_Display()
{
LCD_Clear();
LCD_Show_Data(6,18,"数据加密传真机");
LCD_Show_Data(4,15,"VER 0.1");
}
//---------------------------------------------
// 主菜单显示
//---------------------------------------------
void Menu_Display()
{
LCD_Clear();
LCD_Show_Data(6,15,"主菜单");
LCD_Show_Data(4,18,"1.文件列表");
LCD_Show_Data(2,18,"2.收发文件");
if(MODEM_Status==MODEM_DISCONNECTED_STATE) LCD_Show_Data(0,18,"3.拨号");
if(MODEM_Status==MODEM_CONNECTED_STATE) LCD_Show_Data(0,18,"3.挂机");
}
//---------------------------------------
// 文件列表显示
//---------------------------------------
void File_List_Display()
{
LCD_Clear();
LCD_Show_Data(6,16,"文件列表");
// LCD_Show_Data(6,16,"FILE LIST");
Get_File_List();
}
//----------------------------------------
// 拨号显示
//----------------------------------------
void Dial_Display()
{
LCD_Clear();
LCD_Show_Data(6,20,"拨号:");
}
//---------------------------------------
// 正在拨号显示
//---------------------------------------
void Dialing_Display()
{
LCD_Clear();
LCD_Show_Data(4,20,"DIALING...");
}
//-------------------------------------
void Connecting_Display()
{
LCD_Clear();
LCD_Show_Data(4,20,"CONNECTING...");
}
//--------------------------------------
void Ready_Display()
{
LCD_Clear();
LCD_Show_Data(6,18,"1.发送文件");
LCD_Show_Data(4,18,"2.接收文件");
LCD_Show_Data(2,20,"PRESS EXIT键 取消");
}
//----------------------------------------
void Send_Ready_Display()
{
LCD_Clear();
LCD_Show_Data(6,20,"文件:");
LCD_Show_Data(4,20,File_Name);
LCD_Show_Data(2,20,"PRESS SEND键 发送");
LCD_Show_Data(0,20,"PRESS EXIT键 取消");
}
//----------------------------------------
void Send_File_Display()
{
LCD_Clear();
LCD_Show_Data(6,20,"FILE:");
LCD_Show_Data(4,20,File_Name);
LCD_Show_Data(2,20,"SENDING...");
LCD_Show_Data(0,20,"PRESS EXIT CANCEL");
}
//----------------------------------------
void Send_Finished_Display()
{
LCD_Clear();
LCD_Show_Data(6,20,"FILE:");
LCD_Show_Data(4,20,File_Name);
LCD_Show_Data(2,20,"SEND FINISHED");
LCD_Show_Data(0,20,"PRESS EXIT");
}
//--------------------------------------------
void Ring_Display()
{
LCD_Clear();
LCD_Show_Data(4,22,"接收 CALL?");
LCD_Show_Data(2,22,"PRESS ENTER键 接收");
LCD_Show_Data(0,20,"PRESS EXIT键 取消");
}
//--------------------------------------------
void Ready_Recieve_Display()
{
LCD_Clear();
LCD_Show_Data(2,20,"PRESS RECIEVE键 接收");
LCD_Show_Data(0,20,"PRESS EXIT键 取消");
}
//------------------------------------------------
void Recieve_File_Display()
{
LCD_Clear();
LCD_Show_Data(6,20,"文件:");
}
//------------------------------------------
void Recieve_Finished_Display()
{
LCD_Clear();
LCD_Show_Data(6,20,"FILE:");
LCD_Show_Data(4,20,File_Name);
LCD_Show_Data(2,20,"RECIEVEED");
LCD_Show_Data(0,20,"PRESS EXIT");
}
//------------------------------------------
void Setup_Display()
{
LCD_Clear();
LCD_Show_Data(4,20,"BUILDING...");
}
//---------------------------------------------
void Error_Display(byte *Error_Msg)
{
LCD_Clear();
LCD_Show_Data(4,20,Error_Msg);
LCD_Show_Data(2,20,"PRESS EXIT");
SYS_Status=SYS_ERROR_STATE;
}
//------------------------------------------
void Do_Cancel()
{
SYS_Status=SYS_IDLE_STATE;
LCD_Clear();
SYS_Display();
}
//------------------------------------------
void Do_OnHook()
{
byte i=0;
Cnt_Long_1ms=0;
while(1)
{
if(Cnt_Long_1ms>_300MS)
{
Com_Send("+");
Cnt_Long_1ms=0;
i++;
}
if(i>2) break;
}
Cnt_Long_1ms=0;
while(Cnt_Long_1ms<_2S);
Com_Send("ATH0\r\n");
SYS_Status=SYS_IDLE_STATE;
MODEM_Status=MODEM_DISCONNECTED_STATE;
LCD_Clear();
SYS_Display();
}
//----------------------KB函数实现开始------------------------
byte SCAN_KB(void)
{
byte Temp;
byte Key_No=0x00;
byte i;
byte j;
byte KB_Vol=0xFE;
LCD_Latch_DB|=0x1F;
for (i=0;i<5;i++) {
XBYTE[HC573_Addr]=LCD_Latch_DB&KB_Vol;
Temp=P1&0x0F;
if (Temp!=0x0F) {
// LED_ShowData=Temp;
for (j=0;j<4;j++) {
if ((Temp&0x01)==0) {
Key_No=j+1;
Key_No<<=4;
Key_No|=(i+1);
return (Key_No);
}
else {
Temp>>=1;
}
}
}
KB_Vol<<=1;
KB_Vol++;
}
return (Key_No);
}
void KB_Show(byte Key_No)
{
byte Temp;
//LCD_Clear();
Temp=Key_No;
Temp=Temp & 0x0F;
SelectShow_Byte(2,11,Temp);
Temp=Key_No;
Temp>>=4;
SelectShow_Byte(2,12,Temp);
}
byte Get_Key_Val(byte No)
{
byte i;
byte Key_Val=0;
for(i=0;i<64;i=i+2)
{
if(No==KB_TABLE[i])
{
Key_Val=KB_TABLE[i+1];
break;
}
}
return Key_Val;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -