找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3638|回复: 2
收起左侧

基于stm32f103c8t6的智能避障小车源码 蓝牙控制4位数码管显示

[复制链接]
ID:341278 发表于 2018-6-5 09:36 | 显示全部楼层 |阅读模式
利用超声波测距检测距离,4位数码管显示的蓝牙避障小车。

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "stm32f10x_conf.h"
  3. #include "led.h"
  4. #include "systick.h"
  5. #include "bizhang.h"
  6. #include "key.h"
  7. #include "zhongduan.h"
  8. #include "tx_rx.h"
  9. #include "timer.h"
  10. #include "TM1637.h"
  11. #include "timer3_pwm.h"
  12. #include "wave.h"
  13. #include "mortor.h"


  14. float UltrasonicWave_Distance;      //计算出的距离
  15. u16 counter;
  16. int main()
  17. {     
  18.         //u8 key=0;
  19.         //u8 BZ_flag=0;
  20.         int i=0,j=0;
  21.         u8 distance[4]={0};
  22.         u16 L=0;

  23.         L=2325;
  24.         distance[0]=code[L/1000];
  25.         distance[1]=code[L%1000/100];
  26.         distance[2]=code[L%100/10];
  27.         distance[3]=code[L%10];

  28.   //timer3_fig();
  29.         uart1_init();
  30.   led_inti();           //LED接PB5,PB6,PB7,PB8(核心板自带)
  31.         systick_intil();
  32.         uart1_init();
  33.         send_byte(1);

  34.         bizhang_inti();//避障传感器OUT脚接PA1
  35.         key_inil();    //按键接PA0
  36.         timer_confing();
  37.         wave_config();
  38.         TM1637_Init();
  39.         pwm_configuration(2400,599);
  40.         motor_config();
  41.         set_pwm(800,800,800,800);
  42.         motor_stop();
  43.        
  44.         while(1)
  45.         {
  46.                  //发出高电平
  47.                  //启动测距
  48.                         TIM_Cmd(TIM2, ENABLE);
  49.                   if(led_flag>0)
  50.                   {
  51.                                 TIM_Cmd(TIM2, DISABLE);  
  52.                                 TIM_SetCounter(TIM2,0);
  53.                                 Wave_StarMeasure();
  54.                                 TIM_Cmd(TIM2, DISABLE);
  55.                                 while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2));
  56.                                 //启动定时器               
  57.                                 TIM_Cmd(TIM2, ENABLE);   
  58.                                 //等待低电平                 
  59.                                 while((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1));
  60.                                 counter=TIM_GetCounter(TIM2);
  61.                                 TIM_Cmd(TIM2, DISABLE);                          
  62.                                 //数码管显示数据
  63.                                 UltrasonicWave_Distance=(float)(counter)/20*340/2;
  64.                                 //UltrasonicWave_Distance=(u16)UltrasonicWave_Distance*1000;
  65.                                 if(UltrasonicWave_Distance<5000)
  66.                                 {
  67.                                         distance[0]=code[(u16)UltrasonicWave_Distance/1000];
  68.                                         distance[1]=code[(u16)UltrasonicWave_Distance%1000/100];
  69.                                         distance[2]=code[(u16)UltrasonicWave_Distance%100/10];
  70.                                         distance[3]=code[(u16)UltrasonicWave_Distance%10];
  71.                                         TM1637_NixieTubeDisplay(distance);
  72.                                 }
  73.                                 led_flag=0;
  74.                         }
  75.                 if(RX_num>=5)
  76.                 {
  77.                         for(i=0;i<RX_num;i++)
  78.                         {
  79.                                 if((RX_buff[i]==0x4f)&&(RX_buff[i+1]==0x4e))
  80.                                 {
  81.                                         switch(RX_buff[i+2])
  82.                                         {  
  83.                                                 case 0x41:;motor_run_forward();break;   //前进
  84.                                                 case 0x42:;motor_run_back();break;      //后退
  85.                                                 case 0x43:;motor_left();break;          //左
  86.                                                 case 0x44:;motor_right();break;         //右
  87.                                                 case 0x45:;motor_stop();break;          //停
  88.                                                
  89.                                                 case 0x31:set_pwm(500,500,500,500);break; //1
  90.                                                 case 0x32:set_pwm(900,900,900,900);break; //2
  91.                                                 case 0x33:set_pwm(1200,1200,1200,1200);break;//3
  92.                                                 case 0x34:set_pwm(1500,1500,1500,1500);break; //4
  93.                                                 case 0x35:set_pwm(1800,1800,1800,1800);break;//5
  94.                                                 case 0x36:set_pwm(2000,2000,2000,2000);break; //6
  95.                                                                                 
  96.                                                 case 0x37:led_on();break; //PB8  7
  97.                                                 case 0x38:led_on();break; //PB4  8
  98.                                                 case 0x39:led_off();break; //OFF PB4 PB8  9
  99.                                                 default:break;
  100.                                         }
  101.                                         RX_num=0;
  102.                                         for(i=0;i<50;i++)
  103.                                         {
  104.                                                 RX_buff[i]=0;
  105.                                         }
  106.                                 }
  107.                         }
  108.                 }
  109.         }
  110. }

  111. void EXTI0_IRQHandler(void)  //按键
  112. {
  113.         u16 i,j;
  114.         led_on();
  115.         for(i=0;i<6000;i++)
  116.         {
  117.                 for(j=0;j<6000;j++);
  118.         }
  119.         led_off();
  120.         EXTI_ClearITPendingBit(EXTI_Line0);
  121. }
  122. void EXTI1_IRQHandler(void)//避障
  123. {
  124.         u16 i,j;
  125.         led_on();
  126.         for(i=0;i<6000;i++)
  127.         {
  128.                         for(j=0;j<1000;j++);
  129.         }
  130.         led_off();
  131.         for(i=0;i<6000;i++)
  132.         {
  133.                         for(j=0;j<1000;j++);
  134.         }
  135.         led_on();
  136.         for(i=0;i<6000;i++)
  137.         {
  138.                 for(j=0;j<1000;j++);
  139.         }
  140.         led_off();
  141.         EXTI_ClearITPendingBit(EXTI_Line1);
  142. }
复制代码

所有资料51hei提供下载:
智能小车.rar (367.53 KB, 下载次数: 63)

评分

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

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-6-5 18:23 | 显示全部楼层
电路及介绍呢?
回复

使用道具 举报

ID:9987 发表于 2018-12-31 09:11 | 显示全部楼层
谢谢,下来学习学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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