×
单片机 > 单片机程序设计 > 详情

51单片机GPS+sim800c GSM定位短信LCD1602液晶显示程序

发布时间:2020-08-27 发布时间:
|
sim800c+GPS芯片
一个练手的小设计,有点丑哈。附上程序和原理PcB图。
 

第一次发帖,做的不好烦请原谅哈

按键功能一个按键报警,蜂鸣器响,另外一个按键发送短信到指定的手机上,手机号码程序里面写好就行了

单片机源程序如下:

#include "common.h"

#include "uart.h"

#include "gps.h"

#include "gsm.h"



#include "lcd.h"


#define GPS_STR_LEN 48


uchar ess_inc;


//char xdata GPS_SEND_STR[GPS_STR_LEN];


sbit key = P1^3;

sbit key1 = P1^4;

sbit GPS_EN=P3^4;

sbit led1 = P3^3;

#define   RMC_YES    led1 = 0

#define   RMC_NO     led1 = 1


GPS_INFO   GPS;  //GPS信息结构体


bit GPS_rx_flag = 0;

bit GPS_Have_flag = 0;


#define SEND_NUMBER "AT+CMGS="13420106297"rn"


char xdata send_data[37]="N:     ',E:     ',2000-00-00,00:00rn";

unsigned char send_len= 0;


bit dis_flag = 1;

bit sendflag=0;



/****************************************

显示时间

/****************************************/

void GPS_DispTime(void)

{

    uchar i = 0;

    uchar ch;

    char time[5];


          Int_To_Str(GPS.D.year,time);//年


    LCD1602_Set_AC(0, 1);

    i = 0;

          send_len = 18;

    while(time[i] != '')

    {

        ch = time[i++];


        LCD1602_write_data(ch);


                    send_data[send_len++] = ch;

    }

    LCD1602_write_data('-');

                

                Int_To_Str(GPS.D.month,time);//月

    LCD1602_Set_AC(5, 1);

    i = 0;

          send_len = 23;

    while(time[i] != '')

    {

        ch = time[i++];


        LCD1602_write_data(ch);


                    send_data[send_len++] = ch;

    }

    LCD1602_write_data('-');

                

                Int_To_Str(GPS.D.day,time);//日

    LCD1602_Set_AC(8, 1);

    i = 0;

          send_len = 26;

    while(time[i] != '')

    {

        ch = time[i++];


        LCD1602_write_data(ch);


                    send_data[send_len++] = ch;

    }

    LCD1602_write_data(',');

        

    Int_To_Str(GPS.D.hour,time);//时

    LCD1602_Set_AC(11, 1);

    i = 0;

          send_len = 29;

    while(time[i] != '')

    {

        ch = time[i++];


        LCD1602_write_data(ch);


                    send_data[send_len++] = ch;

    }

    LCD1602_write_data(':');


    Int_To_Str(GPS.D.minute,time);//分

    LCD1602_Set_AC(14, 1);

    i = 0;

          send_len = 32;

    while(time[i] != '')

    {

        ch = time[i++];


        LCD1602_write_data(ch);


                    send_data[send_len++] = ch;

    }

}



void GPS_DisplayOne(void)

{

    uchar len,ch, i;

    char info[10];


    ess_inc = 0;

//    memset(GPS_SEND_STR, 0, GPS_STR_LEN);


    if (GPS.NS == 'N')              //判断是北纬还是南纬

    {

                          if(dis_flag)

        LCD1602_DisplayChar(0, 0, 'N');

                                else

                                LCD1602_DisplayChar(0, 0, ' ');

//        GPS_SEND_STR[ess_inc ++] = 'N';

        len = 0;

        Int_To_Str(GPS.latitude_Degree,info);  //纬度


        LCD1602_Set_AC(1, 0);

        i = 0;

                    send_len = 2;

        while(info[i] != '')

        {

            ch = info[i++];

                                          if(dis_flag)

            LCD1602_write_data(ch);

                                                else

                                    LCD1602_write_data(' ');

                              send_data[send_len++] = ch;

//            GPS_SEND_STR[ess_inc ++] = ch;

            len ++;

        }

                    send_data[send_len++] = 'd';

                                if(dis_flag)

        LCD1602_write_data(0xDF);

                                else

                                 LCD1602_write_data(' ');

//        GPS_SEND_STR[ess_inc ++] = 'd';


        len ++;

        Int_To_Str(GPS.latitude_Cent,info);  //纬分

        i = 0;

        while(info[i] != '')

        {

            ch = info[i++];

                                          if(dis_flag)

            LCD1602_write_data(ch);

                                                else

                                    LCD1602_write_data(' ');

                              send_data[send_len++] = ch;

//            GPS_SEND_STR[ess_inc ++] = ch;

            len ++;

        }

                                if(dis_flag)

        LCD1602_write_data(0x27);

                                else

                                    LCD1602_write_data(' ');

//        GPS_SEND_STR[ess_inc ++] = 'm';


        Int_To_Str(GPS.latitude_Second,info);  //纬秒

        i = 0;

        while(info[i] != '')

        {

            ch = info[i++];

//            GPS_SEND_STR[ess_inc ++] = ch;

        }

//        GPS_SEND_STR[ess_inc ++] = 's';


        len ++;

        while(7 - len)

        {

            len ++;

            LCD1602_write_data(' ');

        }


    }


//    GPS_SEND_STR[ess_inc] = ',';

    ess_inc += 1;


    if (GPS.EW == 'E')                                //判断是东经还是西经

    {

                          if(dis_flag)

        LCD1602_DisplayChar(8, 0, 'E');

                                else

                                    LCD1602_write_data(' ');

//        GPS_SEND_STR[ess_inc ++] = 'E';


        len = 0;

        Int_To_Str(GPS.longitude_Degree,info);  //经度

        LCD1602_Set_AC(9, 0);

        i = 0;

                    send_len = 11;

        while(info[i] != '')

        {

            ch = info[i++];


关键字:51单片机  GPS  sim800c  GSM定位短信  LCD1602液晶显示

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM基础知识八