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

標(biāo)題: 求解一個(gè)單片機(jī)紅外程序 [打印本頁]

作者: yuanni5544    時(shí)間: 2019-11-29 15:38
標(biāo)題: 求解一個(gè)單片機(jī)紅外程序
value = value | 0x80;這段程序不要沒有影響吧,能用一個(gè)實(shí)例說明下value的值怎么來



作者: moluxiyan    時(shí)間: 2019-11-30 00:18

value = value | 0x80這句話的意思是將value的最高位置1
作者: yuanni5544    時(shí)間: 2019-11-30 09:51
moluxiyan 發(fā)表于 2019-11-30 00:18
value = value | 0x80這句話的意思是將value的最高位置1

我知道。我意思是為什么要置1,例如11000011,先送低位1過去,value的值是1000 0000嗎,然后或0x80,有什么用處
作者: yuanni5544    時(shí)間: 2019-11-30 09:53
moluxiyan 發(fā)表于 2019-11-30 00:18
value = value | 0x80這句話的意思是將value的最高位置1

我知道。我意思是為什么要置1,例如11000011,先送低位1過去,value的值是1000 0000嗎,然后或0x80,有什么用處
作者: 單片機(jī)老司機(jī)    時(shí)間: 2019-11-30 19:28
怎么用紅外來控制單片機(jī)音樂的播放,求解
作者: 鄭漢松    時(shí)間: 2019-12-1 16:47
value = value | 0x80是與value = value >> 1配合使用的,高位置1后左移1位,左移7次再加上第八次就構(gòu)成一個(gè)char型數(shù)據(jù)
作者: yuanni5544    時(shí)間: 2019-12-2 09:18
鄭漢松 發(fā)表于 2019-12-1 16:47
value = value | 0x80是與value = value >> 1配合使用的,高位置1后左移1位,左移7次再加上第八次就構(gòu)成一 ...

照你甘說,每次高位置1,右移一位。不就變成全部都是1


作者: 鄭漢松    時(shí)間: 2019-12-2 13:17
yuanni5544 發(fā)表于 2019-12-2 09:18
照你甘說,每次高位置1,右移一位。不就變成全部都是1

笨啊你,沒看到上面有個(gè)if嗎,達(dá)到條件才置一
作者: 單片機(jī)老司機(jī)    時(shí)間: 2019-12-2 20:20
鄭漢松 發(fā)表于 2019-12-1 16:47
value = value | 0x80是與value = value >> 1配合使用的,高位置1后左移1位,左移7次再加上第八次就構(gòu)成一 ...

怎么用紅外控制播放音樂啊,大兄弟,
作者: yuanni5544    時(shí)間: 2019-12-3 10:06
鄭漢松 發(fā)表于 2019-12-2 13:17
笨啊你,沒看到上面有個(gè)if嗎,達(dá)到條件才置一

有個(gè)問題我想問下,我用小車的傳感器檢測(cè)啟動(dòng),用usb連接正常可以運(yùn)行,但是按下電源開關(guān),傳感器檢測(cè)到后不能運(yùn)行,發(fā)出滴滴的聲音,用手撥動(dòng)一下車輪就轉(zhuǎn)動(dòng),然后可以正常運(yùn)行,不知道是什么原因,紅外遙控小車啟動(dòng)也是一樣,用電源控制沒反應(yīng)的
作者: 鄭漢松    時(shí)間: 2019-12-3 11:46
單片機(jī)老司機(jī) 發(fā)表于 2019-12-2 20:20
怎么用紅外控制播放音樂啊,大兄弟,

你是新手的話,先不要想怎么用紅外控制音樂播放,而是先解決怎么控制紅外,再解決音樂播放。這兩個(gè)對(duì)新手來說都是有一定難度的,所以不要想著一步到位。
作者: 鄭漢松    時(shí)間: 2019-12-3 11:55
yuanni5544 發(fā)表于 2019-12-3 10:06
有個(gè)問題我想問下,我用小車的傳感器檢測(cè)啟動(dòng),用usb連接正常可以運(yùn)行,但是按下電源開關(guān),傳感器檢測(cè)到 ...

典型的電源功率不夠,建議電源改為12V,買個(gè)L298N作為驅(qū)動(dòng),然后pwm降壓來驅(qū)動(dòng)電機(jī)
作者: 單片機(jī)老司機(jī)    時(shí)間: 2019-12-3 14:36
鄭漢松 發(fā)表于 2019-12-3 11:46
你是新手的話,先不要想怎么用紅外控制音樂播放,而是先解決怎么控制紅外,再解決音樂播放。這兩個(gè)對(duì)新手 ...

紅外也不會(huì),先請(qǐng)教大佬
作者: 鄭漢松    時(shí)間: 2019-12-3 16:05
單片機(jī)老司機(jī) 發(fā)表于 2019-12-3 14:36
紅外也不會(huì),先請(qǐng)教大佬

這你去看視頻學(xué)習(xí)唄,網(wǎng)上資源大把,源碼也很多
作者: yuanni5544    時(shí)間: 2019-12-5 16:54
鄭漢松 發(fā)表于 2019-12-3 11:55
典型的電源功率不夠,建議電源改為12V,買個(gè)L298N作為驅(qū)動(dòng),然后pwm降壓來驅(qū)動(dòng)電機(jī)

這兩天學(xué)用pwm,解決了問題,然后我想問一下定時(shí)器0和1中斷,可以同時(shí)用嗎
作者: 鄭漢松    時(shí)間: 2019-12-5 19:40
yuanni5544 發(fā)表于 2019-12-5 16:54
這兩天學(xué)用pwm,解決了問題,然后我想問一下定時(shí)器0和1中斷,可以同時(shí)用嗎

當(dāng)然可以。不過我覺得你這個(gè)紅外遙控車,要解碼又要PWM控制,定時(shí)器應(yīng)該不夠用吧?可以用89c52的芯片有3個(gè)定時(shí)器,如果還不夠用可以考慮stc15的芯片有更多的定時(shí)器,這些芯片都是8051內(nèi)核的,兼容89c51的程序
作者: yuanni5544    時(shí)間: 2019-12-10 23:45
鄭漢松 發(fā)表于 2019-12-5 19:40
當(dāng)然可以。不過我覺得你這個(gè)紅外遙控車,要解碼又要PWM控制,定時(shí)器應(yīng)該不夠用吧?可以用89c52的芯片有3 ...

我用電腦連接調(diào)試就可以,用獨(dú)立電源調(diào)試就接收不了紅外信號(hào),程序我用一個(gè)定時(shí)器把PWM和紅外接收寫一起,分開兩個(gè)定時(shí)器寫的話,只能一次接收一個(gè)按鍵信號(hào),要重啟才可以接收另一個(gè),有什么辦法解決。程序如下:
#include<reg52.h>
            sbit P36=P3^6 ;
         sbit P37=P3^7 ;
         sbit P24=P2^4;
         sbit ENA=P1^0;
         sbit P11=P1^1;
         sbit P12=P1^2;
          sbit ENB=P1^3         ;
          sbit P14=P1^4;
          sbit P15=P1^5;
           sbit IR=P3^2;
         
         void fonrt();
         void zuozuan();
            void tingzhi();

   unsigned char irtime;
   bit irpro_ok,irok;
   unsigned char IRcord[4];
   unsigned char irdata[33];
   void Ir_work (void);
   void Ircordpro(void);
        
         unsigned char pwm_val_left =0;
   unsigned char push_val_left =0;
   unsigned char pwm_val_right =0;
unsigned char push_val_right=0;  
   unsigned int time;
                 void         pwm_out_left_moto() ;
                 void pwm_out_right_moto() ;
                 bit Left_moto_stop =1; //右電機(jī)停轉(zhuǎn)
                 bit Right_moto_stop=1;
        
                 
#define Left_moto_Stop    {P1^1=0,P1^2=0;}  
#define Right_moto_Stop   {P1^4=0,P1^5=0;}
sbit Left_moto_pwm= P1^0;        
sbit Right_moto_pwm         = P1^3        ;

/******************************************************************
**                       左電機(jī)調(diào)速
******************************************************************/
void pwm_out_left_moto()
{  
        

            if(pwm_val_left<=push_val_left)
                        {
                        ENA=0;
        
                        }
                else
                    {
                              ENA=1;
                                                                 
                        }
                if(pwm_val_left>=20)
                           ENA=1;
        }



/******************************************************************
**                       右電機(jī)調(diào)速
******************************************************************/
void pwm_out_right_moto(void)
{

            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;
   }


        void tim0_isr(void)interrupt 1 using 1
        {
        irtime++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();                  
        }

        void EX0_ISR(void)interrupt 0
        {
        static unsigned char i;
        static bit startflag;
        if (startflag)
        {if(irtime<63&&irtime>=33)
        i=0;
        irdata=irtime;
        irtime=0;
        i++;
        if (i==33)
        {irok=1;
        i=0;
        }
        }
        else
        {irtime=0;
        startflag=1;}
        }

        void TIM0init(void)
        {TMOD=0x02;
                 TH0= 0x00;                  //1ms定時(shí)
        TL0= 0x00;
        ET0=1;
        TR0=1;
        TR1=0;}

        void EX0init(void)
        {IT0=1;
        EX0=1;
        EA=1;}

void Ircordpro (void)
{unsigned char i,j,k;
unsigned char cord,value;
k=1;
for (i=0;i<4;i++)
{for(j=1;j<=8;j++)
{cord=irdata[k];
if(cord>7)
value |=0x80;
if(j<8)
{value>>=1;
}
k++;
}IRcord=value;
value=0;}
irpro_ok=1;
}
  
           void Ir_work(void)
        {switch(IRcord[2])
        {case 0x18:fonrt();break;
         case 0x52:tingzhi( );break;
         case 0x08:zuozuan();break;
         default:break;}
         irpro_ok=0        ;
         }

   void delay (int xms)
   {unsigned int i,j;
   for (i=xms;i>0;i--)
   for (j=112;j>0;j--);}

void  fonrt ()
{ push_val_right=16;  
push_val_left =16;
  P11=1;
P12=0;
P14=1;
P15=0;
delay(200);
  }

   void zuozuan()
   {   
           delay(500);
   push_val_left=8;
         push_val_right=12;
P11=0;
P12=1;
        P14=1;
P15=0;            
}

void tingzhi()
   {P1=0x00;
   }
   
   void main()
   {  IP=0X02;
            EX0init();
   TIM0init();
             while(1)
  {
   if(irok)
   {Ircordpro();
   irok=0;}

  if(irpro_ok)         
   {   
        Ir_work();  
   }
   }
   }




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