附录一 循迹加红外避障综合程序
#include
#define uint unsigned int #define uchar unsigned char #define out P2
sbit zuo1=P0^1; sbit zuo2=P0^0; sbit you1=P0^3; sbit you2=P0^2;
sbit zuod=P3^5; sbit youd=P3^6;
sbit qiand=P3^7; //左 右 前 3个红外传感器
sbit jiao=P0^6;
sbit D1=P2^0; sbit D2=P0^7;
uchar code ZM[]={
0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09, };
void delay(uint x) {
uchar i; while(x--)
for(i=0;i<123;i++); }
void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us {
...
i=i/10; while(--i); }
void delay_nms(unsigned int n) //延时n ms {
n=n+1;
while(--n)
delay_nus(900); // }
void qian() {
zuo1=0;
zuo2=1; you1=0;
you2=1; }
void hou() {
zuo1=1;
zuo2=0; you1=1;
you2=0; }
void zuo() {
zuo1=0;
zuo2=1; you1=1;
you2=0; }
void you() {
zuo1=1;
...
延时 1ms,同时进行补偿//左边往前 //右边往前 //左边往后 //右边往后 //左边往前 //右边往后
zuo2=0; //左边往后 you1=0;
you2=1; //右边往前 }
void tingzhi() {
zuo1=0;
zuo2=0; //左边往后 you1=0;
you2=0; //右边往前 }
void main() {
while(1) {
if(zuod==0&youd==0) //如果左右两个传感器没有检测到黑线 {
qian(); //直走 out=ZM[1];
if(qiand==0) //如果在直走的过程中遇见障碍物 {
delay(50); //延时判断是否为干扰 if(qiand==0) //不是干扰 {
jiao=0; //蜂鸣器报警 tingzhi();
delay_nms (120);
hou(); //后退半秒 out=ZM[2];
delay(500);
you(); //右转200毫秒 out=ZM[4]; delay(200);
jiao=1; //取消报警
...
} } }
if(zuod==1&youd==0) //如果左边的传感器检测到黑线 {
while(1) {
zuo();
out=ZM[3]; //左转 D1=0;
if(zuod==0) //一直左转到传感器检测不到为止 {
D1=1;
break; //跳出循环 } } }
if(youd==1&zuod==0) {
while(1) {
you(); out=ZM[4]; D2=0;
if(youd==0) {
D2=1;
break; //道理同上 } } } } }
//效果:沿着黑线行走 中途遇见障碍物后退右转
...
附录二 实物图
单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
...