找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32红外+超声波的源码

[复制链接]
跳转到指定楼层
楼主
ID:347672 发表于 2018-6-8 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "chao.h"
  5. #include "remote.h"  
  6. #include "timer.h"

  7. #define L2 PBin(14)
  8. #define R2 PBin(15)
  9. uint16_t spd=300;
  10. u8 last;
  11. u8 last1;
  12. u8 last2;
  13. u8 last3;
  14. u16 pp=400;
  15. void dingyi()
  16. {
  17.         GPIO_InitTypeDef  GPIO_InitStructure;
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);       
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                               
  21.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                 
  22.         GPIO_Init(GPIOA, &GPIO_InitStructure);               

  23.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;         
  24.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        
  25.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  26.        
  27.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;         
  28.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        
  29.         GPIO_Init(GPIOB, &GPIO_InitStructure);       
  30.        
  31.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;         
  32.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        
  33.         GPIO_Init(GPIOB, &GPIO_InitStructure);       
  34.        
  35.        
  36.        
  37.         //红外

  38.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;         
  39.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        
  40.         GPIO_Init(GPIOB, &GPIO_InitStructure);       
  41.        
  42.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;         
  43.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        
  44.         GPIO_Init(GPIOB, &GPIO_InitStructure);       
  45. }
  46. void shizhong_Init()
  47. {
  48.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  49.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  50.        
  51.         dingyi();
  52.        
  53.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  54.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
  55.        
  56.         TIM_TimeBaseStructure.TIM_Period = 889; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
  57.         TIM_TimeBaseStructure.TIM_Prescaler =0; //设置用来作为TIMx时钟频率除数的预分频值  不分频
  58.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  59.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  60.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  61.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

  62.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  63.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  64.         TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
  65.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  66.        
  67.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
  68.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);
  69.         TIM_OC3Init(TIM4, &TIM_OCInitStructure);
  70.         TIM_OC4Init(TIM4, &TIM_OCInitStructure);

  71.         TIM_CtrlPWMOutputs(TIM3,ENABLE);         //MOE 主输出使能
  72.         TIM_CtrlPWMOutputs(TIM4,ENABLE);       

  73.        
  74.         TIM_ARRPreloadConfig(TIM3, ENABLE);        //使能TIMx在ARR上的预装载寄存器
  75.         TIM_ARRPreloadConfig(TIM4, ENABLE);
  76.        
  77.         TIM_Cmd(TIM3, ENABLE);  //使能TIM1
  78.         TIM_Cmd(TIM4, ENABLE);
  79. }
  80. void qianjin(uint16_t spd)
  81. {
  82.         TIM_SetCompare1(TIM3,899);      //INT1
  83.         TIM_SetCompare2(TIM3,spd);      //ibt2
  84.        
  85.         TIM_SetCompare3(TIM4,spd);
  86.         TIM_SetCompare4(TIM4,899);
  87.        
  88. }
  89. void zuozhuan(uint16_t spd)
  90. {
  91.         TIM_SetCompare1(TIM3,spd);
  92.         TIM_SetCompare2(TIM3,899);
  93.        
  94.         TIM_SetCompare3(TIM4,spd);
  95.         TIM_SetCompare4(TIM4,899);
  96. }
  97. void youzhuan(uint16_t spd)
  98. {
  99.         TIM_SetCompare1(TIM3,899);
  100.         TIM_SetCompare2(TIM3,spd);
  101.        
  102.         TIM_SetCompare3(TIM4,899);
  103.         TIM_SetCompare4(TIM4,spd);
  104. }
  105. void shache(uint16_t spd)
  106. {
  107.         TIM_SetCompare1(TIM3,899);
  108.         TIM_SetCompare2(TIM3,899);
  109.        
  110.         TIM_SetCompare3(TIM4,899);
  111.         TIM_SetCompare4(TIM4,899);
  112. }
  113. void back(uint16_t spd)
  114. {
  115.         TIM_SetCompare1(TIM3,spd);
  116.         TIM_SetCompare2(TIM3,899);
  117.        
  118.         TIM_SetCompare3(TIM4,899);
  119.         TIM_SetCompare4(TIM4,spd);
  120. }

  121. //红外壁障
  122. void hongzhang(uint16_t spd)
  123. {
  124.         if(L2==1 && R2==1)            //没有障碍
  125.                 qianjin(spd);
  126.         else if(L2 ==0 && R2 == 1)    //左边有障碍
  127.         {
  128.                 back(spd);
  129.                 delay_ms(spd/2);
  130.                 youzhuan(spd);
  131.                 delay_ms(spd/2);
  132.         }
  133.         else if(L2 ==1 && R2 == 0)    //右边有障碍
  134.         {
  135.                 back(spd);
  136.                 delay_ms(spd/2);
  137.                 zuozhuan(spd);
  138.                 delay_ms(spd/2);
  139.         }
  140.         else                          //左右都有障碍
  141.         {
  142.                 back(spd);
  143.                 delay_ms(spd/2);
  144.                 youzhuan(spd);
  145.                 delay_ms(spd/2);
  146.         }
  147. }

  148. int main(void)//
  149. {
  150.          u8 key;
  151.          u8 key1;
  152.          u8 key2;
  153.          u8 key3;
  154.         //u8 t=0;       
  155.         u8 *str=0;
  156.         u8 x=0;
  157.          delay_init();                     //延时函数初始?
  158.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2          
  159.          uart_init(9600);         //串口初始化为9600
  160.          shizhong_Init();
  161.          TIM2_Cap_Init(0XFFFF,72-1);                //以1Mhz的频率计数 ;
  162.          CSB_Init();
  163.          Remote_Init();         
  164.         while(1)
  165.         {
  166.                 key=Remote_Scan();
  167.                 if(!key){key=last;}               
  168.                 if(key)
  169.                 {                   
  170.                         switch(key)
  171.                         {                           
  172.                                 case 152:str="2";
  173.                                 {
  174.                                         hongzhang(spd);
  175.                                         key2=Remote_Scan();
  176.                                         if(!key2){key2=last2;}
  177.                                         if(key2==66)
  178.                                         {
  179.                                           
  180.                                             shache(spd);
  181.                                             last2=key2;
  182.                                         }
  183.                                         else
  184.                                               last=key;       
  185.                                         break;
  186.                                        
  187.                                 }                                       
  188.                                 case 176:str="3";
  189.                                 {
  190.                                         chaosheng();
  191.                                         key3=Remote_Scan();
  192.                                         if(!key3){key3=last3;}
  193.                                         if(key3==66)
  194.                                         {
  195.                                           
  196.                                             shache(spd);
  197.                                             last3=key3;
  198.                                         }
  199.                                         else
  200.                                               last=key;       
  201.                                         break;
  202.                                 }                                       
  203.                  
  204.                         }
  205.                 }
  206.                
  207.                
  208.         }
  209. }
复制代码

所有资料51hei提供下载:
红外+超声波.rar (331.61 KB, 下载次数: 11)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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