找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9571|回复: 9
收起左侧

51单片机超声波避障小车Proteus仿真程序

  [复制链接]
ID:744105 发表于 2020-5-4 20:06 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.jpg

单片机源程序如下:
  1. /* Main.c file generated by New Project wizard
  2. *
  3. * Created:   周五 4月 3 2020
  4. * Processor: AT89C52
  5. * Compiler:  Keil for 8051
  6. */

  7. #include <reg51.h>
  8. #include <stdio.h>
  9. #include <intrins.h>

  10. #define  TX  P1_3
  11. #define  RX  P1_2

  12. #define Forward_L_DATA  180
  13. #define Forward_R_DATA  180        
  14.                            

  15. /*****°′???-í??ó???¨ò?******/
  16. sbit L293D_IN1=P0^0;
  17. sbit L293D_IN2=P0^1;
  18. sbit L293D_IN3=P0^2;
  19. sbit L293D_IN4=P0^3;

  20. sbit L293D_EN1=P0^4;
  21. sbit L293D_EN2=P0^5;

  22. sbit BUZZ=P0^6;


  23. void Delay400Ms(void);


  24. unsigned char disbuff[4]={0,0,0,0};

  25. void Count(void);
  26.                           
  27. unsigned int  time=0;
  28. unsigned long S=0;
  29. bit  flag =0;
  30. bit  turn_right_flag;


  31. //**********************************************************
  32. //oˉêy??3?:Delay1ms(unsigned int i)
  33. //oˉêy1|?ü:?óê±i*1msμ?×ó3ìDò(??ó|óú22.1184Mhz?§??)   
  34. //D?ê?2?êy:unsigned int i
  35. //DD2??μ?÷:?T
  36. //·μ??2?êy:?T
  37. //ê1ó??μ?÷:i?aòa?óê±μ?ê±??3¤?è£?μ¥??ê?MS£?×?′ó?éò??óê±65536 ms
  38. //**********************************************************
  39. void Delay1ms(unsigned int i)
  40. {
  41. unsigned char j,k;
  42. do{
  43.   j = 10;
  44.   do{
  45.    k = 50;
  46.    do{
  47.     _nop_();
  48.    }while(--k);     
  49.   }while(--j);
  50. }while(--i);

  51. }
  52. //**********************************************************
  53. //oˉêy??3?:Delay10us(unsigned char i)
  54. //oˉêy1|?ü:?óê±i*10usμ?×ó3ìDò(??ó|óú22.1184Mhz?§??)   
  55. //D?ê?2?êy:?T
  56. //DD2??μ?÷:?T
  57. //·μ??2?êy:?T
  58. //ê1ó??μ?÷:i?aòa?óê±μ?ê±??3¤?è£?μ¥??ê?US£?×?′ó?éò??óê±250 ms
  59. //**********************************************************
  60. void Delay10us(unsigned char i)
  61. {
  62.    unsigned char j;
  63. do{
  64.   j = 10;
  65.   do{
  66.    _nop_();
  67.    }while(--j);
  68. }while(--i);
  69. }  

  70. //=========================================================================================================================
  71. void Forward()//           ?°??
  72. {

  73.          L293D_IN1=1;
  74.          L293D_IN2=0;
  75.          L293D_IN3=1;
  76.          L293D_IN4=0;
  77. //     PWM_Set(255-Speed_Right,255-Speed_Left);
  78. }
  79. void Stop(void)        //é23μ
  80. {

  81.      L293D_IN1=0;
  82.          L293D_IN2=0;
  83.          L293D_IN3=0;
  84.          L293D_IN4=0;
  85. //         PWM_Set(0,0);
  86. }
  87. void Turn_Retreat()         //oó
  88. {
  89.     L293D_IN1=0;
  90.         L293D_IN2=1;
  91.         L293D_IN3=0;
  92.         L293D_IN4=1;
  93. //        PWM_Set(255-Speed_Right,255-Speed_Left);
  94. }

  95. void Turn_left()         //×ó
  96. {
  97.     L293D_IN1=0;
  98.         L293D_IN2=1;
  99.         L293D_IN3=1;
  100.         L293D_IN4=0;
  101. //        PWM_Set(255-Speed_Right,255-Speed_Left);
  102. }

  103. //=========================================================================================================================
  104. /********?àà?????3ìDò***************/
  105.     void Conut(void)
  106.         {
  107.          time=TH1*256+TL1;
  108.          TH1=0;
  109.          TL1=0;
  110.         
  111.          
  112.                     
  113.                                 
  114.                                 
  115.                                 
  116.                                 
  117.                                 

  118.         S=time*2;
  119.            S=S*0.17;
  120.          if(S<=300)         
  121.          {        
  122.             if(turn_right_flag!=1)
  123.                 {
  124.                     Stop();
  125.                     Delay1ms(5);
  126.                 }
  127.                 turn_right_flag=1;
  128.                
  129.                 P1_7=0;
  130.                 P2_0=0;
  131.                 P0_6=0;

  132.                 Delay1ms(10);
  133.                
  134.                 P1_7=1;
  135.                 P2_0=1;
  136.                 P0_6=1;

  137.            
  138.            
  139.            Delay1ms(5);         
  140.          
  141.            Turn_left();
  142.            Delay1ms(10);           

  143.          }
  144.          else
  145.          {
  146.             turn_right_flag=0;
  147.             
  148.                 Forward();


  149.          }
  150.          
  151.          if((S>=5000)||flag==1)
  152.          {        
  153.           flag=0;
  154.       
  155.          }
  156.          else
  157.          {
  158.       disbuff[0]=S%10;
  159.           disbuff[1]=S/10%10;
  160.           disbuff[2]=S/100%10;
  161.           disbuff[3]=S/1000;
  162.          }
  163.         }

  164. /********************************************************/
  165.      void zd0() interrupt 3                  
  166.   {
  167.     flag=1;                        
  168.         RX=0;
  169.   }

  170. /********3?éù2¨??μ?????3??í?è????3ìDò***************/
  171. void Timer_Count(void)
  172. {
  173.                  TR1=1;                           
  174.              while(RX);                        
  175.              TR1=0;                                
  176.          Conut();                        

  177. }
  178. /********************************************************/
  179.    void  StartModule()                          
  180.   {
  181.           TX=1;                                             
  182.       Delay10us(2);
  183.           TX=0;
  184.   }
  185. /********************************************************/

  186. /*************?÷3ìDò********************/
  187. void main(void)
  188. {
  189.     unsigned char i;
  190.         unsigned int a;
  191.         
  192.         Delay1ms(400);
  193. //        LCMInit()
  194.         Delay1ms(5);
  195.    TMOD=TMOD|0x10;
  196.     EA=1;
  197.     TH1=0;
  198.     TL1=0;         
  199.     ET1=1;            
  200.                                    
  201.         
  202.         
  203.         
  204.         turn_right_flag=0;
  205.         
  206.         BUZZ=0;        
  207.         Delay1ms(50);
  208.         BUZZ=1;
  209.         
  210.          while(1)
  211.           {
  212.                 RX=1;
  213.             StartModule();
  214.         for(a=951;a>0;a--)
  215.             {
  216.                   
  217.                if(RX==1)
  218.                    {
  219.            Timer_Count();
  220.                    }
  221.              }
  222.            }
  223. }

  224. }
复制代码

我的这个程序目前还存在很多问题,大家帮忙一起完善下吧: 51避障小车仿真.rar (73.42 KB, 下载次数: 340)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:750022 发表于 2020-5-13 10:59 | 显示全部楼层
楼主,可以运行,但是仿真结果怎么观察,
回复

使用道具 举报

ID:698914 发表于 2020-5-13 22:10 | 显示全部楼层
下载后用什么打开啊  
回复

使用道具 举报

ID:497556 发表于 2020-6-2 17:24 | 显示全部楼层
感谢楼主,仿真怎么观察啊
回复

使用道具 举报

ID:793926 发表于 2020-6-30 16:37 | 显示全部楼层
下载后仿真怎么打开
回复

使用道具 举报

ID:798260 发表于 2020-7-6 13:45 | 显示全部楼层
程序 出乱码了啊
回复

使用道具 举报

ID:89286 发表于 2020-7-28 09:41 | 显示全部楼层
Thanks for sharing
回复

使用道具 举报

ID:848219 发表于 2020-12-4 13:43 | 显示全部楼层
祥子冲冲冲 发表于 2020-5-13 10:59
楼主,可以运行,但是仿真结果怎么观察,

知道怎样看仿真了吗
回复

使用道具 举报

ID:945628 发表于 2021-7-1 17:36 | 显示全部楼层
majiedong2020 发表于 2020-5-13 22:10
下载后用什么打开啊

用Keil打开
回复

使用道具 举报

ID:966389 发表于 2021-10-31 20:13 | 显示全部楼层
仿真怎么观察啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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