|
楼主 |
发表于 2012-7-13 17:16:09
|
显示全部楼层
本帖最后由 general111 于 2012-7-13 17:19 编辑
#include "config.h"
#include "stdlib.h"
#define UART0_BPS 9600 // 定义通讯波特率
#define UART1_BPS 115200 // 定义通讯波特率
#define Task0StkLengh 100 //Define the Task0 stack length 定义用户任务0的堆栈长度
#define Task1StkLengh 300
#define Task2StkLengh 100
#define Task3StkLengh 200
uint8 Flag_Sms=0;
uint8 Flag_buf=0;
uint8 Flag_gIsNewMsg=0;
uint8 Flag_gmax=0;
uint8 Flag_pass=0;
uint8 Flag_telcompare=0;
uint8 Flag_revsms=0;
uint8 Flag_task2=0;
uint8 Flag_task3_1=0;
uint8 Flag_task3_2=0;
uint8 Flag_task3_3=0;
uint8 Flag_task3_4=0;
uint8 Flag_task3_5=0;
uint8 Flag_task3=0;
OS_STK Task0Stk [Task0StkLengh]; //Define the Task0 stack 定义用户任务0的堆栈
OS_STK Task1Stk [Task1StkLengh];
OS_STK Task2Stk [Task2StkLengh];
OS_STK Task3Stk [Task3StkLengh];
void Task0(void *pdata); //Task0 任务0
void Task1(void *pdata);
void Task2(void *pdata);
void Task3(void *pdata);
int main (void)
{
OSInit ();
OSTaskCreate (Task0,(void *)0, &Task0Stk[Task0StkLengh - 1], 2);
OSTaskCreate (Task1,(void *)0, &Task1Stk[Task1StkLengh - 1], 5);
OSTaskCreate (Task2,(void *)0, &Task2Stk[Task2StkLengh - 1], 3);
OSTaskCreate (Task3,(void *)0, &Task3Stk[Task3StkLengh - 1], 4);
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task0 任务0
** 工作灯
********************************************************************************************************/
void Task0 (void *pdata)
{
pdata = pdata;
TargetInit ();
GpioInit(); //led 初始化
Uart1Init(UART1_BPS);//Uart1 初始化
SIM300Init();//初始化SIM300
while (1)
{
if ((IO0SET & RUN) == 0)
{
IO0SET = RUN;//运行状态指示灯
OSTimeDly(50);
}
else
{
IO0CLR = RUN;
OSTimeDly(50);
}
OSTimeDly(50);
}
}
/*********************************************************************************************************
** Task1 任务1
** 查询记录
********************************************************************************************************/
//union uint_2uchar Com_Rec_Chk; // /lzp 接收命令校验和计算寄存器 /lzp
void Task1 (void *pdata)
{
uint8 pp[]="Uart0 is OK! welcome to LPC!";
uint8 i;
pdata = pdata;
if(Uart0Init(UART0_BPS))
{
Uart0SendData(pp);
}
OSTimeDly(50);
while(1)
{
SendData_CHD802();//顺序查询历史记录 CHD802的协议
OSTimeDly(200); //等待接收完毕
}
}
/*********************************************************************************************************
** Task2 任务2
** 通过uart0接收数据,有刷卡事件时通过短信发送
********************************************************************************************************/
void Task2 (void *pdata)
{
uint8 buf[11];
pdata = pdata;
OSTimeDly(50);
while(1)
{
protocol(); //处理接收的协议
if(Ready_Flag) //有刷卡短息 ,发卡号
{
Ready_Flag=0;
//转换为10位卡号
buf[0]=(Dinfo.ID1%100/10)+'0';
buf[1]=(Dinfo.ID1%10)+'0';
buf[2]=(Dinfo.ID2%100/10)+'0';
buf[3]=(Dinfo.ID2%10)+'0';
buf[4]=(Dinfo.ID3%100/10)+'0';
buf[5]=(Dinfo.ID3%10)+'0';
buf[6]=(Dinfo.ID4%100/10)+'0';
buf[7]=(Dinfo.ID4%10)+'0';
buf[8]=(Dinfo.ID5%100/10)+'0';
buf[9]=(Dinfo.ID5%10)+'0';
buf[10]='\0';
//发英文格式短信
SendSms(telcode1,buf);
OSTimeDly(100);
}
OSTimeDly(50);
}
}
/*********************************************************************************************************
** Task3 任务3
** 测试SIM卡
********************************************************************************************************/
void Task3 (void *pdata)
{
/*发短消息CTL+Z={0x1a,0x0} CR=0x0d LF=0x0a*/
/*AT+CMGS="15023664179"<CR>HELLO!<CTL+Z><CR>*/
// uint8 i;
uint8 telSource[12]={0}; //要修改的手机号
uint8 telDestination[12]={0}; //修改成的手机号
uint8 Secret[Password_num]={0}; //读到的密码
uint8 data_buf[42]={'a','d','m','i','n',' ','1','3','7','0','5','3','3','0','9','2','9','\0',
'1','3','0','0','4,'5','0','1,'9,'1','5','\0',
'1','5','8','6','4','2','6','0','6','3','9','\0'};
uint8 i=0,k=0,j=0;
pdata = pdata;
I2cInit(100000); /* I2C初始化,400K */
OSTimeDly(200);
/* 往起始地址0x00开始写入39个数据 */
I2C_WriteNByte(CAT24C16, X_ADD_8_SUBA, 0x00, data_buf, 42);
OSTimeDly(50);
TelphoneInit(); //Telphone初始化 : 读出Password和3个telphone NO.
OSTimeDly(200);
Uart1SendData("AT+CPIN?\r");//SIM卡状态 返回:+CPIN: READY , 则正常
OSTimeDly(100);
while(Uart1RevBuf[i++]!=0x0)
{
if(Uart1RevBuf=='R'&&Uart1RevBuf[i+1]=='E'&&Uart1RevBuf[i+2]=='A'&&Uart1RevBuf[i+3]=='D'&&Uart1RevBuf[i+4]=='Y')
{
break;
}
Uart1SendData("AT+CPIN?\r");
OSTimeDly(100);
}
Uart1SendData("AT+CSCA?\r");//设置短信中心号码了吗 AT+CSCA=“+8613800270500” 设置为当地运营商号码(具体而定)
OSTimeDly(100);
Uart1SendData("AT+CMGD=1\r"); //删除所有段信 \"DEL ALL\"
Uart1SendData("AT+CMGD=2\r");
Uart1SendData("AT+CMGD=3\r");
Uart1SendData("AT+CMGD=4\r");
Uart1SendData("AT+CMGD=5\r");
Uart1SendData("AT+CMGD=6\r");
Uart1SendData("AT+CMGD=7\r");
Uart1SendData("AT+CMGD=8\r");
Uart1SendData("AT+CMGD=9\r");
Uart1SendData("AT+CMGD=10\r");
OSTimeDly(50);
Uart1SendData("AT+CNMI=2,1\r");//设置短信提示功能输入指令
OSTimeDly(50); //+CMTI: "SM",1 1表示手机内短消息数量
// OS_EXIT_CRITICAL();
while(1)
{
RevSms();
if(gIsNewMsg==0x0F) //收短信并解析
{
gIsNewMsg=0x0;
if(gMx>19) //短信内容大于密码字节数才比较,否则删除
{
for(j=0;j<Password_num;j++) //密码
{
Secret[j]=newmsg[j];
}
if(PasswordCompare(Secret)) //密码比较 正确则执行下面对比
{
for(j=0;j<11;j++)
{
telSource[j]=newmsg[Password_num+1+j];
}
telSource[12]='\0';
for(j=0;j<11;j++)
{
telDestination[j]=newmsg[Password_num+13+j];
}
telDestination[12]='\0';
if(TelphoneCompare(telSource,telDestination))
{
SendSms(telcode,"OK!");//发短信
OSTimeDly(50);
}
else
{
SendSms(telcode,"No Match!");//发短信
}
}
else
{
SendSms(telcode,"Password Error!");//发短信
}
}
gMx=0;
//删除短信
Uart1SendData("AT+CMGD=");
Uart1SendData(msgID);
Uart1SendChar(0x0d);
// Uart1SendData("AT+CMGD= ALL\r"); //删除所有段信
OSTimeDly(50);
}
OSTimeDly(100);
}
} |
|