求助:sim900a返回数据显示不到lcd上

2019-08-19 20:23发布

试验了下原子哥代码,写了个简单的程序,想通过lcd驱动文件内的显示函数LCD_Showstring显示sim900a返回的数据(例如运营商什么的),但什么都不显示,想是不是sim900a返回的数据用这个函数输出不了[mw_shl_code=c,true]#include "sim900a.h"
#include "usart.h"               
#include "delay.h"       
#include "lcd.h"
#include "string.h"
#include "usart2.h"
#include "remote.h"
#include "malloc.h"


//命令检查
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART2_RX_STA&0X8000)                //接收到一次数据了
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
                strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}


//向sim900a发送命令
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
       
        u8 res=0;
        USART2_RX_STA=0;
        if((u32)cmd<=0XFF)
        {
                while(DMA1_Channel7->CNDTR!=0);        //等待通道7传输完成   
                USART2->DR=(u32)cmd;
        }else u2_printf("%s ",cmd);//发送命令
        if(ack&&waittime)                //需要等待应答
        {
                while(--waittime)        //等待倒计时
                {
                        delay_ms(10);
                        if(USART2_RX_STA&0X8000)//接收到期待的应答结果
                        {
                                if(sim900a_check_cmd(ack))break;//得到有效数据
                                USART2_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        return res;
}

void sim900a_simcard_info(void)
{
        u8 *p,*p1,*p2;
        //u8 res=0;
        p=mymalloc(SRAMIN,50);//申请50个字节的内存
        POINT_COLOR=BLUE;        
        USART2_RX_STA=0;
       

        if(sim900a_send_cmd("AT+CPIN?","OK",200))        //查询SIM卡是否在位
        USART2_RX_STA=0;
       
        if(sim900a_send_cmd("AT+COPS?","OK",200)==0)                //查询运营商名字
        {
                p1=(u8*)strstr((const char*)(USART2_RX_BUF),""");
                if(p1)//有有效数据
                {
                        p2=(u8*)strstr((const char*)(p1+1),""");
                        p2[0]=0;//加入结束符                       
                        sprintf((char*)p,"company:%s",p1+1);
                  LCD_ShowString(60,70,200,16,16,p);
                }
                USART2_RX_STA=0;               
        }
       
        if(sim900a_send_cmd("AT+CSQ","+CSQ:",200)==0)                //查询信号质量
        {
                p1=(u8*)strstr((const char*)(USART2_RX_BUF),":");
                p2=(u8*)strstr((const char*)(p1),",");
                p2[0]=0;//加入结束符
                sprintf((char*)p,"sig quantity:%s",p1+2);
                LCD_ShowString(60,90,200,16,16,p);
                USART2_RX_STA=0;               
        }
       
        myfree(SRAMIN,p);
       
}

//sim900a模块总测试
//红外遥控音量键VOL选择拨号功能或者短信功能
//显示见面的逻辑......
void sim900a_test(void)
{
       
        POINT_COLOR = RED;
       
        LCD_ShowString(60,50,200,16,16,"made by anyuxin");
        //sim900a_send_cmd("ATE0","OK",200);
        sim900a_simcard_info();
}






[/mw_shl_code]
0条回答

一周热门 更多>