找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的测障碍小车程序 可以测距,测角度

[复制链接]
跳转到指定楼层
楼主
ID:371387 发表于 2019-3-16 19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. sbit p30=P3^0;
  2. sbit p20=P2^0;
  3. sbit p32=P3^2;
  4. uint n;
  5. //红外波
  6. void delay(uint t, uchar i)
  7. {        for(;t>0;t--)
  8.                 { for(;i>0;i--); }                                         
  9. }

  10. void time0() interrupt 1
  11. {n++;
  12.   if(n>=308)
  13.         {        p30=0;
  14.                 if(n==616)        
  15.                         n=0;
  16.         }
  17.   else  p30=~p30;
  18. }
  19. void inter1() interrupt 2
  20. {p20=0;
  21. delay(8000,125);//0.5S
  22. }
  23. void main()
  24. {
  25.         TMOD=0X02;TH0=0XF3;TL0=0XF3;
  26.         ET0=1;TR0=1;
  27.         EX1=1;IT1=1;
  28.         PX1=1;
  29.         EA=1;
  30.         while(1)
  31.                 {p20=1;p30=0;
  32.                 }
  33. }







  34.   P31=~P31;
  35. }

  36. void Delay_1ms(uint j)
  37. { uchar i=0;
  38.     for(;j>0;j--)
  39.       for(i=0;i<125;i++);
  40. }

  41. void fashong()
  42. { uchar k;
  43. ET0=1;TR0=1;
  44. Delay_1ms(3);
  45. for(k=0;k<jianhao;k++)
  46. {ET0=0;TR0=0;P31=0;
  47. Delay_1ms(1);
  48. ET0=1;TR0=1;
  49. Delay_1ms(1);
  50. }
  51. ET0=0;TR0=0;P31=0;
  52. Delay_1ms(3);
  53. }

  54. void  key()
  55. {if(p32==0)
  56. {jianhao=1;flag=1;}
  57. if(p33==0)
  58. {jianhao=2;flag=1;}
  59. if(p34==0)
  60. {jianhao=3;flag=1;}
  61. if(p35==0)
  62. {jianhao=4;flag=1;}

  63. }

  64. void main()
  65. {

  66. TMOD=0X02;TH0=0XF3;TL0=0XF3;EA=1;P31=0;jianhao=0;
  67. while(1)
  68.   {//p20=1;p21=1;p22=1;p23=1;
  69. // p24=0;p25=0;p26=0;p27=0;
  70. p32=1;p33=1;p34=1;p35=1;
  71.     // P1=a[jianhao];
  72.          key();
  73.      if(flag)
  74.         { p27=0;
  75.         fashong();
  76.          flag=0;}
  77.          p27=1;
  78.         }
  79. }






  80. //角度测量
  81. #include"reg51.h"
  82. #define uchar unsigned char
  83. #define uint unsigned int
  84. uchar code seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  85. uchar code segnode[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  86. #define digport P0
  87. #define dataport P1
  88. #define wordport P2
  89. #define r 45
  90. sbit  eoc= P3^3;
  91. sbit  clk= P3^4;
  92. sbit  start= P3^6;
  93. sbit  oe= P3^7;
  94. bit flag;
  95. uchar a[4]={0xff,0xff,0xff,0xff};//黑屏
  96. uchar dig=0x01;

  97. void delay(uint t)
  98. {for(;t<0;t--);}

  99. /*void display()
  100. {
  101.         uchar i;
  102.                 wordport=0xff;
  103.         for(i=0;i<4;i++)
  104.                 {
  105.                
  106.                         wordport=a[i];
  107.                         digport=dig<<1;
  108.                         delay(300);
  109.                  }
  110. }*/
  111. void Display(void)
  112. {
  113.         uchar i,k,select=0x01;
  114.        for(i=0;i<=5;i++)
  115.              { digport=select;
  116.                            wordport=a[i];
  117.                select<<=1;
  118.                             for(k=0;k<=100;k++)//改
  119.                                 {;}
  120.                  }

  121. }
  122. void time0() interrupt 1
  123. {        clk=~clk; }               
  124. void chuli()
  125. {                        
  126.         unsigned long  int da;
  127.         //eoc=0;
  128.         start=1;
  129.         oe=1;
  130.         da=dataport;
  131.         delay(10);
  132.         oe=0;
  133. //        da=da*196;
  134.     if(da<127)a[3]=0xbf;//128改127//127.5=127
  135.     if(da>=127)a[3]=0xff;
  136. //        if(da<5000||da>45000){da=0;}
  137.    
  138.     if(a[3]==0xff) {da=da-127;        da=da*1961;} //}if(da>49000)da=50000;}
  139.     if(a[3]==0xbf) {da=128-da;        da=da*1961;}//128改127
  140.    
  141.         da=da*r;
  142.         if(da>9000000)da=9000000;
  143.         a[0]=seg[da/10000%10];
  144.         if((da/1000%10)>5)
  145.         a[0]=seg[da/10000%10+1];
  146.         a[1]=segnode[da/100000%10];
  147.         a[2]=seg[da/1000000];
  148.         start=0;        
  149.         delay(10);
  150. }

  151. void main(void)
  152. {   uchar k;
  153.         delay(30);
  154. //        IT1=1;EX1=1;
  155.         TMOD=0x02;TH0=253;TL0=253;
  156.         TR0=1;ET0=1;PT0=1;
  157.         EA=1;
  158.         //eoc=0;
  159.         start=0;
  160.         start=1;
  161.         start=0;
  162.         for(;;)
  163.         {               
  164.                 if(eoc)        chuli();
  165.                 for(k=0;k<100;k++)
  166. {        Display();}
  167.         }
  168.         
  169. }        

复制代码

可以测距,测角度
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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