PWM程序控制小车

PWM程序控制小车:
 
  1. #include<reg52.h>
  2.  
  3. sbit rs=P0^0;
  4. sbit rw=P0^1;
  5. sbit en=P0^2;
  6.  
  7. sbit sensera=P1^0;
  8. sbit senserb=P1^1;
  9. sbit senserc=P1^2;
  10. sbit senserd=P1^3;
  11. sbit in1=P1^4;
  12. sbit in2=P1^5;
  13. sbit in3=P1^6;
  14. sbit in4=P1^7;
  15.  
  16. int left_low,left_high,right_low,right_high;
  17.  
  18. unsigned char leftsign,rightsign;
  19. unsigned char leftback,rightback;
  20. void timer0init()
  21. {
  22.     TMOD=0x01;
  23. TH0=0x00;
  24. TL0=0x00;
  25. EA=1;
  26. ET0=1;
  27. TR0=1;
  28.  
  29. }
  30. void timer0(void) interrupt 1
  31. {
  32. if(leftback)
  33. {
  34.    leftsign=!leftsign;
  35.    if(!leftsign)
  36.    {
  37.     TH0 =(65536-left_low)/256;
  38.     TL0 =(65536-left_low)%256;
  39.     in1=0;
  40.     in2=0;
  41.    }
  42.    if(leftsign)
  43.    {
  44.     TH0=(65536-left_high)/256;
  45.     TL0=(65536-left_high)%256;;
  46.     in1=1;           //倒转
  47.     in2=0;
  48.    }
  49. }
  50. else
  51. {
  52.    leftsign=!leftsign;
  53.    if(!leftsign)
  54.    {
  55.     TH0=(65536-left_low)/256;
  56.     TL0=(65536-left_low)%256;
  57.     in1=0;
  58.     in2=0;
  59.    }
  60.    if(leftsign)
  61.    {
  62.     TH0=(65536-left_high)/256;
  63.     TL0=(65536-left_high)%256;;
  64.     in1=0;
  65.     in2=1;
  66.    }
  67. }  
  68. }
  69. void timer1init()
  70. {
  71.     TMOD=0x10;
  72. TH1=0x00;
  73. TL1=0x00;
  74. EA=1;
  75. ET1=1;
  76. TR1=1;
  77. }
  78. void timer1(void) interrupt 3
  79. { if(rightback)
  80. {
  81.    rightsign=!rightsign;
  82.    if(!rightsign)
  83.    {
  84.     TH1=(65536-right_low)/256;
  85.     TL1=(65536-right_low)%256;
  86.     in3=0;
  87.     in4=0;
  88.    }
  89.    if(rightsign)
  90.    {
  91.     TH1=(65536-right_high)/256;
  92.     TL1=(65536-right_high)%256;
  93.     in3=1;
  94.     in4=0;
  95.    }
  96. }
  97. else
  98. {
  99.    rightsign=!rightsign;
  100.    if(!rightsign)
  101.    {
  102.     TH1=(65536-right_low)/256;
  103.     TL1=(65536-right_low)%256;
  104.     in3=0;
  105.     in4=0;
  106.    }
  107.    if(rightsign)
  108.    {
  109.     TH1=(65536-right_high)/256;
  110.     TL1=(65536-right_high)%256;
  111.     in3=0;
  112.     in4=1;
  113.    }
  114. }  
  115. }
  116. void testsenser() //左 直 右 停 后(01234)大拐 小拐 无意义(310)
  117. {
  118.   if((sensera==0&&senserb==0&&senserc==0&&senserd==1)||(sensera==0&&senserb==1&&senserc==1&&senserd==1)) // 右大拐
  119.   {
  120.    leftback=0;
  121.   rightback=1;
  122.   ET0=1;
  123.   ET1=1;
  124.   left_high=20000;
  125.   left_low=40000;
  126.   right_high=20000;
  127.   right_low=40000;
  128.   }
  129.  
  130.   else if((sensera==0&&senserb==0&&senserc==1&&senserd==1)||(sensera==0&&senserb==0&&senserc==1&&senserd==0))//  右小拐
  131.   {
  132.    leftback=0;
  133.   rightback=1;
  134.   ET0=1;
  135.   ET1=1;
  136.   left_high=20000;
  137.   left_low=40000;
  138.   right_high=10000;
  139.   right_low=40000;
  140.   }
  141.   else if((sensera==1&&senserb==0&&senserc==0&&senserd==0)||(sensera==1&&senserb==1&&senserc==1&&senserd==0))  // 左大拐
  142.   {
  143.    leftback=1;
  144.   rightback=0;
  145.   ET0=1;
  146.   ET1=1;
  147.    left_high=20000;
  148.   left_low=40000;
  149.   right_high=20000;
  150.   right_low=40000;
  151.   }
  152.   else if((sensera==1&&senserb==1&&senserc==0&&senserd==0)||(sensera==0&&senserb==1&&senserc==0&&senserd==0))    // 左小拐
  153.   {
  154.    leftback=1;
  155.   rightback=0;
  156.   ET0=1;
  157.   ET1=1;
  158.    left_high=10000;
  159.   left_low=40000;
  160.   right_high=20000;
  161.   right_low=40000;
  162.   }
  163.   else if(sensera==1&&senserb==1&&senserc==1&&senserd==1)// 停
  164.   {
  165.    leftback=0;
  166.   rightback=0;
  167.   ET0=0;
  168.   ET1=0;
  169.      in1=0;
  170.      in2=0;
  171.      in3=0;
  172.   in4=0;
  173.   }
  174.   else if(sensera==0&&senserb==0&&senserc==0&&senserd==0)// 后退
  175.   {
  176.    leftback=1;
  177.   rightback=1;
  178.   ET0=1;
  179.   ET1=1;
  180.    left_high=10000;
  181.   left_low=50000;
  182.   right_high=10000;
  183.   right_low=50000;
  184.   }
  185.   else  //直走
  186.   {
  187.    leftback=0;
  188.   rightback=0;
  189.   ET0=1;
  190.   ET1=1;
  191.    left_high=10000;
  192.   left_low=50000;
  193.   right_high=20000;
  194.   right_low=50000;
  195.   }   
  196. }
  197.  
  198.  
  199.            
  200. void main()
  201. {
  202. timer0init();
  203. timer1init();
  204. while(1)
  205.   testsenser();
  206. }
复制代码

 

文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-208662-1-1.html

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值