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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2457|回復: 16
打印 上一主題 下一主題
收起左側

求解一個單片機紅外程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:652430 發表于 2019-11-29 15:38 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
value = value | 0x80;這段程序不要沒有影響吧,能用一個實例說明下value的值怎么來


  • void IRcordpro()                                    //提取它的33次脈寬進行數據解碼
  • {
  •         uchar i, j, k, cord, value;
  •         k = 1;                                                 //從第一位脈寬開始取,丟棄引導碼脈寬
  •         for(i = 0; i < 4; i++)
  •         {
  •                 for(j = 0; j < 8; j++)
  •                 {
  •                         cord = IRdata[k];            //把脈寬存入cord
  •                         if(cord > 5)                         //如果脈寬大于我11.0592的t0溢出率為約278us*5=1390那么判斷為1
  •                         value = value | 0x80;
  •                         if(j < 7)
  •                         {
  •                                 value = value >> 1;        //value位左移依次接收8位數據。
  •                         }
  •                         k++;                                //每執行一次脈寬位加1
  •                 }
  •                 IRcord[ i] = value;
  •                 value = 0;
  •         }
  •         IRpro_ok = 1;
  • }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

17#
ID:652430 發表于 2019-12-10 23:45 來自手機 | 只看該作者
鄭漢松 發表于 2019-12-5 19:40
當然可以。不過我覺得你這個紅外遙控車,要解碼又要PWM控制,定時器應該不夠用吧?可以用89c52的芯片有3 ...

我用電腦連接調試就可以,用獨立電源調試就接收不了紅外信號,程序我用一個定時器把PWM和紅外接收寫一起,分開兩個定時器寫的話,只能一次接收一個按鍵信號,要重啟才可以接收另一個,有什么辦法解決。程序如下:
#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; //右電機停轉
                 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        ;

/******************************************************************
**                       左電機調速
******************************************************************/
void pwm_out_left_moto()
{  
        

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



/******************************************************************
**                       右電機調速
******************************************************************/
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定時
        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();  
   }
   }
   }
回復

使用道具 舉報

16#
ID:514901 發表于 2019-12-5 19:40 | 只看該作者
yuanni5544 發表于 2019-12-5 16:54
這兩天學用pwm,解決了問題,然后我想問一下定時器0和1中斷,可以同時用嗎

當然可以。不過我覺得你這個紅外遙控車,要解碼又要PWM控制,定時器應該不夠用吧?可以用89c52的芯片有3個定時器,如果還不夠用可以考慮stc15的芯片有更多的定時器,這些芯片都是8051內核的,兼容89c51的程序
回復

使用道具 舉報

15#
ID:652430 發表于 2019-12-5 16:54 來自手機 | 只看該作者
鄭漢松 發表于 2019-12-3 11:55
典型的電源功率不夠,建議電源改為12V,買個L298N作為驅動,然后pwm降壓來驅動電機

這兩天學用pwm,解決了問題,然后我想問一下定時器0和1中斷,可以同時用嗎
回復

使用道具 舉報

14#
ID:514901 發表于 2019-12-3 16:05 | 只看該作者
單片機老司機 發表于 2019-12-3 14:36
紅外也不會,先請教大佬

這你去看視頻學習唄,網上資源大把,源碼也很多
回復

使用道具 舉報

13#
ID:643576 發表于 2019-12-3 14:36 來自手機 | 只看該作者
鄭漢松 發表于 2019-12-3 11:46
你是新手的話,先不要想怎么用紅外控制音樂播放,而是先解決怎么控制紅外,再解決音樂播放。這兩個對新手 ...

紅外也不會,先請教大佬
回復

使用道具 舉報

12#
ID:514901 發表于 2019-12-3 11:55 | 只看該作者
yuanni5544 發表于 2019-12-3 10:06
有個問題我想問下,我用小車的傳感器檢測啟動,用usb連接正常可以運行,但是按下電源開關,傳感器檢測到 ...

典型的電源功率不夠,建議電源改為12V,買個L298N作為驅動,然后pwm降壓來驅動電機
回復

使用道具 舉報

11#
ID:514901 發表于 2019-12-3 11:46 | 只看該作者
單片機老司機 發表于 2019-12-2 20:20
怎么用紅外控制播放音樂啊,大兄弟,

你是新手的話,先不要想怎么用紅外控制音樂播放,而是先解決怎么控制紅外,再解決音樂播放。這兩個對新手來說都是有一定難度的,所以不要想著一步到位。
回復

使用道具 舉報

10#
ID:652430 發表于 2019-12-3 10:06 來自手機 | 只看該作者
鄭漢松 發表于 2019-12-2 13:17
笨啊你,沒看到上面有個if嗎,達到條件才置一

有個問題我想問下,我用小車的傳感器檢測啟動,用usb連接正常可以運行,但是按下電源開關,傳感器檢測到后不能運行,發出滴滴的聲音,用手撥動一下車輪就轉動,然后可以正常運行,不知道是什么原因,紅外遙控小車啟動也是一樣,用電源控制沒反應的
回復

使用道具 舉報

9#
ID:643576 發表于 2019-12-2 20:20 來自手機 | 只看該作者
鄭漢松 發表于 2019-12-1 16:47
value = value | 0x80是與value = value >> 1配合使用的,高位置1后左移1位,左移7次再加上第八次就構成一 ...

怎么用紅外控制播放音樂啊,大兄弟,
回復

使用道具 舉報

8#
ID:514901 發表于 2019-12-2 13:17 | 只看該作者
yuanni5544 發表于 2019-12-2 09:18
照你甘說,每次高位置1,右移一位。不就變成全部都是1

笨啊你,沒看到上面有個if嗎,達到條件才置一
回復

使用道具 舉報

7#
ID:652430 發表于 2019-12-2 09:18 來自手機 | 只看該作者
鄭漢松 發表于 2019-12-1 16:47
value = value | 0x80是與value = value >> 1配合使用的,高位置1后左移1位,左移7次再加上第八次就構成一 ...

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

回復

使用道具 舉報

6#
ID:514901 發表于 2019-12-1 16:47 | 只看該作者
value = value | 0x80是與value = value >> 1配合使用的,高位置1后左移1位,左移7次再加上第八次就構成一個char型數據
回復

使用道具 舉報

5#
ID:643576 發表于 2019-11-30 19:28 | 只看該作者
怎么用紅外來控制單片機音樂的播放,求解
回復

使用道具 舉報

地板
ID:652430 發表于 2019-11-30 09:53 來自手機 | 只看該作者
moluxiyan 發表于 2019-11-30 00:18
value = value | 0x80這句話的意思是將value的最高位置1

我知道。我意思是為什么要置1,例如11000011,先送低位1過去,value的值是1000 0000嗎,然后或0x80,有什么用處
回復

使用道具 舉報

板凳
ID:652430 發表于 2019-11-30 09:51 來自手機 | 只看該作者
moluxiyan 發表于 2019-11-30 00:18
value = value | 0x80這句話的意思是將value的最高位置1

我知道。我意思是為什么要置1,例如11000011,先送低位1過去,value的值是1000 0000嗎,然后或0x80,有什么用處
回復

使用道具 舉報

沙發
ID:470332 發表于 2019-11-30 00:18 | 只看該作者

value = value | 0x80這句話的意思是將value的最高位置1
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 玖玖免费 | 久久久久久亚洲精品 | 久久亚洲综合 | 日批免费在线观看 | 日本一区二区三区在线观看 | 日本午夜一区二区三区 | 福利片在线| 欧美自拍日韩 | 午夜一级黄色片 | 国产精品毛片一区二区三区 | 天天摸天天干 | 亚洲精品成人在线 | www.com久久久 | 91av视频在线 | 国产一级片精品 | 97精品超碰一区二区三区 | 精品亚洲一区二区 | 91美女在线 | 91麻豆产精品久久久久久夏晴子 | 99精品国产一区二区三区 | 国产国语精品 | 日本精品在线观看 | 成人免费影院 | 性色的免费视频 | 国产成人福利视频在线观看 | 欧美成人精品欧美一级 | 夜夜草| 爱综合| 午夜三级在线观看 | 一道本不卡视频 | 成人精品国产免费网站 | 欧美在线亚洲 | 成人精品国产免费网站 | 成人免费一区二区三区牛牛 | 性生活毛片 | 美女久久视频 | 日韩理论电影在线观看 | 亚洲免费av一区 | 日本中文字幕视频 | 国产区在线观看 | 国产专区视频 |