一个假期的努力-一个偶尔红外壁障可以遥控的智能小车

  1     #include<reg52.h>
  2     #define uint unsigned int
  3     #define uchar unsigned char
  4         sbit left1=P1^0;
  5         sbit left2=P1^1;
  6         sbit right1=P1^2;
  7         sbit right2=P1^3;
  8         sbit Trig=P1^4;
  9         sbit Echo=P1^5;
 10         sbit c_0=P2^0;
 11         sbit c_1=P2^1;
 12         sbit c_2=P2^2;
 13         sbit c_3=P2^3;
 14         long Th1,Tl1;
 15         uint how=0;
 16         uint distance=0;
 17         uint time=0;
 18         bit Timeup=0;
 19
 20         uint state=0;                        // 0为待定 1为壁障   2为遥控
 21         uint avoidstate=0;                      // 0为前进探索 1为停止确定 2为后退 3为左转   4为继续前进(不探测)
 22         uint t=0;                                //pwm
 23         uint count=5;                           //占空比
 24
 25
 26     void delay_20us()
 27     {
 28         uchar a ;
 29         for(a=0;a<50;a++);
 30     }
 31     uint measuring()
 32     {   char Rxback=1;
 33          //初始化
 34
 35         Th1=0;
 36         Tl1=0;
 37         Timeup=0;
 38
 39         ET1=1; //开启定时器1中断
 40         TR1=0;
 41         TH1=0;
 42         TL1=0;
 43
 44         Trig=1;
 45         delay_20us();
 46         Trig=0;
 47         while(Echo==0);//等待信号返回
 48         TH1=0;
 49         TL1=0;
 50         TR1=1;
 51         while(Rxback)
 52         {
 53             if(Echo==0||Timeup==1)
 54             {
 55                 TR1=0;
 56                 Th1=TH1;
 57                 Tl1=TL1;
 58                 TR1=1;
 59                 Rxback=0;
 60             }
 61         }
 62         time=(Th1*256+Tl1);
 63         distance=((unsigned long)(340)*time)/2000;   //单位mm
 64         if(distance<30||distance>900)
 65         distance=0;   //去除错误数据
 66         return distance;
 67     }
 68     void delayms(uint ms)
 69     {
 70         uint i,j;
 71         for(i=ms;i>0;i++)
 72             for(j=110;j>0;j++);
 73     }
 74     void left()
 75     {
 76         left1=1;
 77         left2=0;
 78         right1=1;
 79         right2=1;
 80     }
 81     void right()
 82     {
 83         right1=1;
 84         right2=0;
 85         left1=1;
 86         left2=1;
 87     }
 88     void run()
 89     {
 90         left1=1;
 91         left2=0;
 92         right1=1;
 93         right2=0;
 94     }
 95     void stop()
 96     {
 97         left1=1;
 98         left2=1;
 99         right1=1;
100         right2=1;
101     }
102     void judgement()
103     {
104             if(how<=150&&how>=40&&avoidstate==0)
105             {
106                 avoidstate=1;
107             }
108     }
109     void time0() interrupt 1              //pwm 控制  state 0为待定 1为壁障 2为循迹 3为遥控
110     {
111         TL0 = 0x00;     //设置定时初值20ms
112         TH0 = 0xB8;     //设置定时初值
113         t++;
114         if(t>=20)
115         {
116             t=0;
117         }
118         if(t<=count)
119         {
120              if(state==1)
121             {
122                 judegement();
123                 if(avoidstate==0)
124                     run();
125                 if(avoidstate==1)
126                 {       leftgo();
127                         delayms(5);
128                         avoidstate=0;
129                 }
130             }
131             if(state==2)
132             {   if(c_0==1)
133                         run();
134                 else
135                 {   if(c_1==1)
136                             left();
137                     else
138                     {   if(c_2==1)
139                                 right();
140                         else
141                         {   if(c_3==1)
142                                 stop();
143                         }
144                     }
145                 }
146             }
147         }
148         else
149         {
150             stop();
151         }
152     }
153     void T0_time() interrupt 3
154     {
155         Timeup=1;
156     }
157     void main()
158     {
159         state=2;          //    停止等待状态
160
161         left1=1;             //初始化电机
162         left2=1;
163         right1=1;
164         right2=1;
165
166
167         TMOD=0x11;            // 0&1计时器可用
168         TL0 = 0x00;     //设置定时20ms
169         TH0 = 0xB8;
170         ET0=1;
171         TR0=1;
172         TR1=0;
173         EA=1;
174         delayms(5);
175         run();
176         while(1)
177         {       if(state==1)
178                 {how=measuring();  }
179         }
180     }  

一个假期的努力 后来比赛的时候就用到了~

果然前人栽树后人乘凉啊!

时间: 2024-07-31 12:45:51

一个假期的努力-一个偶尔红外壁障可以遥控的智能小车的相关文章

读书--------------由一本书,了解一个人,了解一个人而明白一个道理,明白一个道理,也许我们会知道如何生活。----我所了解的于娟老师

     复旦大学女教师于娟已经去世一年多了,但这篇<为啥是我得癌症?>值得每个人认真阅读. 于娟,女,32岁,祖籍山东济宁,海归,博士,复旦大学优秀青年教师,一个两岁孩子的母亲,乳腺癌晚期患者. 2009年12月被确诊患上了乳腺癌,2010年1月2日于娟被进一步确诊乳腺癌晚期, 2011年4月19日凌晨三时许,于娟辞世. 她的博客这样写到:“若天有定数,我过好我的每一天就是.若天不绝我,那么癌症却真是个警钟:我何苦像之前的三十年那样的辛劳.名利权情,没有一样是不辛苦的,却没有一样可以带去.我

从一个程序员到一个销售高手的心路历程

从一个程序员到一个销售高手的心路历程 0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为“搬砖头”,因为我们所做的事跟民工搬砖头砌墙本质上是相同的,我们也是把一堆代码从 一个地方搬到另一个地方,然后改改让它面子上看起来挺好看,用起来结实耐用就算完工了. 干了6年的技术以后,我放弃了已做的非常 好的技术和积累起来的成绩,转而从0开始去做销售.后来经过自己的努力,我终于成长为一个销售和业绩翻倍高手,在销售和业绩翻倍方面取得

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

一个接口能否继承另一个接口?一个抽象类能否实现一个接口?

都可以: 一.一个接口能否继承另一个接口? 接口继承接口  本质就是一个抽象类继承另一个抽象类(它们都没写方法的实例).当一个类继承了一个抽象类,它必须要重写父类 抽象类中的抽象方法,如果不去重写父类抽象方法的实例,那么这个类也是抽象类(这个抽象子类,直到重写这个抽象方法的实例为止, 才能摆脱抽象的命运).其实我们想想,一个类去实现一个接口也不就是一个实体子类把一个抽象的所以抽象方法实例化(重写了 抽象父类 中全部抽象方法),当然抽象类和接口还是有区别的.我上上篇就写到了抽象类和接口的区别,有兴

《生活就是一个七天接着一个七天》

<生活就是一个七天接着一个七天> 文/马德 (一) 一辈子活下来,常常是,在最有意思的时候,没有有意思地过,在最没意思的时候,想要有意思地过结果却再也过不出意思. 或者,换一种表述就是,在看不透的时候,好看的人生过得不好看:看透了,想过得好看,可是人生已经没法看了. 这句话说得并不绕.其实,人生比这个绕多了. 人生就是这样的一场游戏:在欲望浮沉中,把生命扔到很远很远,最后,只为了找到很近很近的那个简单的自己. (二) 有一年,到大连旅游,参观旅顺日俄监狱.印象中,地牢般的监狱,只有很窄的一方窗

Linux脚本——使用echo从一个文件写入另一个文件末尾

echo $(cat 你需要的文件) >> ./目的文件 使用cat获取你想要的文件内容,然后使用echo写入.问题在于cat获取的\n可能失效.如果单纯的作为ACM输入测试数据使用,还是有些价值的.--当然也可以直接生成:Python生成测试数据 $?用于返回上一个程序的执行结果: diff file file2用于判断两个文件是否相同--如果相同,返回0.可以用上一个命令查看. echo和cat的简单区别: 1. 想看一个文件的内容是什么,可以用cat,比如 cat /etc/reslov

比较两个文件中,一个文件比另一个文件多的行

1. 该脚本用来比较两个文件中,其中一个文件比另一个文件多的行,常用来工作环境中,对比得出多余的ip地址 #!/bin/bash #different in file1 and file2 #author:vaedit #date:2017/8/20 #read -p "请输入第一个文件路径" file1 #read -p "请输入第二个文件路径" file2 function print_help(){ echo "该脚本只用来对比一个文件比另一个文件多

编程练习:输入一个数组,编写一个函数,使所有奇数位于数组的前段部分,所有的偶数位于数组的后段部分

想法类似于快速排序 使用两个指针,一个指针指向最前面的元素,另一个指针指向最后一个元素: 第一个指针向右移动,直到遇到偶数停下:第二个指针向前移动,直到遇到奇数停下:然后交换这两个数据. 直到左边的指针和右边的指针相遇时就结束,然后返回数组即可. 1 #!/usr/bin/env python3 2 3 def ji_first_ou(ary): 4 indexa,indexb = 0,len(ary)-1 5 while indexa < indexb: 6 while ary[indexa]

导入一个AndroidStudio工程作为一个Library Module

尊重劳动成果,转载请注明出处:http://blog.csdn.net/growth58/article/details/47441245 关注新浪微博:@于卫国 邮箱:[email protected] 在我们有两个Android Studio工程的情况时,我们想使用一个作为library工程导入到另一个工程作为一个module.我们可以使用Android Studio很容易的做到. 让我们假设我们有两个工程:MyApplication和MyLibrary,我们想导入MyLibrary到MyA