小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 34051|回复: 48

wifi小车单字符下位机程序 双舵机

  [复制链接]
发表于 2012-3-30 18:10:40 | 显示全部楼层 |阅读模式
自己弄得一个下位机程序,有兴趣的同学看下

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit temp1=0,temp2=0;
uchar Buffer[4] = {0}; //从串口接收的数据
uint i,j;
/***************************************端口定义****/
//l298n
sbit EN1=P2^0;
sbit IN1=P2^1;
sbit IN2=P2^2;

sbit EN2=P2^3;
sbit IN3=P2^4;
sbit IN4=P2^5;

//照明  用继电器控制的
sbit LED=P1^0;
//避障
sbit zuo=P2^6;
sbit you=P2^7;


/*
变量定义
*/
uchar key_stime_counter,hight_votage=15,timeT_counter;
bit key_stime_ok;
/*
变量定义
*/
uchar key_stime_counter1,hight_votage1=15,timeT_counter1;
bit key_stime_ok1;


/*
引脚定义
*/
//舵机
sbit control_signal=P3^6;
sbit control_signa2=P3^7;

uchar num;//全局变量

void TimerInit()
{     
        control_signal=0;
        TMOD=0x01;                               //设置定时器0为工作方式1
        EA=1;                                   //开总中断
        ET0=1;                                   //定时器0中断允许
    TH0 = 0xFF;                        //定时器装初值
    TL0 = 0xA3;
        TR0=0;                                       
}

/**********定时器2********/
void Timer2Init()
{

        control_signa2=0;
    T2CON=0x01;      
    EA = 1;
    ET2 = 1;            
    TL2 = 0xFF;
    TH2 = 0x3A;   
    TR2 = 0;   
}  

void Delay_1ms(uint i)//1ms延时
{
        uchar x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=148;x++);
}



void Com_Int(void) interrupt 4
{

        EA = 0;
        if(RI == 1)
        {
                Buffer[0] = SBUF - 48;
                RI = 0;
       
        }
        EA = 1;
}


void Com_Init(void)
{
        TMOD = 0x20;
        PCON = 0x00;
        SCON = 0x50;
        TH1 = 0xFd; //设置波特率 9600
        TL1 = 0xFd;
        TR1 = 1; //启动定时器1
        ES = 1; //开串口中断
        EA = 1; //开总中断
}





/*********************************l198n控制************************/
void Moto_Forward()
{
        IN1=1;
        IN2=0;
        IN3=1;
        IN4=0;
        EN1=1;
        EN2=1;
}
void Moto_Backward()
{
        IN1=0;
        IN2=1;
        IN3=0;
        IN4=1;
        EN1=1;
        EN2=1;
}
void Moto_TurnLeft()
{
        IN1=0;
        IN2=1;
        IN3=1;
        IN4=0;
        EN1=1;
        EN2=1;
}
void Moto_TurnRight()
{
        IN1=1;
        IN2=0;
        IN3=0;
        IN4=1;
        EN1=1;
        EN2=1;
}
void Moto_Stop()
{
        EN1=0;
        EN2=0;
}

/*****************************************/

/*主程序*/
void main(void)
{

LED=0;
Delay_1ms(1);
TimerInit();
Timer2Init();
Com_Init();
    while(1)
{


   switch (Buffer[0])      //根据键值不同,执行不同的内容
    {
       
            case 0:         
                TR0=0;
                TR2=0;
                Moto_Stop();
                LED=1;
                break;

        case 6:
                ET2=0;
                ET0=1;
            TR2=0;
                TR0=1;               
                Delay_1ms(40);
            hight_votage-=1;
            if(hight_votage<5)
            hight_votage=5;
            break;

         case 7:
                 ET2=0;
                 ET0=1;
                 TR2=0;
                 TR0=1;                 
                 Delay_1ms(40);
             hight_votage+=1;
             if(hight_votage>25)
             hight_votage=25;
         break;

             case 8:
                ET0=0;
                ET2=1;
                TR2=1;
                Delay_1ms(5);
            hight_votage1-=1;
            if(hight_votage1<5)
            hight_votage1=5;               
                break;

        case 9:
                ET0=0;
                ET2=1;       
                TR2=1;
                Delay_1ms(5);
            hight_votage1+=1;
            if(hight_votage1>25)
            hight_votage1=25;               
            break;

                case 1: for(num=0;num<45;num++)
                {
                        Moto_Forward();
                }
                break;

                case 2:
                for(num=0;num<45;num++)
                {
                        Moto_Backward();
                }
                 break;

                case 3:
                for(num=0;num<45;num++)
                {
                         Moto_TurnLeft();
                 }
                break;

                case 4:
                for(num=0;num<45;num++)
                {
                        Moto_TurnRight();        
                }
                break;

            case 5: LED=~LED;break;
               

        default :  TR0=0;TR2=0;
        break;
    }


        while((you==0)&&(zuo==0)) //死角,或前面有障碍,退
         {
                   Moto_Backward();
                
         }          
         while(zuo==0)                //右转
         {
                Moto_TurnRight();
         }
         while(you==0)          //左转
         {
            Moto_TurnLeft();
         }
          
}


}



void timer0(void) interrupt 1 using 0
{

    TH0=0xFF;
    TL0=0xA3;

                 if (++key_stime_counter>=200)
                {
                     key_stime_counter=0;
                            control_signal=1;
                     key_stime_ok = 1;               // 20ms到
                     timeT_counter=0;
                }
               
                if (key_stime_ok&&(++timeT_counter>=hight_votage))
                {
                           key_stime_ok=0;
                     timeT_counter=0;
                            control_signal=0;              // hight_votage*0.1ms到
                }
         
}

void Timer2()    interrupt 5
{

    TH2=0xFF;
    TL2=0xA3;

        if (++key_stime_counter1>=200)
        {
             key_stime_counter1=0;
             control_signa2=1;
             key_stime_ok1 = 1;               // 20ms到
              timeT_counter1=0;
        }
       
        if (key_stime_ok1&&(++timeT_counter1>=hight_votage1))
        {
           key_stime_ok1=0;
           timeT_counter1=0;
           control_signa2=0;              // hight_votage1*0.1ms到
        }

        TR2=0;        
}

键值 端口根据自己的电路再进行修改



回复

使用道具 举报

发表于 2012-4-1 23:15:54 | 显示全部楼层
支持
回复 支持 反对

使用道具 举报

发表于 2012-4-5 23:26:54 | 显示全部楼层
支持###############
回复 支持 反对

使用道具 举报

发表于 2012-4-12 09:57:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2012-4-12 12:42:29 | 显示全部楼层
支持
回复 支持 反对

使用道具 举报

发表于 2012-4-12 16:10:16 | 显示全部楼层
看上去蛮不错的。
回复 支持 反对

使用道具 举报

发表于 2012-4-15 17:54:53 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2012-4-18 16:09:52 | 显示全部楼层
这个舵机怎么运动啊
我的没有动作
回复 支持 反对

使用道具 举报

发表于 2012-4-23 22:14:24 | 显示全部楼层
顶起!留着以后享用,。。。。
回复 支持 反对

使用道具 举报

发表于 2012-4-30 12:56:33 | 显示全部楼层
楼主用神马型号的单片机……
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-22 19:23 , Processed in 1.104727 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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