久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4150|回復(fù): 0
收起左側(cè)

1602顯示碼盤(pán)測(cè)行走距離,所用時(shí)間小車(chē)

[復(fù)制鏈接]
ID:247090 發(fā)表于 2017-11-23 14:32 | 顯示全部樓層 |閱讀模式
/****************************************************************************
         硬件連接
         P1_6 接驅(qū)動(dòng)模塊ENA        使能端,輸入PWM信號(hào)調(diào)節(jié)速度
     P1_7 接驅(qū)動(dòng)模塊ENB        使能端,輸入PWM信號(hào)調(diào)節(jié)速度
         P1_5 接驅(qū)動(dòng)模塊ENA        使能端,輸入PWM信號(hào)調(diào)節(jié)速度
     P1_4 接驅(qū)動(dòng)模塊ENB        使能端,輸入PWM信號(hào)調(diào)節(jié)速度

     P0_4 P0_5 接IN1  IN2    當(dāng) P0_4=1,P0_5=0; 時(shí)左電機(jī)正轉(zhuǎn)         驅(qū)動(dòng)藍(lán)色輸出端OUT1 OUT2接左電機(jī)
     P0_4 P0_5 接IN1  IN2    當(dāng) P0_4=0,P0_5=1; 時(shí)左電機(jī)反轉(zhuǎn)               
     P0_6 P0_7 接IN3  IN4         當(dāng) P0_6=1,P0_7=0; 時(shí)右電機(jī)正轉(zhuǎn)         驅(qū)動(dòng)藍(lán)色輸出端OUT3 OUT4接右電機(jī)
     P0_6 P0_7 接IN3  IN4         當(dāng) P0_6=0,P0_7=1; 時(shí)右電機(jī)反轉(zhuǎn)

          P0_0 P0_1 接IN1  IN2    當(dāng) P0_0=1,P0_1=0; 時(shí)左電機(jī)正轉(zhuǎn)         驅(qū)動(dòng)藍(lán)色輸出端OUT1 OUT2接左電機(jī)
     P0_0 P0_1 接IN1  IN2    當(dāng) P0_0=0,P0_1=1; 時(shí)左電機(jī)反轉(zhuǎn)               
     P0_2 P0_3 接IN3  IN4         當(dāng) P0_2=1,P0_3=0; 時(shí)右電機(jī)正轉(zhuǎn)         驅(qū)動(dòng)藍(lán)色輸出端OUT3 OUT4接右電機(jī)
     P0_2 P0_3 接IN3  IN4         當(dāng) P0_2=0,P0_3=1; 時(shí)右電機(jī)反轉(zhuǎn)
         INT0為P3.2                INT1為P3.3

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

        #include<reg52.h>
        #define uchar unsigned char
        #define uint unsigned int
        sbit P0_4 = P0^4;                 //后輪
        sbit P0_5 = P0^5;
        sbit P0_6 = P0^6;
        sbit P0_7 = P0^7;

        sbit P0_0 = P0^0;                //前輪
        sbit P0_1 = P0^1;
        sbit P0_2 = P0^2;
        sbit P0_3 = P0^3;
               
        sbit P1_6 = P1^6;
        sbit P1_7 = P1^7;
        sbit P1_5 = P1^5;
        sbit P1_4 = P1^4;

        sbit rw=P2^5;
        sbit rs=P2^6;
        sbit en=P2^7;

        uchar code table[]="Distance";

        unsigned int motor1=0;         //計(jì)左電機(jī)碼盤(pán)脈沖值         (碼盤(pán)值為20)
        unsigned int motor2=0;         //計(jì)右電機(jī)碼盤(pán)脈沖值

        #define Left_moto_pwm     P1_6           //接驅(qū)動(dòng)模塊ENA        使能端,輸入PWM信號(hào)調(diào)節(jié)速度         (左馬達(dá)調(diào)節(jié)PWM)  前
        #define Right_moto_pwm    P1_7           //接驅(qū)動(dòng)模塊ENB         (右馬達(dá)調(diào)節(jié)PWM)
        #define Left_moto_pwm2     P1_5           //接驅(qū)動(dòng)模塊ENA        使能端,輸入PWM信號(hào)調(diào)節(jié)速度         (左馬達(dá)調(diào)節(jié)PWM)  后
        #define Right_moto_pwm2    P1_4           //接驅(qū)動(dòng)模塊ENB         (右馬達(dá)調(diào)節(jié)PWM)

        #define Left_moto_go      {P0_4=0,P0_5=1;} //  左電機(jī)前進(jìn)         后          P0_4=0,P0_5=1;
        #define Left_moto_back    {P0_4=1,P0_5=0;} // 左電機(jī)后退  后        P0_4=1,P0_5=0                      
        #define Right_moto_go     {P0_6=1,P0_7=0;} //右電機(jī)前轉(zhuǎn)         后                P0_6=1,P0_7=0;
        #define Right_moto_back   {P0_6=0,P0_7=1;} //右電機(jī)后退         后                P0_6=0,P0_7=1

        #define Left_moto_go2      {P0_2=0,P0_3=0;} //左電機(jī)前進(jìn)        P0_2=0,P0_3=0                           
        #define Left_moto_back2    {P0_2=1,P0_3=0;} //左電機(jī)后退          P0_2=1,P0_3=0                      
        #define Right_moto_go2     {P0_0=1,P0_1=0;} //右電機(jī)前轉(zhuǎn)        P0_0=1,P0_1=0        
        #define Right_moto_back2   {P0_0=0,P0_1=1;} //右電機(jī)后退         P0_0=0,P0_1=1

           unsigned char pwm_val_left  =0;//變量定義
        unsigned char push_val_left =0;// 左電機(jī)占空比N/10         推動(dòng)                           //計(jì)算占空比時(shí)N的值(人工改變值)
        unsigned char pwm_val_right =0;                                                                                      //通過(guò)它來(lái)實(shí)現(xiàn)PWM的改變(通過(guò)FOR循環(huán))
        unsigned char push_val_right=0;// 右電機(jī)占空比N/10

        unsigned char pwm_val_left2  =0;//變量定義
        unsigned char push_val_left2 =0;// 左電機(jī)占空比N/10         推動(dòng)                           //計(jì)算占空比時(shí)N的值(人工改變值)
        unsigned char pwm_val_right2 =0;                                                                                      //通過(guò)它來(lái)實(shí)現(xiàn)PWM的改變(通過(guò)FOR循環(huán))
        unsigned char push_val_right2=0;// 右電機(jī)占空比N/10

        bit Right_moto_stop=1;
        bit Left_moto_stop =1;

        bit Right_moto_stop2=1;
        bit Left_moto_stop2 =1;
        unsigned  int  time=0;
        uchar num6,num2,shi=0,fen=0,miao=0;           //num2用于時(shí)鐘部分  
        uint num,num1,num3,sum;  //num,num1,num3用于距離處理部分
        unsigned long S=0,S1,S2;
/**************************1602顯示**********************************************/
void delayms(uint xms)//延時(shí)函數(shù)
{
uint i,j;
for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void write_com(uchar com)
{
rs=0;
en=0;
P0=com;
delayms(5);
en=1;
delayms(5);
en=0;
}
void write_date(uchar date)
{
rs=1;
en=0;
P0=date;
delayms(5);
en=1;
delayms(5);
en=0;
}
void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);                                                  
write_date(0x30+shi);                                                         
write_date(0x30+ge);                                                         

}
void write_juli(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x00+add);                                                  
write_date(0x30+shi);                                                         
write_date(0x30+ge);                                                         

}
void led_1602_init()  //1602初始化函數(shù)
{
rw=0;
en=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x40);
                for(num6=0;num6<12;num6++)
        {
                 write_date(table[num6]);
                 delayms(5);       
        }
                  write_com(0x80+0x00+0);
                 write_date('T');
                delayms(5);

                write_com(0x80+0x00+1);
                 write_date('i');
                delayms(5);
               
                write_com(0x80+0x00+2);
                 write_date('m');
                delayms(5);
               
                write_com(0x80+0x00+3);
                 write_date('e');
                delayms(5);
               
                write_com(0x80+0x00+3);
                 write_date(':');
                delayms(5);
               
                write_com(0x80+0x00+7);
                 write_date(':');
                delayms(5);       
               
                write_com(0x80+0x00+10);
                 write_date(':');
                delayms(5);
               
                write_com(0x80+0x40+8);
                 write_date(':');
                delayms(5);
               
                write_com(0x80+0x40+14);
                 write_date('M');
                delayms(5);       
}
void timer1()interrupt 3
{
         TH0=(65536-45872)/256;
         TL0=(65536-45872)%256;
                 num2++;
                if(num2==20)
                {
                 num2=0;
                 miao++;
                 }
                 if(miao==60)
                         {
                         miao=0;
                         fen++;
                         }
                         if(fen==60)
                                 {
                                 fen=0;
                                 shi++;
                                 }
                                 if(shi==24)
                                         {
                                         shi=0;
                                        }
                                
                write_sfm(11,miao);
                write_sfm(8,fen);
                write_sfm(5,shi);
}
void deal_juli() //測(cè)距函數(shù)
{
S=S1*100+S2;
// uint sum;                 
sum=motor1+motor2;        // 求和
num=sum/2.0;          // 求平均值
num1=num/20.0;//求輪子旋轉(zhuǎn)圈數(shù)
num3=num1*22.5;//輪子走過(guò)的距離 算出來(lái)的是cm
S2=num3;
write_juli(9,S1);
write_juli(12,S2);
}
/*********************************************************************************************
外部中斷INT0計(jì)算電機(jī)1的脈沖
/********************************************************************************************/
void intersvr1(void) interrupt 0 using 1
{
        motor1++;       
        if(motor1>=9999)
                motor1=0;       
}
/*********************************************************************************************
外部中斷INT1計(jì)算電機(jī)2的脈沖
/********************************************************************************************/
void intersvr2(void) interrupt 2 using 3
{
        motor2++;
        if(motor2>=9999)
                motor2=0;
}
/************************************************************************/
//     void  run(void)        //前進(jìn)函數(shù)
//{
//     push_val_left  =5;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個(gè)值可以改變其速度
//         push_val_right =5;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個(gè)值可以改變其速度
//
//         push_val_left2  =5;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個(gè)值可以改變其速度
//         push_val_right2 =5;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個(gè)值可以改變其速度
//
//         Left_moto_go ;                 //左電機(jī)前進(jìn)
//         Right_moto_go ;         //右電機(jī)前進(jìn)
//
//         Left_moto_go2 ;                 //左電機(jī)前進(jìn)
//         Right_moto_go2 ;         //右電機(jī)前進(jìn)
//}
        void  zuozhuan()
{
         push_val_left  =10;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個(gè)值可以改變其速度
         push_val_right =5;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個(gè)值可以改變其速度

         push_val_left2  =5;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個(gè)值可以改變其速度
         push_val_right2 =5;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個(gè)值可以改變其速度
         Right_moto_go;
         Right_moto_go2;
         Left_moto_back;
//         Left_moto_back2;
}
//        void  youzhuan()
//{
//         push_val_left  =2;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個(gè)值可以改變其速度
//         push_val_right =2;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個(gè)值可以改變其速度
//
//         push_val_left2  =2;  //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快  改這個(gè)值可以改變其速度
//         push_val_right2 =2;         //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢,20是最快         改這個(gè)值可以改變其速度
//         Right_moto_back;
////         Right_moto_back2;
//         Left_moto_go;
//         Left_moto_go2;
//}

/************************************************************************/
/*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
/************************************************************************/
/*                    左電機(jī)調(diào)速                                        */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
                void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
               Left_moto_pwm=1;
        else
               Left_moto_pwm=0;
        if(pwm_val_left>=20)
        pwm_val_left=0;
   }
   else  Left_moto_pwm=0;
}
/******************************************************************/
/*                    右電機(jī)調(diào)速                                  */  
   void pwm_out_right_moto(void)
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
               Right_moto_pwm=1;
        else
               Right_moto_pwm=0;
        if(pwm_val_right>=20)
        pwm_val_right=0;
   }
   else    Right_moto_pwm=0;
}

/************************************************************************/
/*    222222                2PWM調(diào)制電機(jī)轉(zhuǎn)速2                                   */
/************************************************************************/
/*                    左電機(jī)調(diào)速                                        */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
                void pwm_out_left_moto2(void)
{  
   if(Left_moto_stop2)
   {
    if(pwm_val_left2<=push_val_left2)
               Left_moto_pwm2=1;
        else
               Left_moto_pwm2=0;
        if(pwm_val_left2>=20)
        pwm_val_left2=0;
   }
   else  Left_moto_pwm2=0;
}
/******************************************************************/
/*                    右電機(jī)調(diào)速                                  */  
   void pwm_out_right_moto2(void)
{
  if(Right_moto_stop2)
   {
    if(pwm_val_right2<=push_val_right2)
               Right_moto_pwm2=1;
        else
               Right_moto_pwm2=0;
        if(pwm_val_right2>=20)
        pwm_val_right2=0;
   }
   else    Right_moto_pwm2=0;
}

/***************************************************/
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
        void timer0()interrupt 1   using 2
{
     TH0=0Xfe;          //0.1Ms定時(shí)
         TL0=0Xa3;
         time++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();

         pwm_val_left2++;
         pwm_val_right2++;
         pwm_out_left_moto2();
         pwm_out_right_moto2();
}

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

        void main(void)
{

        TMOD=0X11;
        TH0= 0Xfe;                  //0.1ms定時(shí)
        TL0= 0Xa3;
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        EA = 1;                        //中斷總開(kāi)關(guān)       
        TR0= 1;
        ET0= 1;
        ET1=1;
        TR1=1;
//        EA = 1;                        //中斷總開(kāi)關(guān)
          
        EX0 = 1;                 //允許外部中斷0中斷
        IT0 = 1;                 //1:下沿觸發(fā)  0:低電平觸發(fā)
        EX1 = 1;
        IT1        = 1;

        led_1602_init();
        while(1)                                                        /*無(wú)限循環(huán)*/
        {
          deal_juli();//距離處理函數(shù)       
//          run();
          zuozhuan();
         }
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频免费播放 | 北条麻妃99精品青青久久主播 | 日韩福利一区 | 国产精品久久免费观看 | 亚洲成a人片 | 亚洲成人自拍 | 国产一级视屏 | 国产激情综合五月久久 | 久久久久国产精品一区二区 | 欧美成人自拍 | 日韩中文一区二区 | 日韩精品免费视频 | 秋霞电影一区二区三区 | 亚洲人成在线播放 | 天天操夜夜操 | 玖玖综合网 | 成人欧美一区二区三区在线播放 | 操操操操操 | 国产亚洲一区二区三区 | 精品福利av导航 | 久久久av | 麻豆精品一区二区三区在线观看 | 日韩精品在线免费观看视频 | 成人精品国产一区二区4080 | 久久伊人精品一区二区三区 | 国产精品久久久久久一区二区三区 | 国产 亚洲 网红 主播 | 欧美成人h版在线观看 | 日本精品一区二区三区视频 | 成人精品区 | 黄色免费网址大全 | 日韩一区中文字幕 | 亚洲欧美中文日韩在线v日本 | 欧美国产精品 | a级片在线观看 | a在线观看免费 | 毛片的网址 | 欧美成人综合 | 成人国产精品一级毛片视频毛片 | 久久久久av | 九九亚洲精品 |