欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)初學(xué)者剛剛開(kāi)始做尋跡小車(chē) [打印本頁(yè)]

作者: Bobby9912    時(shí)間: 2019-4-22 22:57
標(biāo)題: 單片機(jī)初學(xué)者剛剛開(kāi)始做尋跡小車(chē)
寫(xiě)了一半的程序


        #include<AT89X52.H>                  //包含51單片機(jī)頭文件,內(nèi)部有各種寄存器定義
        #include<QH_PWM.H>                  //包含HL-1藍(lán)牙智能小車(chē)驅(qū)動(dòng)IO口定義等函數(shù)

//主函數(shù)

unsigned char pwm_val_left =0;//變量定義
unsigned char pwm_val_right =0;
unsigned char push_val_left =5;// 左電機(jī)占空比 N/20
unsigned char push_val_right=5;// 右電機(jī)占空比 N/20
bit Right_PWM_ON=1; //右電機(jī) PWM 開(kāi)關(guān)
bit Left_PWM_ON =1; //左電機(jī) PWM 開(kāi)關(guān)

        void main(void)
{        
        sbit IN1=P1^2;
        sbit IN2=P1^3;
        sbit IN3=P1^4;
        sbit IN4=P1^5;
        sbit Left_1_led=P3^5;                         //定義前方左側(cè)紅外探頭端口
        sbit Right_1_led=P3^6;                        //定義前方右側(cè)紅外探頭端口

        unsigned char i;
    P1=0X00;   //關(guān)電機(jī)        

                         TMOD=0X01;
                TH0= 0XFc;                  //1ms定時(shí)
                 TL0= 0X18;
                   TR0= 1;
                ET0= 1;
                EA = 1;                           //開(kāi)總中斷


        while(1)        //無(wú)限循環(huán)
        {
         
                         //有信號(hào)為0  沒(méi)有信號(hào)為1

              if(Left_1_led==0&&Right_1_led==0)

                          run();   //調(diào)用前進(jìn)函數(shù)

                          else
                         {                          
                                               if(Left_1_led==1&&Right_1_led==0)            //左邊檢測(cè)到黑線(xiàn)
                                  {
                                           leftrun();                  //調(diào)用小車(chē)左轉(zhuǎn)  函數(shù)

                             }
                           
                                                             if(Right_1_led==1&&Left_1_led==0)                //右邊檢測(cè)到黑線(xiàn)
                                  {         
                                      rightrun();                   //調(diào)用小車(chē)右轉(zhuǎn)        函數(shù)

                                  }
                                                    if(Right_1_led==1&&Left_1_led==1)                //懸空狀態(tài)  避懸崖
                                  {         
                                      stop();                   //調(diào)用小車(chē)停止

                                  }

                        }         
         }
}
        
        



        void run()                //電機(jī)前進(jìn)
{
        push_val_left=5; //速度調(diào)節(jié)變量 0-20。。。0 最小,20 最大
        push_val_right=5;
        IN1=1;
        IN2=0;
        IN3=1;
        IN4=0;
}

void leftrvn()                //電機(jī)左轉(zhuǎn)彎
{
        push_val_left=5; //速度調(diào)節(jié)變量 0-20。。。0 最小,20 最大
        push_val_right=5;
        IN1=0;
        IN2=1;
        IN3=1;
        IN4=0;
}


void righturn()                //電機(jī)右轉(zhuǎn)彎
{
        push_val_left=5; //速度調(diào)節(jié)變量 0-20。。。0 最小,20 最大
        push_val_right=5;
        IN1=1;
        IN2=0;
        IN3=0;
        IN4=1;
}

void stop()                //電機(jī)停止
{
        push_val_left=5; //速度調(diào)節(jié)變量 0-20。。。0 最小,20 最大
        push_val_right=5;
        IN1=0;
        IN2=0;
        IN3=0;
        IN4=0;
}

// 左電機(jī)調(diào)速
/*調(diào)節(jié) push_val_left 的值改變電機(jī)轉(zhuǎn)速,占空比*/
void pwm_out_left_moto(void)
{
        if(Left_PWM_ON)
        {
                if(pwm_val_left<=push_val_left)
                {
                        EN1=1;
                }
                else
        {
                EN1=0;
        }
        if(pwm_val_left>=20)
                pwm_val_left=0;
        }
                else
        {
                EN1=0; //若未開(kāi)啟 PWM 則 EN1=0 左電機(jī) 停止
        }
}

/* 右電機(jī)調(diào)速 */
void pwm_out_right_moto(void)
{
        if(Right_PWM_ON)
        {
                if(pwm_val_right<=push_val_right) //20ms 內(nèi) 電 平 信 號(hào) 111 111
                0000 0000 0000 00
                {
                        EN2=1; //占空比 6:20
                }
                else
                {
                        EN2=0;
                }
        if(pwm_val_right>=20)
                pwm_val_right=0;
        }
                else
        {
                EN2=0; //若未開(kāi)啟 PWM 則 EN2=0 右電機(jī) 停止
        }
}


//TIMER0 中斷服務(wù)子函數(shù)產(chǎn)生 PWM 信號(hào)
void timer0()interrupt 1 using 2
{
        TH0=0XFC; //1Ms 定時(shí)
        TL0=0X66;
        pwm_val_left++; //pwm jishi suanzi jia 1
        pwm_val_right++; //you pwm jishi suanzi jia 1
        pwm_out_left_moto(); //chansheng zuodianji EN pwm xinhao
        pwm_out_right_moto(); //chansheng youdianji EN pwm xinhao
}







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1