智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1077|回复: 0
打印 上一主题 下一主题

[单片机] 求帮忙把这个程序转换成hex格式

[复制链接]

3

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
107
威望
63
贡献
22
兑换币
23
注册时间
2015-4-12
在线时间
11 小时
毕业学校
1
跳转到指定楼层
1#
发表于 2015-4-23 09:54:18 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg51.h"
#include "stdio.h"
#include < intrins.h >
#include<math.h>
#define uchar unsigned char
#define uintunsigned int
//************************管脚定义************************************/
sbit en_left = P2^0;//左电机使能控制位
sbit cw_left= P2^1;//左电机方向控制位
sbit clk_left= P2^2;//左电机脉冲控制位
sbit en_right = P2^3;//右电机使能控制位
sbit cw_right= P2^4;//右电机方向控制位
sbit clk_right= P2^5;//右电机脉冲控制位
sbit ir_left=P1^0;   
//左侧红外传感器接收位
sbit ir_left1=p1^1;
   //左前红外传感器接收位
sbit ir_left2=p1^2;
   //左下红外传感器接收位
sbit ir_right=P1^3;   //右侧红外传感器接收位
sbit ir_right1=p1^4;
   //右前红外传感器接收位
sbit ir_right2=p1^5;
   //右下红外传感器接收位
sbit ir_mid=P1^6;    //中间红外传感器接收位
sbit ir_mid1=p1^7;
   //中下红外传感器接收位
/////////////////////////函数声明////////////////////////////////////////
void timer1_init();//定时器1初始化函数
void move_left(uint speed_l,uchar cw,uchar en);//左电机运动函数
void move_right(uint speed_r,uchar cw,uchar en);//右电机运动函数
void delay(unsigned int k);  //延时函数
//////////////////变量定义////////////////////////////////////////////////
uint n;//进定时器1中断次数计数
uint speed;//电机速度控制变量
/**************函数体******************************************/
void delay(unsigned int k)
{  
unsigned int i,j;  
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}}  
}
/*******************************/
void timer1_init()
{
TMOD=0X10;
ET1=1;
EA=1;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
TR1=1;//定时器启动后运动控制脉冲将一直产生 小车的运动方式受 cw 和en控制
}
void move_left(uint speed_l,uchar cw,uchar en)
{         //speed_l速度控制变量 cw方向控制变量 en使能控制变量
speed=speed_l;
if(cw==1)
{
cw_left=1;
}
else
{
cw_left=0;
}
if(en==1)
{
en_left=1;
}
else
{
en_left=0;
}
  
}
void move_right(uint speed_r,uchar cw,uchar en)
{          //speed_r速度控制变量 cw方向控制变量 en使能控制变量
speed=speed_r;   //speed数值与速度成反比请结合实际情况进行调节,
if(cw==1)     //但速度不能无限加快因为步进电机有速度上限
{           //而且速度加快是力矩会下降,容易导致丢步现象
cw_right=1;   //所以实际应用当中应调节到速度可力矩比较合适的数值
}           //应考虑到电池电压,轮胎直径等因素
else
{
cw_right=0;    //cw 控制电机正反转,1与0各代表一个方向
}
if(en==1)
{            //en 为使能位1:能 0:不能
en_right=1;
}
else
{
en_right=0;
}
  
}

void main (void)
{  
delay(10);
timer1_init();
while(1)
{
if(ir_left==0&&ir_left1==0&&ir_left2==1&&ir_mid==0&&ir_mid1==1&&ir_right1==0&&ir_right2==1&&ir_right==0) //以下是三个红外传感器的十六种状态和对应的运动方式
{
  move_left(15,1,0);
        delay(400)
  move_right(15,0,0);
  delay(1000);
}
if(ir_left==0&&ir_left1==1&&ir_left2==0&&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
{
move_left(15,0,0);
  move_right(15,0,1);
  delay(400);
}
if(ir_left==0&&ir_left1==0&&ir_left2==0&&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
{
move_left(15,0,0);
  move_right(15,0,0);
  delay(400);
}
if(ir_left==1&&ir_left1==0&&ir_left2==0&&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
{
  move_left(15,0,0);
  move_right(15,0,0);
  delay(400);
}
if(ir_left==1&&ir_left1==1&&ir_left2==0&&ir_mid==0&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
{
  move_left(15,1,0);
        delay(400)
  move_right(15,0,0);
  delay(800);
}
if(ir_left==1&&ir_left1==0&&ir_left2==0&&ir_mid==0&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
{
  move_left(15,0,0);
  move_right(15,0,0);
  delay(600);
}

if(ir_left==1&&ir_left1==0&&ir_left2==0&&ir_mid==0&&ir_mid1==0&&ir_right1==0&&ir_right2==0&&ir_right==1)
{
  move_left(15,1,0);
        delay(400)
  move_right(15,1,0);
  delay(800)
       }                                                                                                              if(ir_left==1&&ir_left1==1&&ir_left2==0& &ir_mid==0&&ir_mid1==0&&ir_right1==0&&ir_right2==0&&ir_right==1)
       {
       move_left(15,1,0);
       move_right(15,1,0);
       delay(600)
       }
      
  if(ir_left==1&&ir_left1==1&&ir_left2==0&
&ir_mid==1&&ir_mid1==0&&ir_right1==0&&ir_right2==0&&ir_right==1)
       {
       move_left(15,1,0);
       move_right(15,1,0);
       delay(400)
       }
      
  if(ir_left==1&&ir_left1==1&&ir_left2==0&
&ir_mid==1&&ir_mid1==0&&ir_right1==0&&ir_right2==0&&ir_right==0)
       {
       move_left(15;1,0);
       move_right(15,1,0);
       delay(400)
       }
      
  if(ir_left==1&&ir_left1==1&&ir_left2==0&
&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==0)
       {
       move_left(15,1,1)
       move_right(15,1,0)
       delay(400)
       }
      
  if(ir_left==1&&ir_left1==1&&ir_left2==1&
&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
       {
       move_left(15,1,0)
       delay(400)
       move_right(15,0,0)
       delay(1000)
       }
      
  if(ir_left==1&&ir_left1==1&&ir_left2==1&
&ir_mid==1&&ir_mid1==1&&ir_right1==1&&ir_right2==1&&ir_right==1)
       {
       move_left(15,1,0)
       delay(400)
       move_right(15,0,0)
       delay(1200)
       }
      
  if(ir_left==1&&ir_left1==1&&ir_left2==0&
&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==1&&ir_right==1)
       {
       move_left(15,1,0)
       delay(1000)
       move_left(15,0,0)
       delay(400)
       }
      
  if(ir_left==1&&ir_left1==0&&ir_left2==0&
&ir_mid==0&&ir_mid1==1&&ir_right1==0&&ir_right2==0&&ir_right==1)
       {
       move_left(15,0,1)
       move_left(15,1,1)
       delay(400)
       }
if(ir_left==1&&ir_left1==1&&ir_left2==0&&ir_mid==1&&ir_mid1==0&&ir_right1==1&&ir_right2==0&&ir_right==1)
{
  move_left(15,0,0);
  move_right(15,1,0);

}

}


}

void timer1_serve() interrupt 3
{
TH1=(65536-100)/256;
TL1=(65536-100)%256;
n=n+1;
//  m=m+1;
if(n==speed)
{
clk_left=~clk_left;
clk_right=~clk_right;
n=0;
}



}
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-23 12:27 , Processed in 0.046596 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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