当前位置:   article > 正文

基于STM32单片机的智能手表设计_基于stm32的智能手表csdn奋斗奋斗在奋斗的

基于stm32的智能手表csdn奋斗奋斗在奋斗的

硬件方案

        本设计介绍了基于单片机的智能手表定位系统的设计与实现,控制系统采用STM32核心芯片,外围电路含有液晶显示器LCD1602,GPS,GSM电路,按键和LED灯电路组成,通过LCD模块能够将实时时间以及定位经纬度显示出来。系统可以通过GSM模块直接发送定位信息到指定的手机用户上。
        整体电路主要由STM32单片机核心板,LCD1602液晶显示电路,GPS模块,GSM模块,按键电路,LED灯电路及电源电路组成;原理图如图:

 

设计功能

  • 液晶1602显示时钟,带日期,且可以显示经纬度信息,两个信息通过一个按键切换显示。
  • 通过GPS定位,获取当前的经纬度信息(可以通过浏览器查看具体位置)。
  • 通过电位器可以调节液晶屏的清晰度。
  • 具有手电筒功能,通过另外一个按键,按下,灯亮,再次按下,灯灭。
  • 通过第3个按键来发送经纬度信息给指定手机,按下后,开始发短信;
  • 短信处理过程有指示灯显示;
  • 接受短信的手机号码可以主动获取经纬度信息,发送"GET"给设备手机号,设备会回复信息给发送者.

软件设计

主程序

  1. int main(void)
  2.  {     
  3.     unsigned char i ;     
  4.     delay_init();             //延时函数初始化      
  5.     uart_init(115200);         //串口初始化为115200
  6.     uart2_init(9600)    ;
  7.      
  8.   TIM3_Int_Init(499,7199);//50ms       
  9.     
  10.     LED_Init();                  //初始化与LED连接的硬件接口      
  11.     KEY_Init();
  12.      
  13.     led_gsm =0 ; ligh =1;//上电初始化
  14.     Lcd_GPIO_init();  //初始化lcd 接口
  15.     Lcd_Init();         //初始化函数
  16.     delay_ms(200);
  17.     ligh =0;//关闭led
  18.     Lcd_Puts(0,0,(u8 *)Lin0_No);//显示                
  19.     Lcd_Puts(0,1,(u8 *)Lin1_Ea);//显示
  20.      
  21.     i=60;
  22.     while(i--) delay_ms(100);//延时
  23.     UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
  24.     i=7;
  25.     while(i--) delay_ms(100);//延时
  26.     UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
  27.     i=7;
  28.     while(i--) delay_ms(100);//延时
  29.     UART_SendStr(USART1 , "AT+CMGDA=\"DEL ALL\"\r\n",20); //删除所有短信
  30.     for(i=0;i<5;i++)
  31.     delay_ms(100);          //延时有助于稳定
  32.     
  33.   led_gsm = 1;
  34.     while(1)
  35.     {    
  36.         key_scan();    
  37.         if(disFlag ==1)    //定时更新显示
  38.         {
  39.             disFlag =0;
  40.         if(sysmode_GPS==1)        //gps有效
  41.       {
  42. //        sysmode_GPS=0;    
  43.                 dealGps();
  44.                 if(disNum==0)
  45.                 {
  46.                     Lcd_Puts(0,0,(u8 *)Lin0_No);//显示                
  47.                     Lcd_Puts(0,1,(u8 *)Lin1_Ea);//显示                
  48.                 }
  49.                 else
  50.                 {
  51.                     Lcd_Puts(0,0,(u8 *)dis0);//显示                
  52.                     Lcd_Puts(0,1,(u8 *)dis1);//显示                            
  53.                 }    
  54.             }                    
  55.         }
  56.         
  57.     if(key_m==0)    //发送按键按下
  58.     {
  59.             delay_ms(10);
  60.             if(key_m==0)    
  61.             {            
  62.                 led_gsm =  0
  63.                 UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
  64.                 i=3;
  65.                 while(i--) delay_ms(100);//延时
  66.                 UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15);//设置文本
  67.                 i=3;
  68.                 while(i--) delay_ms(100);//延时
  69.                 UART_SendStr(USART1 ,"AT+CMGS=\"+8618xxxxxxxxx\"\r\n",26); //测试号码    
  70.                 
  71.                 i=3;
  72.                 while(i--) delay_ms(100);//延时
  73.                 if(sysmode_GPS==1)        //gps有效
  74.                 {
  75.                     sysmode_GPS=0;            
  76.                     dealGps();
  77.                     UART_SendStr(USART1 ,Lin0_No,12); //发送纬度
  78.                     UART_SendStr(USART1 ,Lin1_Ea,12); //发送经度
  79.                 }
  80.                 else
  81.                 {
  82.                     UART_SendStr(USART1 ,"gps linking...",14); //gps无信号
  83.                 }
  84.                 delay_ms(200);
  85.                 UART_SendStr(USART1 ,( char *)Crtl_Z, 1);        //发送
  86.                 i=30;
  87.                 while(i--) delay_ms(100);//延时发送
  88.                 led_gsm = 1;
  89.             }
  90.         }
  91.         
  92.         if(readFlag==1)    //读取短信息标志
  93.       {         
  94.             readFlag=0;     //读取标志清零
  95.             readMesIng = 1;//读取短信过程中
  96.             timeCount++ ;
  97.             if((stepNum == 0)&&(timeCount>=4))    //定时读取短信
  98.             {                    
  99.                 UART_SendStr(USART1 , "AT+CMGF=1\r\n",11);   //设置字符集
  100.                 timeCount = 0;//延时设置量    
  101.                 stepNum++;//进入操作过程1
  102.             }            
  103.             else if((stepNum == 1)&&(timeCount>=4))    //定时读取短信
  104.             {
  105.                 for(i=0;i<SIZEBUF;i++)
  106.                 {
  107.                     timebuf[i]='0';   //清空timebuf
  108.                 }                    
  109.                 UART_SendStr(USART1 ,"AT+CMGR=1\r\n",11);    
  110.                 timeCount = 0;//延时设置量    
  111.                 stepNum++;//进入操作过程1
  112.             }
  113.             else if((stepNum == 2)&&(timeCount >= 4))    //定时读取短信
  114.             {    
  115.                 rebackMesFlag=INIT;    
  116.                 for(i=0;i<(SIZEBUF-3);i++)
  117.                 {
  118.                     if((timebuf[i]=='G')&&(timebuf[i+1]=='E')&&(timebuf[i+2]=='T'))    //查询是否接收到GET
  119.                     {
  120.                         rebackMesFlag=OPEN_01;    //状态标识打开
  121.                         break ;
  122.                     }
  123.                     if((timebuf[i]=='+')&&(timebuf[i+1]=='8')&&(timebuf[i+2]=='6'))//查询短信息中的号码
  124.                     {
  125.                         led_gsm = 0;
  126.                         rebackMesFlag = SOMEONE; //有人发送短信 
  127.                         AT_CMGS[9]=timebuf[i+0]; //提取号码
  128.                         AT_CMGS[10]=timebuf[i+1];
  129.                         AT_CMGS[11]=timebuf[i+2];
  130.                         AT_CMGS[12]=timebuf[i+3];
  131.                         AT_CMGS[13]=timebuf[i+4];
  132.                         AT_CMGS[14]=timebuf[i+5];
  133.                         AT_CMGS[15]=timebuf[i+6];
  134.                         AT_CMGS[16]=timebuf[i+7];
  135.                         AT_CMGS[17]=timebuf[i+8];
  136.                         AT_CMGS[18]=timebuf[i+9];
  137.                         AT_CMGS[19]=timebuf[i+10];
  138.                         AT_CMGS[20]=timebuf[i+11];         
  139.                         AT_CMGS[21]=timebuf[i+12];
  140.                         AT_CMGS[22]=timebuf[i+13];
  141.                     }
  142.                 }
  143.                 AT_CMGS[23]='"';     //整理字符串 
  144.                 AT_CMGS[24]=0x0d;
  145.                 AT_CMGS[25]=0x0a;
  146.     
  147.                 if(rebackMesFlag != INIT)
  148.                 {        
  149.                     UART_SendStr(USART1 ,"AT+CMGDA=\"DEL ALL\"\r\n",20);//删除所有短信                                                            
  150.                     for(i=0;i<5;i++)
  151.                     delay_ms(100);          //延时有助于稳定
  152.                             
  153.                     UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11);   //设置字符集
  154.                     for(i=0;i<3;i++)
  155.                     delay_ms(100);          //延时有助于稳定
  156.                 
  157.                     UART_SendStr(USART1 ,"AT+CSCS=\"GSM\"\r\n",15); //设置干什么、
  158.                     for(i=0;i<3;i++)
  159.                     delay_ms(100);          //延时有助于稳定
  160.                                 
  161.                    UART_SendStr(USART1 , ( char *)AT_CMGS,26);//准备发送短信
  162.                     for(i=0;i<2;i++)
  163.                     delay_ms(100);          //延时有助于稳定 
  164.     
  165.                     if(rebackMesFlag==OPEN_01)
  166.                     {
  167.                         UART_SendStr(USART1 ,Lin0_No,12); //发送纬度
  168.                         UART_SendStr(USART1 ,Lin1_Ea,12); //发送经度                                            
  169.                     }
  170.                     else
  171.                     {
  172.                         UART_SendStr(USART1 ,"CMD_ERR",7); //发送短信息命令错误
  173.                     }
  174.                     delay_ms(100);  
  175.                 UART_SendStr(USART1 ,(char *)Crtl_Z, 1);        //发送
  176.                     for(i=0;i<20;i++)
  177.                     delay_ms(100);          //延时有助于稳定    
  178.                 }
  179.                 timeCount = 0;//延时设置量    
  180.                 stepNum++    ;//进入操作过程1
  181.             }
  182.             else if((stepNum == 3)&&(timeCount >= 4))    //定时读取短信
  183.             {
  184.                 clearMesFlag++;
  185.                 if(clearMesFlag>10)
  186.                 {
  187.                   clearMesFlag = 0;
  188.                     UART_SendStr(USART1 ,"AT+CMGDA=\"DEL ALL\"\r\n",20);//删除所有短信
  189.                 }
  190.                 timeCount = 0;//延时设置量    
  191.                 stepNum = 0    ;//进入操作过程1                            
  192.                 led_gsm=1;      //关闭指示灯
  193.                 readMesIng = 0;//读取短信过程中
  194.             }                                            
  195.          }
  196.                     
  197.     }                                                
  198. }

资料链接:https://pan.baidu.com/s/1for_ky8Pn21kkzPMUgef6g?pwd=zadp 
提取码:zadp

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/196066
推荐阅读
相关标签
  

闽ICP备14008679号