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

发布者:SparklingRiver最新更新时间:2020-02-15 来源: 51hei关键字:51单片机  GPS  sim800c  GSM定位短信  LCD1602液晶显示 手机看文章 扫描二维码
随时随地手机看文章
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++];

                                          if(dis_flag)

            LCD1602_write_data(ch);

                                                else

[1] [2]
关键字:51单片机  GPS  sim800c  GSM定位短信  LCD1602液晶显示 引用地址:51单片机GPS+sim800c GSM定位短信LCD1602液晶显示程序

上一篇:基于LCD12864和51单片机的简单小游戏Proteus仿真程序
下一篇:超小型的无线收发模块LT8920配置思路+单片机发射接收程序

推荐阅读最新更新时间:2024-11-13 00:14

如何实现eView触摸屏与51单片机之间的通信
Modbus协议由于其具有开放性、透明性、成本低、易于开发等特点,已成为当今工业领域通信协议的首选。 本文介绍了一种基于Modbus通信协议的eView触摸屏与常用的51单片机的通信方法。该方法通过C51编程实现Modbus通信,在51系列单片机上具有通用性,有一定的借鉴作用。 工业控制中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。 触摸屏与单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国Modicon公司推
[单片机]
如何实现eView触摸屏与<font color='red'>51单片机</font>之间的通信
51单片机对8位数码管依次显示0-7的设计
共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90} 共阳极数组A~F:display[]={0x88,0x83,0xA6,0xC1,0x86,0x8E} 共阴极数组0~9:display[]={0x3F,0x06,0x5B,0x4F,0x6E,0x6D,0x7D,0x07,0x7F,0x6F} 共阴极数组A~F:display[]={0x77,0x7C,0x59,0x3E,0x79,0x71} 共阴、两组四位一体数码管,位选接74LS138译码器,输入(位选)CBA接P20,P21,P22。段选通过74573后接P1口。 若不使用译码器,可直
[单片机]
<font color='red'>51单片机</font>对8位数码管依次显示0-7的设计
MCS-51单片机内部RAM可分为几个区?以及作用?
00H-1FH为工作寄存器区,里面就是通用寄存器组R0-R7,每八个分一组,如第一组为R0-R7,地址位00-07H;假设第一组叫1(R0-R7),那么08-0FH为第二组,就叫2(R0-R7),依次类推共有4组。这个区域是最常用的数据区,数据的操作大部分在这里进行。通用寄存器分组的好处是:当程序切换(特别是被中断或抢占的时候)只需要切换一组寄存器就可以获得一组新的寄存器,而不必担心和别的程序冲突,也可以尽量少的进行入栈和出栈操作,提高运行效率。作用?当然是放数据,只不过这个地方最好用。 20H-2FH为可位寻址区,这里和通用寄存器组一样可以进行位寻址,也就是说可以比较方便的进行位操作,个人认为它和通用寄存器组的区别是,没有逐个
[单片机]
基于80C51单片机的电子储物柜系统
基于80C51单片机的电子储物柜系统 电路描述: 安全是我们日常的生活中最关心的问题。 每个人都觉得安全问题是非常至关重要的,在家里的门和安全,可以尽可能多的安全。 为了对于门访问安全 因此,我们打算通过引进一个电子密码锁系统,该系统包括一个人得到一个访问某些项目之前要输入密码的安全性,以及在家里,一个房间密码锁系统,不只是普通的单用户密码锁系统,需要用户插入已编程的代码来访问一个房间; 它是一个密码锁系统,有密码而且可以启用多个用户访问。 在基于51单片机的门储物柜,只允许授权人员进入限制区域的门禁系统。 该系统由8位微控制器AT89C2051具有ROM的2K字节的程序存储器完全控制。 该系统具有通过该密码,可以通过它来输入
[单片机]
基于80C<font color='red'>51单片机</font>的电子储物柜系统
21-基于51单片机的遥控音乐系统仿真
具体实现功能: 仿真分为接收器(播放器)和发射器(遥控)。接收器由一个可以发音乐的电子琴构成, 发射器通过按键遥控接收器上电子琴的启动与停止。 启动时播放的是《同一首歌》的旋律,数码管显示“b”,表示播放,按下停止按键后停止播放音乐。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个
[单片机]
21-基于<font color='red'>51单片机</font>的遥控音乐系统仿真
51单片机 蜂鸣器
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。 有源蜂鸣器和无源蜂鸣器的区别: 这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 无源蜂鸣器的优点是:1。便宜,2。声音频率可控,可以做出“多来米发索拉西”的效果。
[单片机]
<font color='red'>51单片机</font> 蜂鸣器
51单片机 独立键盘控制
键盘部分原理图: 历程里面设计到数码管,这个参考前面的文章《 51单片机 数码显示数字 》。 代码如下: 注释很详细。 //按键key1显示数字加1,按键key2显示数字减1,按键key3清零,按键key4数字每秒加1. #include //头文件 #define uint unsigned int //宏定义 #define uchar unsigned char //按键标示声明 sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7; sbit duanxuan=P2^6; sbit weixuan=P2^7;
[单片机]
MCS-51单片机内部程序存储器ROM结构详解
MCS-51单片机的程序存储器用于存放编好的程序和表格常数。8051片内有4 KB的ROM,8751片内有4 KB的EPROM,8031片内无程序存储器。 MCS-51的片外最多能扩展64 KB程序存储器,片内外的ROM是统一编址的。如端保持高电平,8051的程序计数器PC在0000H~0FFFH地址范围内 (即前4 KB地址) 是执行片内ROM中的程序,当PC在1000H~FFFFH地址范围时,自动执行片外程序存储器中的程序;当保持低电平时,只能寻址外部程序存储器,片外存储器可以从0000H开始编址。 MCS-51的程序存储器中有些单元具有特殊功能,使用时应予以注意。 其中一组特殊单元是0000H~0002H。系统复位后,(
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved