找回密码
 立即注册

QQ登录

只需一步,快速开始

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

一个单片机超声波寻物循迹小车的源码

[复制链接]
跳转到指定楼层
楼主
电路设计图 实现的功能:从一个位置出发,开始寻物,在物体前10-20厘米处停下并亮灯,按一下开关后继续寻物,找到三个物体后沿场地边缘黑线到指定位置停车。

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #include <intrins.h>
  4. #define uchar unsigned  char
  5. #define uint  unsigned   int
  6. //管脚定义
  7.          sbit P2_0=P2^0;
  8.         sbit P2_1=P2^1;
  9.         sbit P2_2=P2^2;
  10.         sbit P2_3=P2^3;
  11.         sbit P2_4=P2^4;
  12.         sbit P2_5=P2^5;
  13.          sbit Tr=P3^7;            //超声波触发
  14.     sbit Ec=P3^6;            //超声波输出
  15.     sbit key=P1^0;           //按键
  16.            sbit PCA_LED=P1^1;                         //数码管
  17.         sbit zhong=P0^6;
  18.         sbit zuo=P0^5;
  19.         sbit you=P0^7;
  20.         sbit hou=P0^1;
  21. //定义变量                                                                                                                          
  22.     uint L = 0;               //距离长度(cm)
  23.         uint time=0;
  24.         uint L1=0;
  25.         uint L2=0;
  26.         uint a=3;
  27.         uchar zdbz;
  28. void ultInit()
  29. {
  30.     TMOD=0X11;
  31.         TH1=(65536-100)/256;          //100US定时
  32.         TL1=(65536-100)%256;
  33.         TH0=0;
  34.         TL0=0;  
  35.         TR1= 1;
  36.         ET1= 1;
  37.         ET0= 1;
  38.         EA = 1;
  39. }
  40. void ultStart()
  41. {
  42.     Tr = 1;
  43.     _nop_();
  44.           _nop_();
  45.           _nop_();
  46.           _nop_();
  47.           _nop_();
  48.           _nop_();
  49.           _nop_();
  50.           _nop_();
  51.           _nop_();
  52.           _nop_();
  53.           _nop_();
  54.           _nop_();
  55.           _nop_();
  56.           _nop_();
  57.           _nop_();
  58.           _nop_();
  59.           _nop_();
  60.           _nop_();
  61.           _nop_();
  62.           _nop_();
  63.           _nop_();
  64.     Tr = 0;
  65. }
  66. void count()
  67. {
  68.   while(!Ec);                       //当RX为零时等待
  69.   TR0=1;                               //开启计数
  70.   while(Ec);                           //当RX为1计数并等待
  71.   TR0=0;                                   //关闭计数
  72.   time=TH0*256+TL0;                   //读取脉宽长度
  73.   TH0=0;
  74.   TL0=0;
  75.   L=(time*1.7)/100;        //算出来是CM
  76. }
  77. void softqianjin()
  78. {        
  79.     uchar zdbz=1;
  80.     P2_4=1;
  81.         P2_5=1;        //ENA ENB置为1
  82.         P2_0=1;
  83.         P2_1=0;
  84.         P2_2=1;
  85.         P2_3=0;
  86.          TMOD=0x11;
  87.         TH1=0xfd;
  88.         TL1=0x44;
  89.         EA=1;
  90.         ET1=1;
  91.         TR1=1;
  92. }
  93. void left(void)
  94. {
  95.         P2_4=1;        //ENA为1
  96.         P2_5=0;        //ENB为0
  97.         P2_0=1;
  98.         P2_1=0;
  99.         P2_2=1;
  100.         P2_3=0;
  101. }
  102. void right(void)
  103. {
  104.         P2_4=0;        //ENA为1
  105.         P2_5=1;        //ENB为0
  106.         P2_0=1;
  107.         P2_1=0;
  108.         P2_2=1;
  109.         P2_3=0;        
  110. }

  111. void qianjin(void)
  112. {
  113.         P2_4=1;
  114.         P2_5=1;        //ENA ENB置为1
  115.         P2_0=1;
  116.         P2_1=0;
  117.         P2_2=1;
  118.         P2_3=0;
  119. }
  120. void houtui(void)
  121. {
  122.         P2_4=1;
  123.         P2_5=1;        
  124.         P2_0=0;
  125.         P2_1=1;
  126.         P2_2=0;
  127.         P2_3=1;
  128. }
  129. void shating(void)
  130. {
  131.         P2_4=0;
  132.         P2_5=0;        //ENA ENB置为1
  133.         P2_0=0;
  134.         P2_1=0;
  135.         P2_2=0;
  136.         P2_3=0;
  137. }

  138. void softqianjinzd() interrupt 3
  139. {
  140.         if(zdbz==1)
  141.          {
  142.          P2_0=0;
  143.          P2_2=0;
  144.          TH1=0xfe;
  145.          TL1=0xd4;
  146.          zdbz=0;
  147.         }
  148.         else
  149.         {
  150.          P2_0=1;
  151.          P2_2=1;
  152.          TH1=0xfd;
  153.          TL1=0x44;
  154.          zdbz=1;
  155.         }
  156. }
  157. void delay(unsigned int i)
  158. {
  159.         unsigned int j;
  160.         unsigned char k;
  161.         for(j=i;j>0;j--)
  162.                 for(k=125;k>0;k--);
  163. }


  164. void main()                        
  165. {        
  166.         PCA_LED=0;
  167.         while(key==1);
  168.         qianjin();
  169.         delay(10000);
  170.         ultInit();         
  171.         while(a)
  172. {               
  173.         ultStart();
  174.         count();
  175.           if(L>70)
  176.             {
  177.                 PCA_LED=0;
  178.                 left();
  179.                 }
  180.            else if(L<15)
  181.            {shating();
  182.            while(key==1);
  183.            a--;
  184.            }
  185.            else if(L>15&&L<70)           
  186.                 {
  187.                 PCA_LED=1;
  188.                 qianjin();        
  189.                 }
  190. }
  191. softqianjin();
  192. while(1)
  193. {
  194. if(zhong==1&&zuo==1&&you==1) {shating();delay(2000);break;}
  195. if(zhong==1&&zuo==1&&you==0) {left();}
  196. if(zhong==1&&zuo==0&&you==1) {right();}
  197. }
  198. left();delay(2000);shating();delay(2000);
  199. while(1)
  200. {                                                                                                           
  201. if(zhong==0&&zuo==0&&you==0) {softqianjin();}
  202. if(zhong==0&&zuo==0&&you==1) {right();}
  203. if(zhong==0&&zuo==1&&you==0) {left();}
  204. if(zhong==0&&zuo==1&&you==1) {softqianjin();}
  205. if(zhong==1&&zuo==0&&you==0) {softqianjin();}
  206. if(zhong==1&&zuo==0&&you==1) {right();}
  207. if(zhong==1&&zuo==1&&you==0) {left();}
  208. if(zhong==1&&zuo==1&&you==1) {shating();delay(2000);houtui();delay(1000);left();delay(2000);qianjin();}
  209. if(zhong==1&&hou==1&&you==1) {shating();}
  210. if(zhong==1&&hou==1)                 {shating();}
  211. }
  212. while(1);
  213. }
复制代码
全部程序51hei下载地址:
C文件代码.zip (1.26 KB, 下载次数: 20)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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