打印
[STC单片机]

各位前辈,帮忙看一下这个程序,为什么不对??

[复制链接]
1282|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
臧涛|  楼主 | 2014-4-3 20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
sbit jieshou=P3^2;
sbit q1=P0^0;
sbit q2=P0^1;
sbit q3=P0^2;
sbit q4=P0^3;
sbit ENA=P0^4;
sbit ENB=P0^5;
sbit w=P1^0;
unsigned char flagl,flagr;
unsigned char a[4];
unsigned int hightime,lowtime,t;
void delay(unsigned char i)//延时函数
{
        unsigned char x,y;
        for(x=i;x>0;x--)
                for(y=110;y>0;y--);
}
int shibie()//单片机解码红外函数
{
        unsigned char i,x,temp;
                //w=0;
         for(i=0;i<4;i++)
        {
                for(x=0;x<8;x++)
                {
                        temp=temp>>1;
                        TH0=0;
                        TL0=0;
                        //w=0;
                       
                        TR0=1;
                        //w=0;
                        while(jieshou==0)
                        TR0=0;
                        lowtime=TH0*256+TL0;//保存低电平时间
                        TH0=0;
                        TL0=0;
                        TR0=1;
                        while(jieshou==1);
                        TR0=0;
                        hightime=TH0*256+TL0;//保存高电平时间
                        if(lowtime<400||lowtime>700)
                        return 0;
                        if(hightime>450 && hightime<675)
                        temp=temp&0x7f;
                        if(hightime>1410 && hightime<1955)
                        temp=temp |0x80;
                }
                a[i]=temp;//解码出来的放在这里边
               
                }
                if(a[2]==~a[3])//验证码与反码是否相同
                 return 1;//验证正确返回一
        }
void init()
{
        flagl=20;
        flagr=20;
        TMOD=0X01;
        TH0=0;
        TL0=0;
        IT0=1;
        //TH1=1;
        //TL1=1;
        EA=1;
        EX0=1;
        IT0=1;
        ET0=1;
        //ET1=1;
        TR0=1;
        //低电平触发
        //TR1=1;
       
}
void qianjin()
{        q1=1;
        q2=0;
        q3=1;
        q4=0;
        flagl=10;
        flagr=10;
        delay(50);
}
void left()
{
        q1=0;
        q2=0;
        q3=1;
        q4=0;
        flagl=0;
        flagr=20;
        delay(50);
}

void right()
{
        q1=1;
        q2=0;
        q3=0;
        q4=0;
        flagl=10;
        flagr=0;
        delay(50);
}

void houtui()
{

        q1=0;
        q2=1;
        q3=0;
        q4=1;
        flagl=10;
        flagr=10;
        delay(100);
  }

void int0() interrupt 0
{
        EX0=0;//关闭未卜终端,只解码一次的数据
        TH0=0;//定时器清零
        TL0=0;
        TR0=1;
//        w=0;
        while(jieshou==0)//给引导码的低电平计时
        TR0=0;
        lowtime=TH0*256+TL0;
        TH0=0;
        TL0=0;
        TR0=1;
        hightime=TH0*256+TL0;
        //w=0;
        if(lowtime>8500 && lowtime<9500 && hightime>4200 && hightime<4800)//?????
        {
                        w=0;
                if(shibie()==1)
                {
                //panduan();
                if(a[2]==0x15)
                        {
                                qianjin();
                                delay(500);
                        }
                else if(a[2]==0x40)
                        {
                                right();
                                delay(500);
                        }
       
                else if(a[2]==0x44)
                        {
                                left();
                                delay(500);
                        }
                else if(a[2]=0x07)
                        {
                                houtui();
                                delay(500);
                        }
                }
                       
        }
        EX0=1;
}
void enter0() interrupt 1 //PWM控制
{
        TH0=0;
        TL0=0;
        if(t<flagl)
        ENA=1;
        else
        ENA=0;
        if(t<flagr)
        ENB=1;
        else
        ENB=0;
        t++;
        if(t==100)
        t=0;
}



/*void panduan()
{
        if(a[2]==0x15)
                {
                        qianjin();
                        delay(500);
                }
        else if(a[2]==0x40)
                {
                        right();
                        delay(500);
                }

        else if(a[2]==0x44)
                {
                        left();
                        delay(500);
                }
        else if(a[2]=0x07)
                {
                        houtui();
                        delay(500);
                }
}*/

void main()
{
        ENA=1;
        ENB=1;
        q1=0;
        q2=0;
        q3=1;
        q4=0;
        init();
        //while(1);
        //{
        //        panduan();
        //}

}

相关帖子

沙发
wangch_sh| | 2014-4-3 20:59 | 只看该作者
哪儿不对呀?

使用特权

评论回复
板凳
luofeng2g| | 2014-4-3 22:33 | 只看该作者
报什么错?还是功能不能实现,?

使用特权

评论回复
地板
望断云山| | 2014-4-3 22:43 | 只看该作者
也不说说有什么问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝