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

📄 datafax.c

📁 PHILIP LPC935MCU UART用于与传真模块通信,SPI用于与SL811的USB模块通信.该软件把U盘存储的文件通过传真发到对方相同的设备接收到U盘
💻 C
📖 第 1 页 / 共 5 页
字号:
#pragma OT(0)
#include "AT89X52.H" 
#include <ABSACC.H>

//#include <string.h>

#include "LCD.H"
#include<INTRINS.H>
#include "Zimo8_16.H"
#include "Zimo16_16.H"
#include "main.h"

//功能函数
void    UART_Init(); 
void    Delayms(int n); 
void    Delayus(int i);
void    timer0_int();
void    Init_hw();
void    Com_ReadData_Int(void);
bit     RcvByte(byte c);
char    Str_Comp(byte *str1,byte *str2);
void    SPI_Send(byte *tempstr);
byte    SCAN_KB(void);
//void KB_Show(byte Key_No);
void    KB_Recieve(byte Key_No);
//other
void    SYS_Display(void);
byte    Search_Byte(byte search_Byte);
byte    Search_Word(byte *search_Word);
byte    Get_Key_Val(byte No);
void    LCD_Show_Data(byte X,byte Y,byte *tempstr);
void    Get_File_Info(unsigned long index);
void    Com_Send_Byte(byte c);
void    Handle_Msg(byte *Msg);
void    Ring_Display();
void    Send_Display();
void    Error_Display(byte *Error_Msg);
void    Refuse_Display();
void    Dial_Display();
void    Menu_Display();
void    Capture_KEY_Event();
void    File_List_Display();
void    Answer_Call();
void    Setup_Display();
void    Dialing_Display();
void    Do_Cancel();
void    Do_Send_File();
void    Do_Recieve_File();
void    Do_OnHook();
void    Connecting_Display();
void    Connected_Display();
void 	Ready_Display();
void 	Ready_Recieve_Display();
void 	Recieve_File_Display();
void 	Recieve_Finished_Display();
void 	Send_Ready_Display();
void 	Send_File_Display();
void	Send_Finished_Display();
void	LCD_On();
void	LCD_Off();
void    LCD_Fill();
void 	LCD_Part_Fill(bit CSA,bit CSB);
void    KB_Show(byte Key_No);
void 	Com_Send(byte *tempstr);
void 	MODEM_Init();
void    MODEM_Monitor();
void 	Get_Modem_Msg();
void	Check_Modem_Msg(byte *str);
byte Search_Modem_Msg(byte* tempstr);
//---------------------------------- 
//功能:主函数 
//---------------------------------- 
main() 
{ 
	byte temp; 
	byte i;
    	LCD_Off();
	LCD_On();
	Init_hw();     	//对硬件进行初始化
	UART_Init(); 	//对串口初始化		
	Buzzer_On;
	Buzzer_Off;
	LCD_BG=0;
	LCD_BG=1;
 	LCD_BG=0;

	LED1_On;
	LED1_Off;
	LED2_On;
	LED2_Off;
	LED3_On;
	LED3_Off;
	LED4_On;
	LED4_Off;
	
	LCD_Init();		//对LCD初始化
		
	SYS_Display();
    EA=0;
	SBUF=0xAA;
	while (!TI);
	TI=0;
	EA=1;

    MODEM_Init();	//Modem 初始化  

	/*for (;;) {	    
		temp=SCAN_KB();
		if (temp!=0)  KB_Show(temp);
	}	
	for (temp=0;temp<4;temp++) {
	   Delayms(100);
	   
	}*/
	Flag_KB_Enable=true;
	Key_Down.Active=false;
	Sys_Ring.Active=false;
	Sys_Conn.Active=false;
	Clear_Msg.Active=false;
	Send_Data.Active=false;
	Recv_Finished.Active=false;
	Send_Finished.Active=false;
	for(i=0;i<11;i++) File_Name[i]=0x00;
	    
	while(1)
	{
	  
	    if(Flag_1ms)
	    {
	       Flag_1ms=false;
	       Capture_KEY_Event();
        }        
        MODEM_Monitor();
        switch(SYS_Status)
        {
            case SYS_IDLE_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
					switch(Key_Down.Byte_data)
					{
	                     case KB_MENU:
    	                    SYS_Status=SYS_MENU_STATE;
        	                 Menu_Display();
            	             Flag_KB_Enable=true;
                	     break;
						 case KB_UP:
					    	 Flag_Buzzer=~Flag_Buzzer;
					 	break;
					 	case KB_DOWN:
					    	 LCD_BG=~LCD_BG;
					 	break;
					 	default:
					 	break;
                    }
                }
                if(MODEM_Status==MODEM_RINGING_STATE)    
                {      
                      SYS_Status=SYS_RINGING_STATE;
                      if(Ring_Cnt>2)  Ring_Display();
                      else Ring_Cnt++;
                      Ring_Display();
                }
            break;
            case SYS_MENU_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;       
                    switch(Key_Down.Byte_data)
                    {
                         case KB_1:
					        SYS_Status=SYS_MENU_FILE_LIST_STATE;
					        File_List_Display();
					        Flag_KB_Enable=true; 
				         break;
/*				         case KB_2:
					        SYS_Status=SYS_MENU_SETUP_STATE;
					        Setup_Display();
					        Flag_KB_Enable=true; 
					   break;*/
					 case KB_2:
					        SYS_Status=SYS_TX_RX_STATE;
					        Ready_Display();
					        Flag_KB_Enable=true;       
				         break;
						 case KB_3:
						 	if(MODEM_Status==MODEM_DISCONNECTED_STATE)
							{
					        	SYS_Status=SYS_MENU_DIAL_STATE;
								KB_Point=0;
								Dial_Display();
							 }
							 if(MODEM_Status==MODEM_CONNECTED_STATE)
					         	 SYS_Status=SYS_MENU_ONHOOK_STATE;
					         Flag_KB_Enable=true; 
				         break;
				         case KB_EXIT:
					         SYS_Status=SYS_IDLE_STATE;
					         Flag_KB_Enable=true; 
					         LCD_Clear();
					         SYS_Display();
				         break;
				         default:
				         break;
                    }
                }
                if(MODEM_Status==MODEM_RINGING_STATE)    
                {      
                      SYS_Status=SYS_RINGING_STATE;
                      if(Ring_Cnt>2)  Ring_Display();
                      else Ring_Cnt++;
                      Ring_Display();
                }
            break;
            case SYS_MENU_FILE_LIST_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    switch(Key_Down.Byte_data)
                    {
                         case KB_1:
			      				SYS_Status=SYS_MENU_DIAL_STATE;
			      				KB_Point=0;
			      				Get_File_Info(5);
			      				if(MODEM_Status==MODEM_CONNECTED_STATE) 
                              	{
                                 	SYS_Status=SYS_READY_SEND_STATE;
                                 	Send_Ready_Display();
                              	}
			      				else Dial_Display();
			      				Flag_KB_Enable=true; 
			  			 break;
			  			 case KB_2:
			       				SYS_Status=SYS_MENU_DIAL_STATE;
			       				KB_Point=0;
			       				Get_File_Info(37);
			       				if(MODEM_Status==MODEM_CONNECTED_STATE) 
                              	{
                                 	SYS_Status=SYS_READY_SEND_STATE;
                                 	Send_Ready_Display();
                              	}
			      				else Dial_Display();
			      				Flag_KB_Enable=true; 
			   			 break;
			   			 case KB_3:
								SYS_Status=SYS_MENU_DIAL_STATE;
								Get_File_Info(69);
                                KB_Point=0;
                                if(MODEM_Status==MODEM_CONNECTED_STATE) 
                              	{
                                 	SYS_Status=SYS_READY_SEND_STATE;
                                 	Send_Ready_Display();   
                              	}
			      				else Dial_Display();
			      				Flag_KB_Enable=true; 
						 break;	
				 		 case KB_MENU:
								SYS_Status=SYS_MENU_STATE;
			        			LCD_Clear();
			        			Menu_Display();
			        			Flag_KB_Enable=true; 
			   			 break;
						 case KB_EXIT:
								SYS_Status=SYS_IDLE_STATE;
			        			LCD_Clear();
			        			SYS_Display();
			        			Flag_KB_Enable=true; 
			   			 break;
			   			 default:
			   			 break;
                    }
                }
                if(MODEM_Status==MODEM_RINGING_STATE)    
                {      
                      SYS_Status=SYS_RINGING_STATE;
                      if(Ring_Cnt>2)  Ring_Display();
                      else Ring_Cnt++;
                      Ring_Display();
                }
            break;
            case SYS_MENU_DIAL_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    switch(Key_Down.Byte_data)
                    {
                         case KB_0:
				         case KB_1:
				         case KB_2:
				         case KB_3:
				         case KB_4:
				         case KB_5:
				         case KB_6:
				         case KB_7:
				         case KB_8:
				         case KB_9:
					          KB_Recv_Buf[KB_Point]=Get_Key_Val(Key_Down.Byte_data);
					          if(KB_Point<=15)
					                SelectShow_Byte(2,15-KB_Point,KB_Recv_Buf[KB_Point]-0x30);
					          else
					                SelectShow_Byte(0,30-KB_Point,KB_Recv_Buf[KB_Point]-0x30);
					          KB_Point++;
					          Flag_KB_Enable=true; 
				         break;
				         case KB_STAR: //  "*"="," 
					          KB_Recv_Buf[KB_Point]=0x2C;
						      if(KB_Point<=15)
					                SelectShow_Byte(2,15-KB_Point,66);
					          else
					                SelectShow_Byte(0,30-KB_Point,66);
					          KB_Point++;
					          Flag_KB_Enable=true; 
				         break;
				         case KB_CLEAR:
					          if (KB_Point>0) KB_Point--;
					                KB_Recv_Buf[KB_Point]=0x00;
					          if(KB_Point<=15)
					                SelectShow_Byte(2,15-KB_Point,81);
					          else
					                SelectShow_Byte(0,30-KB_Point,81);
					          Flag_KB_Enable=true; 
				         break;
				         case KB_ENTER:
					          SYS_Status=SYS_DIALING_STATE;
					          Dialing_Display();
					          Com_Send("ATDT");
                              KB_Recv_Buf[KB_Point]=0x00;
					          Com_Send(KB_Recv_Buf);
					          Com_Send("\r\n");	
					          Flag_KB_Enable=true; 				
				         break;
						 case KB_MENU:
								SYS_Status=SYS_MENU_STATE;
			        			LCD_Clear();
			        			Menu_Display();
			        			Flag_KB_Enable=true; 
			   			 break;
				         case KB_EXIT:
					          SYS_Status=SYS_MENU_FILE_LIST_STATE;
					          File_List_Display();
					          Flag_KB_Enable=true; 
				         break;
				         default:
				         break;
			        }
                }
			    if(MODEM_Status==MODEM_RINGING_STATE)    
                {      
                      SYS_Status=SYS_RINGING_STATE;
                      if(Ring_Cnt>2)  Ring_Display();
                      else Ring_Cnt++;
                      Ring_Display();
                }
            break;
            case SYS_DIALING_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    if(Key_Down.Byte_data==KB_EXIT)               
                          Do_Cancel();
                          Flag_KB_Enable=true; 
                }
                if(MODEM_Status==MODEM_CONNECTED_STATE)
                {
                    SYS_Status=SYS_READY_STATE;
                    Ready_Display();  
                    Flag_KB_Enable=true;       
                }
            break;
            case SYS_READY_STATE:
            case SYS_TX_RX_STATE:
                Ring_Cnt=0;
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    switch(Key_Down.Byte_data)
                    {
                         case KB_EXIT:
                              Do_OnHook();
                              Flag_KB_Enable=true; 
                         break;
                         case KB_1:
                         	  SYS_Status=SYS_READY_SEND_STATE;			
                         	  Send_Ready_Display();
                              Flag_KB_Enable=true; 
                         break;
                         case KB_2:
                         	  SYS_Status=SYS_READY_RECIEVE_STATE;
                              Ready_Recieve_Display();
                              Flag_KB_Enable=true; 
                         break;
						 case KB_MENU:
								SYS_Status=SYS_MENU_STATE;
			        			LCD_Clear();
			        			Menu_Display();
			        			Flag_KB_Enable=true; 
			   			 break;
                         default:
                         break;
                    }
                }

            break;
            case SYS_RINGING_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    if(Key_Down.Byte_data==KB_EXIT)               
                    {    Do_Cancel();
                         Sys_Ring.Active=false;
                         Flag_KB_Enable=true; 
                    }
                    else
                    {
                          if(Key_Down.Byte_data==KB_ENTER)
                          {
                            SYS_Status=SYS_ANSWER_STATE;
                            Answer_Call();
                            Connecting_Display();
                            Flag_KB_Enable=true; 
                          }
                    }
                }
            break;
            case SYS_ANSWER_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    if(Key_Down.Byte_data==KB_EXIT)               
                    {
                          Do_Cancel();
                          Flag_KB_Enable=true; 
                    }
                }
                if(MODEM_Status==MODEM_CONNECTED_STATE)
                {
                    SYS_Status=SYS_READY_STATE;
                    Ready_Display();        
                }
            break;
            case SYS_MENU_SETUP_STATE:
                if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    if(Key_Down.Byte_data==KB_EXIT)               
                          SYS_Status=SYS_MENU_STATE;
           				    Menu_Display();
           				    Flag_KB_Enable=true; 
                }
                if(Sys_Ring.Active)
                {
                    SYS_Status=SYS_RINGING_STATE;
                    if(Ring_Cnt>2) Ring_Display();
                    else Ring_Cnt++;
                } 
            break; 
			case SYS_MENU_ONHOOK_STATE:
                Do_OnHook();
            break; 
            case SYS_READY_SEND_STATE:
            	if(Key_Down.Active)
                {
                    Key_Down.Active=false;
                    switch(Key_Down.Byte_data)
                    {
                         case KB_EXIT:
                              Do_Cancel();
                              Flag_KB_Enable=true; 
                         break;
                         case KB_SEND:
                         	  SYS_Status=SYS_SENDING_STATE;			
                         	  Send_File_Display();
                              Do_Send_File();
                              Flag_KB_Enable=true; 
                         break;
                         case KB_MENU:
				SYS_Status=SYS_MENU_STATE;
			        LCD_Clear();
			        Menu_Display();
			        Flag_KB_Enable=true; 
			   break;
                         default:
                         break;
                    }
                }

            break;
            case SYS_SENDING_STATE:
            break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -