📄 19264cv0_1.c
字号:
//if(keytabindex==0)
//dtest();//for test在LCD上显示从主机接收到的前7位
//for debug start
//byte_write(0,0x01,0x03);
//x5045data=byte_read(0,0x01);
/*
Dispchar(2,5,(number_ascii(RxMain_data[2])),1);
Dispchar(2,4,(number_ascii(((RxMain_data[2])>>4))),1);
Dispchar(2,7,(number_ascii(RxMain_data[3])),1);
Dispchar(2,6,(number_ascii((RxMain_data[3]>>4))),1);
Dispchar(2,9,(number_ascii(RxMain_data[4])),1);
Dispchar(2,8,(number_ascii((RxMain_data[4]>>4))),1);
Dispchar(2,11,(number_ascii(RxMain_data[5])),1);
Dispchar(2,10,(number_ascii((RxMain_data[5]>>4))),1);
Dispchar(2,13,(number_ascii(RxMain_data[6])),1);
Dispchar(2,12,(number_ascii((RxMain_data[6]>>4))),1);
*/
/*
Dispchar(2,0,(RxMain_data[0]),1);
Dispchar(2,1,(RxMain_data[1]),1);
Dispchar(2,2,(RxMain_data[2]),1);
Dispchar(2,4,(number_ascii(RxMain_data[3])),1);
Dispchar(2,3,(number_ascii(((RxMain_data[3])>>4))),1);
Dispchar(2,6,(number_ascii(RxMain_data[4])),1);
Dispchar(2,5,(number_ascii((RxMain_data[4]>>4))),1);
Dispchar(2,8,(number_ascii(RxMain_data[5])),1);
Dispchar(2,7,(number_ascii((RxMain_data[5]>>4))),1);
Dispchar(2,10,(number_ascii(RxMain_data[6])),1);
Dispchar(2,9,(number_ascii((RxMain_data[6]>>4))),1);
Dispchar(2,12,(RxMain_data[7]),1);
Dispchar(2,11,(RxMain_data[8]),1);
Dispchar(2,13,(RxMain_data[9]),1);
Dispchar(2,14,(RxMain_data[10]),1);
Dispchar(2,15,(RxMain_data[11]),1);
Dispchar(2,16,(RxMain_data[12]),1);
Dispchar(2,17,(RxMain_data[13]),1);
Dispchar(2,18,(RxMain_data[14]),1);
Dispchar(2,19,(KEYVAL_OK|0x30),1);
Dispchar(2,20,(RxMain_end|0x30),1);
*/
//for debug end
//p1tune(RAMCS);
//i=E_ConveneRec[0].Timer;
i=SP;
Dispchar(6,1,(number_ascii(i)),1);
Dispchar(6,0,(number_ascii((i>>4))),1);
//Dispchar(6,2,(RxMain_data[0]),0);
//Dispchar(6,4,(RxMain_data[1]),0);
//Dispchar(6,6,(RxMain_data[2]),0);
//Dispchar(6,8,(RxMain_data[3]),0);
RefushFace();//刷新主界面//for
//||OldInforCnt!=NewInforCnt
//如果有来电而且未显示来电号码。或者在非主界面显示超时或者即时显示新信息超时
if((comeingtelep&&dispteleph)||WaitingOver||((BLtime>=6100)&&((InforType&0x0f)>0)))
{
keytabindex=0;
mainface();
pic_temp=0;
if((InforType&0x0f)>0)//清除新信息显示标志
InforType=0;
}
if(testkey())
{
KeyCaller=0x10;
keytune();
}
IRKeyVal=HandleIR();
if(IRKeyVal!=0xff)
{
KeyCaller=0x20;
keytune();
}
if(gps_rec_end)
{
seridatatune();//GPS信号处理
gps_star = 0;
gps_rec_end = 0;
}
rxdatatune();//处理主机发送来的数据*/
if(MainRecBusy_flag&&MainRecBusyTime>110)//接受主机数据完后延迟一秒
{
MainRecBusy_flag=0;
MainRecBusyTime=0;
CONRX=DGPS_COMM;
flag_main_dgps=DGPS_COMM;
EX1=1;//开外部中断1,检测主机串行信号
}
if(MainRecTimer>250)//从接受主机数据开始延迟2.5秒后断开
{
flag_main_dgps=DGPS_COMM;
CONRX=DGPS_COMM;
MainRecTimer=0;
EX1=1;//开外部中断1,检测主机串行信号
}
}
}
////////////////主函数结束///////////////////////////////////////////////
void untogb(uchar hi_unicode,uchar low_unicode)//unicode 转换成 GB2312内码
{ //查表后所得到的是区位码+0x2020
//加0x8080转化为内码送入缓冲
//如果以后RAM不够用可采用返回参数方式
//!!不可显示字符转换会出乱码!!!//不转换ASCII的UNICODE
uint16 data unicode;
/*if(hi_unicode==0&&low_unicode<0xa4)//如果是ASCII字符
{
}*/
p1tune(ROMCS);
A18=1;
A17=0;//非常重要!!!!!
LCDRWIO=1;
LCDDIIO=1;
//P1=ROMCS;
unicode=hi_unicode;
//CY=0;
unicode=unicode<<8;
//k=low_unicode;
unicode+=(uint16)(low_unicode);
if(unicode>=0x80a4)//判断是在第一还是第二个64K范围
{
//unicode=unicode-0x80a4;
unicode-=0x80a4; //减去0x8000
A16=1;
//unicode-=0x00a4;
}
else
{
A16=0;
unicode-=0x00a4;
}
//CY=0;
unicode=unicode<<1;
if(unicode<0x0400)//STC89C512RD+有1024BYTE XRAM如用此IC 0X400以内地址需屏蔽
{ FlagXram=1;//读取点阵时使用XDATA 0x0000--0x02ff标志。1:使用 0:未使用
AUXR|=0x02;//屏蔽内部XRAM
}
hi_gb=XBYTE[unicode];
unicode++;
low_gb=XBYTE[unicode];
FlagXram=0;//读取点阵时使用XDATA 0x0000--0x02ff标志。1:使用 0:未使用
AUXR&=0xfd;//使能内部XRAM
/*if((hi_gb<0x21)||(low_gb<0x21))//for debug
{
hi_gb=0x21;low_gb=0x32;
} //for debug
//P1=j;
if((hi_gb>0x77)||(low_gb>0x7e))//for debug
{
hi_gb=0x21;low_gb=0x24;
} //for debug*/
hi_gb=hi_gb|0x80;
low_gb=low_gb|0x80;
A18=0;
}
void rxdatatune(void)//接收主机数据处理
{
uchar data i,j,k,checksum;
uint16 idata p,q,r;
p=q=r=0;
i=j=k=checksum=0;
//while(TxNum!=0||TxPos!=0);
//ES=0;
Feedingdog();
LCDRWIO=1;
LCDDIIO=1;
p1tune(RAMCS);
if(RxMain_end)
{
p=RxMain_data[3];
p=(p<<8);
p+=RxMain_data[4];
p+=5;//加上$+设备字+命令字+2数据长度字节
checksum=RxMain_data[3];
for(q=4;q<p;q++)
{
checksum^=RxMain_data[q];
}//算校验和
//for GPRS SMS DEBUG STAR
if(RxMain_data[2]==0x43)//发送短语或者业务代码后主机的回应。
{
if(RxMain_data[5]==0x00)
KEYVAL_OK=1;
else
KEYVAL_OK=0;
RxMain_end=FALSE;
}
if(RxMain_data[2]==0x42)//for test
{ ReturnOK(0x42); //for test
BEEPtime=0;
BLtime=0;
BEEP=0;
BLIGHT=0;
if(RxMain_data[15]==0x00)//如果是公共信息
CommProcess(p);//GPRS发送的公共信息处理
if(RxMain_data[15]==0x10)//如果是调度信息
ScheduleInforProcess(p);//GPRS发送的调度信息处理
//电召存储
if(RxMain_data[15]>=0x20&&RxMain_data[15]<0x30)
ConveneInforProcess(p);//电召信息存储
if(RxMain_data[15]==0x30)//如果是定制短语
CenterCstmWordsProcess(p);
if(RxMain_data[15]==0x40)//登陆密码恢复出厂设置
{
reginit();//登录初始化
}
ReturnOK(0x42);
if(keytabindex==115)//如果正在及时显示新信息状态
InforType|=1;
}
//for GPRS SMS DEBUG END
//FOR SMS DEBUG START
if(RxMain_data[2]==0x51)
{
BEEPtime=0;
BLtime=0;
BEEP=0;
BLIGHT=0;
p1tune(RAMCS);
CommSMSProcess(p);//短信存储
ReturnOK(0x51);
}
//FOR SMS DEBUG END
if(RxMain_data[q]==checksum) //校验OK?因仿真器不支持所以拆成以上四个表达式
{
i=RxMain_data[1];//取设备关键字
if(0x62==i||0x61==i)//如果是发给液显屏
{
i=RxMain_data[2];//取命令
switch(i)
{ //应答主机部分。。。。。。。。
case 0x38://主机要求液显屏自检//
//需要添加实际的自检代码
ReturnOK(0x38);
break;
case 0x62://主机发送GSM信号强度值“无须应答”//
OldAntennaVal=antenna;
antenna=RxMain_data[5];//
break;
case 0x41://主机发送GSM、GPRS状态值到外设
ReturnOK(0x41);
if(RxMain_data[5]==0x00)
{
bGSM_GPRS=1;//0:GSM状态 1:GPRS状态
}
else
bGSM_GPRS=0;//0:GSM状态 1:GPRS状态
if(RxMain_data[5]==0x03||RxMain_data[5]==0x04)//电话接通
{
//displayline(2,&nochardis[0],0);
//displayline(4,&nochardis[0],0);
displayline(2,&Zzth[0],0);//"正在通话。。。"
/*
disromdata(0xD5,0xFD); // 正
disdatatune();
Dispchin(2,2,0);
disromdata(0xD4,0xDA); // 在
disdatatune();
Dispchin(2,4,0);
disromdata(0xCD,0xA8); // 通
disdatatune();
Dispchin(2,6,0);
disromdata(0xBB,0xB0); // 话
disdatatune();
Dispchin(2,8,0);
disromdata(0xa1,0xad); // ...
disdatatune();
Dispchin(2,10,0);
*/
Dispchar(4,MainFaceNumPtr,0x20,0);
MainFaceNumPtr=2;
Dispchar(6,MainFaceNumPtr,0x20,1);
CallStatus=0x03;
}
if(RxMain_data[5]>0x05&&RxMain_data[5]<=0x0a)//拨打不成功
{ ComeTelBuf[0]=0x2a;//
displayline3(2);
displayline3(4);
TxCommandBuf[0]=0x39;
TxCommandBuf[1]=0xff;
TxCommandBuf[2]=0x17;
TxCommandBuf[3]=0x0d;
TxCmdCnt=0x03;
TxCommand();//发送挂断命令
p1tune(RAMCS);
i=RxMain_data[5];
if(i==0x06)//对方忙
{
disromdata(0xB6,0xD4); // 对
disdatatune();
Dispchin(3,8,0);
disromdata(0xB7,0xBD); // 方
disdatatune();
Dispchin(3,10,0);
disromdata(0xC3,0xA6); // 忙
disdatatune();
Dispchin(3,12,0);
disromdata(0xa3,0xa1); // !
disdatatune();
Dispchin(3,14,0);
}
else
{
if(i==0x09)//无人接听
{
if(CallStatus==0x03&&keytabindex==0)//如果在通话状态
{
displayline(3,&Thjs[0],0);//“通话结束”
/*
disromdata(0xCD,0xA8); // 通
disdatatune();
Dispchin(3,8,0);
disromdata(0xBB,0xB0); // 话
disdatatune();
Dispchin(3,10,0);
disromdata(0xBD,0xE1); // 结
disdatatune();
Dispchin(3,12,0);
//
disromdata(0xCA,0xF8); // 束
disdatatune();
Dispchin(3,14,0);
disromdata(0xa3,0xa1); // !
disdatatune();
Dispchin(3,16,0);
*/
}
else
{
displayline(3,&Wjld[0],0);//汉字“未接来电!”
/*
disromdata(0xCE,0xB4); // 未
disdatatune();
Dispchin(3,8,0);
disromdata(0xBD,0xD3); // 接
disdatatune();
Dispchin(3,10,0);
//
disromdata(0xC0,0xB4); // 来
disdatatune();
Dispchin(3,12,0);
disromdata(0xB5,0xE7); //电
disdatatune();
Dispchin(3,14,0);
disromdata(0xa3,0xa1); // !
disdatatune();
Dispchin(3,16,0);
*/
}
}
else
{
displayline(3,&Hjsb[0],0);//汉字“呼叫失败!”
/*
disromdata(0xBA,0xF4); // 呼
disdatatune();
Dispchin(3,8,0);
disromdata(0xBD,0xD0); // 叫
disdatatune();
Dispchin(3,10,0);
disromdata(0xCA,0xA7); // 失
disdatatune();
Dispchin(3,12,0);
disromdata(0xB0,0xDC); // 败
disdatatune();
Dispchin(3,14,0);
disromdata(0xa3,0xa1); // !
disdatatune();
Dispchin(3,16,0);
*/
}
}
dispnewsnumb();// 显示接收信息的条数、以及未读信息的条数
CallStatus=0x00;//待机状态
}
break;
case 0x42://收到中心下的发信息
ReturnOK(0x42);
BEEPtime=0;
BLtime=0;
BEEP=0;
BLIGHT=0;
break;
case 0x60://主机发送电话号码或者功能键值
//用于主机发送手柄的键值到手柄供手柄LCD显示
//ReturnOK(0x60);
break;
case 0x51:////主机发送文本信息
//p1tune(RAMCS);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -