立即注册 登录
返回首页

uid:193705的个人空间

日志

以后备用

已有 784 次阅读2017-4-26 09:15

  1. #include<reg52.h>//声明头文件
  2. #define uchar unsigned char//宏定义
  3. #define uint unsigned int//宏定义
  4. #define aa 35//左轮速度调节值
  5. #define bb 35//右轮速度调节值

  6. sbit deng=P2^0;//前车灯
  7. sbit y=P2^1;//右转向灯
  8. sbit z=P2^2;//左转向灯
  9. sbit BEEP=P2^3;//蜂鸣器

  10. sbit you1=P0^3;//右轮正转信号端
  11. sbit you2=P0^2;//右轮倒转信号端
  12. sbit zuo1=P0^1;//左轮正转信号端
  13. sbit zuo2=P0^0;//左轮倒转信号端

  14. uchar a=0;//定义一个变量a,用来读取串口的数据

  15. void delay(uint z)//一个带参数的延时程序
  16. {
  17.         int i,j;//定义两个变量
  18.         for(i=10;i>0;i--)
  19.         for(j=z;j>0;j--);//将参数z赋值给j
  20. }

  21. void init()//初始化子程序
  22. {
  23.         TMOD=0x20;//设置定时器T1为工作方式2
  24.         TH1=0xfd;
  25.         TL1=0xfd;//T1定时器装初值
  26.         TR1=1;//启动定时器T1
  27.         REN=1;//允许串口接收
  28.         SM0=0;
  29.         SM1=1;//设置串口工作方式1
  30.         EA=1;//开总中断
  31.         ES=1;//开串口中断
  32. }

  33. void go1()//前进子程序
  34. {
  35.         zuo1=1;
  36.         zuo2=0;//左边轮子正转
  37.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  38.         zuo2=1;//关闭左边轮子

  39.         you1=1;
  40.         you2=0;        //右边轮子正转
  41.         delay(bb);//pwm有用值,越大右边的轮子越快
  42.         you2=1;//关闭右边轮子

  43.         delay(100);//pwm无用值,越大,小车跑的越慢
  44.         z=1;
  45.         y=1;//关闭转向灯
  46. }

  47. void go2()//前进子程序
  48. {
  49.         zuo1=1;
  50.         zuo2=0;//左边轮子正转
  51.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  52.         zuo2=1;//关闭左边轮子

  53.         you1=1;
  54.         you2=0;        //右边轮子正转
  55.         delay(bb);//pwm有用值,越大右边的轮子越快
  56.         you2=1;//关闭右边轮子

  57.         delay(80);//pwm无用值,越大,小车跑的越慢
  58.         z=1;
  59.         y=1;//关闭转向灯
  60. }

  61. void go3()//前进子程序
  62. {
  63.         zuo1=1;
  64.         zuo2=0;//左边轮子正转
  65.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  66.         zuo2=1;//关闭左边轮子

  67.         you1=1;
  68.         you2=0;        //右边轮子正转
  69.         delay(bb);//pwm有用值,越大右边的轮子越快
  70.         you2=1;//关闭右边轮子

  71.         delay(60);//pwm无用值,越大,小车跑的越慢
  72.         z=1;
  73.         y=1;//关闭转向灯
  74. }

  75. void go4()//前进子程序
  76. {
  77.         zuo1=1;
  78.         zuo2=0;//左边轮子正转
  79.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  80.         zuo2=1;//关闭左边轮子

  81.         you1=1;
  82.         you2=0;        //右边轮子正转
  83.         delay(bb);//pwm有用值,越大右边的轮子越快
  84.         you2=1;//关闭右边轮子

  85.         delay(40);//pwm无用值,越大,小车跑的越慢
  86.         z=1;
  87.         y=1;//关闭转向灯
  88. }

  89. void go5()//前进子程序
  90. {
  91.         zuo1=1;
  92.         zuo2=0;//左边轮子正转
  93.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  94.         zuo2=1;//关闭左边轮子

  95.         you1=1;
  96.         you2=0;        //右边轮子正转
  97.         delay(bb);//pwm有用值,越大右边的轮子越快
  98.         you2=1;//关闭右边轮子

  99.         delay(20);//pwm无用值,越大,小车跑的越慢
  100.         z=1;
  101.         y=1;//关闭转向灯
  102. }

  103. void go6()//前进子程序
  104. {
  105.         zuo1=1;
  106.         zuo2=0;//左边轮子正转
  107.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  108.         zuo2=1;//关闭左边轮子

  109.         you1=1;
  110.         you2=0;        //右边轮子正转
  111.         delay(bb);//pwm有用值,越大右边的轮子越快
  112.         you2=1;//关闭右边轮子

  113.         z=1;
  114.         y=1;//关闭转向灯
  115. }

  116. void hui1()//小车后退的子程序
  117. {
  118.         zuo1=0;
  119.         zuo2=1;//左边轮子倒转
  120.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  121.         zuo1=1;//关闭左边轮子

  122.         you1=0;
  123.         you2=1;        //右边轮子倒转
  124.         delay(bb);//pwm有用值,越大右边的轮子越快
  125.         you1=1;//关闭右边轮子

  126.         delay(100);//pwm无用值,越大,小车跑的越慢
  127.         z=1;
  128.         y=1;//关闭转向灯
  129. }

  130. void hui2()//小车后退的子程序
  131. {
  132.         zuo1=0;
  133.         zuo2=1;//左边轮子倒转
  134.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  135.         zuo1=1;//关闭左边轮子

  136.         you1=0;
  137.         you2=1;        //右边轮子倒转
  138.         delay(bb);//pwm有用值,越大右边的轮子越快
  139.         you1=1;//关闭右边轮子

  140.         delay(80);//pwm无用值,越大,小车跑的越慢
  141.         z=1;
  142.         y=1;//关闭转向灯
  143. }

  144. void hui3()//小车后退的子程序
  145. {
  146.         zuo1=0;
  147.         zuo2=1;//左边轮子倒转
  148.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  149.         zuo1=1;//关闭左边轮子

  150.         you1=0;
  151.         you2=1;        //右边轮子倒转
  152.         delay(bb);//pwm有用值,越大右边的轮子越快
  153.         you1=1;//关闭右边轮子

  154.         delay(60);//pwm无用值,越大,小车跑的越慢
  155.         z=1;
  156.         y=1;//关闭转向灯
  157. }

  158. void hui4()//小车后退的子程序
  159. {
  160.         zuo1=0;
  161.         zuo2=1;//左边轮子倒转
  162.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  163.         zuo1=1;//关闭左边轮子

  164.         you1=0;
  165.         you2=1;        //右边轮子倒转
  166.         delay(bb);//pwm有用值,越大右边的轮子越快
  167.         you1=1;//关闭右边轮子

  168.         delay(40);//pwm无用值,越大,小车跑的越慢
  169.         z=1;
  170.         y=1;//关闭转向灯
  171. }
  172. void hui5()//小车后退的子程序
  173. {
  174.         zuo1=0;
  175.         zuo2=1;//左边轮子倒转
  176.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  177.         zuo1=1;//关闭左边轮子

  178.         you1=0;
  179.         you2=1;        //右边轮子倒转
  180.         delay(bb);//pwm有用值,越大右边的轮子越快
  181.         you1=1;//关闭右边轮子

  182.         delay(20);//pwm无用值,越大,小车跑的越慢
  183.         z=1;
  184.         y=1;//关闭转向灯
  185. }
  186. void hui6()//小车后退的子程序
  187. {
  188.         zuo1=0;
  189.         zuo2=1;//左边轮子倒转
  190.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  191.         zuo1=1;//关闭左边轮子

  192.         you1=0;
  193.         you2=1;        //右边轮子倒转
  194.         delay(bb);//pwm有用值,越大右边的轮子越快
  195.         you1=1;//关闭右边轮子

  196.         z=1;
  197.         y=1;//关闭转向灯
  198. }

  199. void turnleft()//小车左转弯子程序
  200. {
  201.         
  202.         z=~z;//左转向灯打开

  203.         zuo1=1;
  204.         zuo2=1;//左边轮子停止转动
  205.         you1=1;
  206.         you2=0;        //右边轮子正转
  207.         delay(bb);//pwm有用值,越大右边的轮子越快
  208.         you2=1;//右边轮子停止
  209.         delay(50);//pwm无用值,越大,小车跑的越慢
  210.         
  211.         z=1;
  212.         y=1;//关闭转向灯
  213. }

  214. void turnright()//小车右转弯子程序
  215. {
  216.         y=~y;//右转向灯打开

  217.         zuo1=1;
  218.         zuo2=0;//左边轮子正转
  219.         delay(aa);//pwm有用值,越大左边方向的轮子越快
  220.         zuo2=1;//左边轮子停止

  221.         you1=1;
  222.         you2=1;        //右边轮子停止
  223.         delay(50);//pwm无用值,越大,小车跑的越慢
  224.         z=1;
  225.         y=1;//关闭转向灯
  226.         
  227. }
  228. void down()//停止子程序
  229. {
  230.         zuo1=1;
  231.         zuo2=1;
  232.         you1=1;
  233.         you2=1;        //左右轮全部停止
  234.         z=1;
  235.         y=1;//关闭转向灯
  236. }

  237. void main()//主程序
  238. {
  239.         init();//调用初始化子程序
  240.         while(1)//死循环
  241.         {
  242.                     if(a==0x14||a==0x15||a==0x54||a==0x55||a==0x64||a==0x65)//如果是就前进
  243.                         go1();
  244.                         if(a==0x16||a==0x17||a==0x56||a==0x57||a==0x66||a==0x67)//如果是就前进
  245.                         go2();
  246.                         if(a==0x18||a==0x19||a==0x58||a==0x59||a==0x68||a==0x69)//如果是就前进
  247.                         go3();
  248.                         if(a==0x1a||a==0x1b||a==0x5a||a==0x5b||a==0x6a||a==0x6b)//如果是就前进
  249.                         go4();
  250.                         if(a==0x1c||a==0x1d||a==0x5c||a==0x5d||a==0x6c||a==0x6d)//如果是就前进
  251.                         go5();
  252.                         if(a==0x1e||a==0x1f||a==0x5e||a==0x5f||a==0x6e||a==0x6f)//如果是就前进
  253.                         go6();

  254.                     if(a==0x24||a==0x25||a==0x74||a==0x75||a==0x84||a==0x85)//如果是就后退
  255.                         hui1();
  256.                         if(a==0x26||a==0x27||a==0x76||a==0x77||a==0x86||a==0x87)//如果是就后退
  257.                         hui2();
  258.                         if(a==0x28||a==0x29||a==0x78||a==0x79||a==0x88||a==0x89)//如果是就后退
  259.                         hui3();
  260.                         if(a==0x2a||a==0x2b||a==0x7a||a==0x7b||a==0x8a||a==0x8b)//如果是就后退
  261.                         hui4();
  262.                         if(a==0x2c||a==0x2d||a==0x7c||a==0x7d||a==0x8c||a==0x8d)//如果是就后退
  263.                         hui5();
  264.                         if(a==0x2e||a==0x2f||a==0x7e||a==0x7d||a==0x8e||a==0x8f)//如果是就后退
  265.                         hui6();

  266.                         if(a==0x3f)//如果是0x3f就左转
  267.                         turnleft();
  268.                         if(a==0x4f)//如果是0x4f就右转
  269.                         turnright();
  270.                         if(a==0x00)//如果是0x00就停止
  271.                         down();
  272.                         if(a==0xa0)//如果是0xa0车灯打开
  273.                         deng=0;
  274.                         if(a==0xb0)//如果是0xb0车灯关闭
  275.                         deng=1;
  276.                         if(a==0xc0)//如果是0xc0蜂鸣器鸣响
  277.                         BEEP=0;                        
  278.                         if(a==0xd0)//如果是0xd0蜂鸣器关
  279.                         BEEP=1;
  280.                         
  281.                         else
  282.                         down();
  283.                 }        
  284. }        

  285. void chuan() interrupt 4//串口中断服务程序
  286. {
  287.         RI=0;//软件清除串口响应
  288.         a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据
  289. }

路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)

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

Powered by 单片机教程网

返回顶部