找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2905|回复: 0
收起左侧

单片机寻声小车源程序

[复制链接]
ID:306002 发表于 2018-4-13 21:05 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned int uint;
  3. typedef unsigned char uchar;
  4. int a=0;

  5. sbit IN1=P1^0; //定义电机驱动信号输出端
  6. sbit IN2=P1^1; //定义电机驱动信号输出端
  7. sbit IN3=P1^2; //定义电机驱动信号输出端
  8. sbit IN4=P1^3; //定义电机驱动信号输出端
  9. sbit IN5=P1^4; //定义电机驱动信号输出端
  10. sbit IN6=P1^5; //定义电机驱动信号输出端
  11. sbit IN7=P1^6; //定义电机驱动信号输出端
  12. sbit IN8=P1^7; //定义电机驱动信号输出端
  13. sbit out1=P3^2;//定义寻声模块信号左输入端  //可有可无中断自动触发
  14. sbit out2=P3^3;//定义寻声模块信号右输入端
  15. char L_pwm,R_pwm,t;
  16. void L_qian()
  17. {
  18.    IN1=1;   
  19.    IN2=0;
  20.    IN3=1;      
  21.    IN4=0;
  22. }
  23. void R_qian()
  24. {
  25.    IN5=1;   
  26.    IN6=0;
  27.    IN7=1;      
  28.    IN8=0;
  29. }
  30. void L_ting()
  31. {
  32.    IN1=0;   
  33.    IN2=0;
  34.    IN3=0;      
  35.    IN4=0;
  36. }
  37. void R_ting()
  38. {
  39.    IN5=0;   
  40.    IN6=0;
  41.    IN7=0;      
  42.    IN8=0;
  43. }
  44. void L_hou()
  45. {
  46.    IN1=0;   
  47.    IN2=1;
  48.    IN3=0;      
  49.    IN4=1;
  50. }
  51. void R_hou()
  52. {
  53.    IN5=0;   
  54.    IN6=1;
  55.    IN7=0;      
  56.    IN8=1;
  57. }


  58. void zuozhuan()interrupt 0
  59. {
  60.   if(a==0)
  61. { L_pwm=0;R_pwm=40;a=1;}
  62. else a=0;
  63.   }
  64.   void youzhuan()interrupt 2
  65.   {
  66.    if(a==0)
  67. { L_pwm=40;R_pwm=0;a=1;}
  68. else a=0;
  69.   }

  70. void timer0() interrupt 1
  71. {   TH1 = 0x0FE;
  72.     TL1 = 0x33;
  73.    if(L_pwm>=0)if(t<L_pwm) L_qian(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
  74.              else        L_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
  75.    else if(t<~L_pwm)    L_hou(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
  76.              else        L_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
  77.    if(R_pwm>=0)if(t<R_pwm) R_qian(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
  78.              else        R_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
  79.    else if(t<~R_pwm)    R_hou(); //当L_pwm为0时根据我们的思维:电机不应该转。将0代入左边
  80.              else        R_ting(); //L_pwm,发现不管t取0~39范围内何值时,都不会执行L_qian(),
  81.   t++;
  82.   t%=40;//使每个pwm周期内t的取值都是0~39变化
  83. }
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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