📄 0706.c
字号:
SelectRam();
for(xp_ram=0;xp_ram<0x7fff;xp_ram++)
{
cp_str=pc_str;
xp_ram1=xp_ram;
while(*cp_str)
{
if(*xp_ram1!=*cp_str)
{
same=0;
break;
}
else
{
same=1;
cp_str++;
xp_ram1++;
_nop_();
}
}
if(same)
break;
}
return(xp_ram);
}
uchar GetMsgLength(uchar xdata *xp_msg) //取出短信中的文字长度
{
uchar data i;
uchar data j;
xp_msg+=ADDR_SMS_LENGTH;
i=*xp_msg++;
j=*xp_msg++;
if((i>='A')&&(i<='F'))
{
i=i-0x37;
}
else
if((i>='0')&&(i<='9'))
{
i=i-0x30;
}
if((j>='A')&&(j<='F'))
{
j=j-0x37;
}
else
if((j>='0')&&(j<='9'))
{
j=j-0x30;
}
i=(i<<4)|j;
return(i);
}
uchar InvertMsg(uchar xdata *xp_msg,uchar length) // 将16进制显示方式的数据转换为真正16进制
{
uchar data i;
uchar data k;
uint data j;
uchar xdata *xp_source;
uchar xdata *xp_target;
xp_source=xp_msg+ADDR_SMS_UD;
xp_target=xp_source;
for(j=0;j<length;j++)
{
i=*xp_source++;
if((i>='A')&&(i<='F'))
{
i=i-0x37;
}
else
if((i>='0')&&(i<='9'))
{
i=i-0x30;
}
k=i;
i=*xp_source++;
if((i>='A')&&(i<='F'))
{
i=i-0x37;
}
else
if((i>='0')&&(i<='9'))
{
i=i-0x30;
}
k=k<<4;
k=k|i;
*xp_target++=k;
}
*xp_target++=0xff;
*xp_target++=0xff;
*xp_target++=0xff;
*xp_target++=0xff;
}
uchar IsSmsBuffer(uchar xdata *xp_smsbuffer)
{
uchar xdata *xp_ram;
uchar code *cp_str;
uchar xdata *xp_ram1;
uchar code pc_str[]="\r\n+CMGR:";
uchar code end_str[]="\r\n";
bit same;
for(xp_ram=xp_smsbuffer;xp_ram<0x7fff;xp_ram++)
{
cp_str=pc_str;
xp_ram1=xp_ram;
while(*cp_str)
{
if(*xp_ram1!=*cp_str)
{
same=0;
break;
}
else
{
same=1;
cp_str++;
xp_ram1++;
_nop_();
}
}
if(same)
{
break;
}
}
if(same)
{
while(1)
{
if((*xp_ram1=='\r')&&(*(xp_ram1+1)=='\n'))
{
xp_ram1++;
xp_ram1++;
break;
}
else
{
if(xp_ram1<xp_ram+0x12)
{
xp_ram1++;
}
else
{
xp_ram1=0;
break;
}
}
}
}
else
{
xp_ram1=0;
}
return(xp_ram1);
}
void ProcessBuffer()
{
uchar xdata *xp_ram;
uint xdata *xp_unicode;
uint xdata *xp_hzk;
uchar bak;
uint hzk;
uchar i;
uchar k;
uint j;
uint unicode;
P1&=0XF8;
SelectRam();
k=IsSmsBuffer(0);
i=GetMsgLength(k);
// gsmsms.UD_LENGTH=i;
InvertMsg(k,i);
xp_unicode=ADDR_SMS_UD;
xp_hzk=0x200;
i=i/2;
for(j=0; j<i;j++)
{
unicode=*xp_unicode;
bak=P1;
SelectRom();
hzk=HZK_UNICODE(unicode,1);
P1=bak;
*xp_hzk=hzk;
xp_unicode++;
xp_hzk++;
}
SaveWord(0x200,0);
CreateFnt16();
_nop_();
}
void main()
{
// SaveWord(0x00);
// ReadSy();
init();
// Init_RTC();
// ResetTime();
// CreateFnt16();
EN=1; // LED显示板上OE
Select374();
SCAN_REG=CTRL_R;
xp_rbuffer=RBUF_START;
// AT_Command("AT+CPMS=MT");
// xp_rbuffer=RBUF_START;
EA=1;
AT_Command("AT+CMGR=9");
while(1)
{
if(serial_flag)
{
if(timeout>10000)
{
serial_flag=0;
SelectRam();
A16=0;
*xp_rbuffer++=0x55;
*xp_rbuffer++=0xaa;
*xp_rbuffer++=0x55;
*xp_rbuffer++=0xaa;
xp_rbuffer=RBUF_START;
receiveflag=1;
}
else
{
timeout++;
}
}
if(receiveflag)
{
EA=0;
EN=0;
Select374();
SCAN_REG=CTRL_R;
ProcessBuffer();
receiveflag=0;
EN=1;
Select374();
SCAN_REG=CTRL_R;
EA=1;
}
_nop_();
}
}
void intex0() interrupt 0
{
uchar i;
uchar bak;
CLK_EN=1;
bak=P1;
SelectRTC();
i=SECOND;
timemem[15]=i&0X0F;
timemem[14]=(i&0xf0)>>4;
i=MINUTE;
timemem[13]=i&0X0F;
timemem[12]=(i&0xf0)>>4;
i=HOUR;
timemem[11]=i&0X0F;
timemem[10]=(i&0xf0)>>4;
i=WEEK;
timemem[9]=i&0X0F;
timemem[8]=(i&0xf0)>>4;
i=DATE;
timemem[7]=i&0X0F;
timemem[6]=(i&0xf0)>>4;
i=MONTH;
timemem[5]=i&0X0F;
timemem[4]=(i&0xf0)>>4;
i=YEAR;
timemem[3]=i&0X0F;
timemem[2]=(i&0xf0)>>4;
i=CENTURY;
timemem[1]=i&0X0F;
timemem[0]=(i&0xf0)>>4;
_nop_();
i=REG_C;
P1=bak;
CLK_EN=0;
}
void serial() interrupt 4
{
uchar i;
serial_flag=1;
bak=P1;
i=SBUF;
RI=0;
SelectRam();
A16=0;
timeout=0;
*xp_rbuffer++=i;
P1=bak;
_nop_();
}
void intt0() interrupt 1
{
uchar xdata *px1;
ulint row1;
volatile uchar temp;
uchar i;
uchar page;
uchar dot;
union
{
uchar byte[4];
unsigned long int dword;
uint word[2];
} word;
row1=reg_row;
word.dword=row1*0x1000;
A16=1;
SelectRam();
CLK_EN=0;
if(step==1)
{
px1=word.word[1]+312;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
for(i=0;i<4;i++)
{
px1=(word.word[1])+timemem[i]*8;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
}
px1=word.word[1]+208; // year
for(dot=0;dot<16;dot++)
{
temp=*px1++;
}
for(i=4;i<6;i++)
{
px1=(word.word[1])+timemem[i]*8;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
}
px1=word.word[1]+192; // month
for(dot=0;dot<16;dot++)
{
temp=*px1++;
}
for(i=6;i<8;i++)
{
px1=(word.word[1])+timemem[i]*8;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
}
px1=word.word[1]+176; // date
for(dot=0;dot<16;dot++)
{
temp=*px1++;
}
px1=word.word[1]+312;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
if(delaycount++>10000)
{
step=2;
delaycount=0;
}
}
else
if(step==2)
{
px1=word.word[1]+272; // 星
for(dot=0;dot<16;dot++)
{
temp=*px1++;
}
px1=word.word[1]+288; // 期
for(dot=0;dot<16;dot++)
{
temp=*px1++;
}
px1=word.word[1]+80+timemem[9]*16;
for(dot=0;dot<16;dot++)
{
temp=*px1++;
}
px1=word.word[1]+312; //space
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
px1=word.word[1]+312; //space
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
for(i=10;i<12;i++) //hour
{
px1=(word.word[1])+timemem[i]*8;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
}
px1=word.word[1]+304; //:
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
for(i=12;i<14;i++) //minute
{
px1=(word.word[1])+timemem[i]*8;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
}
px1=word.word[1]+304; //:
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
for(i=14;i<16;i++) //minute
{
px1=(word.word[1])+timemem[i]*8;
for(dot=0;dot<8;dot++)
{
temp=*px1++;
}
}
if(delaycount++>10000)
{
step=0;
delaycount=0;
pt_col=START_PT;
}
}
else
if(step==3)
{
px1=(word.word[1])+320;
for(dot=0;dot<128;dot++)
{
temp=*px1++;
}
}
else
if(step==0)
{
px1=(word.word[1])+pt_col;
for(dot=0;dot<160;dot++)
{
temp=*px1++;
}
}
CLK_EN=1;
Select374();
STB=0; // 595 锁存
SCAN_REG=CTRL_R;
STB=1;
SCAN_REG=CTRL_R;
i=CTRL_R&0Xf0;
CTRL_R=i|reg_row; // 行扫描 输出
SCAN_REG=CTRL_R;
reg_row++; // 下一行
if(reg_row&0x10)
{
reg_row=0; // 扫完16行回到第1行
if(pt_col<4096-448)
{
pt_col++;
}
else
{
pt_col=START_PT;
step=1;
delaycount=0;
}
}
CLK_EN=1;
SelectInport();
i=ReadInport;
if(i!=0xff) // 当按键按下时
{
h_delay_count=0; // 高电平时间计数器清0
if(l_delay_count<L_DELAY) //当低电平的时间小于设定值时继续延时
{
l_delay_count++;
}
else // 当低电平延时时间达到设定值时 按键有效
{
if(CountEnable)
{
CountEnable=0;
if(step==3)
{
step=0;
}
else
{
step=3;
}
}
}
}
else //当按键释放时
{ // 低电平时间计数器清0
l_delay_count=0;
if(h_delay_count<H_DELAY) // 当高电平的时间小于设定值时继续延时
{
h_delay_count++;
}
else // 当高电平延时时间达到设定值时 允许计数
{
CountEnable=1;
}
}
TH0=0XFC;
TL0=0X00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -