3202|2

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

基于A60S2单片机的超声波避障c程序 [复制链接]

/*基于A60S2的超声波避障C程序
  通过PWM调速来实现避障功能
  由于只用到 一个超声波,所以避障灵活性不高
  主要是试验用直流电机完成避障功能

*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int 

sbit fa=P3^1; // 定义发射端IO口
sbit jie=P3^2;  //接收端IO口
uchar timeh,timel;
uint juli;
bit flag,flag1;  //标志位
sbit ch=P2^1;
sbit lcdrs=P2^0;
sbit lcden=P2^2;
void delay(uint z) //延时函数
{    
 uint x,y;   
   for(x=z;x>0;x--) 
      for(y=110;y>0;y--); 
}

void delay_20us() 
{      
   uchar a ;     
   for(a=0;a<100;a++);
}

sbit a0=P1^0;   //zuo
sbit a1=P1^1;
sbit ENA=P1^3; //you
sbit ENB=P1^4; //zuo
sbit b0=P1^2;  //you
sbit b1=P1^5;
   sfr CMOD = 0XD9; //PCA工作模式寄存器
   sfr CCON = 0XD8; //PCA控制寄存器
   sfr CL = 0XE9; //16位计数器低8位
   sfr CH = 0XF9; // 高八位
/*PCA模块工作模式设定寄存器*/
   sfr CCAPM0 = 0XDA;
   sfr CCAPM1 = 0XDB;
/*PCA捕获寄存器四个模块*/
   sfr CCAP0L = 0XEA;
   sfr CCAP0H = 0XFA;
   sfr CCAP1L = 0XEB;
   sfr CCAP1H = 0XFB;
   sfr P1M0=0X92;
   sfr P1M1=0X91;
   sbit CR=CCON^6; //计数器阵列运行控制位

void qianjin() //前进函数
{
CCAP0L=22; //z
CCAP0H=22;
CCAP1L=23;  // y
CCAP1H=22;
  a0=1;
a1=0;
b0=1;
b1=0;
}
void turn_right()  //右拐
{
  CCAP0L=0X00;
CCAP0H=0X00;
  a0=1;
a1=0;

CCAP1L=150; //zuo
CCAP1H=150;
    b0=0;
b1=1;

}
void turn_left()   //左拐
{
CCAP1L=0X00; //zuo
CCAP1H=0X00;
    a0=0;
a1=1;

CCAP1L=0X150; //zuo
CCAP1H=0X150;
b0=1;
b1=0;
}

void write_data(uchar date)       //液晶显示数据函数
{   
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

/***************************************************************
                         写命令函数
/**************************************************************/
 void write_com(uchar com)
{   
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void ledinit()
{
write_com(0x38);//初始化1602液晶
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
//显示数据转换程序
void display(uint temp)  
{     
  uchar ge,shi,bai;  
  bai=temp/100;    
  shi=(temp%100)/10;     
  ge=temp%10; 
                                       
  write_com(0x80);
write_data(bai+'0');
write_data(shi+'0');
write_data(ge+'0');        

void init() interrupt 0
{
     timeh=TH0;
     timel=TL0;
     flag=1;
}
void pwminit() //PWM初始化
{
    P1M0=0X00;
P1M1=0X00; //设置P1口弱上拉,准双向模式(标准8051 i/o模式)
  CMOD=0X00; //脉冲源SYClk/12
CCON=0X00;
CCAPM0=0X42; //PWM输出模式
CCAPM1=0X42; //PWM输出模式
CH=0X00;
CL=0X00;  
CCAP0L=0X00;
CCAP0H=0X00;
CCAP1L=0X00;
CCAP1H=0X00;
CR=1; //开始计数 
}
//**************主函数***************//
void main()
{  pwminit();
      flag=0;
      fa=0;
      TMOD=0x01;
      EA=1;
      IT0=1;
      EX0=0;
 ledinit();
 delay(10);
      qianjin();
      ch=1;
 flag1=0;
      while(1)
      {
           EA=0;
           fa=1;
           delay_20us(); 
           fa=0;
           while(jie==0);
           EX0=1;
           TH0=0;
           TL0=0;
           TR0=1;
           EA=1;
           flag=0;
           while(TH0<60);
           EX0=0;
           TR0=0;
           if(flag)
         {
             juli=timeh;
juli<<=8;
juli|=timel;
juli=juli*0.0173;
   
           
          display(juli);
if(juli<15 && juli>0)
 {
   flag1=1;  
 }
             else
 {
 flag1=0;
 qianjin();
 }

  while(flag1)
  {                          
turn_left();     
   ch=0;
   delay(3500);
   qianjin();
ch=1;
delay(6000);              
turn_right();
ch=0;
   delay(3800);
qianjin();
ch=1;
delay(12000);
turn_right();
ch=0;
   delay(3800);
qianjin();
ch=1;
delay(6000);
turn_left();     
   ch=0;
   delay(3500);
   qianjin();
ch=1;
break;    
    }
 
}
}
}
 
此帖出自编程基础论坛

最新回复

点击它一下,会出现一个小窗口,把代码复制到里面就好了。  详情 回复 发表于 2014-11-2 19:47

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

7815

帖子

57

TA的资源

裸片初长成(中级)

沙发
 

回复 楼主云南白药 的帖子

贴代码的话
建议使用编辑栏中的 代码工具。

就是 <> 这个图标。
点击它一下,会出现一个小窗口,把代码复制到里面就好了。
此帖出自编程基础论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
点击它一下,会出现一个小窗口,把代码复制到里面就好了。
此帖出自编程基础论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表