找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1590|回复: 0
打印 上一主题 下一主题
收起左侧

2019电设电磁项目 STM32代码分享

[复制链接]
跳转到指定楼层
楼主
2019年电子设计大赛电磁题目参考代码,本人参加所用,附作品实物照片一张哈哈,分享学习。电磁采用多匝线圈绕成,用大容量电容充放电。单片机采用stm32f103rct6,电磁发射控制采用继电器,显示使用oled,使用矩阵键盘进行功能切换和设置。


单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "timer.h"

  3. #include "led.h"
  4. #include "oled.h"
  5. #include "key.h"
  6. #include "delay.h"
  7. #include "Duoji_PWM.h"
  8. #include "delay.h"
  9. #include "sys.h"
  10. #include "usart.h"
  11. #include "adc.h"
  12. #include "oled.h"
  13. #include "bmp.h"
  14. #include "pwm.h"
  15. #include "hc05.h"
  16. //#include "usart2.h"
  17. #include "jidianqi.h"
  18. #include "math.h"

  19. #define  ADC_Channel  7
  20. #define key_clear {key_7=0,key_8=0,key_9=0,key_4=0,key_5=0,key_6=0,key_1=0,key_2=0,key_3=0,key_0=0,kaishi=0,change_d=0,change_a=0,done=0,saomiao=0;saomiao2=0;}
  21. extern u8 num;
  22.   unsigned char key_7=0,key_8=0,key_9=0,kaishi=0;
  23.   unsigned char key_4=0,key_5=0,key_6=0,change_d=0;
  24.   unsigned char key_1=0,key_2=0,key_3=0,change_a=0;
  25.   unsigned char done=0,key_0=0,saomiao=0,saomiao2=0;
  26.   
  27.         unsigned int Compare_ang=110,Compare_dis=83;
  28.         unsigned int Compare_ang_done,Compare_dis_done;
  29.         
  30. extern u32 distance1;
  31.         
  32.   //距离角度
  33.   unsigned int distance=0,angle=0;
  34.   unsigned int dis_1=0,dis_2=0,dis_3=0;
  35.   unsigned int ang_1=0,ang_2=0;
  36.         
  37. extern void Key1_init(void);
  38. extern void Key2_init(void);



  39. void JTAG_Set(u8 mode2)        //配置JTAG/SW
  40. {
  41.         u32 temp;
  42.         temp=mode2;
  43.         temp<<=25;
  44.         RCC->APB2ENR|=1<<0;     //开启辅助时钟           
  45.         AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
  46.         AFIO->MAPR|=temp;       //配置JTAG/SW模式
  47. }

  48. int main(void)
  49. {
  50. //        u16 adc0,adc1,adc2,adc3;
  51.         JTAG_Set(0x02); //关闭JTAG调试接口,因为JTAG接口占用了B3、B4、A15。用户想要更改到的OLED接口可能与JTAG接口冲突,所以关闭JTAG。
  52.         JTAG_Set(0x01); //开启SWD调试接口。DIO:A13,CLK:A14
  53.         delay_init();                    //延时函数初始化         

  54.         LED_Init();                                  //初始化与LED连接的硬件接口
  55.          Adc_Init();                                  //ADC初始化
  56.         OLED_Init();

  57.         delay_init();
  58.          TIM3_Cap_Init(4999,7199);        
  59.                 uart_init(9600);                 //串口初始化为9600
  60.                 HC05_Init();
  61.                  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级               
  62.         TIM1_PWM_Init(1439,999);        
  63.         TIM8_PWM_Init(1439,999);
  64.         uart_init(9600);
  65.          jidianqi_Init();
  66.          TIM3_Cap_Init(0XFFFF,72-1);
  67. //         TIM_SetCompare1(TIM1,Compare_ang);
  68. //                TIM_SetCompare1(TIM8,Compare_dis);
  69.          chongdian;
  70.                 kaipao;
  71.   while(1)
  72.         {
  73.                 OLED_P6x8Str(0,0,"mode:",F6x8);
  74.                 OLED_P6x8Str(0,20,"distance:",F6x8);
  75.                 OLED_P6x8Str(0,30,"angle:",F6x8);
  76.                 OLED_P6x8Str(0,40,"distance11:",F6x8);
  77.                 Read_Distane();
  78.                 OLED_ShowNum(80,40,distance1,4,F6x8);
  79.                 num=KEY_Scan();
  80.                 switch(num)
  81.                 {
  82. //                        case 1: key_7=1;break;
  83. //                        case 2: key_8=1;break;
  84. //                        case 3: key_9=1;break;
  85.                         case 16: kaishi=1;break;
  86. //                        case 5: key_4=1;break;
  87. //                        case 6: key_5=1;break;
  88. //                        case 7: key_6=1;break;
  89.                         case 15: change_d=1;break;
  90. //                        case 9: key_1=1;break;
  91.                         case 10: saomiao2=1;break;
  92.                         case 13: saomiao=1;break;
  93.                         case 14: change_a=1;break;
  94. //                        case 10: done=1;break;
  95.                         case 12: done=1;break;
  96. //                        case 15: key_7=1;break;
  97. //                        case 16: key_7=1;break;
  98.                 }

  99. //                LCD_ShowNum(20,20,num,3,12);
  100.         OLED_ShowNum(0,60,num,1,F6x8);
  101. //                distance=90;
  102. //                 OLED_ShowNumber(40,40,(u16)distance,5,12);

  103. //                num=0;
  104.                 Compare_ang=83+(int)angle*0.89;
  105.                 Compare_dis=45+asin(distance/1.5)/2;
  106.                
  107.                
  108.            if(kaishi==1)
  109.            {
  110. //                   //30-190  中心110   190、30 180度  范围 83~137
  111. //                  TIM_SetCompare1(TIM1,190);                  
  112. //                                delay_ms(1000);                              
  113. //                                TIM_SetCompare1(TIM1,30);               
  114. //                                delay_ms(1000);         
  115. //                 //25~150  水平45,垂直望天120
  116. //        TIM_SetCompare1(TIM8,120);
  117. //                   delay_ms(1000);
  118. //                   TIM_SetCompare1(TIM8,45);
  119. //                   delay_ms(1000);
  120. //                key_clear;
  121.                   
  122.                    TIM_SetCompare1(TIM1,Compare_ang);
  123.                    delay_ms(1000);        
  124.                    TIM_SetCompare1(TIM8,Compare_dis);
  125.                    delay_ms(1000);
  126.                   chongdian_stop;
  127.         
  128.                    //tiao
  129.                    delay_ms(1000);
  130.                    delay_ms(1000);
  131.                    delay_ms(1000);
  132.                    delay_ms(1000);
  133.                    delay_ms(1000);
  134.                     delay_ms(1000);
  135.                    delay_ms(1000);
  136.                    delay_ms(1000);
  137.                    delay_ms(1000);
  138.                    delay_ms(1000);
  139.                    delay_ms(1000);
  140.                    delay_ms(1000);
  141.                    delay_ms(1000);
  142.                    delay_ms(1000);
  143.                    delay_ms(1000);
  144.                    delay_ms(1000);
  145.                    delay_ms(1000);
  146.                     delay_ms(1000);
  147.                    delay_ms(1000);
  148.                    delay_ms(1000);
  149.                    delay_ms(1000);
  150.                    delay_ms(1000);
  151.                    delay_ms(1000);
  152.                    delay_ms(1000);
  153.                    delay_ms(1000);
  154.                

  155.         chongdian;
  156.                   
  157.                   
  158.                    kaipao_stop;
  159.                  
  160.                    kaipao;
  161.                    key_clear;
  162.                   
  163.            }
  164.            
  165.            
  166.            if(saomiao==1)
  167.            {
  168.                   
  169.                    Compare_ang=83;
  170.                    while(1)
  171.                    { Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
  172.                    TIM_SetCompare1(TIM1,Compare_ang);
  173.                     delay_ms(800);
  174.                            Compare_ang+=10;
  175.                            if(Compare_ang==133)
  176.                                    while(Compare_ang!=83)
  177.                                    { Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
  178.                                            TIM_SetCompare1(TIM1,Compare_ang);
  179.                                                 delay_ms(800);Compare_ang-=10;
  180.                                            if(distance1<=3500&&distance1>=2500)
  181.                                            {        OLED_P6x8Str(40,60,"find!",F6x8);
  182.                                                    goto K1;}
  183.                                           
  184.                                         }
  185.                                    }
  186.                                           
  187.                   
  188.                
  189.                         K1:chongdian_stop;
  190.         
  191.                    //tiao
  192.                    delay_ms(1000);
  193.                    delay_ms(1000);
  194.                    delay_ms(1000);
  195.                    delay_ms(1000);
  196.                    delay_ms(1000);
  197.                     delay_ms(1000);
  198.                    delay_ms(1000);
  199.                    delay_ms(1000);
  200.                    delay_ms(1000);
  201.                    delay_ms(1000);
  202.                    delay_ms(1000);
  203.                    delay_ms(1000);
  204.                    delay_ms(1000);
  205.                    delay_ms(1000);
  206.                    delay_ms(1000);
  207.                    delay_ms(1000);
  208.                    delay_ms(1000);
  209.                     delay_ms(1000);
  210.                    delay_ms(1000);
  211.                    delay_ms(1000);
  212.                    delay_ms(1000);
  213.                    delay_ms(1000);
  214.                    delay_ms(1000);
  215.                    delay_ms(1000);
  216.                    delay_ms(1000);
  217.                          chongdian;
  218.                    kaipao_stop;
  219.                         
  220.                    kaipao;
  221.                    OLED_CLS_y(40);
  222.                     key_clear;
  223.            }
  224.            //发挥题三
  225.            if(done==1)
  226.            {
  227.                    OLED_P6x8Str(0,0,"mode:",F6x8);
  228.                    OLED_P6x8Str(40,0,"manual operation",F6x8);
  229.                    Compare_ang_done=110;
  230.                    delay_ms(1000);
  231.                    Compare_dis_done=45;
  232.                    delay_ms(1000);
  233.                    key_clear;
  234.                    while(done!=1)
  235.                    {
  236.                            
  237.                            while(1)
  238.                    {
  239.                            num=KEY_Scan();
  240.                            if(num!=0)
  241.                            {  delay_ms(50);
  242.                                    num=KEY_Scan();
  243.                                 if(num!=0)
  244.                                 {num=KEY_Scan();
  245.                                        
  246.                                    while(KEY_Scan()!=0) ;
  247.                                    goto M1;
  248.                                 }
  249.                    }
  250.                   
  251.                   }
  252.                    M1:
  253.                            if(num==4)
  254.                            {Compare_ang_done=Compare_ang_done+8;TIM_SetCompare1(TIM1,Compare_ang_done);delay_ms(1000);num=0;}
  255.                            if(num==6)
  256.                            {Compare_ang_done=Compare_ang_done-8;TIM_SetCompare1(TIM1,Compare_ang_done);delay_ms(1000);num=0;}
  257.                            if(num==8)
  258.                            { Compare_dis_done=Compare_dis_done-8; TIM_SetCompare1(TIM8,Compare_dis_done);delay_ms(1000);num=0;}
  259.                            if(num==5)
  260.                            { Compare_dis_done=Compare_dis_done+8; TIM_SetCompare1(TIM8,Compare_dis_done);delay_ms(1000);num=0;}
  261.                                    
  262.                   
  263.                     
  264.            }
  265.            key_clear;
  266.                     OLED_CLS_y(0);
  267.    }
  268.            
  269.    //扫描2
  270.            if(saomiao2==1)
  271.            {
  272.                    TIM_SetCompare1(TIM8,45);
  273.                    Compare_ang=137;
  274.                    while(1)
  275.                    { Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
  276.                    TIM_SetCompare1(TIM1,Compare_ang);
  277.                     delay_ms(800);
  278.                            Compare_ang-=10;
  279.                            if(Compare_ang==87)
  280.                                    while(Compare_ang!=137)
  281.                                    { Read_Distane();OLED_ShowNum(80,40,distance1,4,F6x8);
  282.                                            TIM_SetCompare1(TIM1,Compare_ang);
  283.                                                 delay_ms(800);Compare_ang+=10;
  284.                                            if(distance1<=3500&&distance1>=2500)
  285.                                            {        OLED_P6x8Str(40,60,"find!",F6x8);
  286.                                                    goto K2;}
  287.                                           
  288.                                         }
  289.                                    }
  290.                                           
  291.                   
  292.                
  293.                         K2:chongdian_stop;
  294.         
  295.                    //tiao
  296.                     delay_ms(1000);
  297.                    delay_ms(1000);
  298.                    delay_ms(1000);
  299.                    delay_ms(1000);
  300.                    delay_ms(1000);
  301.                     delay_ms(1000);
  302.                    delay_ms(1000);
  303.                    delay_ms(1000);
  304.                    delay_ms(1000);
  305.                    delay_ms(1000);
  306.                    delay_ms(1000);
  307.                    delay_ms(1000);
  308.                    delay_ms(1000);
  309.                    delay_ms(1000);
  310.                    delay_ms(1000);
  311.                    delay_ms(1000);
  312.                    delay_ms(1000);
  313.                     delay_ms(1000);
  314.                    delay_ms(1000);
  315.                    delay_ms(1000);
  316.                    delay_ms(1000);
  317.                    delay_ms(1000);
  318.                    delay_ms(1000);
  319.                    delay_ms(1000);
  320.                    delay_ms(1000);
  321.                          chongdian;
  322.                    kaipao_stop;
  323.                         
  324.                    kaipao;
  325.                    OLED_CLS_y(40);
  326.                     key_clear;
  327.            }
  328.            
  329.            
  330.            if(change_d==1)
  331.            {
  332.                    OLED_P6x8Str(0,0,"mode:",F6x8);
  333.                    OLED_P6x8Str(40,0,"change distance",F6x8);
  334.                   
  335.                     while(KEY_Scan()!=0) ;
  336.                    num=0;
  337.                    while(1)
  338.                    {
  339.                            num=KEY_Scan();
  340.                            if(num!=0)
  341.                            {  delay_ms(50);
  342.                                    num=KEY_Scan();
  343.                                 if(num!=0)
  344.                                 {num=KEY_Scan();
  345.                                         dis_1=num;}
  346.                                    while(KEY_Scan()!=0) ;
  347.                                    goto L1;
  348.                                 }
  349.                    }
  350.                   
  351.                   
  352.                    L1: OLED_ShowNum(60,20,dis_1,1,F6x8);
  353.                    delay_ms(100);
  354.                    num=0;
  355.                   
  356.                    while(1)
  357.                    {
  358.                            num=KEY_Scan();
  359.                            if(num!=0)
  360.                            {  delay_ms(50);
  361.                                    num=KEY_Scan();
  362.                                 if(num!=0)
  363.                                 {num=KEY_Scan();
  364.                                         dis_2=num;}
  365.                                    while(KEY_Scan()!=0);
  366.                                         goto L2;
  367.                                          
  368.                                 }
  369.                    }
  370.                   
  371.                    L2: OLED_ShowNum(70,20,dis_2,1,F6x8);
  372.                    delay_ms(100);
  373.                    num=0;
  374.                   
  375.                    while(1)
  376.                    {
  377.                            num=KEY_Scan();
  378.                            if(num!=0)
  379.                            {  delay_ms(50);
  380.                                    num=KEY_Scan();
  381.                                 if(num!=0)
  382.                                 {num=KEY_Scan();dis_3=num;
  383.                                 }
  384.                                    while(KEY_Scan()!=0);
  385.                                 goto L3;
  386.                                 }
  387.                    }
  388.                   
  389.                    L3: OLED_ShowNum(80,20,dis_3,1,F6x8);
  390.                    num=0;
  391.                    distance=100*dis_1+10*dis_2+dis_3;
  392. //                   OLED_P6x8Str(0,40,"hand",F6x8);
  393. //                   OLED_ShowNumber(40,40,distance,5,12);
  394.                    key_clear;
  395.                    OLED_CLS_y(0);
  396. //                   OLED_P6x8Str(30,60,"clear successful",F6x8);
  397.            }
  398.            
  399.            if(change_a==1)
  400.            {
  401.                    OLED_P6x8Str(0,0,"mode:",F6x8);
  402.                    OLED_P6x8Str(40,0,"change angle",F6x8);
  403.                     while(KEY_Scan()!=0) ;
  404.                    num=0;
  405.                    while(1)
  406.                    {
  407.                            num=KEY_Scan();
  408.                            if(num!=0)
  409.                            {  delay_ms(50);
  410.                                    num=KEY_Scan();
  411.                                 if(num!=0)
  412.                                 {num=KEY_Scan();
  413.                                         ang_1=num;}
  414.                                    while(KEY_Scan()!=0) ;
  415.                                    goto A1;
  416.                                 }
  417.                    }
  418.                   
  419.                   
  420.                    A1: OLED_ShowNum(60,30,ang_1,1,F6x8);
  421.                    delay_ms(100);
  422.                    num=0;
  423.                   
  424.                     while(KEY_Scan()!=0) ;
  425.                    num=0;
  426.                    while(1)
  427.                    {
  428.                            num=KEY_Scan();
  429.                            if(num!=0)
  430.                            {  delay_ms(50);
  431.                                    num=KEY_Scan();
  432.                                 if(num!=0)
  433.                                 {num=KEY_Scan();
  434.                                         ang_2=num;}
  435.                                    while(KEY_Scan()!=0) ;
  436.                                    goto A2;
  437.                                 }
  438.                    }
  439.                   
  440.                   
  441.                    A2: OLED_ShowNum(70,30,ang_2,1,F6x8);
  442.                    delay_ms(100);
  443.                    num=0;
  444.                   
  445.                    angle=ang_1*10+ang_2;
  446.                    key_clear;
  447.                    OLED_CLS_y(0);
  448. //                   OLED_P6x8Str(30,60,"clear successful",F6x8);
  449.                 TIM_SetCompare1(TIM1,Compare_ang);
  450.                    delay_ms(1000);        
  451.                    TIM_SetCompare1(TIM8,Compare_dis);
  452.                    delay_ms(1000);   
  453.            }
  454.         }

  455. }
复制代码

所有资料51hei提供下载:
电磁项目.7z (228.44 KB, 下载次数: 13)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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