找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙小车制作程序

[复制链接]
跳转到指定楼层
楼主
ID:204021 发表于 2017-5-24 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar a;   //串口接收数据
  5. uchar flag;   //串口标志
  6. sbit IN0=P1^0;  //左前
  7. sbit IN1=P1^1;
  8. sbit IN2=P1^2;  //左后
  9. sbit IN3=P1^3;
  10. sbit IN4=P1^4;  //右前
  11. sbit IN5=P1^5;
  12. sbit IN6=P1^6; //右后
  13. sbit IN7=P1^7;
  14. sbit EN0=P0^0;  //左前
  15. sbit EN1=P0^1;//左后
  16. sbit EN2=P0^2;//右前
  17. sbit EN3=P0^3;//右后

  18. void system_initial()   
  19. {
  20.     TMOD = 0x20;      
  21.     TH1 = 0xfd;        //波特率9600      
  22.     TL1 = 0xfd;
  23.     TR1 = 1;     //打开定时器1  
  24.                 SCON = 0x50;                //允许接受
  25.                 PCON = 0x80;               
  26.                 EA = 1;       //打开定时器     
  27.     ES = 1;      //打开串口     
  28. }
  29. void delay_us(uint x)   //微妙延时
  30.         {
  31.                 while(x--);      
  32.         }
  33.         /*void delay_ms(uint x)   //毫秒延时
  34.         {
  35.                 uint i,j;
  36.                 for(i=0;i<x;i++)
  37.                 for(j=0;j<110;j++);
  38. }
  39. void SendChar(uchar Char)  //发送一个字符   
  40. {
  41.     SBUF = Char;
  42.     while(!TI);     
  43.     TI = 0;
  44. }
  45. void SendString(unsigned char *p)  //发送一个字符串
  46. {
  47.                 while(*p)
  48.     {
  49.       SendChar(*p);
  50.       p++;
  51.     }
  52. }*/
  53. void qianjin()    //前进
  54. {      
  55.         while(1)
  56.         {
  57.                 uint jia=0,        T=1000;
  58.                 EN2=1;EN3=1;// 右轮使能               
  59.                 IN4=1;IN5=0;IN6=1;IN7=0;  //右轮正常转
  60.                 IN0=1;IN1=0;IN2=1;IN3=0;
  61.                 while(T<jia)
  62.                 {
  63.                         EN0=0;EN1=0;
  64.                 delay_us(jia++);
  65.                         EN0=1;EN1=1;
  66.                         delay_us(T-jia);
  67.                 }
  68.         }
  69. }
  70. void houtui()
  71. {
  72.         while(1)
  73.         {
  74.                 uint jia=0,        T=1000;
  75.                 EN2=1;EN3=1;// 右轮使能               
  76.                 IN4=0;IN5=1;IN6=0;IN7=1;  //右轮正常转
  77.                 IN0=0;IN1=1;IN2=0;IN3=1;      
  78.                 while(T!=jia)
  79.                 {
  80.                         EN0=0;EN1=0;
  81.                 delay_us(jia++);
  82.                         EN0=1;EN1=1;
  83.                         delay_us(T-jia);
  84.                 }
  85.         }      
  86. }
  87. void stop()  //停止
  88. {
  89.         EN0=0;EN1=0;EN2=0;EN3=0;                //停止使能端               
  90. }
  91. void left_tra()   //左转
  92. {
  93.         EN0=0;EN1=0;//停止左边使能
  94.         EN2=1;EN3=1;    //打开右边使能
  95.         IN4=1;IN5=0;IN6=1;IN7=0;  //右轮正常转
  96. }
  97. void right_tra()
  98. {
  99.         EN2=0;EN3=0;   //停止右边使能
  100.         EN0=1;EN1=1;
  101.         IN0=0;IN1=1;IN2=0;IN3=1;         //左边轮子转
  102. }
  103. void main()
  104.         {
  105.                 system_initial();  //初始化
  106.                 while(1);
  107.         }
  108.         void ser() interrupt 4   //串口中断
  109.         {
  110.                
  111.                 if(RI==1)//接受中断结束
  112.         {                       
  113.                         RI=0;  //清除接受中断结束
  114.                         a=SBUF;  //从单片机中读取出数据
  115.                         SBUF=a;//向蓝牙串口发送一个消息,证明通信良好
  116.                         switch(a)
  117.                                 {
  118.                                         case 0:     //前进
  119.                                      qianjin();   break;
  120.                                         case 1:// 后退
  121.                                         houtui();break;
  122.                                         case 2:      
  123.                                                 left_tra();break;      
  124.                                         case 3:
  125.                                                 right_tra();break;
  126. case 4:stop();break;                                       
  127.                                        
  128.                                 }
  129.                        
  130.                         while(!TI)  //发送中断->结束不等于1
  131.                         TI=0;
  132.         }
  133.       

  134. }

复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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