硬件设计
本设计介绍了基于单片机的智能手表定位系统的设计与实现,控制系统采用STM32核心芯片,外围电路含有液晶显示器LCD1602,GPS,GSM电路,按键和LED灯电路组成,通过LCD模块能够将实时时间以及定位经纬度显示出来。系统可以通过GSM模块直接发送定位信息到指定的手机用户上。
主要由STM32单片机+LCD1602液晶显示电路+GPS模块+GSM模块+按键电路+LED灯电路+电源电路组成;框图如图:
设计功能
(1)液晶1602显示时钟,带日期,且可以显示经纬度信息,两个信息通过一个按键切换显示。
(2)通过GPS定位,获取当前的经纬度信息(可以通过浏览器查看具体位置)。
(3)通过电位器可以调节液晶屏的清晰度。
(4)具有手电筒功能,通过另外一个按键,按下,灯亮,再次按下,灯灭。
(5)通过第3个按键来发送经纬度信息给指定手机,按下后,开始发短信;
(6)短信处理过程有指示灯显示;
(7)接受短信的手机号码可以主动获取经纬度信息,发送"GET"给设备手机号,设备会回复信息给发送者.
设计原理图
![](https://img-blog.csdnimg.cn/1d0ba2839d16459b867670905ce286aa.jpeg)
四.软件设计
(1)程序流程图
![](https://img-blog.csdnimg.cn/ce7533a26ce243d4969dbe7878f9549f.png)
(2)主程序源码
int main(void)
{
unsigned char i ;
delay_init(); //延时函数初始化
uart_init(115200); //串口初始化为115200
uart2_init(9600) ;
TIM3_Int_Init(499,7199);//50ms
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
led_gsm =0 ; ligh =1;//上电初始化
Lcd_GPIO_init(); //初始化lcd 接口
Lcd_Init(); //初始化函数
delay_ms(200);
ligh =0;//关闭led
Lcd_Puts(0,0,(u8 *)Lin0_No);//显示
Lcd_Puts(0,1,(u8 *)Lin1_Ea);//显示
i=60;
while(i--) delay_ms(100);//延时
UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
i=7;
while(i--) delay_ms(100);//延时
UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
i=7;
while(i--) delay_ms(100);//延时
UART_SendStr(USART1 , "AT+CMGDA=\"DEL ALL\"\r\n",20); //删除所有短信
for(i=0;i<5;i++)
delay_ms(100); //延时有助于稳定
led_gsm = 1;
while(1)
{
key_scan();
if(disFlag ==1) //定时更新显示
{
disFlag =0;
if(sysmode_GPS==1) //gps有效
{
// sysmode_GPS=0;
dealGps();
if(disNum==0)
{
Lcd_Puts(0,0,(u8 *)Lin0_No);//显示
Lcd_Puts(0,1,(u8 *)Lin1_Ea);//显示
}
else
{
Lcd_Puts(0,0,(u8 *)dis0);//显示
Lcd_Puts(0,1,(u8 *)dis1);//显示
}
}
}
if(key_m==0) //发送按键按下
{
delay_ms(10);
if(key_m==0)
{
led_gsm = 0;
UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
i=3;
while(i--) delay_ms(100);//延时
UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
i=3;
while(i--) delay_ms(100);//延时
UART_SendStr(USART1 ,"AT+CMGS=\"+8618105140357\"\r\n",26); //测试号码
// UART_SendStr(USART1 ,"AT+CMGS=\"+8615296556420\"\r\n",26); //发送短信号码
i=3;
while(i--) delay_ms(100);//延时
if(sysmode_GPS==1) //gps有效
{
sysmode_GPS=0;
dealGps();
UART_SendStr(USART1 ,Lin0_No,12); //发送纬度
UART_SendStr(USART1 ,Lin1_Ea,12); //发送经度
}
else
{
UART_SendStr(USART1 ,"gps linking...",14); //gps无信号
}
delay_ms(200);
UART_SendStr(USART1 ,( char *)Crtl_Z, 1); //发送
i=30;
while(i--) delay_ms(100);//延时发送
led_gsm = 1;
}
}
....
}
}
}
链接:https://pan.baidu.com/s/18eQcnJTPaemJeORJ7WCl3g?pwd=o3kd
提取码:o3kd