📄 datafax.c
字号:
#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 + -