找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2096|回复: 1
上一主题 下一主题
收起左侧

STM32实现WiFi控制步进电机+显示屏代码

[复制链接]
跳转到指定楼层
楼主
ID:496954 发表于 2019-7-30 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"                           
  5. #include "lcd.h"  
  6. #include "key.h"     
  7. #include "usmart.h"
  8. #include "malloc.h"
  9. #include "sdio_sdcard.h"  
  10. #include "w25qxx.h"   
  11. #include "ff.h"  
  12. #include "exfuns.h"   
  13. #include "text.h"       
  14. #include "touch.h"               
  15. #include "usart3.h"
  16. #include "common.h"
  17. #include "driver.h"
  18. #include "beep.h"

  19. void display(int i,int f_data);
  20. void StepControl(u8 f_data);
  21. void ClockStepControl(u8 f_data);
  22. void ZeroStepControl(u8 f_data);
  23. void clock_display(int f_data);
  24. extern u16 SpeechData;
  25. int main(void)
  26. {         
  27.         u8 timex=0;
  28.         u8 constate=0;        //连接状态
  29.         u8 r_data[2];
  30.         u8 s_data[2];
  31.   u8 data[10]={0};         
  32.         u16 t=999;                //加速第一次获取链接状态       
  33.   u8 i=0;       
  34.         u8 j=0;       
  35.         u8 k=0;       
  36.         u8 Speech=0;
  37.         //u8 m_data[1]={0};
  38.        
  39.        
  40.         delay_init();                     //延时函数初始化          
  41.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  42.         uart_init(9600);                 //串口初始化为115200
  43.         usmart_dev.init(72);                //初始化USMART               
  44.         LED_Init();                                          //初始化与LED连接的硬件接口
  45.         KEY_Init();                                        //初始化按键
  46.         LCD_Init();                                           //初始化LCD  
  47.   BEEP_Init();                //初始化蜂鸣器
  48.         W25QXX_Init();                                //初始化W25Q128
  49.         tp_dev.init();                                //初始化触摸屏
  50.         usart3_init(115200);                //初始化串口3
  51.   TIM8_OPM_RCR_Init(999,72-1); //1MHz计数频率  单脉冲+重复计数模式       
  52.         Driver_Init();                        //驱动器初始化
  53.         my_mem_init(SRAMIN);                //初始化内部内存池
  54.         exfuns_init();                                //为fatfs相关变量申请内存  
  55.         f_mount(fs[1],"1:",1);                 //挂载FLASH.
  56.   
  57.          
  58.         set_lcd();//配置LCD屏幕
  59.         atk_8266_test();                //进入ATK_ESP8266测试
  60.         POINT_COLOR=RED;
  61.         Show_Str(15,160,100,12,"1号分区:",12,0);       
  62.         Show_Str(15,180,100,12,"2号分区:",12,0);        
  63.         Show_Str(15,200,100,12,"3号分区:",12,0);       
  64.         Show_Str(15,220,100,12,"4号分区:",12,0);        
  65.         Show_Str(15,240,100,12,"5号分区:",12,0);       
  66.         Show_Str(15,260,100,12,"6号分区:",12,0);
  67.         Show_Str(15,280,100,12,"7号分区:",12,0);       
  68.         Show_Str(15,300,100,12,"8号分区:",12,0);        
  69.         Show_Str(15,340,100,12,"定时状态:",12,0);
  70.         Show_Str(15,360,100,12,"物品选择:",12,0);
  71.   Show_Str(15,380,100,12,"是否提醒:",12,0);  
  72.         POINT_COLOR=BLUE;
  73.         for(j=1;j<9;j++)
  74.         {
  75.                 display(j,0);
  76.         }
  77.         //主循环
  78.         while(1)
  79.         {
  80.         delay_ms(5);
  81.         //Show_Str(90,350,100,12,m_data,12,0);               
  82.         if(USART_RX_STA==1&&Speech==0)
  83.         {
  84.                 if(SpeechData==1)
  85.                 {
  86.                         LCD_Fill(90,160+0*20,190,160+0*20+20,WHITE);
  87.                         Show_Str(90,160+0*20,100,12,"钥匙",12,0);       
  88.                         Control(1);
  89.                   delay_ms(1000);
  90.       delay_ms(1000);
  91.                   Control(0);
  92.                        
  93.                        
  94.                        
  95.                 }
  96.                 else if(SpeechData==2)
  97.                 {
  98.                         LCD_Fill(90,160+0*20,190,160+0*20+20,WHITE);
  99.                         Show_Str(90,160+0*20,100,12,"无",12,0);       
  100.                        
  101.                         Control(1);
  102.                   delay_ms(1000);
  103.       delay_ms(1000);
  104.                   Control(0);
  105.                        
  106.                 }
  107.                
  108.           if(SpeechData==3)
  109.                 {
  110.                         //m_data[0]=SpeechData+0x30;
  111.                         LCD_Fill(90,160+1*20,190,160+1*20+20,WHITE);
  112.                         Show_Str(90,160+1*20,100,12,"药品",12,0);       
  113.                         Control(2);
  114.                   delay_ms(1000);
  115.       delay_ms(1000);
  116.                   Control(0);
  117.                 }
  118.                 else if(SpeechData==4)
  119.                 {
  120.                         LCD_Fill(90,160+1*20,190,160+1*20+20,WHITE);
  121.                         Show_Str(90,160+1*20,100,12,"无",12,0);       
  122.                        
  123.                         Control(2);
  124.                   delay_ms(1000);
  125.       delay_ms(1000);
  126.                   Control(0);
  127.                        
  128.                 }
  129.                 else if(SpeechData==5)
  130.                 {
  131.                         LCD_Fill(90,160+2*20,190,160+2*20+20,WHITE);
  132.                         Show_Str(90,160+2*20,100,12,"充电宝",12,0);       
  133.                         Control(3);
  134.                   delay_ms(1000);
  135.       delay_ms(1000);
  136.                   Control(0);
  137.                 }
  138.                 else if(SpeechData==6)
  139.                 {
  140.                         LCD_Fill(90,160+2*20,190,160+1*20+20,WHITE);
  141.                         Show_Str(90,160+2*20,100,12,"无",12,0);       
  142.                        
  143.                         Control(3);
  144.                   delay_ms(1000);
  145.       delay_ms(1000);
  146.                   Control(0);
  147.                 }
  148.                 else if(SpeechData==7)
  149.                 {
  150.                         LCD_Fill(90,160+3*20,190,160+3*20+20,WHITE);
  151.                         Show_Str(90,160+3*20,100,12,"手机",12,0);       
  152.                         Control(4);
  153.                   delay_ms(1000);
  154.       delay_ms(1000);
  155.                   Control(0);
  156.                 }
  157.                 else if(SpeechData==8)
  158.                 {
  159.                         LCD_Fill(90,160+3*20,190,160+3*20+20,WHITE);
  160.                         Show_Str(90,160+3*20,100,12,"无",12,0);       
  161.                        
  162.                         Control(4);
  163.                   delay_ms(1000);
  164.       delay_ms(1000);
  165.                   Control(0);
  166.                 }
  167.                 else if(SpeechData==9)
  168.                 {
  169.                         LCD_Fill(90,160+4*20,190,160+4*20+20,WHITE);
  170.                         Show_Str(90,160+4*20,100,12,"笔",12,0);       
  171.                         Control(5);
  172.                   delay_ms(1000);
  173.       delay_ms(1000);
  174.                   Control(9);
  175.                 }
  176.                 else if(SpeechData==10)
  177.                 {
  178.                         LCD_Fill(90,160+4*20,190,160+4*20+20,WHITE);
  179.                         Show_Str(90,160+4*20,100,12,"无",12,0);       
  180.                        
  181.                         Control(5);
  182.                   delay_ms(1000);
  183.       delay_ms(1000);
  184.                   Control(9);
  185.                 }
  186.                  
  187. //                if(SpeechData%2==0)
  188. //                {
  189. //                        StepControl(SpeechData/2);
  190. //                                delay_ms(50);
  191. //                        display(SpeechData/2,0);
  192. //                }
  193. //                else
  194. //                {
  195. //                        StepControl(SpeechData/2+1);
  196. //                                delay_ms(50);
  197. //                        display(SpeechData/2+1,SpeechData/2+1);
  198. //                }
  199.                
  200.                 USART_RX_STA=0;
  201.         }
  202.         if(USART3_RX_STA&0X8000)                //接收到一次数据了
  203.         {
  204.                 Speech=1;
  205.                 r_data[0]=USART3_RX_BUF[13];
  206.                 r_data[1]=USART3_RX_BUF[14];
  207.                 //将状态赋值给data数组
  208.                 switch(r_data[0])
  209.                  {
  210.                         case 1 :
  211.                                 data[0]=r_data[1];
  212.                                 break;
  213.                         case 2 :
  214.                                 data[1]=r_data[1];
  215.                                 break;
  216.                         case 3 :
  217.                                 data[2]=r_data[1];
  218.                                 break;
  219.                         case 4 :
  220.                                 data[3]=r_data[1];
  221.                                 break;
  222.                         case 5 :
  223.                                 data[4]=r_data[1];
  224.                                 break;
  225.                         case 6 :
  226.                                 data[5]=r_data[1];
  227.                                 break;
  228.                         case 7 :
  229.                                 data[6]=r_data[1];
  230.                                 break;
  231.                         case 8 :
  232.                                 data[7]=r_data[1];
  233.                                 break;
  234.                         case 9 :
  235.                                 data[8]=r_data[1];
  236.                           break;
  237.                  }
  238.                  
  239.         //显示
  240.         if(r_data[0]==0x09)//定时服务
  241.         {
  242.         clock_display(data[8]);
  243.         }
  244.   else//非定时服务
  245.   {
  246.                 switch(r_data[0])
  247.                 {
  248.                         case 1 :
  249.                           display(r_data[0],r_data[1]);
  250.                                 break;
  251.                         case 2 :
  252.                                 display(r_data[0],r_data[1]);
  253.                                 break;
  254.                         case 3 :
  255.                                 display(r_data[0],r_data[1]);
  256.                                 break;
  257.                         case 4 :
  258.                                 display(r_data[0],r_data[1]);
  259.                                 break;
  260.                         case 5 :
  261.                                 display(r_data[0],r_data[1]);
  262.                                 break;
  263.                         case 6 :
  264.                                 display(r_data[0],r_data[1]);
  265.                                 break;
  266.                         case 7 :
  267.                                 display(r_data[0],r_data[1]);
  268.                                 break;
  269.                         case 8 :
  270.                                 display(r_data[0],r_data[1]);
  271.                                 break;
  272.                         case 9 :
  273.                           break;
  274.                 }
  275.         }
  276.        
  277.                 //控制
  278.                 if(r_data[0]!=0x09)//没有选择定时服务
  279.                 {
  280.                   if(r_data[1]!=0x00)//存
  281.                   {
  282.                          StepControl(r_data[0]);
  283.                    }
  284.                   else if(r_data[1]==0x00)//取
  285.                   {
  286.                    StepControl(r_data[0]);
  287.              }
  288.           }
  289.                
  290.                 else if(r_data[0]==0x09)//选择定时服务
  291.                 {
  292.                   if((r_data[1]!=0x09)&&(r_data[1]!=0x00))
  293.                   {
  294.                          for(k=0;k<8;k++)//寻找空盒子
  295.                          {
  296.                           if(data[k]==0)
  297.         break;                                 
  298.                          }
  299.                    StepControl(k+1);//k+1就是选择的盒子
  300.             }
  301.                   else if( r_data[1]==0x09)
  302.                   {
  303.        ClockStepControl(k+1);//定时到
  304.                          BEEP=1;        //蜂鸣器提醒          
  305.                    delay_ms(300);//延时300ms
  306.                          BEEP=0;                  
  307.                    delay_ms(300);//延时300ms
  308.                   }
  309.                   else if(r_data[1]==0x00)
  310.                   {
  311.                          ZeroStepControl(k+1);//回原位置
  312.                          k=0;
  313.                   }
  314.     }
  315.        

  316.                 USART3_RX_STA=0;
  317.                
  318.                 if(constate!='+')t=1000;                //状态为还未连接,立即更新连接状态
  319.                 else t=0;                   //状态为已经连接了,10秒后再检查
  320.         }  
  321.         if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.
  322.         {
  323.                 constate=atk_8266_consta_check();//得到连接状态
  324.                 if(constate=='+')Show_Str(30+40,95,200,12,"连接成功",12,0);  //连接状态
  325.                 else Show_Str(30+40,95,200,12,"连接失败",12,0);                    
  326.                 t=0;
  327.         }
  328.         atk_8266_at_response(1);
  329. }
  330. }


  331. void display(int i,int f_data)
  332. {
  333.         i=i-1;
  334.         switch(f_data)
  335.         {
  336.                 case 0 :
  337.                         LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
  338.                         Show_Str(90,160+i*20,100,12,"无",12,0);       
  339.                         break;
  340.                
  341.                 case 1 :
  342.                         LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
  343.                         Show_Str(90,160+i*20,100,12,"钥匙",12,0);       
  344.                         break;
  345.                
  346.                 case 2 :
  347.                         LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
  348.                         Show_Str(90,160+i*20,100,12,"药品",12,0);       
  349.                         break;
  350.                
  351.                 case 3 :
  352.                         LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
  353.                         Show_Str(90,160+i*20,100,12,"充电宝",12,0);       
  354.                         break;               
  355.                
  356.                 case 4 :
  357.                         LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
  358.                         Show_Str(90,160+i*20,100,12,"手机",12,0);       
  359.                         break;
  360.                                
  361.                 case 5 :
  362.                         LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
  363.                         Show_Str(90,160+i*20,100,12,"笔",12,0);       
  364.                         break;
  365.                
  366.                 case 6 :
  367.                        
  368.                         break;
  369.                                
  370.                 case 7 :
  371.                        
  372.                         break;
  373.                
  374.                 case 8 :
  375.                        
  376.                         break;
  377.                 case 9 :
  378.                         //Show_Str(90,340,100,12,"到时",12,0);
  379.                         break;
  380.     }
  381. }
  382. void clock_display(int f_data)
  383. {
  384.          Show_Str(90,340,100,12,"开",12,0);
  385.          switch(f_data)
  386.          {
  387.                 case 0 :
  388.                         LCD_Fill(90,360,190,380,WHITE);
  389.                   LCD_Fill(90,340,190,360,WHITE);
  390.                         Show_Str(90,360,100,12,"无",12,0);       
  391.                   LCD_Fill(90,380,190,400,WHITE);
  392.                         break;
  393.                
  394.                 case 1 :
  395.                         LCD_Fill(90,360,190,380,WHITE);
  396.                         Show_Str(90,360,100,12,"钥匙",12,0);       
  397.                         break;
  398.                
  399.                 case 2 :
  400.                         LCD_Fill(90,360,190,380,WHITE);
  401.                         Show_Str(90,360,100,12,"药品",12,0);       
  402.                         break;
  403.                
  404.                 case 3 :
  405.                         LCD_Fill(90,360,190,380,WHITE);
  406.                         Show_Str(90,360,100,12,"充电宝",12,0);       
  407.                         break;               
  408.                
  409.                 case 4 :
  410.                         LCD_Fill(90,360,190,380,WHITE);
  411.                         Show_Str(90,360,100,12,"手机",12,0);       
  412.                         break;
  413.                                
  414.                 case 5 :
  415.                         LCD_Fill(90,360,190,380,WHITE);
  416.                         Show_Str(90,360,100,12,"笔",12,0);       
  417.                         break;
  418.                
  419.                 case 6 :
  420.                        
  421.                         break;
  422.                                
  423.                 case 7 :
  424.                        
  425.                         break;
  426.                
  427.                 case 8 :
  428.                        
  429.                         break;
  430.                 case 9 :
  431.                         Show_Str(90,380,100,12,"提醒",12,0);
  432.                         break;
  433.         }
  434.        
  435.        
  436.        
  437. }
  438. //控制电机转动
  439. void StepControl(u8 f_data)
  440. {
  441. switch(f_data)
  442. {
  443.         case 1 :
  444.           Control(1);
  445.                 delay_ms(1000);
  446.     delay_ms(1000);
  447.                 Control(0);
  448.                 break;
  449.         case 2 :
  450.           Control(2);
  451.                 delay_ms(1000);
  452.     delay_ms(1000);
  453.                 Control(0);
  454.                 break;
  455.   case 3 :
  456.                 Control(3);
  457.                 delay_ms(1000);
  458.     delay_ms(1000);
  459.                 Control(0);
  460.                 break;
  461.         case 4 :
  462.                 Control(4);
  463.                 delay_ms(1000);
  464.     delay_ms(1000);
  465.                 Control(0);
  466.           break;
  467.         case 5 :
  468.                 Control(5);
  469.                 delay_ms(1000);
  470.     delay_ms(1000);
  471.                 Control(9);
  472.                 break;
  473.         case 6 :
  474.                 Control(6);
  475.                 delay_ms(1000);
  476.     delay_ms(1000);
  477.                 Control(9);
  478.                 break;
  479.         case 7 :
  480.                 Control(7);
  481.                 delay_ms(1000);
  482.     delay_ms(1000);
  483.                 Control(9);
  484.                 break;
  485.         case 8 :
  486.                 Control(8);
  487.                 delay_ms(1000);
  488.     delay_ms(1000);
  489.                 Control(9);
  490.                 break;
  491.         case 9 :
  492.                 break;
  493.         }       
  494. }
  495. //控制电机转动,定时时间到
  496. void ClockStepControl(u8 f_data)
  497. {
  498.         switch(f_data)//k+1就是选择的盒子
  499.         {
  500.         case 1 :
  501.                 Control(1);
  502.           break;
  503.         case 2 :
  504.                 Control(2);
  505.                 break;
  506.         case 3 :
  507.                 Control(3);
  508.                 break;
  509.         case 4 :
  510.                 Control(4);
  511.                 break;
  512.         case 5 :
  513.                 Control(5);
  514.                 break;
  515.         case 6 :
  516.                 Control(6);
  517.                 break;
  518.         case 7 :
  519.                 Control(7);
  520.                 break;
  521.         case 8 :
  522.                 Control(8);
  523.                 break;
  524.         case 9 :
  525.          break;
  526.         }
  527. }
  528. //控制电机转动,定时时间到
  529. void ZeroStepControl(u8 f_data)
  530. {
  531.         switch(f_data)//k+1就是选择的盒子
  532.         {
  533.         case 1 :
  534.                 Control(0);
  535.           break;
  536.         case 2 :
  537.                 Control(0);
  538.                 break;
  539.         case 3 :
  540.                 Control(0);
  541.                 break;
  542.         case 4 :
  543.                 Control(0);
  544.                 break;
  545.         case 5 :
  546.                 Control(9);
  547.                 break;
  548.         case 6 :
  549.                 Control(9);
  550.                 break;
  551.         case 7 :
  552.                 Control(9);
  553.                 break;
  554.         case 8 :
  555.                 Control(9);
  556.                 break;
  557.         case 9 :
  558.          break;
  559.         }
  560. }
复制代码

最终程序.7z (1.3 MB, 下载次数: 42)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-7-30 23:24 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:631878 发表于 2019-11-5 09:22
你好,可以联系下吗?正在开发这个,1253182555

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表