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

📄 datafax.c

📁 PHILIP LPC935MCU UART用于与传真模块通信,SPI用于与SL811的USB模块通信.该软件把U盘存储的文件通过传真发到对方相同的设备接收到U盘
💻 C
📖 第 1 页 / 共 5 页
字号:
				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 + -