小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 6000|回复: 0

用光碟DIY蓝牙小车下位机源码

[复制链接]
发表于 2016-1-11 14:31:58 | 显示全部楼层 |阅读模式
  1. /************************************************
  2. //蓝牙控制小车 加舵机 加避障 可以调速 正确的程序
  3.         单片机: STC12C5608AD
  4. //        晶振  :           11.0592M晶振
  5.         作者  :苏义江
  6.         时间  :2016-1-8
  7. ***************************************************/
  8. #include <reg52.h>
  9. #include<intrins.h>
  10. #define uint unsigned int
  11. #define uchar unsigned char
  12. //sfr  T2MOD=0xc9;
  13. sbit in1  =P1^0; //电机1端口
  14. sbit in2  =P1^1;
  15. sbit ina  =P1^2;  //电机PWM-A

  16. sbit in3  =P1^3;//电机2端口
  17. sbit in4  =P1^4;
  18. sbit inb  =P1^5;//电机PWM-B

  19. sbit bz_l =P2^0;  //避障左
  20. sbit bz_z =P2^1;  //避障右
  21. sbit bz_r =P2^2;  //避障右

  22. sbit moto_pwm =P3^4;//PWM输出脚控制舵机
  23. sbit yan      =P3^5;//头灯光

  24. sbit landeng =P3^2;//蓝前大灯
  25. sbit hondeng =P3^3;//红前大灯
  26. sbit yinyue  =P3^7;//音乐端口

  27. sbit wela    =P1^6;//位码
  28. sbit dula    =P1^7;//段码
  29. uchar code table[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,
  30.                                                 0x82,0xF8,0x80,0x90,0xBF,0xff};
  31. uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  32. //uchar disbuff[4] ={ 0,0,0,0,};//数码管全显示 0
  33. uint tt = 0;//变量定义
  34. uint num=0;//变量定义

  35. uchar pwm_lefr=0;//定义 定时器自加1变量
  36. //uchar pwm_lefr1=0;//定义 定时器自加1变量
  37. uchar duojiguizhong=14;//舵机归中1.5ms
  38. uchar duojiguizhong1=14;//舵机归中1.5ms
  39. uchar tmp,w,sudu; //变量w 定义PWM值

  40. void init() ;
  41. void delay1(uint z)//延时函数
  42. {
  43.         uint x,y;
  44.         for(x=z;x>0;x--)
  45.                 for(y=120;y>1;y--);
  46. }
  47. void delay(uint z)
  48. {
  49.         uint x,y;
  50.         for(x=0;x<z;x++)
  51.         for(y=0;y<1000;y++);
  52.        
  53. }

  54. /*void xianshi(uchar num)//显示
  55. {  
  56.   uchar gw,sw,bw,qianw;
  57.         qianw=num/1000%100;
  58.    bw=num%1000/100;   
  59.    sw=num%100/10;   
  60.    gw=num%10;
  61.             
  62.    P2=0xfe;   
  63.    wela=1;     
  64.    _nop_();_nop_();   
  65.    wela=0;     
  66.    P2=table[qianw];
  67.     dula=1;     
  68.    _nop_();_nop_();   
  69.    dula=0;   
  70.    delay1(2);

  71.    P2=0xfd;
  72.    wela=1;     
  73.    _nop_();
  74.    _nop_();   
  75.    wela=0;     
  76.    P2=table[bw];
  77.     dula=1;     
  78.    _nop_();
  79.    _nop_();   
  80.    dula=0;   
  81.    delay1(2);

  82.         P2=0xfb;   
  83.    wela=1;     
  84.    _nop_();_nop_();   
  85.      wela=0;     
  86.    P2=table[sw];   
  87.    dula=1;     
  88.    _nop_();_nop_();   
  89.    dula=0;
  90.    delay1(2);
  91.                 P2=0xf7;   
  92.    wela=1;     
  93.    _nop_();_nop_();   
  94.      wela=0;     
  95.    P2=table[gw];   
  96.    dula=1;     
  97.    _nop_();_nop_();   
  98.    dula=0;
  99.    delay1(2); //显示个 十 百 千

  100. }  */

  101. void pwmmaic()//产生PWM
  102. {
  103.         if(pwm_lefr<=duojiguizhong)       
  104.                 moto_pwm=1;
  105.                 else
  106.                 moto_pwm=0;
  107.                 if(pwm_lefr>=200)
  108.                 pwm_lefr=0;               
  109. }

  110. void duoji_kz()//舵机控制
  111. {
  112.         yan=0;
  113.         duojiguizhong=9;
  114.        
  115.         delay(800);
  116.         yan=0;
  117.         duojiguizhong=16;
  118.        
  119.         delay(800);
  120.         yan=0;
  121.         duojiguizhong=24;
  122.        
  123.         delay(800);
  124.         yan=0;
  125.         duojiguizhong=16;
  126.        
  127.         delay(800);
  128.         yan=0;
  129.         delay(1500);
  130.         yan=1;       
  131. }
  132. void lankong()        //蓝色LED
  133. {
  134.         landeng=0;
  135.         delay1(80);
  136.         landeng=1;
  137.         delay1(80);
  138. }
  139. void hongkong()        //红色LED
  140. {
  141.         hondeng=0;
  142.         delay1(80);
  143.         hondeng=1;
  144.         delay1(80);
  145. }
  146. void qianjin()
  147. {
  148.         in1=1;in2=0;in3=0;in4=1;
  149.         w=40;
  150.         yan=0;landeng=0;hondeng=0;yinyue=0;       
  151. }   
  152. void houtui()
  153. {
  154.         in1=0;in2=1;in3=1;in4=0;
  155.         w=40;
  156.         yan=1;hondeng=0;yinyue=0;       
  157. }  
  158. void zuozhuan()
  159. {
  160.         in3=1;in4=0;
  161.         w=40;
  162.         lankong();yinyue=1;
  163. }
  164. void youzhuan()
  165. {
  166.         in1=0;in2=1;
  167.         w=40;
  168.         hongkong();yinyue=1;
  169. }  
  170. void tingzhi()
  171. {
  172.         in1=0;in2=0;in3=0 ;in4=0;
  173.         hongkong();lankong();yinyue=1;
  174. }
  175. void zhuanquan()
  176. {
  177.         in1=1;in2=0;in3=1;in4=0;
  178.         w=40;
  179.         lankong();yinyue=1;
  180. }
  181. void bizhang()        //避障
  182. {
  183.     if(bz_l==1&&bz_z==1&&bz_r==1)
  184.          qianjin();
  185.         if(bz_l==0&&bz_z==1&&bz_r==1)
  186.          zuozhuan();
  187.          if(bz_l==0&&bz_z==0&&bz_r==1)
  188.          zuozhuan();
  189.          if(bz_l==1&&bz_z==1&&bz_r==0)
  190.          youzhuan();
  191.          if(bz_l==1&&bz_z==0&&bz_r==0)
  192.          youzhuan();
  193.          if(bz_l==1&&bz_z==0&&bz_r==1)
  194.          {
  195.                  tingzhi();
  196.                 delay(100);
  197.                 houtui();
  198.                 delay(500);
  199.                 zuozhuan();
  200.                 delay(200);
  201.                 qianjin();
  202.          }
  203.          if(bz_l==0&&bz_z==0&&bz_r==0)
  204.          {       
  205.                  tingzhi();
  206.                 delay(100);
  207.                 houtui();
  208.                 delay(500);
  209.                 zuozhuan();
  210.                 delay(200);
  211.                 qianjin();
  212.          }
  213. }
  214. void init()   //串口初始化
  215. {                                                                       //关中断
  216.     SCON =0x50; //串口模式1,允许接收                  
  217.     TMOD =0x20;//定时器1为模式2 8-bit自动装载方式用于产生波特率
  218.     PCON=0x00;//波特率不倍增
  219.         TH1=0xfd;//波特率9600  11.0592M
  220.         TL1=0xfd;
  221.         TH0=0xfd;
  222.         TH0=0xae;
  223.         EA=1;
  224.         ES=1;
  225.         ET0=1; //        T0中断允许
  226.         TR0=1; //        启动T0定时器
  227.         TR1=1; //        启动T1定时器
  228.         duojiguizhong=16;
  229.         duojiguizhong1=16;
  230. }
  231. void ctrl() //接收处理函数
  232. {
  233.    switch(tmp)
  234.    {        
  235.             case 1:qianjin(); break;                                                    
  236.      case 2: houtui();break;                                                                            
  237.      case 3:zuozhuan(); break;
  238.      case 4:youzhuan();break;  
  239.          case 0:tingzhi(); break;
  240.          case 7:duoji_kz();break;        //舵机         C
  241.          case 8: bizhang(); break;        //避障        D
  242.          
  243.    /*case 1:duoji_kz();qianjin(); break;                                                    
  244.      case 2:duoji_kz(); houtui();break;                                                                            
  245.      case 3:zuozhuan(); break;
  246.      case 4:youzhuan();break;  
  247.          case 0:tingzhi(); break;  */
  248.    }
  249. }
  250. void tiaosu () //调速
  251. {
  252.         switch(sudu)
  253.         {
  254.                 case 5: zhuanquan();        break;         //A
  255.                 case 6: w=75; break;         //B               
  256.         }
  257. }
  258. void main()
  259. {
  260.    init();         
  261.    while(1)
  262.    {
  263. //        xianshi( num ); //显示函数  
  264.         ctrl();
  265.         tiaosu();  
  266.    }
  267. }
  268. void time0() interrupt 1
  269. {  
  270.     TH0=0xfd;
  271.     TL0=0xae;
  272.         tt++;
  273.         pwm_lefr++;
  274. //        pwm_lefr1++;
  275.         pwmmaic();
  276.         if(tt<w)
  277.         {
  278.                 ina=1;
  279.                 inb=1;
  280.         }
  281.         else
  282.         {
  283.                 ina=0;
  284.                 inb=0;
  285.         }
  286.         if(tt==100)
  287.         {tt=0;
  288.        
  289.         num++;
  290.         if(num==9999)num=0;       
  291.         }
  292. }
  293. void ckzd() interrupt 4
  294. {
  295.         ES=0;
  296.         RI=0;
  297.         tmp=SBUF;
  298.         sudu=SBUF;
  299.         ES=1;
  300. }
复制代码


评分

参与人数 1威望 +1 金钱 +3 贡献 +1 收起 理由
liuviking + 1 + 3 + 1

查看全部评分

回复

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-26 07:18 , Processed in 1.093311 second(s), 24 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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