📄 serial1.c
字号:
/***********************************
串口发送和接收及液晶显示
2008.10.29
***********************************/
#include<reg51.h>
#include"LCD1602.H"
#define uint unsigned int
#define uchar unsigned char
uchar code sms1[]={"hello crf make"};
uchar code at[]= {"at\x0D\x0a"};
uchar code cmgf[]= {"AT+cmgf=1\x0D\x0a"};
uchar code cmgr[]= {"AT+cmgr\x0D\x0a"};
uchar code cmgs[]= {"at+cmgs=13380035776\x0D\x0a"};
uchar code test[]= {"test\x1a"};
uchar idata sms[50];
uchar idata content[50];
uchar n = 0,New_sms=0;
bit k = 0;
/***********************
串口中断0的初始化
************************/
void init()
{
LCD_Initial();
PCON |= 0x80; //PCON: power control , SMOD=1
SCON = 0x50; //SCON: serial control
TMOD = 0x20; //TMOD: timer model
TH1 = 0xFA; //Bps: 9600
TR1 = 1;
EA = 1;
ES = 1;
TI = 0;
RI = 0;
}
/*************************
串口中断0的中断服务程序
***************************/
void es_server() interrupt 4
{
if(RI)
{
if(n>31) n=0;
sms[n]=SBUF;
while(RI == 0 );
RI=0;
n++;
}
else
{
TI=0;
}
k=1;
if(sms[0]=='+' && sms[1]=='C' && sms[2]=='M' && sms[3]=='T' && sms[4]=='I') {New_sms=1;k=0;}
}
/******************************
提取字码程序
*******************************/
void Pick_Code()
{
uchar k=0,num=0,temp,l=0;
while(sms[l]!='\x0d' | sms[l+1]!='\x0a')//找出信息前的回车
{
l++;if(l>32) break;
}
l+=2;
temp=l;
while(sms[l]!='o' | sms[l+1]!='k' ) //找出信息最后的OK
{
l++;num++;if(l>32) break;
}
for(k=0;k<num-2,l<32;k++,temp++)
content[k]=sms[temp];
}
/******************************
发送子程序
******************************/
void SendASC(uchar ASC)
{
bit es;
es=ES;
ES=0;//关闭中断
TI=0;
SBUF=ASC;
while(!TI);
TI=0;
ES=es;
}
/***************************
发送字符串程序
****************************/
void SendToGsm(uchar* p)
{
while(*p!='\0')
{
SendASC(*p++);
}
}
/***************************
延时程序
***************************/
void delay(uchar a)
{
uint j;
for(;a>1;a--)
for(j=5000;j>1;j--);
}
/**************************
主程序
**************************/
main( )
{
init();
GotoXY(0,0);
Print(" --waiting-- ");
SendToGsm(at);
delay(2);
while(1)
{
while(New_sms==1) //接收到手机有新信息
{
New_sms=0;
P1=0x55;
SendToGsm(cmgr);
delay(2);
}
while(k==1)
{
Pick_Code();
k=0;
LCD_Initial();
delay(1);
GotoXY(0,0);
Print(sms);
GotoXY(0,1);
Print(content);
}
delay(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -