找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单字节蓝牙下位机控制小车程序

[复制链接]
跳转到指定楼层
楼主
ID:79544 发表于 2015-8-18 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /***************************************************
  2.         单字节蓝牙控制小车程序 电机口是P0
  3.         通过上位机的1,2,3,4,5,6,7,8,9控制单片机
  4.         单片机:STC12C5608AD
  5.         晶振:11.0592M
  6.         作者:苏义江
  7.         时间:2015-8-10
  8. ***********************************************/
  9. #include<reg52.h>
  10. #include<math.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. uchar Buffer[4] = {0};      //从串口接收的数据
  14. uint i,j;
  15. sbit Leftdeng=P1^2;//左大灯
  16. sbit Righdeng=P1^3;//右大灯

  17. /********************************************************************
  18. * 名称 : Delay_1ms()
  19. * 功能 : 延时子程序,延时时间为 1ms * x
  20. * 输入 : x (延时一毫秒的个数)
  21. * 输出 : 无
  22. ***********************************************************************/
  23. void Delay_1ms(uint i)//1ms延时
  24. {
  25.         uchar x,j;
  26.         for(j=0;j<i;j++)
  27.         for(x=0;x<=148;x++);       
  28. }
  29. /********************************************************************
  30. * 名称 : Com_Int()
  31. * 功能 : 串口中断子函数
  32. * 输入 : 无
  33. * 输出 : 无
  34. ***********************************************************************/
  35. void Com_Int(void) interrupt 4
  36. {
  37.        
  38.         EA = 0;
  39.         if(RI == 1)   //当硬件接收到一个数据时,RI会置位
  40.         {
  41.                 Buffer[0] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  42.                 RI = 0;                 
  43.         }
  44.         EA = 1;
  45. }

  46. /********************************************************************
  47. * 名称 : Com_Init()
  48. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  49. * 输入 : 无
  50. * 输出 : 无
  51. ***********************************************************************/
  52. void Com_Init(void)
  53. {
  54.      TMOD = 0x20;
  55.      PCON = 0x00;
  56.      SCON = 0x50;                       
  57.      TH1 = 0xFd;    //设置波特率 9600
  58.      TL1 = 0xFd;
  59.      TR1 = 1;                //启动定时器1
  60.          ES = 1;                //开串口中断
  61.          EA = 1;                //开总中断               
  62. }
  63. /********************************************************************
  64. * 名称 :Moto_Forward()
  65. * 功能 : 电机1、2启动,都是前进,整车表现为前进。
  66. * 输入 : 无
  67. * 输出 : 无
  68. ***********************************************************************/
  69. void Moto_Forward()
  70. {     
  71.            P1= 0xaf;//1010 1111
  72.    Delay_1ms(100);
  73. }
  74. /********************************************************************
  75. * 名称 :Moto_Backward()
  76. * 功能 : 电机1、2启动,都是后退,整车表现为后退。
  77. * 输入 : 无
  78. * 输出 : 无
  79. ***********************************************************************/
  80. void Moto_Backward()
  81. {  
  82.     P1= 0x5f;//0101 1111
  83.          Delay_1ms(100);
  84. }
  85. /********************************************************************
  86. * 名称 :Moto_TurnLeft()
  87. * 功能 : 电机1后退,电机2前进,整车表现为左转。
  88. * 输入 : 无
  89. * 输出 : 无
  90. ***********************************************************************/
  91. void Moto_TurnLeft()
  92. {         
  93.           P1= 0x6f;//0110 1111
  94.          Delay_1ms(100);
  95. }
  96. /********************************************************************
  97. * 名称 :Moto_TurnRight()
  98. * 功能 : 电机1前进,电机2后退,整车表现为右转。
  99. * 输入 : 无
  100. * 输出 : 无
  101. ***********************************************************************/
  102. void Moto_TurnRight()
  103. {         
  104.          P1= 0x9f;//1001 1111         
  105.          Delay_1ms(100);
  106. }
  107. /********************************************************************
  108. * 名称 :Moto_Stop()
  109. * 功能 : 电机1停止,电机2停止,整车表现为停止。
  110. * 输入 : 无
  111. * 输出 : 无
  112. ***********************************************************************/
  113. void Moto_Stop()
  114. {                  
  115.           P1= 0x00;
  116.    Delay_1ms(100);
  117. }
  118. /********************************************************************
  119. * 名称 :LightTurnOn()
  120. * 功能 : 打开车灯。
  121. * 输入 : 无
  122. * 输出 : 无
  123. ***********************************************************************/
  124. void LightTurnOn()
  125. {                             
  126.    Leftdeng=0;   
  127.    Righdeng=0;       
  128. }
  129. /********************************************************************
  130. * 名称 :LightTurnOff()
  131. * 功能 : 关闭车灯。
  132. * 输入 : 无
  133. * 输出 : 无
  134. ***********************************************************************/
  135. void LightTurnOff()
  136. {                  
  137.   Leftdeng=1;   
  138.    Righdeng=1;       
  139. }
  140. /********************************************************************
  141. * 名称 :main()
  142. * 功能 : 主函数
  143. * 输入 : 无
  144. * 输出 : 无
  145. ***********************************************************************/
  146. void main()
  147. {
  148.     Delay_1ms(100);
  149.         Com_Init();//串口初始化
  150.    
  151.   while(1)
  152.   {
  153.          switch(Buffer[0])
  154.            {
  155.              case 0:  Moto_Stop(); break;//停止
  156.                     case 1:  Moto_Forward(); break;//前进
  157.                  case 2:  Moto_Backward();        break;//后退
  158.                  case 3:  Moto_TurnLeft();         break;//左转
  159.                  case 4:  Moto_TurnRight();          break;//右转
  160.                  case 8:  LightTurnOn();  break;//开大灯
  161.                  case 9:  LightTurnOff();  break;//关大灯
  162.                  default:break;         
  163.            }          
  164.   }
  165. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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